【PowerShell】PowerShellによるネットワーク疎通確認

1 はじめに

本記事では、Windows PowerShellのコマンドレットを使って、
ネットワーク正常性の確認や、通信対向との疎通を確認したりする方法を示します。

ちなみに、Linux版PowerShellでは、
本記事で示すコマンドレットは、認識されず実行されませんでした
(Linux版コマンドでエイリアス定義するなど、何か方法があるのかもしれません。
見当違いなのかもしれませんが、今後の課題です)。

PowerShellは、ぱっと見他のシェルスクリプト言語と比べると、
格段に難しい言語のように思えます。

オブジェクト指向プログラミングに対応しており、処理結果をオブジェクトとして扱えるため、
柔軟性が高く、パイプライン処理に適しています。

とありますが、言語シンタックスに具体的にどのように影響しているのか?

ネットワークの正常性を確認したり、通信対向との疎通を確認したりするには、
コマンドプロンプトで”ping”や”tracert”といったコマンド群を利用する方が、
はるかに易しいです。

本記事は、わたし個人の目的として、
よく知った処理をPowerShellで行うとどうなるのか、
コマンドプロンプトの場合と比べながら、わかり易いところからPowerShellの世界に入っていけたら
という考えで作成してみました。

もしかしたら、皆さま方の参考になるのかもしれないと思い、本記事を公開します。

PowerShellでコマンドというのは、表1-1に示す4つが存在します。

ネットワークの疎通確認は、”Test-NetConnection”コマンドレットを使います。
TCPコネクションの確認には”Get-TCPConnection”、
Webサイトの動作確認に”Invoke=WebRequest”といったコマンドレットの使用例を見るとことで、
オブジェクト指向のコマンドや、オブジェクトのパイプ処理の一端を見られるのではないかと思います。

# オブジェクトになり得るコマンド(=メソッド)だから、
# コマンドではなくコマンドレットなのですね。

 

Test-NetConnectionGet-TCPConnectionコマンドレットの使用例は、
ITmediaの 下に示すWebページを参考にしたことをお断りしておきます。

【 Test-NetConnection 】コマンドレット――ネットワークの疎通を確認する
【 Get-NetTCPConnection 】コマンドレット――TCPポートのコネクションを確認する

2 Test-NetConnectionコマンドレット

ネットワークの正常性を確認したり、通信対向との疎通を確認したりするには、
Test-NetConnection”コマンドレットを利用します。

コマンドプロンプトの”ping”や”tracert”コマンドに相当します。

TCPを利用した疎通確認も可能なため、ファイアウォールの設定を確認する際にも利用できます。

2.1 書式

Test-NetConnection  [オプション]

その他のコマンドレットのオプション、
生成されるオブジェクトのクラスやプロパティ、メソッドについては、
下に示すWebページから辿ってください。

Learn / Windows / PowerShell / Reference / NetTCPIP / Test-NetConnection

2.2 実行例

2.2.1 インターネット上のリモートホストへの疎通を確認する

-ComputerName”オプションでリモートホストアドレスを指定して実行すると、
リモートホストにICMP(Internet Control Message Protocol)で疎通確認を試行し、
図2.2-1に示すように結果を表示します。

PS C:\ Test-NetConnection  -ComputerName   <HostName>

2.2.2 リモートホストへの通信経路を確認する

-TraceRoute”オプションを指定して実行すると、
リモートホストに至る通信経路を確認できます(図2.2-2)。

tracert”コマンドと同等ですが、tracertと違い、経路上のホストの名前解決は行わず、
往復遅延時間(RTT:Round-Trip Time)も対象リモートホストの値のみが表示されます。

PS C:\ Test-NetConnection  -TraceRoute  -ComputerName  <HostName>

2.2.3 TCPで疎通を確認する

-Port”オプションを指定し、続けて宛先ポート番号を指定して実行することで、
宛先ポートに対してTCP通信を試行します(図2.2-3)。

