PowerShellでWeb管理画面を開いてスクリーンショットを保存する旧環境向けメモ
はじめに
ネットワーク機器やホームルーター、簡易なWeb管理画面では、状態確認のために画面キャプチャを残したい場面があります。
たとえば、
- Web管理画面の状態を定期的に記録したい
- 作業前後の画面を画像として残したい
- ホームルーターや検証機器の画面を保存したい
- 手作業でスクリーンショットを撮るのが面倒
- 旧環境でInternet Explorer前提の画面を扱っている
といったケースです。
この記事では、PowerShellからInternet Explorer COMオブジェクトを起動し、指定したURLを開いてスクリーンショットを保存する旧環境向けのサンプルを紹介します。
なお、私はホームルータを使っていたとき、通信パケット量を月次で確認するために、タスクスケジューラへいれて月次処理として使っていました。
注意:IE前提の旧環境向けです
このサンプルは、Internet Explorer の COM オブジェクトを使っています。
$ie = New-Object -ComObject InternetExplorer.Application
現在の環境では、Internet Explorer前提の運用は避けた方がよいです。
新しく作る場合は、Microsoft Edge、Playwright、Selenium、専用APIなどの利用を検討してください。
この記事は、あくまで旧環境や検証用途のメモとして扱います。
想定する用途
このスクリプトは、以下のような場面を想定しています。
- 旧環境のWeb管理画面を開く
- ホームルーターや検証機器の画面を保存する
- 作業前後のWeb画面を画像で残す
- GUIでしか見られない状態を証跡として保存する
- IE前提でしか動かない管理画面を扱う
やりたいこと
今回やりたいことは以下です。
- 指定したURLを開く
- ブラウザを表示する
- ページ読み込みを待つ
- ウィンドウを最大化する
- 画面をスクリーンショットとして保存する
- ファイル名に実行日時を入れる
- 処理後にブラウザを閉じる
スクリプト例
以下は、指定URLを開き、画面キャプチャをデスクトップに保存するPowerShellサンプルです。
# ==========================================
# Web管理画面スクリーンショット取得スクリプト
# 旧環境向け:Internet Explorer COM利用
# ==========================================
# アクセスURL
$urls = @(
"http://192.168.1.1/login.htm"
)
foreach ($url in $urls) {
# IE起動
$ie = New-Object -ComObject InternetExplorer.Application
# IEウィンドウ設定
$ie.Visible = $true
$ie.StatusBar = $false
$ie.ToolBar = $false
$ie.MenuBar = $false
$ie.AddressBar = $true
# ウィンドウ最大化
$dllInfo = '[DllImport("user32.dll")] public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);'
Add-Type -MemberDefinition $dllInfo -Name NativeMethods -Namespace Win32
[Win32.NativeMethods]::ShowWindowAsync($ie.HWND, 3) | Out-Null
# 指定サイトへアクセス
$ie.Navigate($url)
# 読み込み待ち
while ($ie.Busy) {
Start-Sleep -Milliseconds 100
}
Start-Sleep -Seconds 1
# スクリーンキャプチャ取得
Add-Type -AssemblyName System.Drawing
$bitmap = New-Object System.Drawing.Bitmap($ie.Width, $ie.Height)
$graphics = [System.Drawing.Graphics]::FromImage($bitmap)
$graphics.CopyFromScreen($ie.Left, $ie.Top, 0, 0, $bitmap.Size)
# 保存先
$dateSave = Get-Date -Format "yyyyMMdd_HHmm"
$savePath = Join-Path $env:USERPROFILE "Desktop\$dateSave.png"
$bitmap.Save($savePath)
# オブジェクト解放
$graphics.Dispose()
$bitmap.Dispose()
# IE終了
$ie.Quit()
}
保存ファイル
サンプルでは、デスクトップに以下のようなファイル名で保存します。
20260616_1800.png
実行日時をファイル名にしておくと、後からいつ取得した画面か分かりやすくなります。
複数URLを対象にする
複数のWeb管理画面を対象にしたい場合は、配列にURLを追加します。
$urls = @(
"http://192.168.1.1/login.htm",
"http://192.168.1.2/status.htm",
"http://192.168.1.3/index.htm"
)
ただし、同じ分までのタイムスタンプだとファイル名が重複する可能性があります。
複数URLを扱う場合は、ファイル名に連番やホスト名を入れると安全です。
$dateSave = Get-Date -Format "yyyyMMdd_HHmmss"
画面をスクロールしたい場合
画面下部も確認したい場合は、SendKeys でページダウンを送る方法があります。
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.SendKeys]::SendWait("{PGDN}")
Start-Sleep -Seconds 1
ただし、フォーカスや画面状態に依存するため、動作は安定しない場合があります。
必要に応じて検証してください。
このスクリプトでできること
このスクリプトでは、以下のことができます。
- 指定URLをIEで開く
- Web管理画面を表示する
- 画面読み込み後にスクリーンショットを保存する
- 実行日時つきのPNGファイルを作成する
- 作業前後の画面証跡を残す
- 旧環境のWeb管理画面を画像として保存する
注意点
IE前提のため新規用途では非推奨
このスクリプトはInternet Explorer COMを使っています。
現在の新規用途では、IE前提の仕組みは避けた方がよいです。
可能であれば、以下のような方法を検討してください。
- Microsoft Edge
- Playwright
- Selenium
- Web管理画面のAPI
- 機器側のログ取得機能
ログインが必要な画面は別途考慮が必要
ログイン画面や認証が必要なWeb管理画面では、単にURLを開くだけでは目的の画面まで進めない場合があります。
IDやパスワードの自動入力はセキュリティ上の注意点が多いため、この記事では扱いません。
画面解像度やDPIに依存する
スクリーンショットは画面表示に依存します。
端末の解像度、DPI、ブラウザサイズ、表示倍率によって取得結果が変わる場合があります。
操作中の端末で実行すると画面を占有する
この方法は実際にブラウザを表示して画面キャプチャを取得します。
作業中の端末で実行すると、画面操作の邪魔になることがあります。
監視用端末や専用端末での実行を検討してください。
保存画像には環境情報が含まれる
スクリーンショットには、IPアドレス、機器名、状態情報などが写る可能性があります。
外部に共有する場合は、必ずマスキングしてください。
まとめ
PowerShellからInternet Explorer COMを使うことで、旧環境のWeb管理画面を開き、スクリーンショットとして保存できます。
現在の新規用途ではIE前提の方法はおすすめしませんが、古い管理画面や検証環境では、画面証跡を残す手段として使える場合があります。
大事なのは、
画面を保存すること
だけではなく、
何の画面を、いつ、どの状態で保存したのか分かるようにすること
だと思います。