Eu executo este script:
if (Copy-Item .\test.ps1 $env:SystemRoot\System32)
{
Write-Host "Done."
exit 0
}
else
{
Write-Host "Not done."
Write-Host "You must be root."
exit 1
}
Quando executo este script como um usuário normal recebo a mensagem in else
statement, pois não sou root. E tudo bem.
Mas eu executo este script como root, também recebi a mensagem na else
instrução! Mas a operação de cópia de arquivo é bem-sucedida. Não consigo obter a mensagem na if
declaração. Por quê?
Eu também verifico o código de erro e é sempre False
.
Uma
if
instrução não avalia se o comando dentro de sua condição foi executado com êxito. Ele apenas verificará o valor (no seu caso, o retorno do seu comando) e o converterá em um arquivobool
.Copy-Item
não retorna nada por padrão, e é por isso que suaif
instrução é semprefalse
, porque[bool]$null
is$false
.Você tem três opções aqui:
Adicione o
-PassThru
parâmetro para obter alguma forma de retorno:Use a
$?
variável para ver se o comando anterior foi bem-sucedido:No entanto, a maneira mais confiável seria envolvê-lo
Try {} Catch {}
e adicionar-ErrorAction Stop