从调用命令中获取值
Get value from invoke-command
此代码 returns 来自远程计算机的注册表值。如何将输出格式化为具有两列的 table,其中包含 ComputerName 和 RegistryValue 等信息。注意:RunspaceId不包含RegistryValue信息。
$comps = "smzmi0020d", "smzmi0025d"
$block = { (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate' -name susclientid).susclientid }
PS C:\Windows\system32> invoke-command $comps -ScriptBlock $block | select susclientID, PSComputername
susclientID PSComputerName
----------- --------------
smzmi0020d
smzmi0025d
PS C:\Windows\system32> invoke-command $comps -ScriptBlock $block | select *
PSComputerName RunspaceId Length
-------------- ---------- ------
smzmi0020d 1be1be2f-7e57-4833-81a0-6182c5ac3672 36
smzmi0025d 10e067da-06a0-4962-ae89-898aef9fe81c 36
我无法在我的环境中重现,但您可以尝试类似的方法:
$Comps = "smzmi0020d", "smzmi0025d"
Invoke-Command -ComputerName $Comps -ScriptBlock {(Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate' -name susclientid)} | Select-Object -Property SusClientID, PSComputerName
注意:Foreach-Object
按顺序处理对象,而 Invoke-Command
并行处理(默认情况下同时处理 32 台计算机)。因此它应该快得多!
Invoke-Command
还返回参数 PSComputerName
,该参数保存着计算机的名称并返回输出,因此在最后使用 Select-Object
应该没问题。最终您可以将输出通过管道传输到 | Format-Table -AutoSize
。
该块只有returns一个字符串,因为.susclientid
,所以| select susclientID
没有意义。您也可以这样做并获得 susclientid 属性,但您也像往常一样获得 runspaceid 属性。
$block = { Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate |
select susclientid }
此代码 returns 来自远程计算机的注册表值。如何将输出格式化为具有两列的 table,其中包含 ComputerName 和 RegistryValue 等信息。注意:RunspaceId不包含RegistryValue信息。
$comps = "smzmi0020d", "smzmi0025d"
$block = { (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate' -name susclientid).susclientid }
PS C:\Windows\system32> invoke-command $comps -ScriptBlock $block | select susclientID, PSComputername
susclientID PSComputerName
----------- --------------
smzmi0020d
smzmi0025d
PS C:\Windows\system32> invoke-command $comps -ScriptBlock $block | select *
PSComputerName RunspaceId Length
-------------- ---------- ------
smzmi0020d 1be1be2f-7e57-4833-81a0-6182c5ac3672 36
smzmi0025d 10e067da-06a0-4962-ae89-898aef9fe81c 36
我无法在我的环境中重现,但您可以尝试类似的方法:
$Comps = "smzmi0020d", "smzmi0025d"
Invoke-Command -ComputerName $Comps -ScriptBlock {(Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate' -name susclientid)} | Select-Object -Property SusClientID, PSComputerName
注意:Foreach-Object
按顺序处理对象,而 Invoke-Command
并行处理(默认情况下同时处理 32 台计算机)。因此它应该快得多!
Invoke-Command
还返回参数 PSComputerName
,该参数保存着计算机的名称并返回输出,因此在最后使用 Select-Object
应该没问题。最终您可以将输出通过管道传输到 | Format-Table -AutoSize
。
该块只有returns一个字符串,因为.susclientid
,所以| select susclientID
没有意义。您也可以这样做并获得 susclientid 属性,但您也像往常一样获得 runspaceid 属性。
$block = { Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate |
select susclientid }