如何获取 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 = { $_ }}
诚然,这很方便。
对于 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 = { $_ }}
诚然,这很方便。