mirror of
https://github.com/ChrisTitusTech/winutil.git
synced 2025-01-12 16:00:37 -06:00
9183e92692
* Set Boot Manager entry timeout to 0 Fixes #2562 * Exclude Windows Hello stuff from package removal * Obscure passwords with Base64 and fix indentation Fixes #3064 * Fix name of excluded package * Update comment It reflects my feelings towards Microsoft when it comes to security a lot better * Remove jargon of scratch directory options * Package exclusion improvements - Removed AppX packages from OS package exclusion list - Added exclusion of PowerShell ISE (source: Discord server - yes, some people still use the PowerShell ISE) * Exclude Windows Photo Viewer from dir removal * Improve copy operation to Ventoy drives This change may fix the issues where there's a conflict between both Ventoy's and MicroWin's unattended answer files, causing target images to stop working as expected during OOBE * Add VirtIO functionality and more enhancements - Added the ability to grab VirtIO Guest Tools - Modified the description of the Copy ISO files function because it basically had nonsense * Fix typo (#3104) * Access specific property of ISO image object Only show the ISO path. No one is interested in the storage type * Add detections for expedited app removal They only affect 24H2 and newer. Earlier releases don't have these expedited apps * Update message * Add VirtIO instructions to MicroWin page * Add DISM command fallback This fallback is triggered if an exception occurs while getting information with the cmdlets (I couldn't test this on my host as everything magically works now - sometimes it threw the Class not registered error) * Exclude OpenSSH from package removal Some people need this to avoid installing third-party programs like PuTTY * Fixed some more indentation
97 lines
4.7 KiB
PowerShell
97 lines
4.7 KiB
PowerShell
function Microwin-RemoveProvisionedPackages() {
|
|
<#
|
|
.SYNOPSIS
|
|
Removes AppX packages from a Windows image during MicroWin processing
|
|
|
|
.PARAMETER UseCmdlets
|
|
Determines whether or not to use the DISM cmdlets for processing.
|
|
- If true, DISM cmdlets will be used
|
|
- If false, calls to the DISM executable will be made whilst selecting bits and pieces from the output as a string (that was how MicroWin worked before
|
|
the DISM conversion to cmdlets)
|
|
|
|
.EXAMPLE
|
|
Microwin-RemoveProvisionedPackages
|
|
#>
|
|
param (
|
|
[Parameter(Mandatory = $true, Position = 0)] [bool]$UseCmdlets
|
|
)
|
|
try
|
|
{
|
|
if ($UseCmdlets) {
|
|
$appxProvisionedPackages = Get-AppxProvisionedPackage -Path "$($scratchDir)" | Where-Object {
|
|
$_.PackageName -NotLike "*AppInstaller*" -AND
|
|
$_.PackageName -NotLike "*Store*" -and
|
|
$_.PackageName -NotLike "*Notepad*" -and
|
|
$_.PackageName -NotLike "*Printing*" -and
|
|
$_.PackageName -NotLike "*YourPhone*" -and
|
|
$_.PackageName -NotLike "*Xbox*" -and
|
|
$_.PackageName -NotLike "*WindowsTerminal*" -and
|
|
$_.PackageName -NotLike "*Calculator*" -and
|
|
$_.PackageName -NotLike "*Photos*" -and
|
|
$_.PackageName -NotLike "*VCLibs*" -and
|
|
$_.PackageName -NotLike "*Paint*" -and
|
|
$_.PackageName -NotLike "*Gaming*" -and
|
|
$_.PackageName -NotLike "*Extension*" -and
|
|
$_.PackageName -NotLike "*SecHealthUI*" -and
|
|
$_.PackageName -NotLike "*ScreenSketch*"
|
|
}
|
|
} else {
|
|
$appxProvisionedPackages = dism /english /image="$scratchDir" /get-provisionedappxpackages | Select-String -Pattern "PackageName : " -CaseSensitive -SimpleMatch
|
|
if ($?) {
|
|
$appxProvisionedPackages = $appxProvisionedPackages -split "PackageName : " | Where-Object {$_}
|
|
# Exclude the same items.
|
|
$appxProvisionedPackages = $appxProvisionedPackages | Where-Object {
|
|
$_ -NotLike "*AppInstaller*" -AND
|
|
$_ -NotLike "*Store*" -and
|
|
$_ -NotLike "*Notepad*" -and
|
|
$_ -NotLike "*Printing*" -and
|
|
$_ -NotLike "*YourPhone*" -and
|
|
$_ -NotLike "*Xbox*" -and
|
|
$_ -NotLike "*WindowsTerminal*" -and
|
|
$_ -NotLike "*Calculator*" -and
|
|
$_ -NotLike "*Photos*" -and
|
|
$_ -NotLike "*VCLibs*" -and
|
|
$_ -NotLike "*Paint*" -and
|
|
$_ -NotLike "*Gaming*" -and
|
|
$_ -NotLike "*Extension*" -and
|
|
$_ -NotLike "*SecHealthUI*" -and
|
|
$_ -NotLike "*ScreenSketch*"
|
|
}
|
|
} else {
|
|
Write-Host "AppX packages could not be obtained with DISM. MicroWin processing will continue, but AppX packages will be skipped."
|
|
return
|
|
}
|
|
}
|
|
|
|
$counter = 0
|
|
if ($UseCmdlets) {
|
|
foreach ($appx in $appxProvisionedPackages) {
|
|
$status = "Removing Provisioned $($appx.PackageName)"
|
|
Write-Progress -Activity "Removing Provisioned Apps" -Status $status -PercentComplete ($counter++/$appxProvisionedPackages.Count*100)
|
|
try {
|
|
Remove-AppxProvisionedPackage -Path "$scratchDir" -PackageName $appx.PackageName -ErrorAction SilentlyContinue
|
|
} catch {
|
|
Write-Host "Application $($appx.PackageName) could not be removed"
|
|
continue
|
|
}
|
|
}
|
|
} else {
|
|
foreach ($appx in $appxProvisionedPackages) {
|
|
$status = "Removing Provisioned $appx"
|
|
Write-Progress -Activity "Removing Provisioned Apps" -Status $status -PercentComplete ($counter++/$appxProvisionedPackages.Count*100)
|
|
dism /english /image="$scratchDir" /remove-provisionedappxpackage /packagename=$appx /quiet /norestart | Out-Null
|
|
if ($? -eq $false) {
|
|
Write-Host "AppX package $appx could not be removed."
|
|
}
|
|
}
|
|
}
|
|
Write-Progress -Activity "Removing Provisioned Apps" -Status "Ready" -Completed
|
|
}
|
|
catch
|
|
{
|
|
Write-Host "Unable to get information about the AppX packages. A fallback will be used..."
|
|
Write-Host "Error information: $($_.Exception.Message)" -ForegroundColor Yellow
|
|
Microwin-RemoveProvisionedPackages -UseCmdlets $false
|
|
}
|
|
}
|