Powershell:获取FQDN主机名

sla*_*fer 51 windows powershell

我想通过powershell脚本检索Windows服务器的FQDN名称.到目前为止我找到了2个解决方案:

$server =  Invoke-Command -ScriptBlock {hostname}
Run Code Online (Sandbox Code Playgroud)

上面的行只会打印服务器的简称

$sysinfo = Get-WmiObject -Class Win32_ComputerSystem
$server = “{0}.{1}” -f $sysinfo.Name, $sysinfo.Domain
Run Code Online (Sandbox Code Playgroud)

以上两行将获得FQDN但这看起来非常讨厌的代码只检索主机名:(

所以,我的问题是,是否有更简单的方法来获取PowerShell中的FQDN.我是一个bash/perl编码器,最近选择了PowerShell ..所以发现它很难.

谢谢.

per*_*ain 69

要获取本地计算机的FQDN:

[System.Net.Dns]::GetHostByName($env:computerName)
Run Code Online (Sandbox Code Playgroud)

要么

[System.Net.Dns]::GetHostByName($env:computerName).HostName
Run Code Online (Sandbox Code Playgroud)

要获取远程计算机的FQDN:

[System.Net.Dns]::GetHostByName('mytestpc1')
Run Code Online (Sandbox Code Playgroud)

要么

为了更好的格式化值使用:

[System.Net.Dns]::GetHostByName('mytestpc1').HostName
Run Code Online (Sandbox Code Playgroud)
  • 对于远程计算机,请确保可以访问主机.

  • [System.Net.Dns] ::的gethostbyname(($ ENV:计算机名)).主机名 (5认同)
  • 此API已过时. (3认同)

aqu*_*nas 68

怎么样: "$env:computername.$env:userdnsdomain"

这实际上只有在用户登录到域(即没有本地帐户),登录到与服务器相同的域,并且不能与脱节的名称空间AD配置一起使用时才有效.

在另一个答案中引用它:

$myFQDN=(Get-WmiObject win32_computersystem).DNSHostName+"."+(Get-WmiObject win32_computersystem).Domain
Run Code Online (Sandbox Code Playgroud)

写主机$ myFQDN

  • 如果登录的用户与计算机位于不同的域中,则会失败.它提取用户的域信息,而不是机器的信息 (3认同)
  • 我们有两个域,所以这不起作用.此方法假定PS脚本正在运行的域,可能不是这种情况. (2认同)

小智 28

通过dotNet类本地计算机FQDN

[System.Net.Dns]::GetHostEntry([string]$env:computername).HostName
Run Code Online (Sandbox Code Playgroud)

要么

[System.Net.Dns]::GetHostEntry([string]"localhost").HostName
Run Code Online (Sandbox Code Playgroud)

参考:

Dns方法(System.Net)

注意:GetHostByName方法已过时


通过WMI查询的本地计算机FQDN

$myFQDN=(Get-WmiObject win32_computersystem).DNSHostName+"."+(Get-WmiObject win32_computersystem).Domain
Write-Host $myFQDN
Run Code Online (Sandbox Code Playgroud)

参考:

Win32_ComputerSystem类


rbl*_*ler 12

这适用于 Windows 上的 PS 和 PS Core(在版本 5.1 和 7.2 上测试)

[System.Net.Dns]::Resolve($null).HostName
Run Code Online (Sandbox Code Playgroud)


Ale*_*sky 7

[System.Net.Dns]::GetHostByName((hostname)).HostName
Run Code Online (Sandbox Code Playgroud)

$env:computerName 返回主机的NetBIOS名称,以便前两个示例都返回netbioshostname.domainsuffix(不是FQDN!)而不是dnshostname.domainsuffix(FQDN)

例如,主机有FQDN aa-w2k12sv-storage.something.com和NetBIOS名称aa-w2k12sv-stor(一个简单的例子,我通常更改NetBIOS名称)

hostname实用程序返回dnshostname,即FQDN和代码的第一部分

[System.Net.Dns]::GetHostByName((hostname)).HostName
Run Code Online (Sandbox Code Playgroud)

返回正确的FQDN

注释:永远不要使用AD域和主机的相同NetBIOS和DNS名称.如果您的或第三方应用程序写入日志:"无法连接到hostname.domainsuffix",它尝试解析什么名称?如果你在日志中看到"无法连接到netbiosname.domainsuffix",毫无疑问,一个懒惰的程序员为NetBIOS名称添加了域名后缀,你确定,这是一个错误,并且可以打开一张票,强迫他们解决问题...