前回は、ベーシック認証が使われているルータの管理WebページをPowerShellから開く方法を紹介した。今回はこのルータの管理Webページからログデータを取得するPowerShellスクリプトを作成する。ログデータの収集は管理の基礎だ。PowerShellスクリプトで自動化して定期的に収集する仕組みを作っておくと便利になる。
→連載「意外と知らないMicrosoft Edgeの便利な使い方」の過去回はこちらを参照。
管理Webページのログデータ
まず、Microsoft Edgeからルータの管理Webページにアクセスする。
今回取得したいログが掲載されているページを開く。
このページの構造を調べると、ページは左のメニュー部分と右の表示部分がフレームで分かれていることがわかる。欲しいのはログデータなので、ログデータのページのみをMicrosoft Edgeで表示させてみる。
このページのログデータを取得したいものとする。Microsoft Edgeの開発者ツールを起動して、対象となる要素のXPathを取得する。
対象となる要素のXPathは次のようになっていた。
ログデータのXPath |
---|
/html/body/div[3]/pre |
これで準備は完了だ。対象となるページのURLも要素のXPathも明らかになったので、後はこれまで通りに操作していけばよい。
PowerShellからルータのログデータを取得する
では、一つ一つ動作を確認していく。まず、Microsoft Edgeを操作するためにWebDriverを起動する。スクリプトは稿末に付録として掲載しておくので、参考にしてもらえればと思う。
webdriver_edge_start.ps1
ルータの管理Webページのログページをオープンする。ベーシック認証もここで認証してしまう。
Set-SeUrl -Url http://ユーザー名:パスワード@192.168.1.1/ntt/information/troubleLog
ページを開いたのでログが記載されている要素をGet-SeElementコマンドレットで取得する。
$Element = Get-SeElement -By XPath -Value '/html/body/div[3]/pre'
要素が取得できたらログデータを出力する。
$Element.Text
これで必要な処理は終わったので、Microsoft EdgeとWebDriverを終了する。
Stop-SeDriver
webdriver_edge_stop.ps1
基本的な処理の流れはこれで完了だ。
動作を確認
では上記の処理をスクリプト(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'
$Element.Text
# Microsoft Edge Webドライバを終了
Stop-SeDriver
webdriver_edge_stop.ps1
シンプルなPowerShellスクリプトだが、機能としてはこれで十分だ。実行すると次のようになる。
PS C:\Users\daichi> router_showlog.ps1
Microsoft Edge WebDriverを起動します。
Microsoft Edge WebDriverの起動処理完了。
ルータログページをオープンします。
ログデータを取得します。
ELOG.LOG : There are 100 entries.
1. 2023/01/13 19:57:16 BNE-OpS端末管理部 端末情報登録成功
SEQ=00 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX REGIST OK
2. 2023/01/13 17:06:01 PPPoE セッション開放(正常切断)[IPv6セッション]
SEQ=30 00000000 00000000 00000000 00000000 ................
3. 2023/01/13 17:06:01 PPPoE セッション開放(サーバ切断)[IPv6セッション]
SEQ=30 00000000 00000000 00000000 00000000 ................
4. 2023/01/13 17:06:01 PPPの認証失敗[IPv6セッション]
SEQ=30 00000000 00000000 00000000 00000000 ................
5. 2023/01/13 17:06:01 PPP-LCPの確立[IPv6セッション]
SEQ=30 00000000 00000000 00000000 00000000 ................
6. 2023/01/13 17:06:00 PPPoEセッション開始成功[IPv6セッション]
SEQ=30 00000000 00000000 00000000 00000000 ................
7. 2023/01/13 17:06:00 PPPoE AC発見成功[IPv6セッション]
SEQ=30 00000000 00000000 00000000 00000000 ................
8. 2023/01/13 17:03:00 BNE-OpS端末管理部 端末情報登録成功
SEQ=00 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX REGIST OK
9. 2023/01/13 17:01:40 JavaVM起動
SEQ=00 20202020 20202020 20202020 20202020
10. 2023/01/13 17:01:18 自動無線チャネル設定 チャネル:116 AP数: 0
SEQ=00 XXXXXXXX 00003020 00000000 00000000 116/ 0..........
11. 2023/01/13 17:01:09 自動無線チャネル設定 チャネル: 1 AP数: 3
SEQ=00 XXXXXXXX 00003320 00000000 00000000 1/ 3..........
12. 2023/01/13 17:01:04 PPP-IPCPの確立[メインセッション]
SEQ=10 00000000 00000000 00000000 00000000 ................
13. 2023/01/13 17:01:04 PPPの認証成功[メインセッション]
SEQ=10 00000000 00000000 00000000 00000000 ................
14. 2023/01/13 17:01:03 PPP-LCPの確立[メインセッション]
SEQ=10 00000000 00000000 00000000 00000000 ................
15. 2023/01/13 17:01:03 PPPoEセッション開始成功[メインセッション]
SEQ=10 00000000 00000000 00000000 00000000 ................
16. 2023/01/13 17:01:03 PPPoE AC発見成功[メインセッション]
SEQ=10 00000000 00000000 00000000 00000000 ................
17. 2023/01/13 17:00:57 電話サーバ接続成功
SEQ=00 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX REGIST OK
18. 2010/01/01 09:00:28 回線取得情報
SEQ=00 XXXXXXXX 00000044 00000000 00000000 NGNPD...........
19. 2023/01/13 17:00:13 JavaVM正常停止
SEQ=00 20202020 20202020 20202020 20202020
20. 2023/01/13 17:00:13 機器再起動
SEQ=00 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX WebReboot[Force]
21. 2023/01/06 19:31:33 BNE-OpS端末管理部 端末情報登録成功
SEQ=00 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX REGIST OK
22. 2023/01/06 17:10:13 PPPoE セッション開放(正常切断)[IPv6セッション]
SEQ=30 00000000 00000000 00000000 00000000 ................
23. 2023/01/06 17:10:13 PPPoE セッション開放(サーバ切断)[IPv6セッション]
SEQ=30 00000000 00000000 00000000 00000000 ................
24. 2023/01/06 17:10:13 PPPの認証失敗[IPv6セッション]
SEQ=30 00000000 00000000 00000000 00000000 ................
25. 2023/01/06 17:10:13 PPP-LCPの確立[IPv6セッション]
SEQ=30 00000000 00000000 00000000 00000000 ................
26. 2023/01/06 17:10:13 PPPoEセッション開始成功[IPv6セッション]
SEQ=30 00000000 00000000 00000000 00000000 ................
27. 2023/01/06 17:10:13 PPPoE AC発見成功[IPv6セッション]
SEQ=30 00000000 00000000 00000000 00000000 ................
28. 2023/01/06 17:03:37 BNE-OpS端末管理部 端末情報登録成功
SEQ=00 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX REGIST OK
29. 2023/01/06 17:01:35 JavaVM起動
SEQ=00 20202020 20202020 20202020 20202020
30. 2023/01/06 17:01:15 自動無線チャネル設定 チャネル:100 AP数: 0
SEQ=00 2F303031 00003020 00000000 00000000 100/ 0..........
31. 2023/01/06 17:01:06 自動無線チャネル設定 チャネル: 1 AP数: 3
SEQ=00 XXXXXXXX 00003320 00000000 00000000 1/ 3..........
32. 2023/01/06 17:01:01 PPP-IPCPの確立[メインセッション]
SEQ=10 00000000 00000000 00000000 00000000 ................
33. 2023/01/06 17:01:01 PPPの認証成功[メインセッション]
SEQ=10 00000000 00000000 00000000 00000000 ................
34. 2023/01/06 17:01:01 PPP-LCPの確立[メインセッション]
SEQ=10 00000000 00000000 00000000 00000000 ................
35. 2023/01/11 08:01:01 PPPoEセッション開始成功[メインセッション]
SEQ=10 00000000 00000000 00000000 00000000 ................
36. 2023/01/06 17:01:01 PPPoE AC発見成功[メインセッション]
SEQ=10 00000000 00000000 00000000 00000000 ................
37. 2023/01/06 17:00:53 電話サーバ接続成功
SEQ=00 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX Register OK
38. 2010/01/01 09:00:27 回線取得情報
SEQ=00 XXXXXXXX 00000044 00000000 00000000 NGNPD...........
39. 2023/01/06 17:00:11 JavaVM正常停止
SEQ=00 20202020 20202020 20202020 20202020
40. 2023/01/06 17:00:11 機器再起動
SEQ=00 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX WebReboot[Force]
41. 2023/01/04 04:30:09 自動無線チャネル設定 チャネル:100 AP数: 0
SEQ=00 2F303031 00003020 00000000 00000000 100/ 0..........
42. 2023/01/03 02:31:03 自動無線チャネル設定 チャネル:100 AP数: 0
SEQ=00 2F303031 00003020 00000000 00000000 100/ 0..........
43. 2023/01/02 01:30:58 自動無線チャネル設定 チャネル:100 AP数: 0
SEQ=00 2F303031 00003020 00000000 00000000 100/ 0..........
44. 2023/01/01 01:30:54 自動無線チャネル設定 チャネル:100 AP数: 0
SEQ=00 2F303031 00003020 00000000 00000000 100/ 0..........
45. 2022/12/31 02:30:49 自動無線チャネル設定 チャネル:100 AP数: 0
SEQ=00 2F303031 00003020 00000000 00000000 100/ 0..........
46. 2022/12/30 19:18:47 BNE-OpS端末管理部 端末情報登録成功
SEQ=00 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX Register OK
47. 2022/12/30 17:07:08 PPPoE セッション開放(正常切断)[IPv6セッション]
SEQ=30 00000000 00000000 00000000 00000000 ................
48. 2022/12/30 17:07:08 PPPoE セッション開放(サーバ切断)[IPv6セッション]
SEQ=30 00000000 00000000 00000000 00000000 ................
49. 2022/12/30 17:07:08 PPPの認証失敗[IPv6セッション]
SEQ=30 00000000 00000000 00000000 00000000 ................
50. 2022/12/30 17:07:08 PPP-LCPの確立[IPv6セッション]
SEQ=30 00000000 00000000 00000000 00000000 ................
51. 2022/12/30 17:07:08 PPPoEセッション開始成功[IPv6セッション]
SEQ=30 00000000 00000000 00000000 00000000 ................
52. 2022/12/30 17:07:08 PPPoE AC発見成功[IPv6セッション]
SEQ=30 00000000 00000000 00000000 00000000 ................
53. 2022/12/30 17:02:36 BNE-OpS端末管理部 端末情報登録成功
SEQ=00 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX Register OK
54. 2022/12/30 17:01:41 JavaVM起動
SEQ=00 20202020 20202020 20202020 20202020
55. 2022/12/30 17:01:20 自動無線チャネル設定 チャネル:100 AP数: 0
SEQ=00 XXXXXXXX 00003020 00000000 00000000 100/ 0..........
56. 2022/12/30 17:01:11 自動無線チャネル設定 チャネル: 11 AP数: 3
SEQ=00 XXXXXXXX 00003320 00000000 00000000 11/ 3..........
57. 2022/12/30 17:01:06 PPP-IPCPの確立[メインセッション]
SEQ=10 00000000 00000000 00000000 00000000 ................
58. 2022/12/30 17:01:06 PPPの認証成功[メインセッション]
SEQ=10 00000000 00000000 00000000 00000000 ................
59. 2022/12/30 17:01:05 PPP-LCPの確立[メインセッション]
SEQ=10 00000000 00000000 00000000 00000000 ................
60. 2022/12/30 17:01:05 PPPoEセッション開始成功[メインセッション]
SEQ=10 00000000 00000000 00000000 00000000 ................
61. 2022/12/30 17:01:05 PPPoE AC発見成功[メインセッション]
SEQ=10 00000000 00000000 00000000 00000000 ................
62. 2022/12/30 17:00:59 電話サーバ接続成功
SEQ=00 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX Register OK
63. 2010/01/01 09:00:27 回線取得情報
SEQ=00 XXXXXXXX 00000044 00000000 00000000 NGNPD...........
64. 2022/12/30 17:00:15 JavaVM正常停止
SEQ=00 20202020 20202020 20202020 20202020
65. 2022/12/30 17:00:15 機器再起動
SEQ=00 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX WebReboot[Force]
66. 2022/12/30 02:30:56 自動無線チャネル設定 チャネル:116 AP数: 0
SEQ=00 XXXXXXXX 00003020 00000000 00000000 116/ 0..........
67. 2022/12/29 01:30:49 自動無線チャネル設定 チャネル:116 AP数: 0
SEQ=00 XXXXXXXX 00003020 00000000 00000000 116/ 0..........
68. 2022/12/23 19:32:50 BNE-OpS端末管理部 端末情報登録成功
SEQ=00 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX REGIST OK
69. 2022/12/23 17:06:18 PPPoE セッション開放(正常切断)[IPv6セッション]
SEQ=30 00000000 00000000 00000000 00000000 ................
70. 2022/12/23 17:06:17 PPPoE セッション開放(サーバ切断)[IPv6セッション]
SEQ=30 00000000 00000000 00000000 00000000 ................
71. 2022/12/23 17:06:17 PPPの認証失敗[IPv6セッション]
SEQ=30 00000000 00000000 00000000 00000000 ................
72. 2022/12/23 17:06:17 PPP-LCPの確立[IPv6セッション]
SEQ=30 00000000 00000000 00000000 00000000 ................
73. 2022/12/23 17:06:17 PPPoEセッション開始成功[IPv6セッション]
SEQ=30 00000000 00000000 00000000 00000000 ................
74. 2022/12/23 17:06:17 PPPoE AC発見成功[IPv6セッション]
SEQ=30 00000000 00000000 00000000 00000000 ................
75. 2022/12/23 17:04:42 BNE-OpS端末管理部 端末情報登録成功
SEQ=00 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX REGIST OK
76. 2022/12/23 17:01:37 JavaVM起動
SEQ=00 20202020 20202020 20202020 20202020
77. 2022/12/23 17:01:17 自動無線チャネル設定 チャネル: 52 AP数: 0
SEQ=00 XXXXXXXX 00003020 00000000 00000000 52/ 0..........
78. 2022/12/23 17:01:08 自動無線チャネル設定 チャネル: 1 AP数: 2
SEQ=00 XXXXXXXX 00003220 00000000 00000000 1/ 2..........
79. 2022/12/23 17:01:02 PPP-IPCPの確立[メインセッション]
SEQ=10 00000000 00000000 00000000 00000000 ................
80. 2022/12/23 17:01:02 PPPの認証成功[メインセッション]
SEQ=10 00000000 00000000 00000000 00000000 ................
81. 2022/12/23 17:01:02 PPP-LCPの確立[メインセッション]
SEQ=10 00000000 00000000 00000000 00000000 ................
82. 2022/12/23 17:01:02 PPPoEセッション開始成功[メインセッション]
SEQ=10 00000000 00000000 00000000 00000000 ................
83. 2022/12/23 17:01:02 PPPoE AC発見成功[メインセッション]
SEQ=10 00000000 00000000 00000000 00000000 ................
84. 2022/12/23 17:00:55 電話サーバ接続成功
SEQ=00 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX Register OK
85. 2010/01/01 09:00:27 回線取得情報
SEQ=00 XXXXXXXX 00000044 00000000 00000000 NGNPD...........
86. 2022/12/23 17:00:12 JavaVM正常停止
SEQ=00 20202020 20202020 20202020 20202020
87. 2022/12/23 17:00:12 機器再起動
SEQ=00 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX WebReboot[Force]
88. 2022/12/19 04:30:52 自動無線チャネル設定 チャネル: 52 AP数: 0
SEQ=00 XXXXXXXX 00003020 00000000 00000000 52/ 0..........
89. 2022/12/18 03:30:48 自動無線チャネル設定 チャネル: 52 AP数: 0
SEQ=00 XXXXXXXX 00003020 00000000 00000000 52/ 0..........
90. 2022/12/17 02:30:43 自動無線チャネル設定 チャネル: 52 AP数: 0
SEQ=00 XXXXXXXX 00003020 00000000 00000000 52/ 0..........
91. 2022/12/16 20:41:40 BNE-OpS端末管理部 端末情報登録成功
SEQ=00 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX REGIST OK
92. 2022/12/16 18:03:19 PPPoE セッション開放(正常切断)[IPv6セッション]
SEQ=30 00000000 00000000 00000000 00000000 ................
93. 2022/12/16 18:03:19 PPPoE セッション開放(サーバ切断)[IPv6セッション]
SEQ=30 00000000 00000000 00000000 00000000 ................
94. 2022/12/16 18:03:19 PPPの認証失敗[IPv6セッション]
SEQ=30 00000000 00000000 00000000 00000000 ................
95. 2022/12/16 18:03:19 PPP-LCPの確立[IPv6セッション]
SEQ=30 00000000 00000000 00000000 00000000 ................
96. 2022/12/16 18:03:19 PPPoEセッション開始成功[IPv6セッション]
SEQ=30 00000000 00000000 00000000 00000000 ................
97. 2022/12/16 18:03:19 PPPoE AC発見成功[IPv6セッション]
SEQ=30 00000000 00000000 00000000 00000000 ................
98. 2022/12/16 17:59:08 BNE-OpS端末管理部 端末情報登録成功
SEQ=00 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX REGIST OK
99. 2022/12/16 17:57:34 JavaVM起動
SEQ=00 20202020 20202020 20202020 20202020
100. 2022/12/16 17:57:14 自動無線チャネル設定 チャネル: 52 AP数: 0
SEQ=00 XXXXXXXX 00003020 00000000 00000000 52/ 0..........
PS C:\Users\daichi\Documents\powershell\20230119\sources>
PowerShellスクリプトからログデータが取得できていることを確認できる。
例えば、このスクリプトをさらに加工して日付別にファイルに保存するような仕組みにする。そうすると日ごとにログファイルが生成されていくので、今度はログファイルをチェックして問題を検出するPowerShellスクリプトを作成し、こちらも自動的に動作するように仕掛けておけばよい。
一つ一つのスクリプトはシンプルで簡単なものだが、作成してタスクマネージャ経由で動作させることで手軽に業務を実行できる。これがPowerShellの真骨頂の一つだ。
付録
webdriver_edge_start.ps1
#!/usr/bin/env pwsh
#========================================================================
# Microsoft Edge WebDriverを起動する
#========================================================================
#========================================================================
# 動作しているMicrosoft Edge WebDriverをすべて終了
#========================================================================
webdriver_edge_stop.ps1
#========================================================================
# Seleniumモジュールがない場合にはインストール
#========================================================================
if (-Not (Get-InstalledModule -Name Selenium 2> $Null)) {
'Seleniumモジュールをインストールします。'
Install-Module -Name Selenium -AllowPrerelease -Force
Get-InstalledModule -Name Selenium
}
#========================================================================
# Microsoft Edge WebDriverを起動
#========================================================================
'Microsoft Edge WebDriverを起動します。'
$Size = '1200,800'
if (-Not (Start-SeDriver -Browser Edge -Size $Size 2> $Null 3> $Null))
{
#================================================================
# Microsoft EdgeとMicrosoft Edge WebDriverのバージョンが一致して
# いないためにドライバが動作しなかった可能性がある。
#================================================================
#================================================================
# 不要なドライバプロセスを終了
#================================================================
webdriver_edge_stop.ps1
#================================================================
# Microsoft Edgeのバージョン番号
#================================================================
$EdgeDir='C:\Program Files (x86)\Microsoft\Edge\Application\'
$EdgeVersion=( Get-ChildItem -Name $EdgeDir |
Where-Object { $_ -NotMatch "[a-zA-Z]+" } |
Select-Object -First 1 )
# ↑ 【Select-Object -First 1の理由】
# 更新前のバージョンと更新後のバージョンが同時に
# 存在するタイミングがあるので、更新後のバージョン
# のみを取得するためにSelect-Objectを実行している。
#================================================================
# Microsoft Edge WebDriverダウンロードURLとデプロイ先パス
#================================================================
$DriverURL="https://msedgedriver.azureedge.net/$EdgeVersion/edgedriver_win64.zip"
$SeModVer=(Get-InstalledModule -Name Selenium).Version -replace "-.+$",""
$DriverDir="$env:HOME\Documents\powershell\Modules\Selenium\$SeModVer\assemblies"
$DriverDownloadDir="$DriverDir\_download"
#================================================================
# WebDriverダウンロード用の一時ディレクトリを作成
#================================================================
New-Item $DriverDownloadDir -ItemType Directory -Force
#================================================================
# Microsoft Edgeと同じバージョンのMicrosoft Edge WebDriverを
# ダウンロード
#================================================================
"Microsoft Edge WebDriver version $EdgeVersion をダウンロードします。"
curl -get `
-o $DriverDownloadDir\edgedriver_win64.zip `
$DriverURL
#================================================================
# Microsoft Edge WebDriverをデプロイ
#================================================================
"Microsoft Edge WebDriver version $EdgeVersion をインストールします。"
Expand-Archive -Path $DriverDownloadDir\edgedriver_win64.zip `
-Destination $DriverDownloadDir `
-Force
Copy-Item -Path $DriverDownloadDir\msedgedriver.exe `
-Destination $DriverDir\msedgedriver.exe `
-Force
#================================================================
# WebDriverダウンロード用の一時ディレクトリを削除
#================================================================
Remove-Item $DriverDownloadDir -Recurse -Force
#================================================================
# Microsoft Edge WebDriverを起動する
#================================================================
if (-Not (Start-SeDriver -Browser Edge -Size $Size 2> $Null 3> $Null))
{
#========================================================
# 原因不明の起動不能
#========================================================
#========================================================
# 不要なドライバプロセスを終了
#========================================================
webdriver_edge_stop.ps1
Exit
}
}
'Microsoft Edge WebDriverの起動処理完了。'
webdriver_edge_stop.ps1
#!/usr/bin/env pwsh
#========================================================================
# Microsoft Edge WebDriverを終了する
#========================================================================
#========================================================================
# WebDriverプロセスを終了
#========================================================================
if (Get-Process -Name msedgedriver 2> $Null)
{
'動作しているMicrosoft Edge WebDriverを終了します。'
Get-Process -Name msedgedriver 2> $Null
# Microsoft Edge WebDriverを終了
Stop-SeDriver 2> $Null
# まだ動作しているほかのMicrosoft Edge WebDriverを終了
if (Get-Process -Name msedgedriver 2> $Null)
{
Get-Process -Name msedgedriver 2> $Null | Stop-Process
}
'動作しているMicrosoft Edge WebDriverの終了処理完了。'
}