簡體   English   中英

使用 Get-AppxPackage/Remove-AppxPackage 將包排除(foreach-notlike)列入白名單

[英]Whitelisted package exclusion (foreach-notlike) with Get-AppxPackage/Remove-AppxPackage

此 PowerShell 腳本應卸載$WhitelistedApps之外的所有 Windows 11/10 膨脹軟件,當我在 VM 上運行該腳本時,它會嘗試卸載所有膨脹軟件,甚至$WhitelistedApps

這是浪費時間,腳本將嘗試卸載WhitelistedApps ,但它們已經是不可移動的,所以我想排除它們。

請告訴我:代碼有什么問題?如何更正?

我懷疑我使用-NotLike的方式,或者可能是具有包名稱的引號""的方式。

$WhitelistedApps = @(
        "1527c705-839a-4832-9118-54d4Bd6a0c89"
        "E2A4F912-2574-4A75-9BB0-0D023378592B"
        "F46D4000-FD22-4DB4-AC8E-4E1DDDE828FE"
        "Microsoft.AAD.BrokerPlugin"
        "Microsoft.AccountsControl"
        "Microsoft.AsyncTextService"
        "Microsoft.BioEnrollment"
        "Microsoft.CredDialogHost"
        "Microsoft.ECApp"
        "Microsoft.LockApp"
        "Microsoft.MicrosoftEdge"
        "Microsoft.MicrosoftEdgeDevToolsClient"
        "Microsoft.PPIProjection"
        "Microsoft.Win32WebViewHost"
        "Microsoft.Windows.Apprep.ChxApp"
        "Microsoft.Windows.AssignedAccessLockApp"
        "Microsoft.Windows.CallingShellApp"
        "Microsoft.Windows.CapturePicker"
        "Microsoft.Windows.CloudExperienceHost"
        "Microsoft.Windows.ContentDeliveryManager"
        "Microsoft.Windows.Cortana"
        "Microsoft.Windows.NarratorQuickStart"
        "Microsoft.Windows.OOBENetworkCaptivePortal"
        "Microsoft.Windows.OOBENetworkConnectionFlow"
        "Microsoft.Windows.ParentalControls"
        "Microsoft.Windows.PeopleExperienceHost"
        "Microsoft.Windows.PinningConfirmationDialog"
        "Microsoft.Windows.Search"
        "Microsoft.Windows.SecHealthUI"
        "Microsoft.Windows.SecondaryTileExperience"
        "Microsoft.Windows.SecureAssessmentBrowser"
        "Microsoft.Windows.ShellExperienceHost"
        "Microsoft.Windows.StartMenuExperienceHost"
        "Microsoft.Windows.XGpuEjectDialog"
        "Microsoft.XboxGameCallableUI"
        "MicrosoftWindows.Client.CBS"
        "MicrosoftWindows.UndockedDevKit"
        "NcsiUwpApp"
        "Windows.CBSPreview"
        "Windows.ContactSupport"
        "Windows.MiracastView"
        "Windows.PrintDialog"
        "c5e2524a-ea46-4f67-841f-6a9465d9d515"
        "windows.immersivecontrolpanel"
)
    
    foreach ($App in $WhitelistedApps) {    
    Get-AppxPackage | Where-Object {$_.Name -NotLike $App} | Remove-AppxPackage
    }
}

我對我上一條評論的看法不好,我沒有在您的代碼中看到foreach語句,因此為什么建議使用-notin運算符而不是-NotLike

在這種情況下,最簡單的方法是刪除foreach循環,並按照建議更改-notin的運算符:

Get-AppxPackage | Where-Object {$_.Name -notin $WhitelistedApps} | Remove-AppxPackage

為了解釋您的代碼有什么問題,首先,您總共運行了 44 次Get-AppxPackage$WhitelistedApps數組上的元素數),並且由於您正在遍歷此數組,因此條件:

Where-Object {$_.Name -NotLike $App}

返回這些軟件包你不想刪除,共43次。 這可以通過以下示例進行測試:

  • 在沒有Remove-AppxPackage情況下運行循環:
$apps = foreach($App in $WhitelistedApps)
{
    Get-AppxPackage | Where-Object {$_.Name -NotLike $App}
}
  • 通過在$WhitelistedApps上找到的元素過濾結果$apps數組,然后按Name它們分組:
$apps.Where({$_.Name -in $WhitelistedApps}) | Group-Object Name

結果應該是這樣的:

Count Name                      Group                                                                                                                               
----- ----                      -----                                                                                                                               
   43 windows.immersivecontr... {windows.immersivecontrolpanel_10.0.2.1000_neutral_neutral_cw5n1h2txyewy, windows.immersivecontrolpanel_10.0.2.1000_neutral_neutr...
   43 Windows.PrintDialog       {Windows.PrintDialog_6.2.1.0_neutral_neutral_cw5n1h2txyewy, Windows.PrintDialog_6.2.1.0_neutral_neutral_cw5n1h2txyewy, Windows.Pr...
   43 Microsoft.BioEnrollment   {Microsoft.BioEnrollment_10.0.19041.1023_neutral__cw5n1h2txyewy, Microsoft.BioEnrollment_10.0.19041.1023_neutral__cw5n1h2txyewy, ...
   43 Microsoft.Windows.OOBE... {Microsoft.Windows.OOBENetworkConnectionFlow_10.0.19041.1023_neutral__cw5n1h2txyewy, Microsoft.Windows.OOBENetworkConnectionFlow_...
   43 Microsoft.AAD.BrokerPl... {Microsoft.AAD.BrokerPlugin_1000.19041.1023.0_neutral_neutral_cw5n1h2txyewy, Microsoft.AAD.BrokerPlugin_1000.19041.1023.0_neutral...
   43 Microsoft.Windows.OOBE... {Microsoft.Windows.OOBENetworkCaptivePortal_10.0.19041.1023_neutral__cw5n1h2txyewy, Microsoft.Windows.OOBENetworkCaptivePortal_10.
...
...

如果您想使用foreach循環來過濾$WhitelistedApps數組中不存在的包,代碼應如下所示(請注意,我們不是循環遍歷$WhitelistedApps ,而是循環遍歷包一次):

foreach($App in Get-AppxPackage)
{
    if($App.Name -notin $WhitelistedApps)
    {
        $App
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM