Показать / Отфильтровать выходные данные, которые соответствуют только строке из моего списка - PullRequest
1 голос
/ 28 июня 2019

Отображение / фильтрация выходных данных, которые соответствуют только строке из моего списка

Я хочу отфильтровать или отобразить только те данные, которые совпадают в моем списке файлов. Прямо сейчас я просто использовал select-string -Pattern mylistfile.txt, и в результате будет отображаться только вся строка, в которой была найдена строка. Как я могу включить все наборы данных в вывод?

$Criteria = "IsIntalled=0"
$Searcher = New-Object -ComObject Microsoft.Update.Searcher
$myfilelist = C:\myfilelist.txt
$SearchResult = $Searcher.Search($Criteria).Updates 
$filteredResult = $SearchResult | select-string -Pattern $mylistfile -list 

Вывод: $ SearchResult --- Я просто печатаю до 5 строк вывода

Title                           : 2019-04 Update for Windows 7 for x64-based 
                                  Systems (KB4493132)
AutoSelectOnWebSites            : False
BundledUpdates                  : System.__ComObject
CanRequireSource                : False
Categories                      : System.__ComObject

Title                           : 2019-05 Security and Quality Rollup for .NET 
                                  Framework 3.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 
                                  4.7, 4.7.1, 4.7.2, 4.8 for Windows 7 and 
                                  Server 2008 R2 for x64 (KB4499406)
AutoSelectOnWebSites            : True
BundledUpdates                  : System.__ComObject
CanRequireSource                : False
Categories                      : System.__ComObject


Title                           : Windows Malicious Software Removal Tool x64 
                                  - June 2019 (KB890830)
AutoSelectOnWebSites            : True
BundledUpdates                  : System.__ComObject
CanRequireSource                : False
Categories                      : System.__ComObject

Вывод: $ FilterResult

Systems (KB4493132)   
Server 2008 R2 for x64 (KB4499406)

mylistfile.txt

KB4493132
KB4499406

Мой ожидаемый вывод - он показывает только набор данных (KB4493132) и (KB4499406)

Title                           : 2019-04 Update for Windows 7 for x64-based 
                                  Systems (KB4493132)
AutoSelectOnWebSites            : False
BundledUpdates                  : System.__ComObject
CanRequireSource                : False
Categories                      : System.__ComObject

Title                           : 2019-05 Security and Quality Rollup for .NET 
                                  Framework 3.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 
                                  4.7, 4.7.1, 4.7.2, 4.8 for Windows 7 and 
                                  Server 2008 R2 for x64 (KB4499406)
AutoSelectOnWebSites            : True
BundledUpdates                  : System.__ComObject
CanRequireSource                : False
Categories                      : System.__ComObject

Ответы [ 2 ]

1 голос
/ 28 июня 2019

Как сказал Нирадж Гаджар , используйте Where-Object. Для сопоставления используйте свойство KBArticleIDs, например:

$filter = Get-Content -Path "C:\temp\kblist.txt"

$criteria = "IsInstalled=0"
$searcher = New-Object -ComObject Microsoft.Update.Searcher
$searchResult = $searcher.Search($criteria).Updates     
$filteredResult = $searchResult | Where-Object { $_.KBArticleIDs -in $filter }

Где "C: \ temp \ kblist.txt" содержит номера статей в КБ (без KB!)

(Кстати: у вас также была опечатка в $ Criteria: IsIntalled)

0 голосов
/ 28 июня 2019

Предполагая, что $ mylistfile равен get-content myfilelist.txt, select-string превращает переданный в него объект в строки. Отсюда и название select-string, vs select-object. Вы можете сделать это таким образом, по-прежнему обращаясь к правильному свойству объекта и используя строку выбора с массивом шаблонов:

# $mylistfile is 'KB4493132','KB4499406'
$SearchResult | where { $_.title | select-string $mylistfile }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...