使用 Invoke-Command 格式化输出
Formatting Output with Invoke-Command
我正在尝试将我的输出格式化为这样
PSComputerName Value
-------------- ------
Computer1 Restricted
Computer2 Unrestricted
Computer3 Unrestricted
这是我的代码,变量 $computers 指向一个文件的 Get-Content,该文件具有我将远程连接到的计算机名称
$test = Invoke-Command -ComputerName $computers -ScriptBlock {
$policy3 = Get-ExecutionPolicy
Write-Output $policy3
}
write $test
输出
PSComputerName RunspaceId Value
-------------- ---------- -----
Computer1 7e4ebfbe-62d3-4035-9d5a... Restricted
Computer2 2ecd6932-1ed4-4f57-b9e9... Unrestricted
Computer3 73a119de-5d6d-4525-9958... Restricted
我一直在尝试通过回显调用命令并执行计算机名称的 foreach 来摆脱 RunSpaceId,我只执行了 PSComputerNames 来测试它是否有效。
write $test % {$_.PSComputerName }
我知道 Invoke-Command 内置了一个 foreach 函数,但我不知道在这种情况下如何利用我的优势。实现我想要的输出的最佳方法是什么?
PS> Invoke-Command $computers { Get-ExecutionPolicy } |
Format-Table PSComputerName, Value
PSComputerName Value
-------------- -----
Computer1 Restricted
...
正如 BACON 在对该问题的评论中指出的那样,Invoke-Command
隐式地将 PSComputerName
和 RunSpaceId
属性添加到对象 return在每个目标计算机上由脚本块 ({ ... }
) 运行 编辑,默认情况下它们是否 显示 取决于对象的类型 returned.
对于 Get-ExecutionPolicy
编辑的 [Microsoft.PowerShell.ExecutionPolicy]
个实例 return,它们 默认显示 ,这意味着为了 显示 仅显示您需要显式Format-*
调用的感兴趣的属性。
请注意,自动添加的 Value
属性 是远程执行脚本块的产物 returning 一个 [enum]
派生类型的实例,例如[Microsoft.PowerShell.ExecutionPolicy]
return 由 Get-ExecutionPolicy
编辑的实例。
远程调用 Invoke-Command
脚本块输出非原始 .NET 类型实例 return 反序列化 Deserialized.<original-type-name>
类型的对象。
[enum]
-派生实例导致反序列化类型 Value
属性 定义为具有签名 System.Object Value {get=$this.ToString();}
的 ScriptProperty
成员;有关序列化和反序列化如何在 PowerShell 远程处理和后台作业中工作的一般信息,请参阅 。
一般提示:
Write-Output
一般是不需要的,因为任何没有捕获到变量或重定向到文件/到$null
的语句的输出都是隐式发送到输出流。
如果您需要编写跨平台兼容的代码,请避免使用 write
等别名,因为它们在 PowerShell Core 的类 Unix 平台上无法正常工作,其中未定义会影响本机实用程序的别名。
我正在尝试将我的输出格式化为这样
PSComputerName Value
-------------- ------
Computer1 Restricted
Computer2 Unrestricted
Computer3 Unrestricted
这是我的代码,变量 $computers 指向一个文件的 Get-Content,该文件具有我将远程连接到的计算机名称
$test = Invoke-Command -ComputerName $computers -ScriptBlock {
$policy3 = Get-ExecutionPolicy
Write-Output $policy3
}
write $test
输出
PSComputerName RunspaceId Value
-------------- ---------- -----
Computer1 7e4ebfbe-62d3-4035-9d5a... Restricted
Computer2 2ecd6932-1ed4-4f57-b9e9... Unrestricted
Computer3 73a119de-5d6d-4525-9958... Restricted
我一直在尝试通过回显调用命令并执行计算机名称的 foreach 来摆脱 RunSpaceId,我只执行了 PSComputerNames 来测试它是否有效。
write $test % {$_.PSComputerName }
我知道 Invoke-Command 内置了一个 foreach 函数,但我不知道在这种情况下如何利用我的优势。实现我想要的输出的最佳方法是什么?
PS> Invoke-Command $computers { Get-ExecutionPolicy } |
Format-Table PSComputerName, Value
PSComputerName Value
-------------- -----
Computer1 Restricted
...
正如 BACON 在对该问题的评论中指出的那样,Invoke-Command
隐式地将 PSComputerName
和 RunSpaceId
属性添加到对象 return在每个目标计算机上由脚本块 ({ ... }
) 运行 编辑,默认情况下它们是否 显示 取决于对象的类型 returned.
对于 Get-ExecutionPolicy
编辑的 [Microsoft.PowerShell.ExecutionPolicy]
个实例 return,它们 默认显示 ,这意味着为了 显示 仅显示您需要显式Format-*
调用的感兴趣的属性。
请注意,自动添加的 Value
属性 是远程执行脚本块的产物 returning 一个 [enum]
派生类型的实例,例如[Microsoft.PowerShell.ExecutionPolicy]
return 由 Get-ExecutionPolicy
编辑的实例。
远程调用 Invoke-Command
脚本块输出非原始 .NET 类型实例 return 反序列化 Deserialized.<original-type-name>
类型的对象。
[enum]
-派生实例导致反序列化类型 Value
属性 定义为具有签名 System.Object Value {get=$this.ToString();}
的 ScriptProperty
成员;有关序列化和反序列化如何在 PowerShell 远程处理和后台作业中工作的一般信息,请参阅
一般提示:
Write-Output
一般是不需要的,因为任何没有捕获到变量或重定向到文件/到$null
的语句的输出都是隐式发送到输出流。如果您需要编写跨平台兼容的代码,请避免使用
write
等别名,因为它们在 PowerShell Core 的类 Unix 平台上无法正常工作,其中未定义会影响本机实用程序的别名。