Справка по запросу - wmiobject win32_product фильтрует элементы из текстового файла

Я работал над простым скриптом для чтения win32_product с удаленного ПК, который работает нормально. Однако я бы хотел, чтобы запрос игнорировал некоторые распространенные приложения в моем домене. Я составлял список приложений и их IdentifyingNumber и помещал IdentifyingNumber в текстовый файл. Я загружаю текстовый файл в переменную с помощью сценария, и я пытаюсь выяснить, как получить запрос для фильтрации каждого элемента в переменной... так что у меня есть это::

$PC = Read-Host "What is target workstation..."
$logfile = "d:\$PC.txt"
$ignore = [IO.File]::ReadAllText("D:\INCOMING\AppListing\ignore.txt")
get-wmiobject -class win32_product -computer $PC | where {$_.IdentifyingNumber -notlike       $ignore} | Select Name, IdentifyingNumber | sort-object Name | export-csv $logfile -encoding "unicode"

Тем не менее, это не фильтрация вообще, даже первый или последний элемент из текстового файла. Я использовал write-host $ignore, чтобы убедиться, что он загружает элементы... но я не знаю, как заставить это работать. Возможно цикл foreach? Я не могу найти ничего о том, чтобы поместить цикл foreach в фильтр where...

Спасибо за помощь...

2 ответа

Решение

Если файл похож на это:

aRandomId
anotherRandonId
...

с одним идентификатором в каждой строке и ничего больше, попробуйте это с помощью -notlike с подстановочными знаками на концах. Пример:

$PC = Read-Host "What is target workstation..."
$logfile = "d:\$PC.txt"
$ignore = [IO.File]::ReadAllText("D:\INCOMING\AppListing\ignore.txt")
get-wmiobject -class win32_product -computer $PC | where { $ignore -notlike "*$($_.identifyingnumber)*" } |
Select Name, IdentifyingNumber | sort-object Name | export-csv $logfile -encoding "unicode"

Вы также можете прочитать ваш файл как массив, используя ReadAllLines как если бы вы хотели использовать цикл foreach или -notcontains, Пример:

$PC = Read-Host "What is target workstation..."
$logfile = "d:\$PC.txt"
$ignore = [IO.File]::ReadAllLines("D:\INCOMING\AppListing\ignore.txt")
get-wmiobject -class win32_product -computer $PC | where { $ignore -notcontains $_.identifyingnumber } |
Select Name, IdentifyingNumber | sort-object Name | export-csv $logfile -encoding "unicode"
$prods = Compare-Object -ReferenceObject (Get-Content $file) -DifferenceObject ((Get-WmiObject -Class Win32_Product -Computer $computer).IdentifyingNumber) -PassThru

Compare-Object - отличный командлет.

Другие вопросы по тегам