おそらくPowerShellのタスクスケジューラ関連のコマンドはユーザーセッションへの接続時等のトリガには対応してないと思います。
もう一つの手段としてschtasks
コマンドがありますが、こちらも残念ながら対応してないようです。
これらのコマンドはよく使われるような用途以外は対応してないことが結構多いです。
その他にタスクのXMLを直接編集して登録する方法があります。
以下にXMLを差し替えるコードを書いてみました。
文字列として置換すれば一発なのですが、そういうやり方は怒られそうなのでXMLDocumentを使っています。なので無駄に長いですが、要は<Triggers>
要素以下の<Trigger>
要素を置き換えてるだけです。
powershell
1# タスクのトリガーを"ユーザーセッションへの接続/切断時"に設定する
2filter Set-ConnectTrigger
3{
4 $ns = "http://schemas.microsoft.com/windows/2004/02/mit/task" # タスクのXML名前空間
5
6 $doc = [xml]$_ # 入力XMLをXMLDocumentに変換
7
8 # Triggerノードの雛形を作成
9 $triggerNode = $doc.CreateElement("SessionStateChangeTrigger", $ns)
10 $enabledNode = $doc.CreateElement("Enabled", $ns) # Triggerノードの子になるEnabledノード
11 $enabledNode.InnerText = "true"
12 $stateChangeNode = $doc.CreateElement("StateChange", $ns) # Triggerノードの子になるStateChangeノード
13 # Triggerノードの子ノードとして追加
14 $triggerNode.AppendChild($enabledNode) > $null
15 $triggerNode.AppendChild($stateChangeNode) > $null
16
17 # 雛形を複製して実際に登録するノードを作成
18 $t1 = $triggerNode.Clone()
19 $t1.StateChange = "ConsoleConnect"
20 $t2 = $triggerNode.Clone()
21 $t2.StateChange = "RemoteConnect"
22 $t3 = $triggerNode.Clone()
23 $t3.StateChange = "ConsoleDisconnect"
24 $t4 = $triggerNode.Clone()
25 $t4.StateChange = "RemoteDisconnect"
26
27 # Triggersノードを選択
28 $nsm = New-Object Xml.XmlNamespaceManager $doc.NameTable
29 $nsm.AddNamespace("task", $ns) # XmlNamespaceManagerで名前空間名を略称と関連づける
30 $triggersNode = $doc.SelectSingleNode("//task:Triggers", $nsm) # Triggersノードを選択
31
32 # ダミーのデータを削除して、作成したノードをTriggers以下に追加する
33 $triggersNode.RemoveAll()
34 $t1,$t2,$t3,$t4 | foreach { $triggersNode.AppendChild($_) } > $null
35
36 $doc.OuterXml
37}
38
39
以下はノートパッドを起動するタスクを登録する例です。
ユーザーセッションへの接続/切断をトリガにする場合は管理者権限で実行する必要があるようです。
powershell
1# アクション作成 (ノートパッドの起動)
2$action = New-ScheduledTaskAction notepad
3# トリガー作成 (ダミー)
4$trigger = New-ScheduledTaskTrigger -At 0 -Once
5
6# タスクオブジェクトをXMLに変換し、トリガーを差し替えて登録する
7New-ScheduledTask $action $trigger | Export-ScheduledTask | Set-ConnectTrigger |
8Register-ScheduledTask "testtask"
9
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/17 04:48