Finished conversion of DISM commands into DISM cmdlets (#1776)

* Continue conversion

Began 2nd stage of DISM command conversion. Almost all commands have been replaced by cmdlets

* Continue conversion (part 2)

Finished part 2 of DISM command to cmdlet conversion
This commit is contained in:
CodingWonders 2024-03-31 19:05:16 +02:00 committed by GitHub
parent 28e8db98d3
commit 07abbba938
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 54 additions and 38 deletions

View File

@ -54,38 +54,39 @@ function Remove-Features([switch] $dumpFeatures = $false, [switch] $keepDefender
Remove-Features -keepDefender:$false Remove-Features -keepDefender:$false
#> #>
$appxlist = dism /English /image:$scratchDir /Get-Features | Select-String -Pattern "Feature Name : " -CaseSensitive -SimpleMatch $featlist = (Get-WindowsOptionalFeature -Path $scratchDir).FeatureName
$appxlist = $appxlist -split "Feature Name : " | Where-Object {$_}
if ($dumpFeatures) if ($dumpFeatures)
{ {
$appxlist > allfeaturesdump.txt $featlist > allfeaturesdump.txt
} }
$appxlist = $appxlist | Where-Object { $featlist = $featlist | Where-Object {
$_ -NotLike "*Printing*" -AND $_ -NotLike "*Printing*" -AND
$_ -NotLike "*TelnetClient*" -AND $_ -NotLike "*TelnetClient*" -AND
$_ -NotLike "*PowerShell*" -AND $_ -NotLike "*PowerShell*" -AND
$_ -NotLike "*NetFx*" $_ -NotLike "*NetFx*" -AND
$_ -NotLike "*Media*" -AND
$_ -NotLike "*NFS*"
} }
if ($keepDefender) { $appxlist = $appxlist | Where-Object { $_ -NotLike "*Defender*" }} if ($keepDefender) { $featlist = $featlist | Where-Object { $_ -NotLike "*Defender*" }}
foreach($feature in $appxlist) foreach($feature in $featlist)
{ {
$status = "Removing feature $feature" $status = "Removing feature $feature"
Write-Progress -Activity "Removing features" -Status $status -PercentComplete ($counter++/$appxlist.Count*100) Write-Progress -Activity "Removing features" -Status $status -PercentComplete ($counter++/$featlist.Count*100)
Write-Debug "Removing feature $feature" Write-Debug "Removing feature $feature"
# dism /image:$scratchDir /Disable-Feature /FeatureName:$feature /Remove /NoRestart > $null Disable-WindowsOptionalFeature -Path "$scratchDir" -FeatureName $feature -Remove -ErrorAction SilentlyContinue -NoRestart
} }
Write-Progress -Activity "Removing features" -Status "Ready" -Completed Write-Progress -Activity "Removing features" -Status "Ready" -Completed
Write-Host "You can re-enable the disabled features at any time, using either Windows Update or the SxS folder in <installation media>\Sources."
} }
function Remove-Packages function Remove-Packages
{ {
$appxlist = dism /English /Image:$scratchDir /Get-Packages | Select-String -Pattern "Package Identity : " -CaseSensitive -SimpleMatch $pkglist = (Get-WindowsPackage -Path "$scratchDir").PackageName
$appxlist = $appxlist -split "Package Identity : " | Where-Object {$_}
$appxlist = $appxlist | Where-Object { $pkglist = $pkglist | Where-Object {
$_ -NotLike "*ApplicationModel*" -AND $_ -NotLike "*ApplicationModel*" -AND
$_ -NotLike "*indows-Client-LanguagePack*" -AND $_ -NotLike "*indows-Client-LanguagePack*" -AND
$_ -NotLike "*LanguageFeatures-Basic*" -AND $_ -NotLike "*LanguageFeatures-Basic*" -AND
@ -123,11 +124,18 @@ function Remove-Packages
$_ -NotLike "*UI.XaML*" $_ -NotLike "*UI.XaML*"
} }
foreach ($appx in $appxlist) foreach ($pkg in $pkglist)
{ {
$status = "Removing $appx" try {
Write-Progress -Activity "Removing Apps" -Status $status -PercentComplete ($counter++/$appxlist.Count*100) $status = "Removing $pkg"
dism /English /image:$scratchDir /Remove-Package /PackageName:$appx /NoRestart Write-Progress -Activity "Removing Apps" -Status $status -PercentComplete ($counter++/$pkglist.Count*100)
Remove-WindowsPackage -Path "$scratchDir" -PackageName $pkg -NoRestart -ErrorAction SilentlyContinue
}
catch {
# This can happen if the package that is being removed is a permanent one, like FodMetadata
Write-Host "Could not remove OS package $($pkg)"
continue
}
} }
Write-Progress -Activity "Removing Apps" -Status "Ready" -Completed Write-Progress -Activity "Removing Apps" -Status "Ready" -Completed
} }
@ -167,7 +175,7 @@ function Remove-ProvisionedPackages([switch] $keepSecurity = $false)
{ {
$status = "Removing Provisioned $($appx.PackageName)" $status = "Removing Provisioned $($appx.PackageName)"
Write-Progress -Activity "Removing Provisioned Apps" -Status $status -PercentComplete ($counter++/$appxProvisionedPackages.Count*100) Write-Progress -Activity "Removing Provisioned Apps" -Status $status -PercentComplete ($counter++/$appxProvisionedPackages.Count*100)
dism /English /image:$scratchDir /Remove-ProvisionedAppxPackage /PackageName:$($appx.PackageName) /NoRestart Remove-AppxProvisionedPackage -Path $scratchDir -PackageName $appx.PackageName -ErrorAction SilentlyContinue
} }
Write-Progress -Activity "Removing Provisioned Apps" -Status "Ready" -Completed Write-Progress -Activity "Removing Provisioned Apps" -Status "Ready" -Completed
} }

