如何获取 Invoke-Command 语句的 PSComputerName 和非对象 return 值

How to get PSComputerName and non-object return value of an Invoke-Command statement

对于 return PSComputerName 的命令,如 Get-Service,一切正常。但是当我执行一个 return 是一个非对象值的命令时,例如 Test-Path returning 一个布尔值,我不知道如何查看结果值和计算机名称执行它的机器。如果我这样做:

$Output = Invoke-Command -ComputerName PC1, PC2, PC3 -ScriptBlock { Test-Path 'c:\temp' }

$Output成立:

True
False
True

如果我这样做 $Output | Select-Object *,我得到:

@{PSComputerName=PC1; RunspaceId=32cca2f2-57d1-49c3-9b45-ab32483f0d3a; PSShowComputerName=True}
@{PSComputerName=PC2; RunspaceId=3495fa73-3ca3-44e8-97b6-439d4db27b33; PSShowComputerName=True}
@{PSComputerName=PC3; RunspaceId=af960f6d-9d9f-4437-82b0-be29ea3bed23; PSShowComputerName=True}

我尝试了各种方法,但似乎无法弄清楚如何同时输出 return 值和包含 PSComputerName 的额外对象信息,因此我知道哪个值适用于哪台机器。

我正在尝试 运行 在命令行上执行命令,所以我真的不想使用需要整个脚本的东西 and/or 运行 在远程机器...

从远程会话返回的对象有一些特殊的特征。尽管 $Output 看起来像一个普通的布尔值,但还有附加的属性。我不太确定它是如何传递布尔值的,但在大多数情况下你可以同样对待它。而不是使用 * 命名属性:

$Output | Select PSComputerName,@{N = 'Value'; E = { $_ }}

诚然,这很方便。