如何在 PowerShell 中获取本地主机(计算机)名称?我正在使用 PowerShell 1.0。
您可以只使用.NET Framework方法:
[System.Net.Dns]::GetHostName()
还有
$env:COMPUTERNAME
不要忘记所有旧的控制台实用程序在 PowerShell 中都可以正常工作:
PS> hostname
KEITH1
长格式:
get-content env:computername
简称:
gc env:computername
以上所有问题都是正确的,但如果您想要主机名和域名,请尝试以下操作:
[System.Net.DNS]::GetHostByName('').HostName
针对本地 FQDN,对 @CPU-100 的答案进行轻微调整:
[System.Net.DNS]::GetHostByName($Null).HostName
在 PowerShell Core v6 中(适用于 macOS、Linux 和 Windows):
[Environment]::MachineName
hostname
在 Powershell 中也能正常工作
Powershell 中 bat 文件代码的类似物
命令
wmic path Win32_ComputerSystem get Name
Powershell
Get-WMIObject Win32_ComputerSystem | Select-Object -ExpandProperty name
还有...
hostname.exe
并非专门针对 Powershell 1.0 版本,更多的是通过 Powershell 获取信息的不同可能方法的概述:
(Get-ComputerInfo).CsDNSHostName
Get-ComputerInfo
的信息,有关其返回值的信息)hostname.exe
hostname.exe
$env:COMPUTERNAME
(Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName).ComputerName
[Environment]::MachineName
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()
返回“唯一标识本地计算机的完全限定 DNS 名称。此名称是 DNS 主机名和 DNS 域名的组合,使用形式 HostName.DomainName。如果本地计算机是群集中的节点,则 lpBuffer接收群集虚拟服务器的完全限定 DNS 名称。”
(有关
GetComputerNameEx
API 函数的信息、有关 COMPUTER_NAME_FORMAT
枚举的信息、使用了 COMPUTER_NAME_FORMAT
的 C# 签名(非官方)、使用了 GetComputerNameEx
的 C# 签名(非官方)、short关于 powershell 中的 P/Invoke 的博文)Add-Type
调用有点慢(但只需要在脚本中调用一次)。
对我来说最具描述性的方式是:
[System.Net.DNS]::GetHostByName($env:COMPUTERNAME).HostName
您可以按如下方式存储该值
$name = $(hostname)
我想补充一点,只需执行
$name = hostname
也会将 PC 的本地主机名称保存到变量中。