Tasks/120-Remove-ABProvisionedApps.ps1

function Remove-ABProvisionedApps {
    <#
    .SYNOPSIS
    Removes in-box provisioned apps (and, optionally, the same apps installed for all users).
    .PARAMETER AppNames
    Display names of the provisioned apps to remove (as returned by Get-AppxProvisionedPackage -Online), one per line.
    .PARAMETER RemoveInstalledPackages
    Also remove installed (not just provisioned) packages with these names, as OEMs sometimes install apps for all
    users without provisioning them. Packages marked as non-removable are skipped.
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)] [string[]] $AppNames,
        [Parameter(Mandatory = $false)] [bool] $RemoveInstalledPackages = $true
    )

    Write-ABLog 'Removing specified in-box provisioned apps'
    $apps = Get-AppxProvisionedPackage -Online
    $installedApps = @()
    if ($RemoveInstalledPackages) {
        $installedApps = @(Get-AppxPackage -AllUsers -ErrorAction SilentlyContinue)
    }
    foreach ($name in ($AppNames | Select-Object -Unique)) {
        $apps | Where-Object { $_.DisplayName -eq $name } | ForEach-Object {
            try {
                Write-ABLog "Removing provisioned app: $name"
                $_ | Remove-AppxProvisionedPackage -Online -AllUsers -ErrorAction Stop | Out-Null
            }
            catch {
                Write-ABLog " Unable to remove provisioned app $($name): $_"
            }
        }
        $installedApps | Where-Object { $_.Name -eq $name -and -not $_.NonRemovable } | ForEach-Object {
            try {
                Write-ABLog "Removing installed app: $($_.PackageFullName)"
                $_ | Remove-AppxPackage -AllUsers -ErrorAction Stop | Out-Null
            }
            catch {
                Write-ABLog " Unable to remove installed app $($name): $_"
            }
        }
    }
}