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", posso executar os scripts e eles sã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 presa?

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

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

E aqui estão as maneiras como tentei executar o script no Agendador de Tarefas:

  • powershell -command "& {. 'c: \ windows \ script.ps1'}"
  • powershell -file 'c: \ windows \ script.ps1'
  • PowerShell -file "c: \ windows \ script.ps1"

Tudo com o mesmo resultado. Grr ...

    
por longneck 01.11.2012 / 17:41

5 respostas

3

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

powershell -Command "<path to .ps1 script>" -ExecutionPolicy Bypass
    
por 01.11.2012 / 18:04
2

Não tenho certeza se é assim que você está fazendo isso, mas quando executo scripts do PowerShell por meio do agendador de tarefas, uso a ação "Iniciar um programa", seleciono powershell e adiciono os argumentos de lá. Isso pode ser o que você está fazendo aqui, mas não é claro. Aqui está uma captura de tela:

A política de execução Per The CompWiz também pode ser um problema.

    
por 01.11.2012 / 18:19
0

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

    
por 15.10.2015 / 10:50
0

Eu tive o mesmo problema e o comentário de "user279399" para usar o comando taskkill foi super útil, só precisei 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 que está sendo executada sob essa conta de usuário. É uma prática recomendada ter uma conta de administrador de troca separada para executar tarefas agendadas.

    
por 21.04.2016 / 17:25
-3

Tente adicionar ao final do seu script [taskkill / f / im "powershell.exe"] isso irá matar todos os processos "powershell.exe". Eu não sei como matar o atual processo de shell de energia (equivalente a [cmd.exe / c]). Mas isso fará o truque.

    
por 01.04.2015 / 09:57