72

PowerShellスクリプトを使用してWindowsサーバーのFQDN名を取得したい。私はこれまでに2つの解決策を見つけました:

$server =  Invoke-Command -ScriptBlock {hostname}

上記の行は、サーバーの短い名前だけを出力します

$sysinfo = Get-WmiObject -Class Win32_ComputerSystem
$server = “{0}.{1}” -f $sysinfo.Name, $sysinfo.Domain

上記の2行でFQDNが取得されますが、これはホスト名だけを取得するための非常に厄介なコードに見えます:(

だから、私の質問は、PowerShellでFQDNを取得する簡単な方法はありますか?私はbash/perlコーダーで、最近PowerShellを手に入れました。

ありがとう。

4

16 に答える 16

100

ローカル コンピューターの FQDN を取得するには:

[System.Net.Dns]::GetHostByName($env:computerName)

また

[System.Net.Dns]::GetHostByName($env:computerName).HostName

リモート コンピューターの FQDN を取得するには:

[System.Net.Dns]::GetHostByName('mytestpc1')

また

より適切にフォーマットされた値を使用するには、次のようにします。

[System.Net.Dns]::GetHostByName('mytestpc1').HostName
  • リモート マシンの場合、ホストが到達可能であることを確認してください。
于 2012-09-04T17:57:13.450 に答える
81

どうですか:"$env:computername.$env:userdnsdomain"

これは実際には、ユーザーがドメインにログインしている (つまり、ローカル アカウントがない) 場合にのみ機能し、サーバーと同じドメインにログインしており、切り離された名前空間 AD 構成では機能しません。

別の回答で参照されているようにこれを使用してください:

$myFQDN=(Get-WmiObject win32_computersystem).DNSHostName+"."+(Get-WmiObject win32_computersystem).Domain ; Write-Host $myFQDN
于 2012-09-04T18:02:54.400 に答える
0

これはどう

$FQDN=[System.Net.Dns]::GetHostByName($VM).Hostname.Split('.')
[int]$i = 1
[int]$x = 0
[string]$Domain = $null
do {
    $x = $i-$FQDN.Count
    $Domain = $Domain+$FQDN[$x]+"."
    $i = $i + 1
} until ( $i -eq $FQDN.Count )
$Domain = $Domain.TrimEnd(".")
于 2016-05-05T06:05:59.590 に答える
0
"$env:computername.$env:userdnsdomain" 

このように分離すると機能します

"$env:computername"+"$env:userdnsdomain"
于 2015-04-29T14:08:25.350 に答える
0

複数のネットワーク アダプタがあり、複数のアダプタがアクティブな場合 (WLAN + VPN など)、もう少し複雑なチェックが必要です。このワンライナーを使用できます:

[System.Net.DNS]::GetHostByAddress(([System.Net.DNS]::GetHostAddresses([System.Environment]::MachineName) | Where-Object { $_.AddressFamily -eq "InterNetwork" } | Select-Object IPAddressToString)[0].IPAddressToString).HostName.ToLower()
于 2020-10-06T09:25:31.643 に答える