PS C:\ Test-NetConnection  -ComputerName <HostName>   -Port <Port No.>

3 Get-NetTCPConnectionコマンドレット

TCP/IPによる通信は、
宛先のIPアドレスと送信元/送信先ポート番号の組み合わせで行われます。
Get-NetTCPConnection”コマンドレットでは、
対象のコンピュータがどのホストとどの通信ポートを利用して通信しているかを
把握することができます。

コマンドプロンプトの”netstat”コマンドに相当します。
【TCP/IP】TCPコネクションの状態と状態確認のためのnetstatコマンド

netstatコマンドでは、TCPのコネクション情報UDPの待ち受け状況の両方を確認できますが、
Get-NetTCPConnectionコマンドレットはTCPのコネクション情報のみの確認となります。

しかし、netstatコマンドよりも多くの情報が表示されるので、非常に便利なコマンドレットです。

3.1 書式

Get-NetTCPConnection  [オプション]

その他のコマンドレットのオプション、
生成されるオブジェクトのクラスやプロパティ、メソッドについては、
下に示すWebページから辿ってください。

Learn / Windows / PowerShell / Reference / NetTCPIP / Get-NetTCPConnection

3.2 実行例

3.2.1 TCPのコネクションを確認する

オプション無しで実行すると、
待ち受け中、通信中を問わず、図3.2-1に 示すよう全TCPのコネクションを表示します。

PS C:\ Get-NetTCPConnection

3.2.2 ステート(状態)でフィルタリングする

-State”オプションを指定して実行すると、
特定のステート(状態)のTCPコネクションが表示されます(図3.2-2)。

PS C:\ Get-NetTCPConnection  -State Established

3.2.3 TCPコネクションを使用しているプロセスを確認する

Get-NetTCPConnectionコマンドレットは
7個のメソッド、30個のプロパティ、3個のスクリプトプロパティを持っています。
その中の”OwningProcess”プロパティには、
そのコネクションを使用しているプロセスIDが格納されています。

そこで、Get-NetTCPConnectionコマンドレットでプロセスIDを確認し、
プロセスIDを指定して”Get-Process”コマンドレットを実行することで、
そのTCPコネクションを使用しているプロセス名を特定することができます (図3.2-3)。

PS C:\ Get-NetTCPConnection  -State Established  |   Select LocalAddress, LocalPort, Remoteaddress, RemotePort, State,  OwningProcess  |  FT -AutoSize

3.2.4 TCPコネクションの作成時刻を確認する

Get-NetTCPConnectionコマンドレットには、”CreationTime”というプロパティもあります。
CreationTimeプロパティには、そのコネクションが作成された「時刻」が格納されています。

このプロパティを確認することで、長時間にわたり使用中のコネクションを確認できます (図3.2-4)。

PS C:\ Get-NetTCPConnection  -State Established  |   Select LocalAddress, LocalPort, Remoteaddress, RemotePort, State,  CreationTime  |  FT -AutoSize

4 Webサイトが正常に動作しているのかを確認する

Webサイトの正常な応答は、HTTPレスポンスのステータスコードでわかります。

Bashであればcurlコマンドの”-I”オプションを使えばレスポンスを取得できます。

$ curl -LI https://google.com -o /dev/null -w '%{http_code)' -s

PowerShellでは、
Webアクセアス用の”Invoke=WebRequest”コマンドレットを使うと
わかり易くなるのではないでしょうか。

以上

HTMLだと、
思うように編集することは難しく、やろうすればとっても時間が掛かります。
ですので、本記事の元となっているWordで作成したPDFを
ページ最後に貼り付けました。

少しでも役に立てていただければ、うれしく思います。

このPDFファイルは、自由に配布されてもかまいません。
ただし、再配布の際には、
入手元著者名は明らかにしてください

なお、上のPDFファイルの内容、また本文中の記述に、
誤字や脱字、誤った内容の記述など見つかりましたら、
下に示すフォームでご連絡いただければ幸いです。

お問い合わせ