Depois de horas de depuração, eu entendi.
O problema:
uso do argumento -Command "..."
no Agendador de Tarefas.
Solução:
Use -File "..."
argumento. Neste caso particular, isso seria:
<Exec>
<Command>powershell</Command>
<Arguments>
-NonInteractive -Noprofile -File "D:\scripts\checkPowerUPS.ps1"
</Arguments>
</Exec>
Detalhes:
Ao usar -Command "&{D:\testScript.ps1}"
, as variáveis globais declaradas no script não estão disponíveis, ou seja, isso não funcionará:
$myVar = "ham"
function myF(){
Write-Output $global:myVar
}
myF
Não encontrei uma resposta para minha pergunta de solução de problemas: "Qual é a diferença entre o argumento -Command
e -File
PowerShell?" Invocar powershell /?
não ajuda de qualquer forma, porque não diz nada sobre variáveis globais e / ou quaisquer variáveis "semiglobais". Além disso, afirma que usando -Command
:
...Executes the specified commands (and any parameters) as though they were typed at the Windows PowerShell command prompt...
O que não é verdade, porque iniciar uma nova janela do PowerShell e executar as linhas que eu coloquei no código de exemplo acima com $ myVar funcionará, enquanto que executar o exemplo com -Command ...
NÃO será.
Espero que isso ajude você.