前回、PowerShellスクリプトからMicrosoft Edgeを操作してルータのログデータを取得できるようにした。今回はこのスクリプトを定期的かつ自動的に実行できるように変更、および設定する方法を取り上げる。

→連載「PowerShell Core入門 - 基本コマンドの使い方」の過去回はこちらを参照。

ルータからログを取得してファイルへ書き出す

前回のPowerShellスクリプトでは、次の処理でルータのログデータを取得していた。 $Element = Get-SeElement -By XPath -Value '/html/body/div[3]/pre' $Element.Text

ルータのログを取得するといった処理は手動でやるようなものではなく、機械的かつ自動的に行っておけばよいものだ。上記処理はログデータをそのまま標準出力へ送っているので、この部分をファイルに出力するように書き換えて、実行するごとにローカルファイルシステムにログデータをファイルとして書き出すように変更する。

ここでは1日に1回くらいのペースでログデータを取得すれば十分なので、日時をファイル名にしたファイルを作成することにする。次のような感じでファイル名とパスを用意する。これでPowerShellスクリプト実行時の日時でファイル名が作られる。

$Out = "~\Documents\router-log\" + $(Get-Date).ToString("yyyyMMdd_hhmmss") + ".txt"

そしてログデータをこのファイルへ書き出す。

$Element.Text > $Out

上記書き換えをまとめると次のようになる。

# ログデータを取得
'ログデータを取得します。'
$Element = Get-SeElement -By XPath -Value '/html/body/div[3]/pre'

# ログデータを書き込み
'ログデータを保存します。'
$Out = "~\Documents\router-log\" + $(Get-Date).ToString("yyyyMMdd_hhmmss") + ".txt"
$Element.Text > $Out

これで~\Documents\router-log\フォルダに「年月日_時分秒.txt」という名前のログファイルが作られることになる。

全ての処理をPowerShellスクリプト「router_showlog.ps1」にまとめると次のようになる。

# Microsoft Edge Webドライバを起動
webdriver_edge_start.ps1

# ルータログページをオープン
'ルータログページをオープンします。'
Set-SeUrl -Url http://ユーザ名:パスワード@192.168.1.1/ntt/information/troubleLog

# ログデータを取得
'ログデータを取得します。'
$Element = Get-SeElement -By XPath -Value '/html/body/div[3]/pre'

# ログデータを書き込み
'ログデータを保存します。'
$Out = "~\Documents\router-log\" + $(Get-Date).ToString("yyyyMMdd_hhmmss") + ".txt"
$Element.Text > $Out

# Microsoft Edge Webドライバを終了
'Webドライバを終了します。'
Stop-SeDriver
webdriver_edge_stop.ps1

後はこのPowerShellスクリプトをタスクスケジューラから定期的に起動するように仕掛ければよい。

PowerShellスクリプトをタスクスケジューラに登録する

先ほどのPowerShellスクリプトをタスクスケジューラに登録する。

  • タスクスケジューラに登録する

    タスクスケジューラに登録する

スケジュールに関しては自分の求めるように設定すればよい。例えば、下記スクリーンショットの場合だと、平日の16時にPowerShellスクリプトを実行するようになる。

  • トリガーの編集

    トリガーの編集

次にPowerShellスクリプトを登録する。

  • PowerShellスクリプトの登録

    PowerShellスクリプトの登録

登録する内容は次のようになる。

操作の編集
操作 プログラムの開始
プログラム/スクリプト "C:\Program Files\WindowsApps\Microsoft.PowerShell_7.3.1.0_x64__8wekyb3d8bbwe\pwsh.exe"
引数の追加 Command "C:\Users\daichi\Documents\router-log\router_showlog.ps1"

上記のケースだとPowerShellスクリプトは「~\Documents\router-log\router_showlog.ps1」に配置してある。PowerShell 7自身のパスは「C:\Program Files\WindowsApps\Microsoft.PowerShell_7.3.1.0_x64__8wekyb3d8bbwe\pwsh.exe」だ。

ここが問題なのだが、PowerShell 7のバイナリパスは上記のようにバージョンなどによって変わるスタイルになってしまった。つまり、バージョンが上がることにこの部分を書き換えるか、書き換えたくないなら何らかのギミックを用意しなければならない。

タスクスケジューラに登録する方法に関しては今後の状況を見つつ、あまりに状況が変わりそうになければいくつか代替方法を示していこうと思う。

PowerShellスクリプトとタスクスケジューラで自動実行

この記事は
Members+会員の方のみ御覧いただけます

ログイン/無料会員登録

会員サービスの詳細はこちら