我正在尝试从文件中读取程序名称以过滤掉已安装的程序名称。
为了阅读我得到的文件:
$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
答案 0 :(得分: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 ' ',"
r n"
仅对于应用程序名称之间的空格是必需的。您只需删除它,然后将每个应用程序放在新的一行即可。另外请注意,这可能会产生重复。
通配符示例:
Get-WmiObject -Class Win32_Product | Where-Object {$_.name -Like "*adobe*"}
干杯!