Eu tenho um servidor Windows Server 2012 R2 executando uma tarefa agendada com três ações, cada uma executando scripts do PowerShell:
Cadaumadessasações"inicia em" o diretório relevante (e correto):
Originalmente,aterceiraação-ApplyABPs-foiconfiguradaexatamentedamesmamaneiraqueasoutrasduas,porexemploumapasta"start in" simples e, em seguida, .\ApplyABPs.ps1
como o argumento. Este funcionou como pretendido.
Eu queria adicionar alguns logs ao último script, então adicionei o seguinte código ao dot-source do meu arquivo FunctionsLibrary.ps1
compartilhado, criei um arquivo de log e gravei nele:
# Call functions file...
. (Join-Path "C:\scripts\" FunctionLibrary.ps1)
# Create a log file
$LogFile = Create-Log -Location $LogfileLocation
Write-Log -Important -Text "==== ApplyABPs.ps1 ====="
As adições ao script ApplyABPs
e este script FunctionLibrary.ps1
funcionam em outros arquivos.
Se eu executar este script ApplyABPs.ps1
do PowerShell ISE, ele funcionará como pretendido - cria o arquivo de log e grava nele.
No entanto, quando tento executar a tarefa agendada, as duas primeiras ações são executadas normalmente, mas a terceira falha:
Esse código não me fornece muitos detalhes, mas o Last Run Result
na parte superior do Agendador de Tarefas diz The directory name is invalid. (0x8007010B)
.
Então ... para fins de teste, tentei adicionar as mesmas alterações de FunctionLibrary.ps1
e código de script às outras duas ações. O Agendador de Tarefas falhou imediatamente e retornou o mesmo erro para a primeira ação.
Quando, então, retiro o código, as ações funcionam.
Eu tentei alterar a maneira como a Tarefa agendada chama o PowerShell (daí os parâmetros -executionpolicy bypass
, -noprofile
e -file
na captura de tela superior), mas isso não fez diferença.
Com base na mensagem de erro directory invalid
, estou me perguntando se o PowerShell - quando chamado pela tarefa agendada - não consegue acessar o arquivo de origem, ou algo assim?
Se alguém puder lançar alguma luz sobre esse erro específico ou fornecer uma visão de como o Agendador de Tarefas chama o PowerShell (e os diretórios / relatividade que ele usa), isso seria ideal.