0

我一直在编写一个简单的脚本来从远程 PC 上读取 win32_product,它工作正常。但是,我希望查询忽略我域中的一些常见应用程序。我一直在构建应用程序列表及其标识号,并将标识号放入 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
...

每行只有一个 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"

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"
于 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 是一个很棒的 Cmdlet。

于 2013-03-13T00:54:34.730 回答