diff --git a/README.md b/README.md
index a426dc89..d2442513 100644
--- a/README.md
+++ b/README.md
@@ -52,7 +52,7 @@ If you have Issues, refer to [Known Issues](https://christitustech.github.io/win
These are the sponsors that help keep this project alive with monthly contributions.
-
+
## 🏅 Thanks to all Contributors
Thanks a lot for spending your time helping Winutil grow. Thanks a lot! Keep rocking 🍻.
diff --git a/config/feature.json b/config/feature.json
index 137cd9ee..7ea9e48c 100644
--- a/config/feature.json
+++ b/config/feature.json
@@ -321,5 +321,5 @@
"Order": "a084_",
"Type": "Button",
"ButtonWidth": "300"
- },
+ }
}
diff --git a/config/tweaks.json b/config/tweaks.json
index 56729164..2a6bf95e 100644
--- a/config/tweaks.json
+++ b/config/tweaks.json
@@ -2584,6 +2584,36 @@
],
"link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/RemoveCopilot"
},
+ "WPFTweaksRecallOff": {
+ "Content": "Disable Recall",
+ "Description": "Turn Recall off",
+ "category": "Essential Tweaks",
+ "panel": "1",
+ "Order": "a011_",
+ "registry": [
+ {
+
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsAI",
+ "Name": "DisableAIDataAnalysis",
+ "Type": "DWord",
+ "Value": "1",
+ "OriginalValue": "0"
+ }
+ ],
+ "InvokeScript": [
+ "
+ Write-Host \"Disable Recall\"
+ DISM /Online /Disable-Feature /FeatureName:Recall
+ "
+ ],
+ "UndoScript": [
+ "
+ Write-Host \"Enable Recall\"
+ DISM /Online /Enable-Feature /FeatureName:Recall
+ "
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/DisableRecall"
+ },
"WPFTweaksDisableLMS1": {
"Content": "Disable Intel MM (vPro LMS)",
"Description": "Intel LMS service is always listening on all ports and could be a huge security risk. There is no need to run LMS on home machines and even in the Enterprise there are better solutions.",
diff --git a/docs/dev/tweaks/Essential-Tweaks/DisableRecall.md b/docs/dev/tweaks/Essential-Tweaks/DisableRecall.md
new file mode 100644
index 00000000..6635a7dc
--- /dev/null
+++ b/docs/dev/tweaks/Essential-Tweaks/DisableRecall.md
@@ -0,0 +1,91 @@
+# Disable Microsoft Recall
+
+Last Updated: 2024-10-24
+
+
+!!! info
+ The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.**
+## Description
+
+Disables MS Recall built into Windows since 24H2.
+
+
+
+
+
+
+Preview Code
+
+```json
+"WPFTweaksRecallOff": {
+ "Content": "Disable Recall",
+ "Description": "Turn Recall off",
+ "category": "Essential Tweaks",
+ "panel": "1",
+ "Order": "a011_",
+ "registry": [
+ {
+
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsAI",
+ "Name": "DisableAIDataAnalysis",
+ "Type": "DWord",
+ "Value": "1",
+ "OriginalValue": "0"
+ }
+ ],
+ "InvokeScript": [
+ "
+ Write-Host \"Disable Recall\"
+ DISM /Online /Disable-Feature /FeatureName:Recall
+ "
+ ],
+ "UndoScript": [
+ "
+ Write-Host \"Enable Recall\"
+ DISM /Online /Enable-Feature /FeatureName:Recall
+ "
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/DisableRecall"
+ },
+```
+
+
+
+## Invoke Script
+
+```powershell
+
+ Write-Host "Disable Recall"
+ DISM /Online /Disable-Feature /FeatureName:Recall
+
+
+```
+## Undo Script
+
+```powershell
+
+ Write-Host "Enable Recall"
+ DISM /Online /Enable-Feature /FeatureName:Recall
+
+
+```
+## Registry Changes
+Applications and System Components store and retrieve configuration data to modify windows settings, so we can use the registry to change many settings in one place.
+
+
+You can find information about the registry on [Wikipedia](https://www.wikiwand.com/en/Windows_Registry) and [Microsoft's Website](https://learn.microsoft.com/en-us/windows/win32/sysinfo/registry).
+
+### Registry Key: DisableAIDataAnalysis
+
+**Type:** DWord
+
+**Original Value:** 0
+
+**New Value:** 1
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
diff --git a/functions/private/Copy-Files.ps1 b/functions/private/Copy-Files.ps1
index 33342916..fafb4b51 100644
--- a/functions/private/Copy-Files.ps1
+++ b/functions/private/Copy-Files.ps1
@@ -19,10 +19,10 @@ function Copy-Files {
try {
$files = Get-ChildItem -Path $path -Recurse:$recurse
- Write-Host "Copy $($files.Count)(s) from $path to $destination"
+ Write-Host "Copy $($files.Count) file(s) from $path to $destination"
foreach ($file in $files) {
- $status = "Copy files {0} on {1}: {2}" -f $counter, $files.Count, $file.Name
+ $status = "Copying file {0} of {1}: {2}" -f $counter, $files.Count, $file.Name
Write-Progress -Activity "Copy Windows files" -Status $status -PercentComplete ($counter++/$files.count*100)
$restpath = $file.FullName -Replace $path, ''
@@ -37,7 +37,11 @@ function Copy-Files {
}
Write-Progress -Activity "Copy Windows files" -Status "Ready" -Completed
} catch {
- Write-Warning "Unable to Copy all the files due to unhandled exception"
- Write-Warning $psitem.Exception.StackTrace
+ Write-Host "Unable to Copy all the files due to an unhandled exception" -ForegroundColor Yellow
+ Write-Host "Error information: $($_.Exception.Message)`n" -ForegroundColor Yellow
+ Write-Host "Additional information:" -ForegroundColor Yellow
+ Write-Host $PSItem.Exception.StackTrace
+ # Write possible suggestions
+ Write-Host "`nIf you are using an antivirus, try configuring exclusions"
}
}
diff --git a/functions/private/Invoke-WinUtilMicroWin-Helper.ps1 b/functions/private/Invoke-WinUtilMicroWin-Helper.ps1
index 1f80269b..c1ca7ad0 100644
--- a/functions/private/Invoke-WinUtilMicroWin-Helper.ps1
+++ b/functions/private/Invoke-WinUtilMicroWin-Helper.ps1
@@ -25,6 +25,17 @@ function Test-CompatibleImage() {
}
}
+class ErroredPackage {
+ [string]$PackageName
+ [string]$ErrorMessage
+ ErroredPackage() { $this.Init(@{} )}
+ # Constructor for packages that have errored out
+ ErroredPackage([string]$pkgName, [string]$reason) {
+ $this.PackageName = $pkgName
+ $this.ErrorMessage = $reason
+ }
+}
+
function Get-FidoLangFromCulture {
param (
@@ -98,6 +109,7 @@ function Remove-Features() {
$_.FeatureName -NotLike "*Media*" -AND
$_.FeatureName -NotLike "*NFS*" -AND
$_.FeatureName -NotLike "*SearchEngine*" -AND
+ $_.FeatureName -NotLike "*RemoteDesktop*" -AND
$_.State -ne "Disabled"
}
@@ -157,27 +169,54 @@ function Remove-Packages {
$_ -NotLike "*WMIC*" -AND
$_ -NotLike "*UI.XaML*" -AND
$_ -NotLike "*Ethernet*" -AND
- $_ -NotLike "*Wifi*"
+ $_ -NotLike "*Wifi*" -AND
+ $_ -NotLike "*FodMetadata*" -AND
+ $_ -NotLike "*Foundation*" -AND
+ $_ -NotLike "*LanguageFeatures*" -AND
+ $_ -NotLike "*VBSCRIPT*" -AND
+ $_ -NotLike "*License*"
}
$failedCount = 0
+ $erroredPackages = [System.Collections.Generic.List[ErroredPackage]]::new()
+
foreach ($pkg in $pkglist) {
try {
$status = "Removing $pkg"
- Write-Progress -Activity "Removing Apps" -Status $status -PercentComplete ($counter++/$pkglist.Count*100)
+ Write-Progress -Activity "Removing Packages" -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)"
+ # This can happen if the package that is being removed is a permanent one
+ $erroredPackages.Add([ErroredPackage]::new($pkg, $_.Exception.Message))
$failedCount += 1
continue
}
}
- Write-Progress -Activity "Removing Apps" -Status "Ready" -Completed
+ Write-Progress -Activity "Removing Packages" -Status "Ready" -Completed
if ($failedCount -gt 0)
{
- Write-Host "Some packages could not be removed. Do not worry: your image will still work fine. This can happen if the package is permanent or has been superseded by a newer one."
+ Write-Host "$failedCount package(s) could not be removed. Your image will still work fine, however. Below is information on what packages failed to be removed and why."
+ if ($erroredPackages.Count -gt 0)
+ {
+ $erroredPackages = $erroredPackages | Sort-Object -Property ErrorMessage
+
+ $previousErroredPackage = $erroredPackages[0]
+ $counter = 0
+ Write-Host ""
+ Write-Host "- $($previousErroredPackage.ErrorMessage)"
+ foreach ($erroredPackage in $erroredPackages) {
+ if ($erroredPackage.ErrorMessage -ne $previousErroredPackage.ErrorMessage) {
+ Write-Host ""
+ $counter = 0
+ Write-Host "- $($erroredPackage.ErrorMessage)"
+ }
+ $counter += 1
+ Write-Host " $counter) $($erroredPackage.PackageName)"
+ $previousErroredPackage = $erroredPackage
+ }
+ Write-Host ""
+ }
}
} catch {
Write-Host "Unable to get information about the packages. MicroWin processing will continue, but packages will not be processed"
@@ -201,13 +240,8 @@ function Remove-ProvisionedPackages() {
$appxProvisionedPackages = Get-AppxProvisionedPackage -Path "$($scratchDir)" | Where-Object {
$_.PackageName -NotLike "*AppInstaller*" -AND
$_.PackageName -NotLike "*Store*" -and
- $_.PackageName -NotLike "*dism*" -and
- $_.PackageName -NotLike "*Foundation*" -and
- $_.PackageName -NotLike "*FodMetadata*" -and
- $_.PackageName -NotLike "*LanguageFeatures*" -and
$_.PackageName -NotLike "*Notepad*" -and
$_.PackageName -NotLike "*Printing*" -and
- $_.PackageName -NotLike "*Foundation*" -and
$_.PackageName -NotLike "*YourPhone*" -and
$_.PackageName -NotLike "*Xbox*" -and
$_.PackageName -NotLike "*WindowsTerminal*" -and
@@ -242,6 +276,31 @@ function Remove-ProvisionedPackages() {
}
}
+function Get-LocalizedUsers
+{
+ <#
+ .SYNOPSIS
+ Gets a localized user group representation for ICACLS commands (Port from DISMTools PE Helper)
+ .PARAMETER admins
+ Determines whether to get a localized user group representation for the Administrators user group
+ .OUTPUTS
+ A string containing the localized user group
+ .EXAMPLE
+ Get-LocalizedUsers -admins $true
+ #>
+ param (
+ [Parameter(Mandatory = $true, Position = 0)] [bool]$admins
+ )
+ if ($admins)
+ {
+ return (Get-LocalGroup | Where-Object { $_.SID.Value -like "S-1-5-32-544" }).Name
+ }
+ else
+ {
+ return (Get-LocalGroup | Where-Object { $_.SID.Value -like "S-1-5-32-545" }).Name
+ }
+}
+
function Copy-ToUSB([string]$fileToCopy) {
foreach ($volume in Get-Volume) {
if ($volume -and $volume.FileSystemLabel -ieq "ventoy") {
@@ -625,70 +684,70 @@ function New-CheckInstall {
# using here string to embedd firstrun
$checkInstall = @'
@echo off
- if exist "C:\windows\cpu.txt" (
- echo C:\windows\cpu.txt exists
+ if exist "%HOMEDRIVE%\windows\cpu.txt" (
+ echo %HOMEDRIVE%\windows\cpu.txt exists
) else (
- echo C:\windows\cpu.txt does not exist
+ echo %HOMEDRIVE%\windows\cpu.txt does not exist
)
- if exist "C:\windows\SerialNumber.txt" (
- echo C:\windows\SerialNumber.txt exists
+ if exist "%HOMEDRIVE%\windows\SerialNumber.txt" (
+ echo %HOMEDRIVE%\windows\SerialNumber.txt exists
) else (
- echo C:\windows\SerialNumber.txt does not exist
+ echo %HOMEDRIVE%\windows\SerialNumber.txt does not exist
)
- if exist "C:\unattend.xml" (
- echo C:\unattend.xml exists
+ if exist "%HOMEDRIVE%\unattend.xml" (
+ echo %HOMEDRIVE%\unattend.xml exists
) else (
- echo C:\unattend.xml does not exist
+ echo %HOMEDRIVE%\unattend.xml does not exist
)
- if exist "C:\Windows\Setup\Scripts\SetupComplete.cmd" (
- echo C:\Windows\Setup\Scripts\SetupComplete.cmd exists
+ if exist "%HOMEDRIVE%\Windows\Setup\Scripts\SetupComplete.cmd" (
+ echo %HOMEDRIVE%\Windows\Setup\Scripts\SetupComplete.cmd exists
) else (
- echo C:\Windows\Setup\Scripts\SetupComplete.cmd does not exist
+ echo %HOMEDRIVE%\Windows\Setup\Scripts\SetupComplete.cmd does not exist
)
- if exist "C:\Windows\Panther\unattend.xml" (
- echo C:\Windows\Panther\unattend.xml exists
+ if exist "%HOMEDRIVE%\Windows\Panther\unattend.xml" (
+ echo %HOMEDRIVE%\Windows\Panther\unattend.xml exists
) else (
- echo C:\Windows\Panther\unattend.xml does not exist
+ echo %HOMEDRIVE%\Windows\Panther\unattend.xml does not exist
)
- if exist "C:\Windows\System32\Sysprep\unattend.xml" (
- echo C:\Windows\System32\Sysprep\unattend.xml exists
+ if exist "%HOMEDRIVE%\Windows\System32\Sysprep\unattend.xml" (
+ echo %HOMEDRIVE%\Windows\System32\Sysprep\unattend.xml exists
) else (
- echo C:\Windows\System32\Sysprep\unattend.xml does not exist
+ echo %HOMEDRIVE%\Windows\System32\Sysprep\unattend.xml does not exist
)
- if exist "C:\Windows\FirstStartup.ps1" (
- echo C:\Windows\FirstStartup.ps1 exists
+ if exist "%HOMEDRIVE%\Windows\FirstStartup.ps1" (
+ echo %HOMEDRIVE%\Windows\FirstStartup.ps1 exists
) else (
- echo C:\Windows\FirstStartup.ps1 does not exist
+ echo %HOMEDRIVE%\Windows\FirstStartup.ps1 does not exist
)
- if exist "C:\Windows\winutil.ps1" (
- echo C:\Windows\winutil.ps1 exists
+ if exist "%HOMEDRIVE%\Windows\winutil.ps1" (
+ echo %HOMEDRIVE%\Windows\winutil.ps1 exists
) else (
- echo C:\Windows\winutil.ps1 does not exist
+ echo %HOMEDRIVE%\Windows\winutil.ps1 does not exist
)
- if exist "C:\Windows\LogSpecialize.txt" (
- echo C:\Windows\LogSpecialize.txt exists
+ if exist "%HOMEDRIVE%\Windows\LogSpecialize.txt" (
+ echo %HOMEDRIVE%\Windows\LogSpecialize.txt exists
) else (
- echo C:\Windows\LogSpecialize.txt does not exist
+ echo %HOMEDRIVE%\Windows\LogSpecialize.txt does not exist
)
- if exist "C:\Windows\LogAuditUser.txt" (
- echo C:\Windows\LogAuditUser.txt exists
+ if exist "%HOMEDRIVE%\Windows\LogAuditUser.txt" (
+ echo %HOMEDRIVE%\Windows\LogAuditUser.txt exists
) else (
- echo C:\Windows\LogAuditUser.txt does not exist
+ echo %HOMEDRIVE%\Windows\LogAuditUser.txt does not exist
)
- if exist "C:\Windows\LogOobeSystem.txt" (
- echo C:\Windows\LogOobeSystem.txt exists
+ if exist "%HOMEDRIVE%\Windows\LogOobeSystem.txt" (
+ echo %HOMEDRIVE%\Windows\LogOobeSystem.txt exists
) else (
- echo C:\Windows\LogOobeSystem.txt does not exist
+ echo %HOMEDRIVE%\Windows\LogOobeSystem.txt does not exist
)
- if exist "c:\windows\csup.txt" (
- echo c:\windows\csup.txt exists
+ if exist "%HOMEDRIVE%\windows\csup.txt" (
+ echo %HOMEDRIVE%\windows\csup.txt exists
) else (
- echo c:\windows\csup.txt does not exist
+ echo %HOMEDRIVE%\windows\csup.txt does not exist
)
- if exist "c:\windows\LogFirstRun.txt" (
- echo c:\windows\LogFirstRun.txt exists
+ if exist "%HOMEDRIVE%\windows\LogFirstRun.txt" (
+ echo %HOMEDRIVE%\windows\LogFirstRun.txt exists
) else (
- echo c:\windows\LogFirstRun.txt does not exist
+ echo %HOMEDRIVE%\windows\LogFirstRun.txt does not exist
)
'@
$checkInstall | Out-File -FilePath "$env:temp\checkinstall.cmd" -Force -Encoding Ascii
@@ -726,7 +785,7 @@ function New-FirstRun {
}
}
- "FirstStartup has worked" | Out-File -FilePath c:\windows\LogFirstRun.txt -Append -NoClobber
+ "FirstStartup has worked" | Out-File -FilePath "$env:HOMEDRIVE\windows\LogFirstRun.txt" -Append -NoClobber
$taskbarPath = "$env:AppData\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar"
# Delete all files on the Taskbar
@@ -746,7 +805,7 @@ function New-FirstRun {
}
}
Remove-Item -Path "$env:USERPROFILE\Desktop\*.lnk"
- Remove-Item -Path "C:\Users\Default\Desktop\*.lnk"
+ Remove-Item -Path "$env:HOMEDRIVE\Users\Default\Desktop\*.lnk"
# ************************************************
# Create WinUtil shortcut on the desktop
@@ -762,8 +821,8 @@ function New-FirstRun {
# Create a shortcut object
$shortcut = $shell.CreateShortcut($shortcutPath)
- if (Test-Path -Path "c:\Windows\cttlogo.png") {
- $shortcut.IconLocation = "c:\Windows\cttlogo.png"
+ if (Test-Path -Path "$env:HOMEDRIVE\Windows\cttlogo.png") {
+ $shortcut.IconLocation = "$env:HOMEDRIVE\Windows\cttlogo.png"
}
# Set properties of the shortcut
@@ -783,8 +842,17 @@ function New-FirstRun {
# Done create WinUtil shortcut on the desktop
# ************************************************
- Start-Process explorer
+ try
+ {
+ if ((Get-WindowsOptionalFeature -Online | Where-Object { $_.FeatureName -like "Recall" }).Count -gt 0)
+ {
+ Disable-WindowsOptionalFeature -Online -FeatureName "Recall" -Remove
+ }
+ }
+ catch
+ {
+ }
'@
$firstRun | Out-File -FilePath "$env:temp\FirstStartup.ps1" -Force
}
diff --git a/functions/private/Set-WinUtilRegistry.ps1 b/functions/private/Set-WinUtilRegistry.ps1
index 397ce84c..d2141800 100644
--- a/functions/private/Set-WinUtilRegistry.ps1
+++ b/functions/private/Set-WinUtilRegistry.ps1
@@ -36,7 +36,7 @@ function Set-WinUtilRegistry {
}
Write-Host "Set $Path\$Name to $Value"
- if ($Value -ne ""){
+ if ($Value -ne "") {
Set-ItemProperty -Path $Path -Name $Name -Type $Type -Value $Value -Force -ErrorAction Stop | Out-Null
}
else{
diff --git a/functions/public/Invoke-WPFMicrowin.ps1 b/functions/public/Invoke-WPFMicrowin.ps1
index 78cced29..966d6a07 100644
--- a/functions/public/Invoke-WPFMicrowin.ps1
+++ b/functions/public/Invoke-WPFMicrowin.ps1
@@ -51,10 +51,6 @@ public class PowerManagement {
$index = $sync.MicrowinWindowsFlavors.SelectedValue.Split(":")[0].Trim()
Write-Host "Index chosen: '$index' from $($sync.MicrowinWindowsFlavors.SelectedValue)"
- $keepPackages = $sync.WPFMicrowinKeepProvisionedPackages.IsChecked
- $keepProvisionedPackages = $sync.WPFMicrowinKeepAppxPackages.IsChecked
- $keepDefender = $sync.WPFMicrowinKeepDefender.IsChecked
- $keepEdge = $sync.WPFMicrowinKeepEdge.IsChecked
$copyToUSB = $sync.WPFMicrowinCopyToUsb.IsChecked
$injectDrivers = $sync.MicrowinInjectDrivers.IsChecked
$importDrivers = $sync.MicrowinImportDrivers.IsChecked
@@ -91,6 +87,14 @@ public class PowerManagement {
return
}
+ # Detect whether the image to process contains Windows 10 and show warning
+ if ((Test-CompatibleImage $imgVersion $([System.Version]::new(10,0,21996,1))) -eq $false) {
+ $msg = "Windows 10 has been detected in the image you want to process. While you can continue, Windows 10 is not a recommended target for MicroWin, and you may not get the full experience."
+ $dlg_msg = $msg
+ Write-Host $msg
+ [System.Windows.MessageBox]::Show($dlg_msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Exclamation)
+ }
+
$mountDirExists = Test-Path $mountDir
$scratchDirExists = Test-Path $scratchDir
if (-not $mountDirExists -or -not $scratchDirExists) {
@@ -158,6 +162,35 @@ public class PowerManagement {
Write-Host "Removing Appx Bloat"
Remove-ProvisionedPackages
+ # Detect Windows 11 24H2 and add dependency to FileExp to prevent Explorer look from going back - thanks @WitherOrNot and @thecatontheceiling
+ if ((Test-CompatibleImage $imgVersion $([System.Version]::new(10,0,26100,1))) -eq $true)
+ {
+ try
+ {
+ if (Test-Path "$scratchDir\Windows\SystemApps\MicrosoftWindows.Client.FileExp_cw5n1h2txyewy\appxmanifest.xml" -PathType Leaf)
+ {
+ # Found the culprit. Do the following:
+
+ # 1. Take ownership of the file, from TrustedInstaller to Administrators
+ takeown /F "$scratchDir\Windows\SystemApps\MicrosoftWindows.Client.FileExp_cw5n1h2txyewy\appxmanifest.xml" /A
+
+ # 2. Set ACLs so that we can write to it
+ icacls "$scratchDir\Windows\SystemApps\MicrosoftWindows.Client.FileExp_cw5n1h2txyewy\appxmanifest.xml" /grant "$(Get-LocalizedUsers -admins $true):(M)" | Out-Host
+
+ # 3. Open the file and do the modification
+ $appxManifest = Get-Content -Path "$scratchDir\Windows\SystemApps\MicrosoftWindows.Client.FileExp_cw5n1h2txyewy\appxmanifest.xml"
+ $originalLine = $appxManifest[13]
+ $dependency = "`n "
+ $appxManifest[13] = "$originalLine$dependency"
+ Set-Content -Path "$scratchDir\Windows\SystemApps\MicrosoftWindows.Client.FileExp_cw5n1h2txyewy\appxmanifest.xml" -Value $appxManifest -Force -Encoding utf8
+ }
+ }
+ catch
+ {
+
+ }
+ }
+
Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\LogFiles\WMI\RtBackup" -Directory
Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\DiagTrack" -Directory
Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\InboxApps" -Directory
@@ -238,6 +271,9 @@ public class PowerManagement {
# Write-Host Error code $LASTEXITCODE
Write-Host "Done disabling Teams"
+ Write-Host "Fix Windows Volume Mixer Issue"
+ reg add "HKLM\zNTUSER\Software\Microsoft\Internet Explorer\LowRegistry\Audio\PolicyConfig\PropertyStore" /f
+
Write-Host "Bypassing system requirements (system image)"
reg add "HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f
reg add "HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f
@@ -289,6 +325,19 @@ public class PowerManagement {
reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize" /v "AppsUseLightTheme" /t REG_DWORD /d 0 /f
reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize" /v "SystemUsesLightTheme" /t REG_DWORD /d 0 /f
+ if ((Test-CompatibleImage $imgVersion $([System.Version]::new(10,0,21996,1))) -eq $false) {
+ # We're dealing with Windows 10. Configure sane desktop settings. NOTE: even though stuff to disable News and Interests is there,
+ # it doesn't seem to work, and I don't want to waste more time dealing with an operating system that will lose support in a year (2025)
+
+ # I invite anyone to work on improving stuff for News and Interests, but that won't be me!
+
+ Write-Host "Disabling Search Highlights..."
+ reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\Feeds\DSB" /v "ShowDynamicContent" /t REG_DWORD /d 0 /f
+ reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\SearchSettings" /v "IsDynamicSearchBoxEnabled" /t REG_DWORD /d 0 /f
+ reg add "HKLM\zSOFTWARE\Policies\Microsoft\Dsh" /v "AllowNewsAndInterests" /t REG_DWORD /d 0 /f
+ reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "TraySearchBoxVisible" /t REG_DWORD /d 1 /f
+ }
+
} catch {
Write-Error "An unexpected error occurred: $_"
} finally {
diff --git a/scripts/main.ps1 b/scripts/main.ps1
index 873aab4d..9186fb9c 100644
--- a/scripts/main.ps1
+++ b/scripts/main.ps1
@@ -410,10 +410,8 @@ $sync["ISOmanual"].add_Checked({
$sync["ISOLanguage"].Visibility = [System.Windows.Visibility]::Collapsed
})
-$sync["ISORelease"].Items.Add("23H2") | Out-Null
-$sync["ISORelease"].Items.Add("22H2") | Out-Null
-$sync["ISORelease"].Items.Add("21H2") | Out-Null
-$sync["ISORelease"].SelectedItem = "23H2"
+$sync["ISORelease"].Items.Add("24H2") | Out-Null
+$sync["ISORelease"].SelectedItem = "24H2"
$sync["ISOLanguage"].Items.Add("System Language ($(Get-FidoLangFromCulture -langName $((Get-Culture).Name)))") | Out-Null
if ($currentCulture -ne "English International") {
diff --git a/xaml/inputXML.xaml b/xaml/inputXML.xaml
index d2baa016..db6894f4 100644
--- a/xaml/inputXML.xaml
+++ b/xaml/inputXML.xaml
@@ -1040,7 +1040,7 @@
HorizontalAlignment="Stretch">
-
+
Choose a Windows ISO file that you've downloaded
Check the status in the console