Home > Windows にまつわる e.t.c.

PowerShell で名前解決をする


PowerShell で名前解決する方法はいろいろありますが、PowerShell らしいのは Resolve-DnsName コマンドレットです。

RR も -Type で指定もできるので、nslookup の代わりにも使えます。

PS C:\> Resolve-DnsName www.microsoft.com | fl *


QueryType    : CNAME
Server       : www.microsoft.com-c.edgekey.net
NameHost     : www.microsoft.com-c.edgekey.net
Name         : www.microsoft.com
Type         : CNAME
CharacterSet : Unicode
Section      : Answer
DataLength   : 8
TTL          : 2

QueryType    : CNAME
Server       : www.microsoft.com-c.edgekey.net.globalredir.akadns.net
NameHost     : www.microsoft.com-c.edgekey.net.globalredir.akadns.net
Name         : www.microsoft.com-c.edgekey.net
Type         : CNAME
CharacterSet : Unicode
Section      : Answer
DataLength   : 8
TTL          : 2

QueryType    : CNAME
Server       : e10088.dspb.akamaiedge.net
NameHost     : e10088.dspb.akamaiedge.net
Name         : www.microsoft.com-c.edgekey.net.globalredir.akadns.net
Type         : CNAME
CharacterSet : Unicode
Section      : Answer
DataLength   : 8
TTL          : 2

Address      : 2600:140b:12:592::2768
IPAddress    : 2600:140b:12:592::2768
QueryType    : AAAA
IP6Address   : 2600:140b:12:592::2768
Name         : e10088.dspb.akamaiedge.net
Type         : AAAA
CharacterSet : Unicode
Section      : Answer
DataLength   : 16
TTL          : 2

Address      : 2600:140b:12:595::2768
IPAddress    : 2600:140b:12:595::2768
QueryType    : AAAA
IP6Address   : 2600:140b:12:595::2768
Name         : e10088.dspb.akamaiedge.net
Type         : AAAA
CharacterSet : Unicode
Section      : Answer
DataLength   : 16
TTL          : 2

Address      : 2600:140b:12:593::2768
IPAddress    : 2600:140b:12:593::2768
QueryType    : AAAA
IP6Address   : 2600:140b:12:593::2768
Name         : e10088.dspb.akamaiedge.net
Type         : AAAA
CharacterSet : Unicode
Section      : Answer
DataLength   : 16
TTL          : 2

Address      : 60.254.135.30
IPAddress    : 60.254.135.30
QueryType    : A
IP4Address   : 60.254.135.30
Name         : e10088.dspb.akamaiedge.net
Type         : A
CharacterSet : Unicode
Section      : Answer
DataLength   : 4
TTL          : 2

 

残念ながら Windows 7 / Windows Server 2008 R2 以前の環境では、Resolve-DnsName が使えません。

そうかといって、nslookup の出力をごにょごにょするのもスマートではありませんね。
そんな時は .NET Framework 頼りです。

### 名前解決
# アセンブリのロード
Add-Type -AssemblyName System.Net

# ホストエントリーを得る
[array]$HostEntries = [System.Net.DNS]::GetHostEntry("www.microsoft.com")

# IPv4 アドレスのエントリーだけにする
[array]$IPv4HostEntries = $HostEntries.AddressList | ?{$_.AddressFamily -eq "InterNetwork"}

# IPv4 アドレス
$IPv4Address = ($IPv4HostEntries[0]).IPAddressToString
echo $IPv4Address

 

ちょいと手順は多いのですが、.NET Framework 2.0 以降であれば使えます。

FQDN ではなく、IP アドレスを渡しても名前解決できるので、正引き/逆引きとも可能です。

ちなみに、IPv6 アドレスを得る場合は

"InterNetwork" のかわりに "InterNetworkV6" で引っぱれば OK です。

 

ホストエントリーも面白いプロパティを持っているので、他にも使い手ありそうですね。

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.