VPN 接続が切断した際に、自動再接続したいので、
タスクスケジューラーで発生したイベントのパラメータをタスクに渡す方法は
阻害要因特定のために、いろいろ削って最小限にしてみたりもしたのだが、さっぱり効果が出ず埒が明かない。
途方に暮れて、「警告: タスクは登録されていますが、指定されたすべてのトリガーがこのタスクを開始するわけではありません。詳細については、タスク スケジューラのイベント ログを確認してください。」
でググったりもしてみたが、有用な情報は得られず困り果ててしまった。
XPath の書き方に問題があるのではと思い、「eventdata data value valuequeries」でググった所、たまたま以下のページを見つけた。
前者のページの最後 2015-12-16 のコメント曰く、ValueQueries には name 属性等で命名されてない特定の Data を取り出す手段が欠落してるように見えるとかなんとかで、
つまり、見事にピンポイントで地雷を踏み抜いたらしい。orz
後者も、ValueQueries の XPath 不完全だ! みたいな話なんだけど、
微妙なのは、
2つ下の段落にある
ただし、
因みに、err-code 631 は「ユーザーによってポートが切断されました。」
- ログ: Application
- ソース: RasClient
- イベントID: 20226
- Event/EventData/Data[2] の connection-name
- Event/EventData/Data[3] の err-code
タスクスケジューラーで発生したイベントのパラメータをタスクに渡す方法は
- Microsoft /Docs / Blog Archive / Server and Cloud Partner and Customer Solutions Team Blog / 2011-08-25: Trigger a PowerShell Script from a Windows Event
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<Settings>
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
</Settings>
<Triggers>
<EventTrigger>
<Subscription><QueryList><Query Id="0" Path="Application"><Select Path="Application">*[System[Provider[@Name='RasClient'] and EventID=20226]]</Select></Query></QueryList></Subscription>
<ValueQueries>
<Value name="user">Event/EventData/Data[1]</Value>
<Value name="connection-name">Event/EventData/Data[2]</Value>
<Value name="err-code">Event/EventData/Data[3]</Value>
</ValueQueries>
</EventTrigger>
</Triggers>
<Actions Context="Author">
<Exec>
<Command>%USERPROFILE%\HOME\.local\bin\test.bat</Command>
<Arguments>$(user) $(connection-name) $(err-code)</Arguments>
</Exec>
</Actions>
</Task>
ところが、タスクスケジューラーに登録してみると$ schtasks.exe /create /TN VPN\ routing /xml:task.xml 警告: タスクは登録されていますが、指定されたすべてのトリガーがこのタスクを開始するわけではありません。詳細については、タスク スケジューラのイベント ログを確認してください。みたいな警告が出ることに加え、VPN を切断してもタスクが発火してくれない。
阻害要因特定のために、いろいろ削って最小限にしてみたりもしたのだが、さっぱり効果が出ず埒が明かない。
途方に暮れて、「警告: タスクは登録されていますが、指定されたすべてのトリガーがこのタスクを開始するわけではありません。詳細については、タスク スケジューラのイベント ログを確認してください。」
でググったりもしてみたが、有用な情報は得られず困り果ててしまった。
XPath の書き方に問題があるのではと思い、「eventdata data value valuequeries」でググった所、たまたま以下のページを見つけた。
- TechNet / Windows Server / 2011-11-11: Error adding ValueQueries to Scheduled Task
- moodjbow / 2014-05-06: ValueQueries XPath Castrated
前者のページの最後 2015-12-16 のコメント曰く、ValueQueries には name 属性等で命名されてない特定の Data を取り出す手段が欠落してるように見えるとかなんとかで、
- Event/System/Channel
- Event/System/EventRecordID
wevtutil.exe qe $Channel /q:"Event[System[EventRecordID=$EventRecordID]]" /rd:true /c:1 /f:textまたは
wevtutil.exe qe $Channel /q:"Event[System[EventRecordID=$EventRecordID]]" /rd:true /c:1 /f:xmlするくらいが、私が思いついた唯一の一般的な回避策みたいな締めくくりになっていた。
つまり、見事にピンポイントで地雷を踏み抜いたらしい。orz
後者も、ValueQueries の XPath 不完全だ! みたいな話なんだけど、
Event/System/EventID Event/System/Provider/@Name Event/EventData/Data[@Name=”SomeValue”]みたいな書き方は行けるけど
Event/EventData/Data[1] Event/EventData/Data[position()=1] Event/EventData/Data[last()]のような順序指定や
Event/EventData/Data[@Name !=”TargetUserName”] Event/EventData/Data[@Name !=”Dummy Attribute”] Event/EventData/Data[. != “Dummy Value”]のような否定は全滅みたいな話になってた。
微妙なのは、
Event/EventData Event/EventData/* Event/EventData/Dataなのだが、明言されてんだかよく分からなくて、
2つ下の段落にある
In all those cases a warning including the following information was generated: “Ensure all the task triggers are valid as configured. Additional Data: Error Value: 2147942487”.がこいつにも係ってるのかな? と思ったのだが、試してみると
$ schtasks.exe /create /TN VPN\ routing /xml:task.xml 成功: スケジュール タスク "VPN routing" は正しく作成されました。みたいに正常に登録されて、タスクもきちんと発火してくれた。
ただし、
- Event/EventData
- Event/EventData/*
- Event/EventData/Data
{********-****-****-****-************},MYHOST\kou,HOME,631
のようにコンマ区切りで各 Data の内容が連結された状態の値が得られるという状況だった。因みに、err-code 631 は「ユーザーによってポートが切断されました。」
という事で、タスクスケジューラーから直に
コンマ区切りで問題なければ、
- Event/EventData/Data[n]
コンマ区切りで問題なければ、
- Event/EventData/Data
- Event/System/Channel
- Event/System/EventRecordID
wevtutil.exe qe $Channel /q:"Event[System[EventRecordID=$EventRecordID]]" /rd:true /c:1 /f:xmlしてイベントの詳細を拾うという方法を取る必要がある。
- Microsoft /Docs / Previous Versions / Windows / Windows Server 2008 R2 and Windows Server 2008 / Troubleshoot Windows Server / Troubleshoot Windows Server 2008 / Events and Errors / Routing and Remote Access Service Infrastructure / RAS Client / RAS Connection Termination / Event ID 20226 — RAS Connection Temination
- Microsoft / Docs / トラブルシューティング / Windows / Windows クライアント / ネットワーク / リモート アクセス / ダイヤルアップ接続または VPN 接続のエラー コードの一覧
タグ

コメントをかく