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に任せることが出来るので安心出来ます。
ご利用のルーターにその機能があればですが…

コメント