O Exchange PowerShell em uma tarefa agendada é executado para sempre

8

Eu tenho alguns scripts do Exchange 2010 PowerShell que gostaria de executar como tarefas agendadas.

Se eu iniciar o PowerShell usando "Executar como usuário diferente", eu posso executar os scripts e eles serão executados corretamente.

Se eu agendar uma tarefa usando o mesmo usuário, a tarefa permanecerá no estado Em execução para sempre.

Como posso descobrir onde a tarefa está ficando paralisada?

Para referência, veja como habilito o material do Exchange:

. 'C:\Program Files\Microsoft\Exchange Server\V14\bin\RemoteExchange.ps1'
Connect-ExchangeServer -auto

E aqui estão as maneiras pelas quais tentei executar o script no Agendador de tarefas:

  • comando do powershell "& {. 'c: \ windows \ script.ps1'}"
  • powershell -file 'c: \ windows \ script.ps1'
  • arquivo de configuração "c: \ windows \ script.ps1"

Tudo com o mesmo resultado. Grr ...

pescoço longo
fonte
Comentando tarde para a festa, mas eu tive o mesmo comportamento. Uma tarefa agendada registrada usando o PowerShell Register-ScheduledJobnunca 'terminou'; ​​terminou assim que fechei meu console do PowerShell e o ISE.
user4317867

Respostas:

3

Você precisa modificar sua política de execução ou especificar o -ExecutionPolicy Bypassparâmetro como linha de comando.

powershell -Command "<path to .ps1 script>" -ExecutionPolicy Bypass
TheCompWiz
fonte
1
Adicionei a opção ExecutionPolicy aos meus parâmetros de linha de comando. Nenhuma mudança; tarefa ainda é executada para sempre.
longneck
2

Não tenho certeza se é assim que você está fazendo isso, mas quando estou executando scripts do PowerShell por meio do agendador de tarefas, uso a ação "Iniciar um programa", selecione o PowerShell e adiciono os argumentos a partir daí. Pode ser o que você está fazendo aqui, mas não está claro. Aqui está uma captura de tela: insira a descrição da imagem aqui

Por política de execução TheCompWiz também pode ser um problema.

ZnewmaN
fonte
Isso nem sequer é uma sintaxe de linha de comando válida para powershell.exe, mas apenas por causa disso eu tentei. A tarefa falhou imediatamente.
longneck
Interessante porque todas as minhas tarefas diárias do PowerShell funcionam dessa maneira e funcionam muito bem.
ZnewmaN
C: \ WINDOWS \ system32 \ WindowsPowerShell \ v1.0 \ powershell.exe -comando "& 'c: \ windows \ script.ps1'" "
ZnewmaN
ah, há a diferença. sua captura de tela não mostra o-command
longneck
Sim, eu pessoalmente não uso o comando -com, mas provavelmente é o uso adequado.
ZnewmaN
0

Eu tive o mesmo problema. No meu caso, a solução foi especificar o diretório "start in" (meu script leria o conteúdo de um arquivo que não seria encontrado porque não especifiquei o caminho completo para o arquivo).

Azimute
fonte
0

Eu tive o mesmo problema e o comentário de "user279399" para usar o comando taskkill foi super útil, só precisava de modificação. Aqui está a minha solução no final da sintaxe do argumento

taskkill /f /fi "USERNAME eq domain\exchadmin" /im powershell.exe

Este comando mata apenas a sessão do PowerShell em execução nessa conta de usuário. É uma prática recomendada ter uma conta de administrador do Exchange separada para executar tarefas agendadas.

Leon B
fonte
-3

Tente adicionar no final do seu script [taskkill / f / im "powershell.exe"], isso matará todos os processos "powershell.exe". Não sei como eliminar o processo atual do power-shell (equivalente a [cmd.exe / c]). Mas fará o truque.

user279399
fonte
E se houvesse outro script do PowerShell em execução, provavelmente fazendo algo importante? Você mataria esses processos sem perguntar? Em um ambiente de produção? Como rotina? A sério?!
Esa Jokinen