按名称从列表文件中过滤包

问题描述 投票:1回答:1

我试图从文件中读取程序名称以过滤掉已安装的程序名称。为了阅读我得到的文件:$file = Get-Content "C:\Users\testuser\Desktop\Test.txt" 然后我尝试按他们的名字过滤包,这不起作用,我尝试了:

Get-AppxPackage | Where-Object -Property Name -notin $file | select Name, IsFramework

要么

Get-AppxPackage | Where-Object { $_.Name -notin $file } | select Name, IsFramework

我不能使用任何.Net语句,我该如何解决?

编辑:这是我的文件内容:

Microsoft.BioEnrollment Microsoft.AAD.BrokerPlugin Microsoft.Windows.CloudExperienceHost Microsoft.Windows.ShellExperienceHost windows.immersivecontrolpanel Microsoft.Windows.Cortana Microsoft.AccountsControl Microsoft.LockApp
file powershell filter condition
1个回答
0
投票

只是回顾David Brabant,以下是askingQuestions的工作:

Get-AppxPackage | ?{ $file.Contains($_.Name) } | select Name, IsFramework

这很有效,可能是最好的方法之一。


这对我来说对所有应用程序都不起作用,所以这是过滤列表的另一种方法。 :)

匹配名称:

Get-WmiObject -Class Win32_Product | Where-Object {$_.name -Like "appName"}

不匹配的名称:

Get-WmiObject -Class Win32_Product | Where-Object {$_.name -NotMatch "appName"}

请注意,使用Where-Object不区分大小写,但查找完全匹配。另一方面,您也可以使用通配符。

但要按文件过滤,您可以执行以下操作:

[string[]]$List = (Get-Content -Path 'C:\test.txt') -replace ' ',"`r`n"
 foreach ($ProgramName in $List)
 {
 Get-WmiObject -Class Win32_Product | Where-Object {$_.name -Like $ProgramName}
 }

请注意,-replace ' ',"rn"仅对应用程序名称之间的空格是必需的。您可以删除它并将每个应用程序放在一个新行上。另请注意,这可能会产生重复。

通配符示例:

Get-WmiObject -Class Win32_Product | Where-Object {$_.name -Like "*adobe*"}

干杯!

© www.soinside.com 2019 - 2024. All rights reserved.