Eu tenho esse script powershell agendado (tecnicamente, ele é executado por um arquivo cmd, mas veja abaixo). o roteiro é
(New-Object -ComObject 'Shell.Application').Windows() | ForEach-Object {
$localPath = $_.Document.Folder.Self.Path
"C:\WINDOWS\explorer.exe /e, `"$localPath`""
} > reabrir.cmd
whoami >> reabrir2.cmd
pwd >> reabrir2.cmd
O primeiro comando copiei deste mesmo site . Ele escreve a lista de (caminhos de) janelas abertas do explorer.
O script é executado conforme planejado, tanto quando executado diretamente do powershell quanto quando executado a partir do script cmd: ele grava a lista de caminhos correspondentes às janelas abertas do explorer para reabrir.cmd e o nome de usuário e diretório de trabalho para reabrir2.cmd.
O script é executado quando agendado, pois grava o nome de usuário correto e o diretório de trabalho no arquivo reabrir2.cmd todas as vezes.
Mas, ao rodar sob o agendador, não toca no arquivo reabrir.cmd; ou seja, o primeiro comando falha por algum motivo.
O mesmo problema ocorre (o script é executado, mas não toca no arquivo reabrir.cmd) se eu definir o script para ser executado diretamente pelo agendador em vez do script cmd.
Alguma ideia de qual poderia ser o motivo para o script não ser executado corretamente no agendador?
As tarefas do Agendador de Tarefas, quando executadas em um contexto de usuário diferente da sessão interativa em andamento, não podem interagir com essa sessão.
As regras de isolamento das tarefas agendadas mudam a cada nova versão do Windows, mas tente definir a tarefa com "Executar somente quando o usuário estiver conectado". Quando esta opção é selecionada, sua conta de usuário deve ser exibida em "Ao executar a tarefa, use a seguinte conta de usuário:".
Não há como, caso você deseje, fazer interface com a sessão da área de trabalho de uma conta de usuário diferente da sua.