commit 3f75ba3b2458449b64febc43b7f1f3c00181ac25 Author: SH30G0RATH Date: Thu Sep 11 09:00:40 2025 +0000 Add Remove-WindowsStoreAppsLocalScript.ps1 diff --git a/Remove-WindowsStoreAppsLocalScript.ps1 b/Remove-WindowsStoreAppsLocalScript.ps1 new file mode 100644 index 0000000..d5c7c9a --- /dev/null +++ b/Remove-WindowsStoreAppsLocalScript.ps1 @@ -0,0 +1,82 @@ +[CmdletBinding(SupportsShouldProcess = $true)] +param( + # Packages to remove completely (per-user and provisioned) + [string[]] $Packages = @( + "Microsoft.Print3D", + "Microsoft.Microsoft3DViewer", + "Microsoft.WebMediaExtensions", + "Microsoft.VP9VideoExtensions", + "Microsoft.MSPaint", + "Microsoft.Winget.Source", + "Microsoft.HEIFImageExtension", + "MSTeams" # Microsoft Teams (AppX version from WindowsApps) + ) +) + +function Test-Admin { + $currentUser = [Security.Principal.WindowsIdentity]::GetCurrent() + $principal = New-Object Security.Principal.WindowsPrincipal($currentUser) + return $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) +} + +if (-not (Test-Admin)) { + Write-Error "This script must be run in an elevated PowerShell session (Run as Administrator)." + exit 1 +} + +Write-Verbose "Starting removal of Appx packages for all users and deprovisioning from the OS image..." + +foreach ($name in $Packages) { + Write-Verbose "Processing package name: '$name'" + + # 1) Remove per-user installs for ALL users + try { + $apps = Get-AppxPackage -AllUsers -Name $name -ErrorAction SilentlyContinue + if ($apps) { + foreach ($app in $apps) { + if ($PSCmdlet.ShouldProcess("$($app.PackageFullName)", "Remove-AppxPackage (per-user/all users)")) { + try { + Remove-AppxPackage -Package $app.PackageFullName -AllUsers -ErrorAction Stop + Write-Host "Removed per-user package: $($app.PackageFullName)" + } catch { + try { + Remove-AppxPackage -Package $app.PackageFullName -ErrorAction Stop + Write-Host "Removed package in current context: $($app.PackageFullName)" + } catch { + Write-Warning "Failed to remove per-user package $($app.PackageFullName): $($_.Exception.Message)" + } + } + } + } + } else { + Write-Verbose "No per-user installs found for '$name'." + } + } catch { + Write-Warning "Error enumerating per-user installs for '$name': $($_.Exception.Message)" + } + + # 2) Deprovision from the image so NEW users don't get it + try { + $provMatches = Get-AppxProvisionedPackage -Online | + Where-Object { $_.DisplayName -eq $name } + + if ($provMatches) { + foreach ($prov in $provMatches) { + if ($PSCmdlet.ShouldProcess("$($prov.PackageName)", "Remove-AppxProvisionedPackage -Online -AllUsers")) { + try { + Remove-AppxProvisionedPackage -Online -PackageName $prov.PackageName -AllUsers | Out-Null + Write-Host "Deprovisioned: $($prov.DisplayName) | $($prov.PackageName)" + } catch { + Write-Warning "Failed to deprovision $($prov.PackageName): $($_.Exception.Message)" + } + } + } + } else { + Write-Verbose "No provisioned package found for '$name'." + } + } catch { + Write-Warning "Error enumerating provisioned packages for '$name': $($_.Exception.Message)" + } +} + +Write-Host "Done. A reboot is recommended to ensure all removals complete and shell caches refresh."