Modificar uma tarefa agendada com o PowerShell

1

Como posso modificar a etapa de ação em uma tarefa agendada? Temos centenas de tarefas agendadas que apontam para um determinado caminho e executamos um script do PowerShell. Como podemos encontrar essas tarefas e, em seguida, alterar o caminho na etapa de ação sem excluir e recriar a tarefa inteira?

    
por Michael 04.06.2014 / 20:01

1 resposta

1

As tarefas agendadas estão contidas em C: \ Windows \ System32 \ Tasks \ e contêm arquivos XML. Embora o artigo do Petri seja uma boa solução para o Windows 8 e o Windows Server 2012, essa não é uma solução completa. Isso deve permitir que você encontre as tarefas com um comando ou argumento específico e as substitua.

$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)
    }
    
por 04.06.2014 / 21:16