我试图弄清楚如何确定使用 Invoke-Expression 抛出的命令是否失败。甚至变量 $?、$LASTEXITCODE 或 -ErrorVariable 也帮不了我。
例如 :
PS C:\> $cmd="cat c:\xxx.txt"
使用 Invoke-Expression 调用 $cmd
PS C:\> Invoke-Expression $cmd -ErrorVariable err
Get-Content : Cannot find path 'C:\xxx.txt' because it does not exist.
At line:1 char:4
+ cat <<<< c:\xxx.txt
+ CategoryInfo : ObjectNotFound: (C:\xxx.txt:String) [Get-Content], ItemNotFoundExcep
tion
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand
美元?是真的
PS C:\> $?
True
$LASTEXITCODE 为 0
PS C:\> $LASTEXITCODE
0
而 $err 是空的
PS C:\> $err
PS C:\>
我发现的唯一方法是在文件中重定向 STD_ERR 并测试该文件是否为空
PS C:\> Invoke-Expression $cmd …
powershell ×1