前回はシステムやアプライアンス、組み込み機器などを運用していく上で「再起動」が現実的な方法の一つつであることを説明した。今回は、組み込み機器の再起動をPowerShellから実施する場合のサンプルスクリプトを取り上げる。
→連載「PowerShell Core入門 - 基本コマンドの使い方」の過去回はこちらを参照。
ルータの再起動準備
組み込み機器やアプライアンス、または何らかのシステムでもよいのだが、再起動の処理をWebブラウザから行うような仕組みになっているのであれば、これまで取り上げてきたPowerShellとSeleniumの機能を使うことで自動化が可能だ。
ここではそのサンプルとして、PowerShellスクリプトからルータを再起動する方法を取り上げる。まず、ルータの管理画面にMicrosoft Edgeからアクセスする。
ルータの再起動を行うためのページを開く。
このページはフレームで表示されているので、メニューのフレームを表示させずに再起動ページのみを表示させる。
PowerShellから、この再起動ボタンをクリックすればよいので、このボタンを特定するために、Microsoft Edgeの開発者ツールを起動し、要素やそのXPathを調査しておく。
対象 | XPath |
---|---|
再起動ボタン | //∗[@id="REBOOT"] |
再起動ボタンは、IDが「REBOOT」またはXPathが「//*[@id="REBOOT"]」だ。使いやすい方で特定すればよい。
ちなみに、このルータの場合は再起動ボタンを押すと次のように確認用のダイアログが表示される。
この処理をPowerShellスクリプトから自動的に実行するようにすればよいわけだ。
PowerShellスクリプトにまとめる
では、上記処理をPowerShellスクリプトにまとめていく。まず、PowerShellから制御するためのMicrosoft Edge WebDriverを起動する。このスクリプトは稿末に付録として添付しておくのでそちらを参考にしていただきたい。
webdriver_edge_start.ps1
WebDriver経由でルータの再起動ページを開く。このルータはベーシック認証を使っているので、URLの指定にはベーシック認証のユーザー名とパスワードも含めてある。
Set-SeUrl -Url http://ユーザ名:パスワード192.168.1.1/ntt/userMaintenance/reboot
次に「再起動」ボタンの要素を取得してクリックする。
$Element = Get-SeElement -By Id -Value REBOOT
Invoke-SeClick -Element $Element -Action Click
この状態でMicrosoft Edgeには確認用のダイアログが表示されているので、「OK」をクリックする。
SeShouldHave -Alert -PassThru | Clear-SeAlert -Action Accept
このルータはシステムの再起動に3分ほどかかるので、処理が完了するまで待機する。
Start-Sleep 190
処理が終わったら、最後にMicrosoft Edge Driverを終了する。この終了スクリプトについても、稿末の付録を参考にしていただきたい。
Stop-SeDriver
webdriver_edge_stop.ps1
上記の処理をまとめたPowerShellスクリプト「router_reboot.ps1」は、次のようになる。
# Microsoft Edge Webドライバを起動
webdriver_edge_start.ps1
# ルータ再起動ページをオープン
'ルータ再起動ページをオープンします。'
Set-SeUrl -Url http://ユーザ名:パスワード@192.168.1.1/ntt/userMaintenance/reboot
# 再起動ボタンをクリック
'再起動ボタンをクリックします。'
$Element = Get-SeElement -By Id -Value REBOOT
Invoke-SeClick -Element $Element -Action Click
SeShouldHave -Alert -PassThru | Clear-SeAlert -Action Accept
# 3分間とちょっと待機
'ルータを再起動しています。3分ほどお待ちください。'
Start-Sleep 190
# Microsoft Edge Webドライバを終了
Stop-SeDriver
webdriver_edge_stop.ps1
このPowerShellスクリプトを実行すると、PowerShell経由で制御できるMicrosoft Edgeが起動し、管理用Webページから再起動ボタンが押下されてルータが再起動する。