Forum Discussion

JimmyWork's avatar
JimmyWork
Iron Contributor
Sep 29, 2022
Solved

Remediation script says it worked but did not actually remove applications

The following works when you run it local on the computer.

It also works if it is package as a win32 app and ran at deployment during Autopilot.

 

It however does not work as a remediation script. The script will say the device has issues and fix the issue, but it will actually say fixed and still have not removed the applications.

DETECT SCRIPT

 

#Detect built-in applications not needed for organisation devices

try
{
    # List of Applications to Remove
    $AppPackages  = @()
    $AppPackages += 'Microsoft.Xbox.TCUI'
    $AppPackages += 'Microsoft.XboxApp'
    $AppPackages += 'Microsoft.XboxGamingOverlay'
    $AppPackages += 'Microsoft.XboxIdentityProvider'
    $AppPackages += 'Microsoft.XboxSpeechToTextOverlay'
    $AppPackages += 'Microsoft.GamingApp'
    $AppPackages += 'Microsoft.SkypeApp'
    $AppPackages += 'MicrosoftTeams'
    $AppPackages += 'Microsoft.ZuneMusic'
    $AppPackages += 'Microsoft.ZuneVideo'
    $AppPackages += 'Microsoft.WindowsFeedbackHub'
    $AppPackages += 'Microsoft.549981C3F5F10'
    $AppPackages += 'Microsoft.BingNews'
    $AppPackages += 'Microsoft.BingWeather'
    $AppPackages += 'Microsoft.MicrosoftSolitaireCollection'
    $AppPackages += 'Microsoft.WindowsMaps'
    $AppPackages += 'Microsoft.GetStarted'
    $AppPackages += 'Microsoft.People'
    $AppPackages += 'Microsoft.windowscommunicationsapps'
    $AppPackages += 'Microsoft.Messaging'
    $AppPackages += 'Microsoft.MixedReality.Portal'
    $AppPackages += 'Microsoft.YourPhone'
    $AppPackages += 'Microsoft.OneConnect'
    $Error.Clear()
    $found = $false
    foreach ($App In $AppPackages) 
    {
        $Package = Get-AppxPackage | Where-Object {$_.Name -eq $App}
        $ProvisionedPackage = Get-AppxProvisionedPackage -Online | Where-Object {$_.DisplayName -eq $App}
        If ($null -ne $Package) {
            Write-Host "App Found Start remediation script"
            $found = $true
        } Else {
            Write-Host "Package $App not found"
        }
        If ($null -ne $ProvisionedPackage) {
            Write-Host "App Found Start remediation script"
            $found = $true
        } Else {
            Write-Host "Provisioned Package $App not found"
        }
    }
	
    If ($found) 
    {
        exit 1
    }
	Else {
		exit 0
	}
} 
catch
{
    $errMsg = $_.Exception.Message
    Write-Error $errMsg
    exit 1
}

 

 

 REMEDIATION SCRIPT

 

#Uninstalls built-in applications not needed for organisation devices

# List of Applications to Remove
$AppPackages  = @()
$AppPackages += 'Microsoft.Xbox.TCUI'
$AppPackages += 'Microsoft.XboxApp'
$AppPackages += 'Microsoft.XboxGamingOverlay'
$AppPackages += 'Microsoft.XboxIdentityProvider'
$AppPackages += 'Microsoft.XboxSpeechToTextOverlay'
$AppPackages += 'Microsoft.GamingApp'
$AppPackages += 'Microsoft.SkypeApp'
$AppPackages += 'MicrosoftTeams'
$AppPackages += 'Microsoft.ZuneMusic'
$AppPackages += 'Microsoft.ZuneVideo'
$AppPackages += 'Microsoft.WindowsFeedbackHub'
$AppPackages += 'Microsoft.549981C3F5F10'
$AppPackages += 'Microsoft.BingNews'
$AppPackages += 'Microsoft.BingWeather'
$AppPackages += 'Microsoft.MicrosoftSolitaireCollection'
$AppPackages += 'Microsoft.WindowsMaps'
$AppPackages += 'Microsoft.GetStarted'
$AppPackages += 'Microsoft.People'
$AppPackages += 'Microsoft.windowscommunicationsapps'
$AppPackages += 'Microsoft.Messaging'
$AppPackages += 'Microsoft.MixedReality.Portal'
$AppPackages += 'Microsoft.YourPhone'
$AppPackages += 'Microsoft.OneConnect'

