PowerShellでExcelワークシート上のIPアドレスにPINGをし結果を保存するスクリプト

powershell コンピュータ
powershell

ExcelのワークシートのA列にIPアドレスの一覧が縦に並んでいる状態のExcelブックファイル(拡張子.xlsx)を用意します。

Excelブックファイルが保存してあるパスに合わせてスクリプトの変数を変更します。(変数名$XlsxPath)

PowerShellスクリプトを実行します。

PING応答がある場合OK、無い場合はNGがセットした状態でExcelブックファイルが保存されます。

PowerShellスクリプト

$ErrorActionPreference = "STOP"

# windowsで.ps1を初回実行する場合は、powershell.exeで管理権限で以下のコマンドを実行
# Set-ExecutionPolicy RemoteSigned

# IPアドレスのエクセルブック
$XlsxPath = "エクセルブックのパス"

# IPアドレスのシート名
$SheetName = "Sheet1"

# IPアドレスの列番号
$RowIP = 1

# PINGの結果を返す列番号
$RowResult = 2

# 開始行
$ColumnStart = 1

# 終了業
$ColumnEnd = 254

$Excel = New-Object -ComObject Excel.Application # Excel起動
$Excel.Visible = $True # 可視モード

$Workbook = $Excel.Workbooks.Open($XlsxPath) # ワークブックを開く

# ワークシートの初期処理
$Sheet = $Workbook.Worksheets | ? { $SheetName -eq $_.Name } # ワークシート名を取り出す


        
# R1C1形式
for($row=$ColumnStart; $row -le $ColumnEnd;$row++) {
    $ip = $Sheet.Cells.Item($row, $RowIP).Text
    Write-Host $ip
    if (Test-Connection $ip -Quiet -Count 1) {
        $Sheet.Cells.Item($row, $RowResult) = "OK"
    } else {
        $Sheet.Cells.Item($row, $RowResult) = "NG"
    }
}


$Workbook.Save() # 上書き保存
$Workbook.Close($false)

$Excel.Quit()
$Excel = $null

LANで固定IPを割り当てる為に使われていないIPアドレスを探す目的で作成しました。
ただ、電源が入っていない端末は応答を返しませんのでIPアドレスの割り当て管理から逃れることは出来ません。
個人利用の用途であれば、インターネット用のルーターなどでDHCPサーバーを立てているケースが多いと思いますが、DHCPサーバーの機能で端末のMACアドレスとDHCPで払い出すIPアドレスを紐づけて、特定の端末に固定のIPアドレスを割り当てる方法が良いと思います。MACアドレスを調べて設定するのが少し面倒ですが、端末側のIPアドレスの設定はDHCPですので基本不要となります。IPアドレスの重複管理もDHCPに任せることが出来るので安心出来ます。
ご利用のルーターにその機能があればですが…

PINGが片側からしか応答しない事例

PINGがらみということで、LAN環境で端末Aから端末BへPINGが通るが、逆に端末Bから端末AへPINGが通らない状況に遭遇したことがあります。
原因は端末Aのサブネットが255.255.255.0で端末Bのサブネットが255.255.0.0という設定でした。端末Bのサブネットの範囲が広いので端末AのIPアドレスは見えるが、端末Aのサブネットの範囲が狭いので端末BのIPアドレスを見つけることが出来ないと考えられます。
そもそも同じネットワークハブを介して接続しているLAN環境でサブネットが異なる設定をすること自体が正しいのか?怪しい感じもしますが…
この現象を発見した際、別のトラブルの原因を調べていた最中で、かなり悩まされることに成りました。

コメント