Powershell 获取要合并到输出的WmiObject

Powershell 获取要合并到输出的WmiObject,powershell,get-wmiobject,Powershell,Get Wmiobject,我正在执行下面的脚本以获取Skype for business server的服务器修补程序版本 我需要作为服务器补丁名,版本和计算机名输出 $x = Get-Content "E:\temp\servers.txt" foreach ($y in $x) { Invoke-Command -ComputerName $y -scriptblock {Get-WmiObject -query ‘select name, version from win32_product

我正在执行下面的脚本以获取Skype for business server的服务器修补程序版本

我需要作为服务器补丁名,版本和计算机名输出

$x = Get-Content "E:\temp\servers.txt" 
foreach ($y in $x) 
{
Invoke-Command -ComputerName $y -scriptblock {Get-WmiObject -query ‘select name, version from win32_product’ | where {$_.name -like “*Skype for Business server 2015, core*”}} | Select-object name, Version, @{Name='ComputerName';Expression={$y}} | ft -AutoSize
}
但我收到的输出如下

Name                                            Version      ComputerName   
----                                            -------      ------------   
Skype for Business Server 2015, Core Components 6.0.9319.598 D221412xxxxxx

Name                                            Version      ComputerName   
----                                            -------      ------------   
Skype for Business Server 2015, Core Components 6.0.9319.598 D221412xxxxxxxx

Name                                            Version      ComputerName   
----                                            -------      ------------   
Skype for Business Server 2015, Core Components 6.0.9319.598 D221412xxxxxx



Name                                            Version      ComputerName   
----                                            -------      ------------   
Skype for Business Server 2015, Core Components 6.0.9319.598 D221412xxxxxxx


Name                                            Version      ComputerName   
----                                            -------      ------------   
Skype for Business Server 2015, Core Components 6.0.9319.598 D221412xxxxxx

我不需要在每一行输出中都使用标题平铺。有什么建议吗?

  • 您将获得每台计算机的标题,因为 语句位于foreach循环内

  • Invoke命令接受多个 计算机,所以你不需要foreach循环

  • 使用服务器端筛选 如果可能的话

    $x = Get-Content "E:\temp\servers.txt" 
    Invoke-Command -ComputerName $x -scriptblock {Get-WmiObject -query "select name, version from win32_product where name like 'Skype for Business server 2015, Core%'"} | 
     Select-object PSComputerName,name, Version
    
未来:

  • 使用Get-CimInstance,因为Get-WMIOObject已被弃用
  • 不要使用win32_产品,因为它可能导致msi损坏。使用 而是注册中心

您好,您不必调用该命令
Get WmiObject
有自己的
-ComputerName
参数。此外,您需要做的是扩展属性。只是对我来说有点棘手output@Abraham你能帮我重新写剧本吗