Powershellでリモートサーバに対するL3レベルのネットワーク疎通を確認する
リモートサーバとの疎通確認をPowershellスクリプト内で行いたい場合、
"Test-Connection"コマンドレットを用いると使い勝手が良い。
基本的な使用方法
PS > Test-Connection -ComputerName "dstserver01" Source Destination IPV4Address IPV6Address Bytes Time(ms) ------ ----------- ----------- ----------- ----- -------- srcserver01 dstserver01 192.168.0.11 32 0 srcserver01 dstserver01 192.168.0.11 32 0 srcserver01 dstserver01 192.168.0.11 32 0 srcserver01 dstserver01 192.168.0.11 32 0
"-ComputerName"オプションには名前解決可能なホスト名かIPアドレスを文字列で指定する。
pingコマンドと同様に、ICMPを用いてリモートサーバとの疎通を確認するのだが、違いは結果がテキストではなくPSObjectで返却されるということ。そのため、疎通確認結果をPowershellスクリプト内で扱うことが容易になる。
通常の出力は例の如く一部情報が省略されているため、Format-Listで返却結果の全てのプロパティを参照してみる。
PS > Test-Connection -ComputerName "dstserver01" | fl * PSComputerName : srcserver01 IPV4Address : 192.168.0.10 IPV6Address : __GENUS : 2 __CLASS : Win32_PingStatus __SUPERCLASS : __DYNASTY : Win32_PingStatus __RELPATH : Win32_PingStatus.Address="dstserver01",BufferSize=32,NoFragmentation=FALSE,RecordRou te=0,ResolveAddressNames=FALSE,SourceRoute="",SourceRouteType=0,Timeout=4000,Timestamp Route=0,TimeToLive=80,TypeofService=0 __PROPERTY_COUNT : 24 __DERIVATION : {} __SERVER : srcserver01 __NAMESPACE : root\cimv2 __PATH : \\srcserver01\root\cimv2:Win32_PingStatus.Address="dstserver01",BufferSize=32,NoFr agmentation=FALSE,RecordRoute=0,ResolveAddressNames=FALSE,SourceRoute="",SourceRouteTy pe=0,Timeout=4000,TimestampRoute=0,TimeToLive=80,TypeofService=0 Address : dstserver01 BufferSize : 32 NoFragmentation : False PrimaryAddressResolutionStatus : 0 ProtocolAddress : 192.168.0.10 ProtocolAddressResolved : RecordRoute : 0 ReplyInconsistency : False ReplySize : 32 ResolveAddressNames : False ResponseTime : 0 ResponseTimeToLive : 128 RouteRecord : RouteRecordResolved : SourceRoute : SourceRouteType : 0 StatusCode : 0 Timeout : 4000 TimeStampRecord : TimeStampRecordAddress : TimeStampRecordAddressResolved : TimestampRoute : 0 TimeToLive : 80 TypeofService : 0 Scope : System.Management.ManagementScope Path : \\srcserver01\root\cimv2:Win32_PingStatus.Address="dstserver01",BufferSize=32,NoFr agmentation=false,RecordRoute=0,ResolveAddressNames=false,SourceRoute="",SourceRouteTy pe=0,Timeout=4000,TimestampRoute=0,TimeToLive=80,TypeofService=0 Options : System.Management.ObjectGetOptions ClassPath : \\srcserver01\root\cimv2:Win32_PingStatus Properties : {Address, BufferSize, NoFragmentation, PrimaryAddressResolutionStatus...} SystemProperties : {__GENUS, __CLASS, __SUPERCLASS, __DYNASTY...} Qualifiers : {dynamic, provider} Site : Container :
上記の通り、結果は"Win32_PingStatus"クラスオブジェクトである。各プロパティの詳細は下記参照のこと。
Win32_PingStatus class (Windows)
疎通確認結果をシンプルにbool値で取得したい場合
Powershellスクリプト内で詳細な疎通確認結果を参照する必要が無く、単純にリモートサーバへの疎通可否をbool値で取得したい場合もある。そういった場合は、"-Quiet"オプションを付与すると良い。
PS > Test-Connection -Computername "dstserver01" -Quiet True
上記の場合、既定の回数(4回)だけICMPエコー要求をリモートサーバへ送信し、1回でもエコー応答を受信すれば、結果としてTrueを返却する。全て応答が無ければ、Falseが返却される。リモートサーバへエコー要求を送信する回数は"-Count"オプションで変更できる。
その他の詳細情報
TechNetのコマンドレットリファレンスを参照のこと。
Test-Connection