106 lines
4.1 KiB
PowerShell
106 lines
4.1 KiB
PowerShell
<#
|
|
.SYNOPSIS
|
|
Remove selected built-in Windows apps for current user, all existing users, and prevent them for new users.
|
|
|
|
.DESCRIPTION
|
|
Removes the following apps:
|
|
- Windows Web Experience Pack
|
|
- Xbox
|
|
- Outlook for Windows
|
|
- Feedback Hub
|
|
- Xbox TCUI
|
|
- Xbox Identity Provider
|
|
- Power Automate
|
|
- Sticky Notes
|
|
- Weather
|
|
- Microsoft Teams
|
|
- OneDrive
|
|
The script removes:
|
|
- Provisioned packages (prevents reinstallation for new users)
|
|
- Packages for all existing users
|
|
- Packages for the current user
|
|
|
|
.NOTES
|
|
Must be run as Administrator
|
|
#>
|
|
|
|
# Check for Admin
|
|
If (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
|
|
{
|
|
Write-Error "This script must be run as Administrator."
|
|
exit 1
|
|
}
|
|
|
|
# List of apps to remove
|
|
$AppsToRemove = @(
|
|
@{Name="Windows Web Experience Pack"; Package="Microsoft.Windows.WebExperience"},
|
|
@{Name="Xbox"; Package="Microsoft.XboxApp"},
|
|
@{Name="Outlook for Windows"; Package="Microsoft.OutlookApp"},
|
|
@{Name="Feedback Hub"; Package="Microsoft.WindowsFeedbackHub"},
|
|
@{Name="Xbox TCUI"; Package="Microsoft.Xbox.TCUI"},
|
|
@{Name="Xbox Identity Provider"; Package="Microsoft.XboxIdentityProvider"},
|
|
@{Name="Power Automate"; Package="Microsoft.PowerAutomateDesktop"},
|
|
@{Name="Sticky Notes"; Package="Microsoft.MicrosoftStickyNotes"},
|
|
@{Name="Weather"; Package="Microsoft.BingWeather"},
|
|
@{Name="Microsoft Teams"; Package="Microsoft.Teams"},
|
|
@{Name="OneDrive"; Package="Microsoft.OneDrive"}
|
|
)
|
|
|
|
# Remove provisioned packages (prevents reinstallation for new users)
|
|
Write-Host "Removing provisioned packages for new users..." -ForegroundColor Cyan
|
|
foreach ($App in $AppsToRemove) {
|
|
try {
|
|
$ProvPkg = Get-AppxProvisionedPackage -Online | Where-Object DisplayName -eq $App.Package
|
|
if ($ProvPkg) {
|
|
$ProvPkg | Remove-AppxProvisionedPackage -Online -ErrorAction Stop
|
|
Write-Host ("Provisioned package removed: {0}" -f $App.Name) -ForegroundColor Green
|
|
} else {
|
|
Write-Host ("No provisioned package found for {0}" -f $App.Name) -ForegroundColor Yellow
|
|
}
|
|
} catch {
|
|
Write-Warning ("Failed to remove provisioned package for {0}: {1}" -f $App.Name, ${_})
|
|
}
|
|
}
|
|
|
|
# Get all user profiles except system profiles
|
|
$UserProfiles = Get-ChildItem C:\Users | Where-Object { $_.Name -notin @("Public","Default","Default User","All Users") }
|
|
|
|
# Remove apps for all existing users
|
|
Write-Host "`nRemoving apps for all existing users..." -ForegroundColor Cyan
|
|
foreach ($UserProfile in $UserProfiles) {
|
|
$Username = $UserProfile.Name
|
|
Write-Host "`nProcessing user: $Username" -ForegroundColor Cyan
|
|
|
|
foreach ($App in $AppsToRemove) {
|
|
try {
|
|
$Pkg = Get-AppxPackage -User $Username -Name $App.Package
|
|
if ($Pkg) {
|
|
$Pkg | Remove-AppxPackage -User $Username -ErrorAction Stop
|
|
Write-Host ("Removed {0} from {1}" -f $App.Name, $Username) -ForegroundColor Green
|
|
} else {
|
|
Write-Host ("{0} not installed for {1}" -f $App.Name, $Username) -ForegroundColor Yellow
|
|
}
|
|
} catch {
|
|
Write-Warning ("Failed to remove {0} for {1}: {2}" -f $App.Name, $Username, ${_})
|
|
}
|
|
}
|
|
}
|
|
|
|
# Remove apps for current user
|
|
Write-Host "`nRemoving apps for current user..." -ForegroundColor Cyan
|
|
foreach ($App in $AppsToRemove) {
|
|
try {
|
|
$UserPkg = Get-AppxPackage -Name $App.Package
|
|
if ($UserPkg) {
|
|
$UserPkg | Remove-AppxPackage -ErrorAction Stop
|
|
Write-Host ("Removed {0} from current user" -f $App.Name) -ForegroundColor Green
|
|
} else {
|
|
Write-Host ("{0} is not installed for current user" -f $App.Name) -ForegroundColor Yellow
|
|
}
|
|
} catch {
|
|
Write-Warning ("Failed to remove {0} for current user: {1}" -f $App.Name, ${_})
|
|
}
|
|
}
|
|
|
|
Write-Host "`nAll tasks completed for all users and provisioned packages." -ForegroundColor Cyan
|