如何写入和输出PowerShell进程对象的ExitCode?[复制]

xuo3flqw  于 2022-11-10  发布在  Shell
关注(0)|答案(1)|浏览(116)

这个问题在这里已经有答案

How can you use an object's property in a double-quoted string?(5个答案)
13天前关门了。
这篇帖子是13天前编辑并提交审查的,未能重新打开帖子:
原始关闭原因未解决
我需要你的帮助来确定我为什么不能输出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
z3yyvxxp

z3yyvxxp1#

您必须使用子表达式$(..)运算符才能使其计算该属性的引用:

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

相关问题