Script do PowerShell em execução a partir da tarefa agendada: a ação falhou ao iniciar, o nome do diretório é inválido

1

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.

    
por dunc 30.05.2018 / 12:55

1 resposta

4

Use a seguinte sintaxe para executar um script do PowerShell no agendador de tarefas:

Programa / script: C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe

Adicionar argumentos: -NoLogo -Noninteractive -Noprofile -Command "& {C: \ ScriptFolder \ get-LicensingInputFromAD.ps1}"

E use o caminho \ nome do arquivo completo para cada arquivo .ps1 no campo de argumentos da tarefa.

    
por 30.05.2018 / 15:21