Get-WmiObject 合并到输出
Get-WmiObject to combine to outputs
我正在执行以下脚本来获取 Skype for business 服务器的服务器补丁版本。
我需要服务器补丁名称、版本和计算机名称的输出。
$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
我不需要在每一行输出中使用我的 header 块。有什么建议吗?
每台计算机都得到 headers,因为 select
语句在 foreach 循环内。
Invoke-command 接受多个
计算机,因此您不需要 foreach 循环。
使用server-side过滤
在可能的情况下。
$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-wmiobject 已弃用。
- 不要使用 win32_product,因为它可能会导致 msi 损坏。利用
注册表。
https://community.idera.com/database-tools/powershell/powertips/b/tips/posts/find-installed-software
我正在执行以下脚本来获取 Skype for business 服务器的服务器补丁版本。
我需要服务器补丁名称、版本和计算机名称的输出。
$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
我不需要在每一行输出中使用我的 header 块。有什么建议吗?
每台计算机都得到 headers,因为 select 语句在 foreach 循环内。
Invoke-command 接受多个 计算机,因此您不需要 foreach 循环。
使用server-side过滤 在可能的情况下。
$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-wmiobject 已弃用。
- 不要使用 win32_product,因为它可能会导致 msi 损坏。利用 注册表。
https://community.idera.com/database-tools/powershell/powertips/b/tips/posts/find-installed-software