132 lines
4.8 KiB
PowerShell
132 lines
4.8 KiB
PowerShell
<#
|
|
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 |