web-dev-qa-db-ja.com

PowerShellを使用してスケジュールされたタスクを変更する

スケジュールされたタスクのアクションステップを変更するにはどうすればよいですか?特定のパスを指し、PowerShellスクリプトを実行する何百ものスケジュールされたタスクがあります。タスク全体を削除して再作成せずに、これらのタスクを見つけて、アクションステップのパスを変更するにはどうすればよいですか?

1
Michael

スケジュールされたタスクはC:\ Windows\System32\Tasks \に含まれ、XMLファイルが含まれています。 Petriの記事はWindows8およびWindowsServer 2012に適したソリューションですが、完全なソリューションではありません。これにより、特定のコマンドまたは引数を持つタスクを見つけて、それらを置き換えることができます。

$computer = "localhost"

$oldCommand = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
$oldArguments = "-File `"C:\Users\Public\Scripts\oldScript.ps1`""
$newCommand = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
$newArguments = "-File `"C:\Users\Public\Scripts\newScript.ps1`""

$tasks = Get-ChildItem "\\$computer\c$\Windows\System32\Tasks\" | Where-Object {
    $_.PSIsContainer -eq $false `
    -and `
    (([xml](Get-Content -Path $_.FullName)).Task.Actions.Exec.Command -like $oldCommand) `
    -and `
    (([xml](Get-Content -Path $_.FullName)).Task.Actions.Exec.Arguments -like $oldArguments)
    }

$tasks | ForEach-Object {
    $xml = [xml](Get-Content -Path $_.FullName)
    $xml.Task.Actions.Exec.Command = $newCommand
    $xml.Task.Actions.Exec.Arguments = $newArguments
    $xml.Save($_.FullName)
    }
1
Tim Ferrill