PowerShell-ping

[PowerShell]で作るPingツールの作り方

このページで学習出来る事

 以前、[powershell]で作成した、[ping]コマンドを実行するプログラム「Lepp」を公開しましたが、今回はその内容の解説をしたいと思います。

学習内容

  • IPアドレス格納用の配列作り

  • [Test-Connection]を使用した[ping]の実行

  • エラー処理

  • CSVと出力表示処理

関連記事

NAME Lepp-- [PowerShell]で作成した、ちょっと早いPingプログラム 作成日:2020/10/19更新日:2020/10/19動作環境:[PowerShell 有効] SYNOPSIS […]

ちょっと早いPingプログラム[Lepp]-[PowerShell]


サンプルコード[PowerShell]

Set-StrictMode -Version 2.0

$objTestConnection = New-Object System.Management.ManagementObject
$objArrayIPAddress = New-Object System.Collections.ArrayList
$objArraySysName = New-Object System.Collections.ArrayList


#---------------------------------------------------------
#ここを修正、追記する事で宛先を編集する事が来ます。

$objArrayIPAddress.Add("192.168.1.1")
$objArraySysName.Add("Shimohataパソコン")

$objArrayIPAddress.Add("192.168.1.2")
$objArraySysName.Add("斎藤さんパソコン")

#------------------------------------------------------------


##
[int]$count = 0

##
[string]$strIPAddress = ""
[string]$result = ""
[string]$csv = ""


@(1..3) | foreach {
    $count = 0

    foreach ($strIPAddress in $objArrayIPAddress) {
        try {
            $objTestConnection = Test-Connection $strIPAddress -count 1 -ErrorAction Stop
            $result = "○"

        } catch [Exception] {
            $result = "×"
        }

        $csv = $result + "," + $strIPAddress + "," + $objArraySysName[$count] + "," + $objTestConnection.ResponseTime
            $csv | ConvertFrom-Csv -Header @("Result", "TargetIP", "SystemName", "ResponseTime(ms)")

        $count = $count + 1
    }

} | Out-GridView -Title "[Lepp]ちょっと早いPingProgram"

  


コードの解説 変数宣言部分

‘Test-Connectionの実行結果を取り込むオブジェクトを宣言します。
$objTestConnection = New-Object System.Management.ManagementObject

‘IPアドレスを格納する配列を宣言します。
$objArrayIPAddress = New-Object System.Collections.ArrayList

‘ホスト名やシステム名を入れる配列を宣言します。
$objArraySysName = New-Object System.Collections.ArrayList

  

コードの解説 IPアドレス入力部分

‘IPアドレス用の配列に[ping]を実行したいアドレスを入力します。
$objArrayIPAddress.Add(“192.168.1.1”)

‘実行結果を分かりやすくするために、実行先のホスト名やシステム名を入力します。
$objArraySysName.Add(“Shimohataパソコン”)

  

コードの解説 エラー処理部分

‘[-ErrorAction Stop]とはエラーが発生した場合、処理を止めて次へ進めるという内容です。
‘今回の処理で言うと、[ping]の応答がない場合に処理を止めてエラーとして処理する。すなわち[catch]に処理を移すという記述となります。
try {
        #何かの処理 -ErrorAction Stop
} catch [Exception] {
        #エラー処理
}

この[-ErrorAction Stop]を使ったエラー処理の書き方は、[PowerShell]でよく使いますので、覚えておくと便利です。

  

コードの解説 [ping]実行部分

‘今回は[Test-Connection]を用いて[ping]コマンドを実行します。
‘[Test-Connection]のシンプルな実行方法は以下の通りです。
$objTestConnection = Test-Connection “192.168.1.1”

‘ただし今回は[ping]処理を早く行いたいため、エコー確認回数を[-count 1]として1回に変更しています。
‘デフォルト値のエコー確認回数は、4回になります。
$objTestConnection = Test-Connection $strIPAddress -count 1 -ErrorAction Stop

‘エコーが帰ってこなかった場合に[-ErrorAction Stop]にて処理を止め、[catch]側に処理を移しています。

  

コードの解説 出力表記部分

‘実行結果を[,]区切りとして、[CSV]表記にしています。
‘[$objArraySysName[$count]]でIPアドレスと対となるシステム名を表示しています。
‘[$objTestConnection.ResponseTime]でレスポンスタイム(ミリ秒)を取得しています。
$csv = $result + “,” + $strIPAddress + “,” + $objArraySysName[$count] + “,” + $objTestConnection.ResponseTime

‘[ConvertFrom-Csv]を用いて上記で取得した[CSV]を処理しています。
‘この状態ですと、[CSV]上にヘッダーがありませんで、[-Header]オプションにて付与しています。
$csv | ConvertFrom-Csv -Header @(“Result”, “TargetIP”, “SystemName”, “ResponseTime(ms)”)

‘最後にパイプ処理でつなげ[Out-GridView]で表形式の表示を行っています。
| Out-GridView -Title “[Lepp]ちょっと早いPingProgram”

何らかの処理結果を表形式で表示したい場合は、以下の様な手順で進めると綺麗に表示されます。
・結果を[CSV]形式でまとめる
・[ConvertFrom-Csv -Header]で、[CSV]データにヘッダーを加える
・[Out-GridView]で表示する。

  


最後に

 以上で[PowerShell]から[ping]を実行する方法の説明になります。
 [Test-Connection]には他にも色々なオプションがありますので、数値を変更するなどして試してみるのも良いと思います。