Get-WmiObject для объединения в выходные данные

Я выполнял приведенный ниже сценарий, чтобы получить исправление для серверов Skype для бизнес-серверов.

Мне нужен вывод в виде имени исправления сервера, версии и имени компьютера.

$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

Мне не нужны плитки заголовков в каждой строке вывода. Какие-либо предложения?


person divya m    schedule 25.01.2021    source источник
comment
Привет, вам не нужно вызывать команду. Get-WmiObject имеет собственный параметр -ComputerName. Кроме того, что вам нужно сделать, это расширить собственность. Просто будет немного сложнее вывести   -  person Abraham Zinala    schedule 25.01.2021
comment
@Abraham, не могли бы вы переписать для меня строку сценария?   -  person divya m    schedule 25.01.2021


Ответы (1)


  • Вы получаете заголовки для каждого компьютера, потому что оператор select находится внутри цикла foreach.

  • Invoke-command принимает несколько компьютеров, поэтому вам не нужен цикл 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-wmiobject устарел.
  • Не используйте win32_product, так как это потенциально может привести к повреждению msi. Вместо этого используйте реестр.

https://community.idera.com/database-tools/powershell/powertips/b/tips/posts/find-installed-software

person Kiran    schedule 25.01.2021