$Error.Clear()
foreach ($App In $AppPackages) {

    $Package = Get-AppxPackage | Where-Object {$_.Name -eq $App}
	$ProvisionedPackage = Get-AppxProvisionedPackage -Online | Where-Object {$_.DisplayName -eq $App}
	
    If ($Package -ne $null) {
        Write-Host "Removing Package : $App"
        Remove-AppxPackage -Package $Package.PackageFullName
    } 
	Else {
		Write-Host "Package $App not found"
	}

	If ($ProvisionedPackage -ne $null) {
		Write-Host "Removing ProvisionedPackage : $App"
		Remove-AppxProvisionedPackage -online -Packagename $ProvisionedPackage.Packagename
	} 
	Else {
		Write-Host "Provisioned Package $App not found"
	}
}

 

* Fix was to add -AllUsers

 

  • Adding -AllUsers to both Get and Remove-AppxPackage fixed the issue
  • JimmyWork's avatar
    JimmyWork
    Iron Contributor
    Adding -AllUsers to both Get and Remove-AppxPackage fixed the issue
      • JimmyWork's avatar
        JimmyWork
        Iron Contributor

        PhilSheppard 

         

        This is the current version, not finished with detect script. This is my co-workers code not mine so I don't take any credit here.

         

        #Uninstalls built-in applications not needed for organisation devices
        
        # List of Applications to Remove
        $AppPackages  = @()
        $AppPackages += 'Microsoft.Xbox.TCUI'
        $AppPackages += 'Microsoft.XboxApp'
        $AppPackages += 'Microsoft.XboxGamingOverlay'
        $AppPackages += 'Microsoft.XboxIdentityProvider'
        $AppPackages += 'Microsoft.XboxSpeechToTextOverlay'
        $AppPackages += 'Microsoft.GamingApp'
        $AppPackages += 'Microsoft.SkypeApp'
        $AppPackages += 'MicrosoftTeams'
        $AppPackages += 'Microsoft.ZuneMusic'
        $AppPackages += 'Microsoft.ZuneVideo'
        $AppPackages += 'Microsoft.WindowsFeedbackHub'
        $AppPackages += 'Microsoft.549981C3F5F10'
        $AppPackages += 'Microsoft.BingNews'
        $AppPackages += 'Microsoft.BingWeather'
        $AppPackages += 'Microsoft.MicrosoftSolitaireCollection'
        $AppPackages += 'Microsoft.WindowsMaps'
        $AppPackages += 'Microsoft.GetStarted'
        $AppPackages += 'Microsoft.People'
        $AppPackages += 'Microsoft.windowscommunicationsapps'
        $AppPackages += 'Microsoft.Messaging'
        $AppPackages += 'Microsoft.MixedReality.Portal'
        $AppPackages += 'Microsoft.YourPhone'
        $AppPackages += 'Microsoft.OneConnect'
        
        $Error.Clear()
        
        foreach ($App In $AppPackages) 
        {
            try {
                Write-Host "+ Removing AppX Package: $App"
                Get-AppxPackage AllUsers -PackageTypeFilter Main,Bundle,Resource,Framework | Where-Object {$_.Name -eq $App } | Remove-AppxPackage -AllUsers
        
                Write-Host "+ Removing Provisioned Package: $App"
                Get-AppxProvisionedPackage -Online | Where-Object {$_.DisplayName -eq $App} | Remove-AppxProvisionedPackage -Online -AllUsers
        
                Write-Host ""
            }
            catch {
                Write-Host "** ERROR ** Failed to remove: $App **"
                Write-Host "ERROR: at $($_.InvocationInfo.ScriptLineNumber)"
                Write-Error "Message: " $_.Exception.Message
                Write-Host "StackTrace: "
                Write-Host $_.Exception.StackTrace
                Write-Host ""
                exit 1
            }    
        }
        
        exit 0

Resources