View File

@ -117,7 +117,7 @@ public class PowerManagement {
if (Test-Path $driverPath) if (Test-Path $driverPath)
{ {
Write-Host "Adding Windows Drivers image($scratchDir) drivers($driverPath) " Write-Host "Adding Windows Drivers image($scratchDir) drivers($driverPath) "
dism /English /image:$scratchDir /add-driver /driver:$driverPath /recurse | Out-Host Add-WindowsDriver -Path "$scratchDir" -Recurse -Driver "$driverPath"
} }
else else
{ {
@ -335,7 +335,7 @@ public class PowerManagement {
if (Test-Path $driverPath) if (Test-Path $driverPath)
{ {
Write-Host "Adding Windows Drivers image($scratchDir) drivers($driverPath) " Write-Host "Adding Windows Drivers image($scratchDir) drivers($driverPath) "
dism /English /image:$scratchDir /add-driver /driver:$driverPath /recurse | Out-Host Add-WindowsDriver -Path "$scratchDir" -Driver "$driverPath" -Recurse
} }
else else
{ {

View File

@ -852,38 +852,39 @@ function Remove-Features([switch] $dumpFeatures = $false, [switch] $keepDefender
Remove-Features -keepDefender:$false Remove-Features -keepDefender:$false
#> #>
$appxlist = dism /English /image:$scratchDir /Get-Features | Select-String -Pattern "Feature Name : " -CaseSensitive -SimpleMatch $featlist = (Get-WindowsOptionalFeature -Path $scratchDir).FeatureName
$appxlist = $appxlist -split "Feature Name : " | Where-Object {$_}
if ($dumpFeatures) if ($dumpFeatures)
{ {
$appxlist > allfeaturesdump.txt $featlist > allfeaturesdump.txt
} }
$appxlist = $appxlist | Where-Object { $featlist = $featlist | Where-Object {
$_ -NotLike "*Printing*" -AND $_ -NotLike "*Printing*" -AND
$_ -NotLike "*TelnetClient*" -AND $_ -NotLike "*TelnetClient*" -AND
$_ -NotLike "*PowerShell*" -AND $_ -NotLike "*PowerShell*" -AND
$_ -NotLike "*NetFx*" $_ -NotLike "*NetFx*" -AND
$_ -NotLike "*Media*" -AND
$_ -NotLike "*NFS*"
} }
if ($keepDefender) { $appxlist = $appxlist | Where-Object { $_ -NotLike "*Defender*" }} if ($keepDefender) { $featlist = $featlist | Where-Object { $_ -NotLike "*Defender*" }}
foreach($feature in $appxlist) foreach($feature in $featlist)
{ {
$status = "Removing feature $feature" $status = "Removing feature $feature"
Write-Progress -Activity "Removing features" -Status $status -PercentComplete ($counter++/$appxlist.Count*100) Write-Progress -Activity "Removing features" -Status $status -PercentComplete ($counter++/$featlist.Count*100)
Write-Debug "Removing feature $feature" Write-Debug "Removing feature $feature"
# dism /image:$scratchDir /Disable-Feature /FeatureName:$feature /Remove /NoRestart > $null Disable-WindowsOptionalFeature -Path "$scratchDir" -FeatureName $feature -Remove -ErrorAction SilentlyContinue -NoRestart
} }
Write-Progress -Activity "Removing features" -Status "Ready" -Completed Write-Progress -Activity "Removing features" -Status "Ready" -Completed
Write-Host "You can re-enable the disabled features at any time, using either Windows Update or the SxS folder in <installation media>\Sources."
} }
function Remove-Packages function Remove-Packages
{ {
$appxlist = dism /English /Image:$scratchDir /Get-Packages | Select-String -Pattern "Package Identity : " -CaseSensitive -SimpleMatch $pkglist = (Get-WindowsPackage -Path "$scratchDir").PackageName
$appxlist = $appxlist -split "Package Identity : " | Where-Object {$_}
$appxlist = $appxlist | Where-Object { $pkglist = $pkglist | Where-Object {
$_ -NotLike "*ApplicationModel*" -AND $_ -NotLike "*ApplicationModel*" -AND
$_ -NotLike "*indows-Client-LanguagePack*" -AND $_ -NotLike "*indows-Client-LanguagePack*" -AND
$_ -NotLike "*LanguageFeatures-Basic*" -AND $_ -NotLike "*LanguageFeatures-Basic*" -AND
@ -921,11 +922,18 @@ function Remove-Packages
$_ -NotLike "*UI.XaML*" $_ -NotLike "*UI.XaML*"
} }
foreach ($appx in $appxlist) foreach ($pkg in $pkglist)
{ {
$status = "Removing $appx" try {
Write-Progress -Activity "Removing Apps" -Status $status -PercentComplete ($counter++/$appxlist.Count*100) $status = "Removing $pkg"
dism /English /image:$scratchDir /Remove-Package /PackageName:$appx /NoRestart Write-Progress -Activity "Removing Apps" -Status $status -PercentComplete ($counter++/$pkglist.Count*100)
Remove-WindowsPackage -Path "$scratchDir" -PackageName $pkg -NoRestart -ErrorAction SilentlyContinue
}
catch {
# This can happen if the package that is being removed is a permanent one, like FodMetadata
Write-Host "Could not remove OS package $($pkg)"
continue
}
} }
Write-Progress -Activity "Removing Apps" -Status "Ready" -Completed Write-Progress -Activity "Removing Apps" -Status "Ready" -Completed
} }
@ -965,7 +973,7 @@ function Remove-ProvisionedPackages([switch] $keepSecurity = $false)
{ {
$status = "Removing Provisioned $($appx.PackageName)" $status = "Removing Provisioned $($appx.PackageName)"
Write-Progress -Activity "Removing Provisioned Apps" -Status $status -PercentComplete ($counter++/$appxProvisionedPackages.Count*100) Write-Progress -Activity "Removing Provisioned Apps" -Status $status -PercentComplete ($counter++/$appxProvisionedPackages.Count*100)
dism /English /image:$scratchDir /Remove-ProvisionedAppxPackage /PackageName:$($appx.PackageName) /NoRestart Remove-AppxProvisionedPackage -Path $scratchDir -PackageName $appx.PackageName -ErrorAction SilentlyContinue
} }
Write-Progress -Activity "Removing Provisioned Apps" -Status "Ready" -Completed Write-Progress -Activity "Removing Provisioned Apps" -Status "Ready" -Completed
} }
@ -3696,7 +3704,7 @@ public class PowerManagement {
if (Test-Path $driverPath) if (Test-Path $driverPath)
{ {
Write-Host "Adding Windows Drivers image($scratchDir) drivers($driverPath) " Write-Host "Adding Windows Drivers image($scratchDir) drivers($driverPath) "
dism /English /image:$scratchDir /add-driver /driver:$driverPath /recurse | Out-Host Add-WindowsDriver -Path "$scratchDir" -Recurse -Driver "$driverPath"
} }
else else
{ {
@ -3914,7 +3922,7 @@ public class PowerManagement {
if (Test-Path $driverPath) if (Test-Path $driverPath)
{ {
Write-Host "Adding Windows Drivers image($scratchDir) drivers($driverPath) " Write-Host "Adding Windows Drivers image($scratchDir) drivers($driverPath) "
dism /English /image:$scratchDir /add-driver /driver:$driverPath /recurse | Out-Host Add-WindowsDriver -Path "$scratchDir" -Driver "$driverPath" -Recurse
} }
else else
{ {