<# Author: Gabe Kerntke Date: 03-06-2024 .Synopsis .Modified 2024-03-06 (GabeK) - Original script created 2025-08-09 (GabeK) - Updated to use functions script #> [CmdletBinding()] Param( [Parameter(Mandatory = $false)] $App_Name = "Teams", [Parameter(Mandatory = $false)] $File_Name_Extension = "exe", [Parameter(Mandatory = $false)] $Install_Parameters = "-p" , [Parameter(Mandatory = $false)] $EPCache_Folder = "3rd Party Patches\$App_Name", [Parameter(Mandatory = $false)] $File_Name = "$App_Name.$File_Name_Extension", [Parameter(Mandatory = $false)] $users = (Get-ChildItem -path c:\users).name, [Parameter(Mandatory = $false)] $CurrentUser = ((get-ciminstance win32_computersystem | ForEach-Object username) -split '\\')[1] ) $initialURL = "https://learn.microsoft.com/en-us/microsoftteams/new-teams-bulk-install-client" # Download the HTML content $html = (New-Object System.Net.WebClient).DownloadString("$initialURL") # Split the content on ">" and "<" characters to extract the text content $text = $html.Split([char[]]@(">", "<"), [StringSplitOptions]::RemoveEmptyEntries) # Sort the start and end index of the page $startIndex = $text.IndexOf("Option 1A: Download and install new Teams for a single computer") $endIndex = $text.IndexOf("Option 1B: Download and install new Teams using an offline installer") # Extract the rows $rows = $text[$startIndex..$endIndex] # Filter out only the rows containing version numbers $Sort = $rows | Where-Object { $_ -match "https" } $Split = $Sort.split() | Select-Object -First 2 | Select-Object -Last 1 $DownloadURL = $Split.Substring(5) -replace '"', "" #Region Functions Function Uninstall-Teams { Stop-Process -name *teams* -Force -ErrorAction SilentlyContinue -Verbose Start-Sleep 10 $Uninstall = Get-WmiObject Win32_Product -filter "name like 'Teams%'" | ForEach-Object { $_.Uninstall() } $Value = $Uninstall | Select-Object -ExpandProperty ReturnValue If ($Value -eq "0") { Write-Host "$App_Name uninstalled successfully, proceeding to deleting user's appdata folders" DeleteTeamsFolder } else { Uninstall-Teams2 } } Function Uninstall-Teams2 { $UninstallPath = $Applist | Select-Object -ExpandProperty PSPath $B = $UninstallPath -replace "Microsoft.PowerShell.Core", "" $C = $B.Substring(1) Remove-Item -Path $C -Force -Verbose Start-Sleep 5 If ($Applist.DisplayName -like "*$App_Name*") { Write-Host "Failed to uninstall $App_Name, exiting script" } Else { Write-Host "$App_Name uninstalled successfully, proceeding to deleting user's appdata folders" DeleteTeamsFolder } } Function DeleteTeamsFolder { Get-AppxPackage -name *Teams* -AllUsers | Select-Object -ExpandProperty PackageFullName | Remove-AppxPackage -AllUsers -ErrorAction SilentlyContinue -Verbose $users = Get-ChildItem C:\Users foreach ($user in $users) { $path = "C:\Users\$($user.Name)\AppData\Local\Microsoft\Teams" If (Test-Path $path) { Remove-Item $path -Force -Recurse Write-Output "$user Team's Appdata folder has been deleted, proceeding to install Teams" } } Test-Probe_Online Install-App } #Check to see if program is installed Function CheckforClassicTeams { $users = Get-ChildItem C:\Users foreach ($user in $users) { $Path = Test-Path "C:\Users\$($user.Name)\AppData\Local\Microsoft\Teams\current\Teams.exe" If ($Path -eq $true) { Stop-Process -name *teams* -Force -ErrorAction SilentlyContinue -Verbose Start-Sleep 10 Write-Host "Teams Classic is installed for $user, proceeding with deleting user appdata folder" DeleteTeamsFolder } Else { Write-Host "Teams is not installed for $user, exiting script" } } } #Region Script Start If ((Test-Path "C:\Temp\Script Cache") -eq $False) { New-Item -ItemType directory -Path "C:\Temp\Script Cache" } Invoke-WebRequest -UseBasicParsing "https://scripts.gabesville.com/Gabesville/Powershell-Scripts/raw/branch/main/Functions%20Scripts/Functions.ps1" -outfile "C:\Temp\Script Cache\Functions.ps1" . "C:\Temp\Script Cache\Functions.ps1" #Check if Teams Machine-Wide Installer is installed $App_Name = "Teams Machine-Wide Installer" $Applist = Get-Software | Where-Object { $_.DisplayName -like "*$App_Name*" } If ($Applist.DisplayName -like "*$App_Name*") { Write-Host "$App_Name is already installed, proceeding with uninstall" Close-App Uninstall-Teams } Else { Write-Host "$App_Name is not installed, proceeding to check under user's appdata folder for Classic Teams" CheckforClassicTeams } #Region Script End