从调用命令获取价值

时间:2019-10-10 05:15:46

标签: powershell invoke-command

此代码从远程计算机返回注册表的值。如何将输出格式化为具有包含诸如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

2 个答案:

答案 0 :(得分:1)

我无法在我的环境中进行复制,但是您可以尝试以下方法:

$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

答案 1 :(得分:0)

该块仅由于.susclientid返回一个字符串,因此| select susclientID没有任何意义。您也可以通过这种方式获得susclientid属性,但是您也可以像往常一样获得runspaceid属性。

$block = { Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate | 
  select susclientid }