Test-Connectionコマンドレット

PowerShell Core 6.1には新しくTest-Connectionコマンドレットが移植されている。このコマンドレットは複数のホストに対してInternet Control Message Protocol (ICMP) ECHOリクエストパケットを送信する処理を行う。いわゆるpingのPowerShell Core版というものだ。

Test-Connectionコマンドレットを使うと対象ホストがネットワークに接続されているのかを調べることができる。このコマンドレットを使うと、対象のホストが到達可能である場合にはこの処理を行い、そうでない場合にはこちらの処理を行う、といった切り分けのスクリプトを記述することができるようになる。

Test-Connectionコマンドレットの使い方

Test-Connectionコマンドレットの基本的な使い方は、次のように引数にホスト名またはIPアドレスを指定するというものだ。指定したホストに対してICMP ECHOリクエストパケットが送信され、返信があったかどうかや時間が表示される仕組みになっている。

Test-Connectionコマンドレットの基本的な使い方

Test-Connection ホスト名

Test-Connectionコマンドレットの実行例

Test-Connectionコマンドレットは単一のホストではなく複数のホストを同時に指定することができる。その場合、次のようにカンマ区切りでホスト名を指定すればよい。なお、-ComputerNameオプションは省略可能なので指定しなくても動作する。

複数のホストを同時に指定する場合はカンマ区切りで指定する

Test-Connection -ComputerName ホスト名, ホスト名, ... ホスト名

複数のホストを同時に指定した場合のTest-Connectionコマンドレットの実行例

Test-Connectionコマンドレットはpingのように送信するパケットをカスタマイズすることができる。たとえば次の例は送信回数やTTL、バッファサイズなどを指定してTest-Connectionコマンドレットを実行するときの使い方となる。

パケットをカスタマイズして実行する場合の例

Test-Connection -ComputerName ホスト名 -Count 送信数 -TTL TTL値 -BufferSize バッファサイズ

送信回数、TTL値、バッファサイズなどを指定した場合のTest-Connectionコマンドレットの実行例

Test-Connectionコマンドレットを使うと、たとえば対象ホストが到達可能な場合にはリモートログインを実施し、そうでない場合には何もしない、といったような切り分け処理を記述できる。次のようにif制御構文にTest-Connectionコマンドレットを組み合わせればよい。オプション-Quietを指定しているところがポイントだ。

到達可能な場合にリモートログインを試みる処理の例

pingはネットワークにおけるホスト到達性を調べるもっとも基本的な方法であり、多くのシーンで活用されている。PowerShell Coreでもこの機能が利用できるようになったことで、これまでよりもネットワーク到達のチェックをより簡単に実施できるようになった。

今のところリモートログインしてPowerShell Coreを実行する方法についてはほとんど取り上げていないが、この機能を利用するとホストの管理をリモートホストに対して実施できるようになる。ある程度ローカルでのPowerShell Coreの使い方を説明したらリモートにおける扱いも取り上げていこうと思う。

参考資料