Справка по запросу - 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 - отличный командлет.