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
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:
Tudo com o mesmo resultado. Grr ...
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
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.
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).
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.
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.