Skip to main content

Uninstall Microsoft Teams plus Clean Up


Tony-Automox

This worklet uninstalls Microsoft Team and cleans up as recommended by Microsoft:



Evaluation:


# Define desired registry settings

$regPath = "software\Microsoft\Office\Teams"



# Get User details including SID from Get-LocalUser

$users = Get-WmiObject -Class Win32_UserAccount -Filter "LocalAccount = 'True'"



# Add HKEY_USERS to a PSDrive for easy access later

New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS -ErrorAction SilentlyContinue | Out-Null



$nonCompliant = @()



# Loop through the list of users to check each for compliance

foreach ($user in $users) {



    # Retrieve SIDs for each user

    $sid = $user.SID

    $name = $user.Name



    # Load Registries for users, if ntuser.dat exists

    # this prevents us from attempting to load Administrator and similar accounts

    if (Test-Path "C:\Users\$name\ntuser.dat") {



        # Load user's ntuser.dat into the registry

        & reg load "HKU\$sid" "C:\Users\$name\ntuser.dat" | Out-Null



        # If this value doesn't match the desired value, add the user name to nonCompliant list

        If (Test-Path ("HKU:\$sid\$regPath")) {

            $nonCompliant += $name

        }

    }

}



# Clean-up the PSDrive

Remove-PSDrive -Name HKU



# If any users are non-compliant, "Exit 1" to flag remediation. Else "Exit 0" for Compliant

if ($nonCompliant.Count -gt 0) {

    Exit 1

} else { Exit 0}


Remediation:


# Define paths

$localPath = (Get-WmiObject -Class Win32_UserProfile -Filter "Special = $false" -ErrorAction Stop).LocalPath + "\AppData\Local"

$TeamsPath = [System.IO.Path]::Combine($localPath, 'Microsoft', 'Teams')

$TeamsUpdateExePath = [System.IO.Path]::Combine($localPath, 'Microsoft', 'Teams', 'Update.exe')



# Define uninstall command for task scheduler

$appName = 'Teams Machine-Wide Installer'

$execute = "$TeamsUpdateExePath"

$arg = "-uninstall -s"



# Current user info

$currentUsr = (Get-WmiObject -class win32_process -ComputerName 'localhost' | Where-Object name -Match explorer).getowner().user | Select-Object -First 1



# Close Teams if running

Stop-Process -Name Teams -Force



# Create, run, then delete the uninstall scheduled task

$time = (Get-Date).AddSeconds(30)

$triggerAt = New-ScheduledTaskTrigger -At $time -Once

$action = New-ScheduledTaskAction -Execute $execute -Argument $arg

Register-ScheduledTask -TaskName "Uninstall $appName" -Trigger $triggerAt -Action $action -User $currentUsr

Start-Sleep 90

Unregister-ScheduledTask -TaskName "Uninstall $appName" -Confirm:$false



$uninstalled = Test-Path "C:\Users\$currentUsr\AppData\Local\Microsoft\Teams\.dead"



# Cleanup if Teams is uninstalled

If ($uninstalled) {



    Write-Output "Cleanup process started..."



    # Delete the Team directory recursively

    Remove-Item C:\Users\$currentUsr\AppData\Local\Microsoft\Teams* -Force -Recurse



    # Script block to remove "Teams" registry entry required for the uninstall

    # Define desired registry setting

    $regPath = "software\Microsoft\Office\Teams"



    # Get User details including SID from Get-LocalUser

    $users = Get-WmiObject -Class Win32_UserAccount -Filter "LocalAccount = 'True'"



    # Add HKEY_USERS to a PSDrive for easy access later

    New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS



    foreach ($user in $users) {



        # Retrieve SIDs for each user

        $sid = $user.SID

        $name = $user.Name



        # Load Registries for users, if ntuser.dat exists

        # this prevents us from attempting to load Administrator and similar accounts

        if (Test-Path "C:\Users\$name\ntuser.dat") {

        

            # Load user's ntuser.dat into the registry

            & reg load "HKU\$sid" "C:\Users\$name\ntuser.dat"

        

            # Create Value

            Remove-Item -Path "HKU:\$sid\$regPath"

        }

    }



    Remove-PSDrive -Name HKU



}

else

{ Write-Output "Teams is still installed... No Cleanup" }

Forum|alt.badge.img
  • Novice
  • April 28, 2021

Thanks @Tony… Do you have something for MacOS as well?


U


  • Rookie
  • April 29, 2022

seems not working for me and I got this

 

 


Reply


Cookie policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Cookie settings