0

私はリモートPCからwin32_productを読み取るための簡単なスクリプトに取り組んできましたが、これは正常に機能しています。ただし、ドメイン上のいくつかの一般的なアプリケーションを無視するクエリが必要です。私はアプリとそのIdentificationNumberのリストを作成し、IdentificationNumberをtxtファイルに入れてきました。スクリプトを使用してテキストファイルを変数にロードし、変数内の各アイテムをフィルタリングするクエリを取得する方法を理解しようとしています...だから私はこれを持っています::

$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"

ただし、これはフィルタリングではなく、txtファイルの最初または最後のアイテムでもありません。write-host $ ignoreを使用して、アイテムがロードされていることを確認しました...しかし、これを機能させる方法については迷っています。おそらくforeachループですか?foreachループをwhereフィルターに入れることについては何も見つかりません...

助けてくれてありがとう...

4

2 に答える 2

0

ファイルが次のような場合:

aRandomId
anotherRandonId
...

各行に 1 つの ID を使用し、他に何もない場合は-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"

foreach ReadAllLines-loop または-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"
于 2013-03-12T18:34:43.367 に答える
0
$prods = Compare-Object -ReferenceObject (Get-Content $file) -DifferenceObject ((Get-WmiObject -Class Win32_Product -Computer $computer).IdentifyingNumber) -PassThru

Compare-Object は優れたコマンドレットです。

于 2013-03-13T00:54:34.730 に答える