我试图从文件中读取程序名称以过滤掉已安装的程序名称。为了阅读我得到的文件:$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
只是回顾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*"}
干杯!