mirror of
https://github.com/ChrisTitusTech/winutil.git
synced 2026-07-16 00:40:39 +00:00
* fix: resolve silent failures in AppX removal and PS7 DISM bugs
- Fixed a bug where Remove-AppxPackage failed silently in PowerShell 7 due to pipeline binding issues. We now explicitly loop through Get-AppxPackage results and pass PackageFullName directly.
- Added wildcard matching to Get-AppxPackage and Get-AppxProvisionedPackage to reliably locate packages regardless of short name vs family name variations.
- Offloaded Get-AppxProvisionedPackage and Remove-AppxProvisionedPackage execution to Windows PowerShell 5.1 (powershell.exe) to bypass PowerShell 7 DISM COM exceptions ("Class not registered") and performance hangs.
- Deduplicated AppX removal logic by calling Remove-WinUtilAPPX directly from Invoke-WPFAppxRemoval instead of copying the implementation.
* refactor(Remove-WinUtilAPPX): use script block to improve readability
* feat: enhance AppX removal process and add provisioned package removal function
* fix(tests): update AppX removal tests
This also adds tests for the new Remove-WinUtilProvisionedAPPX functionality
* Move AppX removal under Tweaks
* Address AppX removal review feedback
* Complete AppX removal error handling
* Prevent AppX cleanup confirmation prompts
---------
Co-authored-by: Chris Titus <contact@christitus.com>
37 lines
1.2 KiB
PowerShell
37 lines
1.2 KiB
PowerShell
function Remove-WinUtilAPPX {
|
|
<#
|
|
|
|
.SYNOPSIS
|
|
Removes all APPX packages that match the given name
|
|
|
|
.PARAMETER Name
|
|
The name of the APPX package to remove
|
|
|
|
.EXAMPLE
|
|
Remove-WinUtilAPPX -Name "Microsoft.Microsoft3DViewer"
|
|
|
|
#>
|
|
param (
|
|
$Name
|
|
)
|
|
|
|
Write-Host "Removing $Name"
|
|
Write-WinUtilLog -Component "AppX" -Message "Removing AppX package pattern: $Name"
|
|
|
|
# We explicitly loop through packages instead of using the pipeline because PowerShell 7 pipeline binding
|
|
# for Remove-AppxPackage fails silently, and Get-AppxPackage -AllUsers returns duplicate objects for each user profile.
|
|
$pkgs = Get-AppxPackage "*$Name*" -AllUsers | Sort-Object -Property PackageFullName -Unique
|
|
if ($null -ne $pkgs) {
|
|
foreach ($pkg in $pkgs) {
|
|
try {
|
|
Remove-AppxPackage -Package $pkg.PackageFullName -AllUsers -ErrorAction Stop
|
|
}
|
|
catch {
|
|
Write-WinUtilLog -Level "ERROR" -Component "AppX" -Message "Failed to remove AppX package $($pkg.PackageFullName): $($_.Exception.Message)"
|
|
}
|
|
}
|
|
}
|
|
|
|
Write-WinUtilLog -Component "AppX" -Message "AppX removal completed for package pattern: $Name"
|
|
}
|