我运行这个脚本:
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
}
当我以普通用户身份运行此脚本时,我收到了else
语句中的消息,因为我不是 root。这没关系。
但是我以 root 身份运行这个脚本,我也收到了else
声明中的消息!但文件复制操作成功。我无法在if
声明中收到消息。为什么?
我还检查了错误代码及其总是False
。
if
语句不评估其条件内的命令是否成功运行。它只会检查值(在您的情况下是命令的返回)并将其转换为bool
.Copy-Item
默认情况下不返回任何内容,这就是为什么您的if
语句总是false
,因为[bool]$null
is$false
。您在这里有三个选择:
添加
-PassThru
参数以获得某种形式的返回:使用
$?
变量查看您之前的命令是否成功:但是,最可靠的方法是将其包装
Try {} Catch {}
并添加-ErrorAction Stop