Lembre-se, sempre há maneiras mais elegantes de fazer as coisas, mas isso é apenas uma opção.
Você pode coletar todos os aplicativos e compará-los com a lista de permissões do aplicativo em um loop.
Algo como:
"Uninstalling BlackListed apps"
$apps = @(
# Whitelist Windows 10 apps
"Microsoft.BingWeather"
"Microsoft.MicrosoftOfficeHub"
"Microsoft.Office.OneNote"
"Microsoft.SkypeApp"
"Microsoft.WindowsAlarms"
"Microsoft.WindowsCalculator"
"Microsoft.WindowsCamera"
"microsoft.windowscommunicationsapps"
"Microsoft.WindowsMaps"
"Microsoft.GetHelp"
"Microsoft.Messaging"
)
$RemoveAppPkgs = (Get-AppxPackage -AllUsers).Name
'TotalApps: ' + $RemoveAppPkgs.Count
'TotalWhiteListedApps: ' + $apps.Count
'TotalBlackListeedApps: ' + ($RemoveAppPkgs.Count - $apps.Count)
ForEach($TargetApp in $RemoveAppPkgs)
{
If($apps -notcontains $TargetApp)
{
Write-Output "Trying to remove $TargetApp"
}
}
Saída:
Uninstalling BlackListed apps
TotalApps: 141
TotalWhiteListedApps: 11
TotalBlackListeedApps: 130
Trying to remove Windows.PrintDialog
Trying to remove Microsoft.NET.Native.Framework.1.0
Trying to remove Microsoft.NET.Native.Framework.1.0
Trying to remove Microsoft.NET.Native.Framework.1.1
Trying to remove Microsoft.NET.Native.Framework.1.1
Trying to remove Microsoft.NET.Native.Framework.1.6
Trying to remove Microsoft.NET.Native.Framework.1.6
Trying to remove Microsoft.NET.Native.Runtime.1.0
Trying to remove Microsoft.NET.Native.Runtime.1.0
Trying to remove Microsoft.NET.Native.Runtime.1.1
Trying to remove Microsoft.NET.Native.Runtime.1.1
Trying to remove Microsoft.NET.Native.Runtime.1.6
Trying to remove Microsoft.NET.Native.Runtime.1.6
Trying to remove Microsoft.VCLibs.120.00
Trying to remove Microsoft.VCLibs.120.00
...
Conforme observado no ponteiro que você referencia, existem pacotes que você simplesmente não pode desinstalar:
# apps which cannot be removed using Remove-AppxPackage
#"Microsoft.BioEnrollment"
#"Microsoft.MicrosoftEdge"
#"Microsoft.Windows.Cortana"
#"Microsoft.WindowsFeedback"
#"Microsoft.XboxGameCallableUI"
#"Microsoft.XboxIdentityProvider"
#"Windows.ContactSupport"
Se houver outras pessoas com esse problema, você só precisará capturar e pular as mesmas (usando if / then ou um bloco try / catch).
* Atualização de acordo com a solicitação do OP * Basta adicionar o código de seu link de postagem para que a remoção ocorra.
ForEach($TargetApp in $RemoveAppPkgs)
{
If($apps -notcontains $TargetApp)
{
"Trying to remove $TargetApp"
Get-AppxPackage -Name $TargetApp -AllUsers | Remove-AppxPackage -AllUsers -ErrorAction SilentlyContinue
Get-AppXProvisionedPackage -Online |
Where-Object DisplayName -EQ $TargetApp |
Remove-AppxProvisionedPackage -Online
}
}
Ou adicione os aplicativos que você não pode remover para a lista de permissões e não deverá receber erros para lidar.
No entanto, sempre que você estiver fazendo algo destrutivo como este, você deve ter tratamento de erros. Eu também sugiro que você use o switch -whatif como uma precaução sobre a remoção de coisas antes de fazer isso de verdade. Só para ter certeza de que você está realmente recebendo o que você espera.
Quanto ao exemplo try / catch. Se você estiver no PowerShell_ISE, basta pressionar CRTL + J para acessar a lista de snippets e selecionar um modelo try / catch para usar.