この記事では、GetHostEntry メソッドを使用してホスト名からIPアドレスに変換する方法について詳しく説明します。
前回の記事: PowerShell ローカルのホスト名(コンピューター名)を取得する方法
ホスト名からIPアドレスに変換する方法
ホスト名からIPアドレスに変換する方法はいくつかありますが、今回はSystem.Net.DnsクラスのGetHostEntry メソッドを使用する方法について説明します。
GetHostEntry とは?
GetHostEntryメソッドは、ホスト名またはIPアドレスを渡すと、IPアドレスまたはホスト名をオブジェクトとして返します。
GetHostEntry の使い方
GetHostEntryを使用するためには、以下のようにコマンドを入力します。
[System.Net.Dns]::GetHostEntry("hostname")
“hostname”の部分に取得したいホスト名を入力します。
GetHostEntryを使用した例
“example.com”をIPアドレスに変換する例です。
[System.Net.Dns]::GetHostEntry("example.com")
実行結果です。
AddressListの「2606:2800:21f:cb07:6820:80da:af6b:8b2c」(IPv6形式)、「93.184.215.14」(IPv4形式)がホスト名”example.com”に関連付けられたIPアドレスです。
IPアドレスのみを出力するには、以下のように記述します。
$hostEntry = [System.Net.Dns]::GetHostEntry("example.com")
$hostEntry.AddressList | ForEach-Object { Write-Output $_.IPAddressToString }
2行目の「ForEach-Object」で、AddressListをループさせ、ホスト名に関連付けられたすべてのIPアドレスが表示されます。
実行結果です。
スクリプトの例(すべてのIPアドレスを表示する)
引数にホスト名を指定すると、そのホスト名に関連付けられたすべてのIPアドレスを返すスクリプトの例です。
■GetIpAddress1.ps1
Param([string]$hostname)
# ホスト名からすべてのIPアドレスを取得
$hostEntry = [System.Net.Dns]::GetHostEntry($hostname)
# IPアドレスの表示
$hostEntry.AddressList | ForEach-Object { Write-Output $_.IPAddressToString }
以下のように引数にホスト名を指定し、実行します。
.\GetIpAddress1.ps1 example.com
実行結果です。
スクリプトの例(IPv4とIPv6を別々に表示する)
引数にホスト名を指定すると、そのホスト名のIPv4とIPv6の両方のIPアドレスを返すスクリプトの例です。
■GetIpAddress2.ps1
Param([string]$hostname)
# ホスト名からIPv4とIPv6の両方のIPアドレスを取得
$hostEntry = [System.Net.Dns]::GetHostEntry($hostname)
# IPv4アドレスの表示
Write-Host "IPv4 Address:"
$hostEntry.AddressList | Where-Object { $_.AddressFamily -eq 'InterNetwork' } | ForEach-Object {
Write-Host $_.IPAddressToString
}
# IPv6アドレスの表示
Write-Host "IPv6 Address:"
$hostEntry.AddressList | Where-Object { $_.AddressFamily -eq 'InterNetworkV6' } | ForEach-Object {
Write-Host $_.IPAddressToString
}
以下のように引数にホスト名を指定し、実行します。
.\GetIpAddress2.ps1 example.com
実行結果です。
まとめ
今回は、System.Net.DnsクラスのGetHostEntry メソッドを使用してホスト名からIPアドレスに変換する方法について説明しました。