Powershell не хранит информацию цикла foreach в переменной - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь собрать список зрителей, установленных на множестве серверов.Я пытаюсь пройтись по этому списку, выполнить запрос wmi, сохранить результаты и экспортировать таблицу, в которой будет указан результат wmi и имя сервера.

Я выполняю это на сервере 2012

$computers = Get-Content C:\computers.txt

$WMIQuery = foreach ($computer in $computers){Get-WmiObject -Class 
Win32_Product | where-object {$_.name -match "Microsoft Viewer*"}}

$WMIQuery

$WMIQuery | Out-File c:\Viewers.txt

Желаемые результаты

Имя сервера Object1 Object2

Сервер1 Microsoft Excel Viewer Microsoft Visio Viewer

Я вывожу файл и получаю пустой текстовый файл.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Мне не хватает представителя, чтобы добавить комментарий, но Джефф прав.Тем не менее, по-прежнему существуют проблемы с исходным запросом автора.Следующий фрагмент кода не даст результатов, основываясь на примерах, предоставленных автором плаката:

{$_.name -match "Microsoft Viewer*"}

Это необходимо изменить на

{$_.name -like "*Microsoft*Viewer*"}

или

{$_.name -match "Microsoft.*?Viewer"}
0 голосов
/ 07 февраля 2019
foreach ($computer in (Get-Content -Path "C:\computers.txt")) {
    Get-WMIObject -ComputerName $computer -Class Win32_Product |
        Where-Object {$_.name -match "Microsoft Viewer" } |
            Out-File -Append -Path "C:\viewers.txt"
}

Ваш исходный код не идентифицировал компьютер для выполнения Get-WMIObject, поэтому он просматривал только компьютер, на котором выполнялся скрипт.

Если на удаленном компьютере много продуктов, вы можете рассмотреть возможность фильтрации на удаленном компьютере, а не локально, чтобы избежать передачи больших объемов данных по сети, которая может быть медленнее, чем идеальная.:

foreach ($computer in (Get-Content -Path "C:\computers.txt")) {
    Get-WMIObject -ComputerName $computer -Class Win32_Product -Filter "Name LIKE '*Microsoft Viewer*'"|
        Out-File -Append -Path "C:\viewers.txt"
}

думаю У меня правильный синтаксис фильтра; мне, кажется, приходится взламывать его каждый раз, когда я пишу новый фильтр ...)

...