如何在PowerShell中获得本地主机(机器)名称?我使用的是PowerShell 1.0。
你可以使用.NET Framework方法:
[System.Net.Dns]::GetHostName()
也
$env:COMPUTERNAME
长形式:
get-content env:computername
简式:
gc env:computername
不要忘记,你所有的旧的控制台工具都可以在PowerShell中正常工作:
PS> hostname KEITH1
以上所有问题都是正确的,但如果你想要主机名和域名,试试这个:
[System.Net.DNS]::GetHostByName('').HostName
对于本地FQDN, @CPU-100的答案略有调整:
[System.Net.DNS]::GetHostByName($Null).HostName
在PowerShell Core v6中(适用于macOS、Linux和Windows):
[Environment]::MachineName
类似于Powershell中的bat文件代码
Cmd
wmic path Win32_ComputerSystem get Name
Powershell
Get-WMIObject Win32_ComputerSystem | Select-Object -ExpandProperty name
和…
hostname.exe
hostname在Powershell中也可以正常工作
hostname
对我来说,最具描述性的方式是:
[System.Net.DNS]::GetHostByName($env:COMPUTERNAME).HostName
你可以像$name = $(hostname)那样存储这个值
$name = $(hostname)
我想补充一点,简单地执行$name = hostname也会将PC的本地主机名保存到一个变量中。
$name = hostname
不是专门针对Powershell 1.0版本,更多的是通过Powershell获取信息的不同可能方法的概述:
(Get-ComputerInfo).CsDNSHostName
Get-ComputerInfo
(Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName).ComputerName
System.Environment
[System.Net.Dns]::GetHostEntry("").HostName
System.Net.Dns.GetHostEntry
(New-Object -ComObject WScript.Network).ComputerName
(Get-CimInstance -ClassName Win32_ComputerSystem).Name
Add-Type -TypeDefinition @' public enum COMPUTER_NAME_FORMAT{ ComputerNameNetBIOS, ComputerNameDnsHostname, ComputerNameDnsDomain, ComputerNameDnsFullyQualified, ComputerNamePhysicalNetBIOS, ComputerNamePhysicalDnsHostname, ComputerNamePhysicalDnsDomain, ComputerNamePhysicalDnsFullyQualified, ComputerNameMax, } public static class Kernel32{ [System.Runtime.InteropServices.DllImport("Kernel32.dll", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)] public static extern bool GetComputerNameEx(COMPUTER_NAME_FORMAT NameType, System.Text.StringBuilder lpBuffer, ref uint lpnSize); } '@ $len = 0 [Kernel32]::GetComputerNameEx([COMPUTER_NAME_FORMAT]::ComputerNameDnsFullyQualified, $null, [ref]$len); #get required size $sb = [System.Text.StringBuilder]::new([int]$len) #create StringBuilder with required capacity (ensure int constructor is used, otherwise powershell chooses string constructor for uint value...) $len = $sb.Capacity #get actual capacity of StringBuilder (important, as maybe StringBuilder was constructed differently than expected) [Kernel32]::GetComputerNameEx([COMPUTER_NAME_FORMAT]::ComputerNameDnsFullyQualified, $sb, [ref]$len); $sb.ToString()
Returns "完全限定DNS名称,唯一标识本地计算机。此名称是DNS主机名和DNS域名的组合,使用HostName.DomainName的形式。如果本地计算机是集群中的一个节点,lpBuffer将接收集群虚拟服务器的完全限定DNS名称 (有关GetComputerNameEx API函数的信息, 有关COMPUTER_NAME_FORMAT枚举的信息, COMPUTER_NAME_FORMAT的c#签名(非官方), GetComputerNameEx的c#签名(非官方), 关于powershell中的P/Invoke的简短博客文章) 注意:谨慎使用P/Invoke。完全错误的使用实际上会导致powershell崩溃。Add-Type调用有点慢(但只需要在脚本中调用一次)
GetComputerNameEx
COMPUTER_NAME_FORMAT
Add-Type