如何写入输出 PowerShell 进程对象的退出代码?



我需要您的帮助来确定为什么我不能输出PowerShell脚本进程ExitCode以及如何解决此问题。我认为这与Start Process命令的结果的数据类型和其中的ExitCode属性有关(根据此处底部的错误消息,它似乎是"AnyType"(。

我有一个名为out.bat的简单CMD批处理文件,如下所示:

@echo off
echo Hello World, it's %1!

然后我有一个名为out.ps1的七行PowerShell脚本,如下所示:

1.  $a = "C:Temp"
2.  $b = "out.txt"
3.  $c = "out.bat"
4.  $process = Start-Process -FilePath "${a}${c}" -ArgumentList "123" -RedirectStandardOutput ${a}${b} -Wait -PassThru
5.  Get-Content ${a}${b}
6.  Write-Output $process.ExitCode
7.  Write-Output "Error: $process.ExitCode"

我的PowerShell脚本确实成功地输出了CMD批处理脚本文件发回的错误代码,并按照上面的第六行输出。

Hello World, it's 123!
0

但是,最后一行出现故障,

Cannot convert value to type System.String.
At line:7 char:1
+ Write-Output "Error: $process.ExitCode"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidArgument: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvalidCastFromAnyTypeToString

如何使第7行简单地输出以下内容?

Error: 0

您必须使用子表达式$(..)运算符来让它计算该属性的引用:

Write-Output "Error: $($process.ExitCode)"

最新更新