About
このページで学習出来る事
以前、[powershell]で作成した、[ping]コマンドを実行するプログラム「Lepp」を公開しましたが、今回はその内容の解説をしたいと思います。
学習内容
-
IPアドレス格納用の配列作り
-
[Test-Connection]を使用した[ping]の実行
-
エラー処理
-
CSVと出力表示処理
NAME Lepp-- [PowerShell]で作成した、ちょっと早いPingプログラム 作成日:2020/10/19更新日:2020/10/19動作環境:[PowerShell 有効] SYNOPSIS […]
サンプルコード[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]には他にも色々なオプションがありますので、数値を変更するなどして試してみるのも良いと思います。