バッチファイルで自分自身をタスクスケジューラに登録して再起動後も実行させようと思っても「コンピューターを AC電源で使用している場合のみタスクを開始する(P)」という項目がONの場合はノートPCが電源に接続されていない状態だとタスクを実行してくれない。
しかし、タスクスケジューラを操作できる schtasks
コマンドで変更可能な項目は限られており、この項目もコマンドでは変更不可能なためどうしたものかと調べていたらxmlを直接操作することで変更できたのでご紹介。
バッテリー駆動でもタスクを実行させる関数
function disableOnlyRunAc-Task($taskName){ $taskXml = [xml](schtasks /query /tn $taskName /xml) $taskXml.Task.Settings.DisallowStartIfOnBatteries = "false" $taskXml.Save("C:\tempTask.xml") schtasks /delete /tn $taskName /f schtasks /create /tn $taskName /xml "C:\tempTask.xml" Remove-Item "C:\tempTask.xml" } # コンピューターをAC電源で使用している場合のみタスクを開始するを無効化 disableOnlyRunAc-Task "<タスク名>"
※管理者権限での実行が必要
※xmlの操作を楽にするためにPowerShellを使用
DisallowStartIfOnBatteries
という項目が コンピューターをAC電源で使用している場合のみタスクを開始する にあたるので、ここを false
に変更して作り直すことで無効化できるということです。
batファイルで利用する場合
disableOnlyRunAc-Task.ps1 として保存する
Param( [string]$taskName ) $taskXml = [xml](schtasks /query /tn $taskName /xml) $taskXml.Task.Settings.DisallowStartIfOnBatteries = "false" $taskXml.Save("C:\tempTask.xml") schtasks /delete /tn $taskName /f schtasks /create /tn $taskName /xml "C:\tempTask.xml" Remove-Item "C:\tempTask.xml"
コマンドプロンプトから実行してみる
powershell -executionpolicy bypass .\disableOnlyRunAc-Task.ps1 -taskName "<タスク名>"
実行結果