From e4438cb8a6c49079ed5dfbaa8b004b5dba796561 Mon Sep 17 00:00:00 2001 From: dado Date: Sun, 28 Sep 2025 19:13:06 +0200 Subject: [PATCH] migliorato lo script, aggiungendo diverse sezioni, e testato il funzionamento --- configwinpc.ps1 | 414 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 289 insertions(+), 125 deletions(-) diff --git a/configwinpc.ps1 b/configwinpc.ps1 index 041c898..c635a20 100644 --- a/configwinpc.ps1 +++ b/configwinpc.ps1 @@ -1,9 +1,6 @@ # https://github.com/andrew-s-taylor/public/blob/main/De-Bloat/RemoveBloat.ps1 # https://github.com/marlock9/edge-debloat/blob/main/edge-debloat.reg -## TODO -# Taskbar settings, Edge and bloatware for all users - clear-Host # Open PowerShell as administrator @@ -13,39 +10,20 @@ if (-Not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdenti } Write-Host "" -Write-Host -ForegroundColor Yellow "### SCRIPT -FOR CONFIGURING -AND -DEBLOATING -WINDOWS 11 ###" +Write-Host -ForegroundColor Yellow " -########################################################################################## -# # -# Execution policy # -# # -########################################################################################## + ###################################################### + # # + # # + # SCRIPT FOR CONFIGURING AND DEBLOATING WINDOWS 11 # + # # + # by dado # + ###################################################### -Write-Host "" - -# Check the current execution policy -$currentPolicy = Get-ExecutionPolicy -Scope LocalMachine - -# Define the desired execution policy -$desiredPolicy = "RemoteSigned" - -# If the current policy is not the desired one, change it -if ($currentPolicy -ne $desiredPolicy) { - # Change the policy (requires admin rights) - Set-ExecutionPolicy -ExecutionPolicy $desiredPolicy -Scope LocalMachine -Force | Out-Null - - # Confirm the change - Write-Host -ForegroundColor Yellow "Execution policy changed to '$desiredPolicy'." -} else { - Write-Host -ForegroundColor DarkGreen "Current execution policy is already set to '$currentPolicy'." -} +" # Sleep for 5 seconds -Start-Sleep -Seconds 5 +Start-Sleep -Seconds 10 clear-Host @@ -59,12 +37,14 @@ clear-Host Write-Host "" Write-Host -ForegroundColor Yellow ">>> Upgrade packages... <<<" -winget upgrade --all --disable-interactivity Write-Host "" -Write-Host -ForegroundColor Yellow ">>> Install default software... <<<" -winget install --disable-interactivity Microsoft.PowerShell Adobe.Acrobat.Reader.64-bit IZArc.IZArc Oracle.JavaRuntimeEnvironment Google.Chrome 7zip.7zip Microsoft.VCRedist.2010.x64 --source winget +winget upgrade --all Write-Host "" +#Write-Host -ForegroundColor Yellow ">>> Install default software... <<<" +#Write-Host "" +#winget install --disable-interactivity Microsoft.PowerShell Adobe.Acrobat.Reader.64-bit IZArc.IZArc Oracle.JavaRuntimeEnvironment Google.Chrome 7zip.7zip Microsoft.VCRedist.2010.x64 --source winget + Write-Host -ForegroundColor DarkGray ">>> Copy 'Supremo' to Public Desktop <<<" $supremo_path=".\supremo.exe" If (Test-Path $supremo_path ) { @@ -81,33 +61,70 @@ Write-Host "" # Taskbar Adjustment Write-Host -ForegroundColor Yellow ">>> Manage Taskbar <<<" Write-Host "" + +# Define registry paths for taskbar settings +$RegistryPaths = @( + "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced", + "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced", + "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Search", + "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer", + "HKLM:\Software\Microsoft\Windows\CurrentVersion\Explorer" +) + +# Set left align Write-Host -ForegroundColor DarkGray ">>> Set left align <<<" -New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "TaskbarAl" -Value "0" -Type DWORD -Force | Out-Null +foreach ($path in $RegistryPaths[0..1]) { + New-ItemProperty -Path $path -Name "TaskbarAl" -Value 0 -Type DWORD -Force | Out-Null +} +# Hide search Write-Host -ForegroundColor DarkGray ">>> Hide search <<<" -New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" -Name "SearchBoxTaskbarMode" -Value "0" -Type DWORD -Force | Out-Null +Set-ItemProperty -Path $RegistryPaths[2] -Name "SearchBoxTaskbarMode" -Value 0 -Type DWORD -Force | Out-Null +# Hide TaskView button Write-Host -ForegroundColor DarkGray ">>> Hide TaskView button <<<" -New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "ShowTaskViewButton" -Value "0" -Type DWORD -Force | Out-Null +foreach ($path in $RegistryPaths[0..1]) { + Set-ItemProperty -Path $path -Name "ShowTaskViewButton" -Value 0 -Type DWORD -Force | Out-Null +} +# Disable widgets in the taskbar Write-Host -ForegroundColor DarkGray ">>> Disable widgets in the taskbar <<<" -Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "TaskbarWidgetsEnabled" -Value "0" | Out-Null +Set-ItemProperty -Path $RegistryPaths[0] -Name "TaskbarWidgetsEnabled" -Value 0 | Out-Null +Set-ItemProperty -Path $RegistryPaths[1] -Name "TaskbarWidgetsEnabled" -Value 0 | Out-Null +# Disable the 'Windows + W' keyboard shortcut to open widgets Write-Host -ForegroundColor DarkGray ">>> Disable the 'Windows + W' keyboard shortcut to open widgets <<<" -Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer" -Name "ShowWindowsW" -Value "0" | Out-Null +Set-ItemProperty -Path $RegistryPaths[3] -Name "ShowWindowsW" -Value 0 | Out-Null +Set-ItemProperty -Path $RegistryPaths[4] -Name "ShowWindowsW" -Value 0 | Out-Null +# Remove Chat from the Taskbar Write-Host -ForegroundColor DarkGray ">>> Removes Chat from the Taskbar <<<" -New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "TaskbarMn" -Value "0" -PropertyType DWORD -Force | Out-Null +foreach ($path in $RegistryPaths[0..1]) { + New-ItemProperty -Path $path -Name "TaskbarMn" -Value 0 -PropertyType DWORD -Force | Out-Null +} +# Disabling 'Recommended' section Write-Host -ForegroundColor DarkGray ">>> Disabling 'Recommended' section <<<" -New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "Start_IrisRecommendations" -Value "0" -Type DWORD -Force | Out-Null -New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "Start_TrackDocs" -Value "0" -Type DWORD -Force | Out-Null -New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "Start_Layout" -Value "1" -Type DWORD -Force | Out-Null +foreach ($path in $RegistryPaths) { + New-ItemProperty -Path $path -Name "Start_IrisRecommendations" -Value 0 -Type DWORD -Force | Out-Null + New-ItemProperty -Path $path -Name "Start_TrackDocs" -Value 0 -Type DWORD -Force | Out-Null + New-ItemProperty -Path $path -Name "Start_Layout" -Value 1 -Type DWORD -Force | Out-Null +} + Write-Host "" -$taskbarDa_path = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -If (Test-Path $taskbarDa_path\TaskbarDa) { - Remove-ItemProperty "$taskbarDa_path" -Name "TaskbarDa" -Force | Out-Null +# Define the registry paths for TaskbarDa +$RegistryPaths = @( + "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced", + "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" +) + +# Iterate over each registry path +foreach ($taskbarDa_path in $RegistryPaths) { + # Check if the TaskbarDa property exists and remove it if it does + If (Test-Path "$taskbarDa_path\TaskbarDa") { + Remove-ItemProperty -Path $taskbarDa_path -Name "TaskbarDa" -Force | Out-Null + } } ########################################################################################## @@ -119,13 +136,35 @@ If (Test-Path $taskbarDa_path\TaskbarDa) { Write-Host -ForegroundColor Yellow ">>> Configure File Explorer <<<" Write-Host "" Write-Host -ForegroundColor DarkGray ">>> Set File Explorer to Open to This PC Instead of Quick Access <<<" -New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "LaunchTo" -Value "1" -Type DWORD -Force | Out-Null - Write-Host -ForegroundColor DarkGray ">>> Enable Compact View <<<" -New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "UseCompactMode" -Value "1" -Force | Out-Null - Write-Host -ForegroundColor DarkGray ">>> Show file extensions in Explorer <<<" -New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "HideFileExt" -Value "0" -Type DWORD -Force | Out-Null + +# Set the registry paths for both HKLM and HKCU +$RegistryPaths = @( + "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced", + "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" +) + +# Create a hashtable to store the property names and their corresponding values +$ExplorerProperties = @{ + "LaunchTo" = 1 + "UseCompactMode" = 1 + "HideFileExt" = 0 +} + +# Iterate over each registry path +foreach ($RegistryPath in $RegistryPaths) { + # Create the key if it does not exist + If (-NOT (Test-Path $RegistryPath)) { + New-Item -Path $RegistryPath -Force | Out-Null + } + + # Set the values based on the hashtable + foreach ($Name in $ExplorerProperties.Keys) { + $Value = $ExplorerProperties[$Name] + New-ItemProperty -Path $RegistryPath -Name $Name -Value $Value -PropertyType DWORD -Force | Out-Null + } +} ########################################################################################## # # @@ -135,26 +174,72 @@ New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer Write-Host "" Write-Host -ForegroundColor Yellow ">>> Disable Spotlight <<<" - Write-Host "" + +# Define registry paths for Windows Spotlight settings +$RegistryPaths = @( + "HKCU:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager", + "HKLM:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager", + "HKCU:\Software\Policies\Microsoft\Windows\CloudContent", + "HKLM:\Software\Policies\Microsoft\Windows\CloudContent" +) + +# Disable Windows Spotlight on lockscreen Write-Host -ForegroundColor DarkGray ">>> Disabling Windows Spotlight on lockscreen <<<" -$spotlight = "HKCU:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -If (Test-Path $spotlight) { - Set-ItemProperty $spotlight -Name "RotatingLockScreenOverlayEnabled" -Value "0" - Set-ItemProperty $spotlight -Name "RotatingLockScreenEnabled" -Value "0" +foreach ($spotlight in $RegistryPaths[0..1]) { + If (Test-Path $spotlight) { + Set-ItemProperty -Path $spotlight -Name "RotatingLockScreenOverlayEnabled" -Value 0 -Force | Out-Null + Set-ItemProperty -Path $spotlight -Name "RotatingLockScreenEnabled" -Value 0 -Force | Out-Null + } } +# Disable Windows Spotlight on background Write-Host -ForegroundColor DarkGray ">>> Disabling Windows Spotlight on background <<<" -$spotlight = "HKCU:\Software\Policies\Microsoft\Windows\CloudContent" -If (Test-Path $spotlight) { - Set-ItemProperty $spotlight -Name "DisableSpotlightCollectionOnDesktop" -Value "1" - Set-ItemProperty $spotlight -Name "DisableWindowsSpotlightFeatures" -Value "1" +foreach ($spotlight in $RegistryPaths[2..3]) { + If (Test-Path $spotlight) { + Set-ItemProperty -Path $spotlight -Name "DisableSpotlightCollectionOnDesktop" -Value 1 -Force | Out-Null + Set-ItemProperty -Path $spotlight -Name "DisableWindowsSpotlightFeatures" -Value 1 -Force | Out-Null + } } +########################################################################################## +# # +# Lock Screen Notifications # +# # +########################################################################################## + Write-Host "" Write-Host -ForegroundColor Yellow ">>> Disable Notifications on Lock Screen <<<" -New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Notifications\Settings" -Name "NOC_GLOBAL_SETTING_ALLOW_TOASTS_ABOVE_LOCK" -Value "0" -Type DWORD -Force | Out-Null -New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\PushNotifications" -Name "LockScreenToastEnabled" -Value "0" -Type DWORD -Force | Out-Null + +# Set the registry paths for notifications settings +$RegistryPaths = @( + "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Notifications\Settings", + "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Notifications\Settings", + "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\PushNotifications" + "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\PushNotifications" +) + +# Create a hashtable to store the property names and their corresponding values +$NotificationProperties = @{ + "NOC_GLOBAL_SETTING_ALLOW_TOASTS_ABOVE_LOCK" = 0 + "LockScreenToastEnabled" = 0 +} + +# Iterate over each registry path +foreach ($RegistryPath in $RegistryPaths) { + # Create the key if it does not exist + If (-NOT (Test-Path $RegistryPath)) { + New-Item -Path $RegistryPath -Force | Out-Null + } + + # Set the values based on the hashtable + foreach ($Name in $NotificationProperties.Keys) { + $Value = $NotificationProperties[$Name] + New-ItemProperty -Path $RegistryPath -Name $Name -Value $Value -PropertyType DWORD -Force | Out-Null + } +} + +Write-Host "" ########################################################################################## # # @@ -162,12 +247,45 @@ New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\PushNoti # # ########################################################################################## +Write-Host -ForegroundColor Yellow ">>> Change Control Panel View <<<" + +# Set the registry paths for both HKLM and HKCU +$RegistryPaths = @( + "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel", + "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel" +) + +# Create a hashtable to store the property names and their corresponding values +$ControlPanelProperties = @{ + "AllItemsIconView" = 1 + "StartupPage" = 1 +} + +# Iterate over each registry path +foreach ($RegistryPath in $RegistryPaths) { + # Create the key if it does not exist + If (-NOT (Test-Path $RegistryPath)) { + New-Item -Path $RegistryPath -Force | Out-Null + } + + # Set the values based on the hashtable + foreach ($Name in $ControlPanelProperties.Keys) { + $Value = $ControlPanelProperties[$Name] + New-ItemProperty -Path $RegistryPath -Name $Name -Value $Value -PropertyType DWORD -Force | Out-Null + } +} + Write-Host "" -Write-Host -ForegroundColor DarkGray ">>> Change Control Panel View <<<" -New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel" -Name "AllItemsIconView" -Value "1" -Type DWORD -Force | Out-Null -New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel" -Name "StartupPage" -Value "1" -Type DWORD -Force | Out-Null -New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel" -Name "AllItemsIconView" -Value "1" -Type DWORD -Force | Out-Null -New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel" -Name "StartupPage" -Value "1" -Type DWORD -Force | Out-Null + +########################################################################################## +# # +# Welcome Experience # +# # +########################################################################################## + +Write-Host -ForegroundColor Yellow ">>> Turn off Windows Welcome Experience <<<" + +New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SubscribedContent" -Value "0" -Type DWORD -Force | Out-Null Write-Host "" ########################################################################################## @@ -177,16 +295,50 @@ Write-Host "" ########################################################################################## Write-Host -ForegroundColor Yellow ">>> Disable Microsoft Edge First Run Welcome Page <<<" -# Set variables to indicate value and key to set -$RegistryPath = "HKLM:\SOFTWARE\Policies\Microsoft\Edge" -$Name = "HideFirstRunExperience" -$Value = "1" -# Create the key if it does not exist -If (-NOT (Test-Path $RegistryPath)) { - New-Item -Path $RegistryPath -Force | Out-Null -} -# Now set the value -New-ItemProperty -Path $RegistryPath -Name $Name -Value $Value -PropertyType DWORD -Force | Out-Null + +# Set the registry paths for both HKLM and HKCU +$RegistryPaths = @( + "HKLM:\SOFTWARE\Policies\Microsoft\Edge", + "HKCU:\SOFTWARE\Policies\Microsoft\Edge" +) + +# https://gist.github.com/asheroto/e18500e7d206f3ae99f9bd0da0cf6bc6 +# Create a hashtable to store the property names and their corresponding values +$EdgeProperties = @{ + "NewTabPageHideDefaultTopSites" = 1 + "HideFirstRunExperience" = 1 + "ShowRecommendationsEnabled" = 0 + "CopilotPageContext" = 0 + "Microsoft365CopilotChatIconEnabled" = 0 + "NewTabPageContentEnabled" = 0 + "NewTabPageBingChatEnabled" = 0 + "NewTabPageAppLauncherEnabled" = 0 + "UserFeedbackAllowed" = 0 + "PersonalizationReportingEnabled" = 0 + "PersonalizeTopSitesInCustomizeSidebarEnabled" = 0 + "EdgeCollectionsEnabled" = 0 + "ShowMicrosoftRewards" = 0 + "ShowAcrobatSubscriptionButton" = 0 + "DefaultBrowserSettingsCampaignEnabled" = 0 + "EdgeShoppingAssistantEnabled" = 0 + "VisualSearchEnabled" = 0 + "NewTabPageAllowedBackgroundTypes" = 3 +} + +# Iterate over each registry path +foreach ($RegistryPath in $RegistryPaths) { + # Create the key if it does not exist + If (-NOT (Test-Path $RegistryPath)) { + New-Item -Path $RegistryPath -Force | Out-Null + } + + # Set the values based on the hashtable + foreach ($Name in $EdgeProperties.Keys) { + $Value = $EdgeProperties[$Name] + New-ItemProperty -Path $RegistryPath -Name $Name -Value $Value -PropertyType DWORD -Force | Out-Null + } +} + Write-Host "" ########################################################################################## @@ -195,30 +347,28 @@ Write-Host "" # # ########################################################################################## -# Export the registry keys -Write-Host -ForegroundColor DarkGray ">>> Exporting registry settings... <<<" - -# Create a temporary folder for export -$exportPath = "C:\temp" -if (-Not (Test-Path $exportPath)) { - New-Item -ItemType Directory -Path $exportPath | Out-Null -} - -reg export "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" "$exportPath\TaskbarSettings.reg" /y | Out-Null -reg export "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" "$exportPath\SearchSettings.reg" /y | Out-Null - -Write-Host -ForegroundColor DarkGray ">>> Importing registry settings to Default Profile <<<" - -# Copy the registry files to the default profile -Copy-Item "$exportPath\TaskbarSettings.reg" "C:\Users\Default\Desktop" -Copy-Item "$exportPath\SearchSettings.reg" "C:\Users\Default\Desktop" - -# Remove the temporary folder -Remove-Item -Path $exportPath -Recurse -Force - -Write-Host -ForegroundColor DarkGray ">>> Unpin Microsoft Store <<<" -((New-Object -Com Shell.Application).NameSpace('shell:::{4234d49b-0245-4df3-b780-3893943456e1}').Items() | ?{$_.Name -eq "Microsoft Store"}).Verbs() | ?{$_.Name.replace('&','') -match 'Unpin from taskbar'} | %{$_.DoIt(); $exec = $true} -Write-Host "" +## Export the registry keys +#Write-Host -ForegroundColor DarkGray ">>> Exporting registry settings... <<<" +# +## Create a temporary folder for export +#$exportPath = "C:\temp" +#if (-Not (Test-Path $exportPath)) { +# New-Item -ItemType Directory -Path $exportPath | Out-Null +#} +# +#reg export "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" "$exportPath\TaskbarSettings.reg" /y | Out-Null +#reg export "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" "$exportPath\SearchSettings.reg" /y | Out-Null +# +#Write-Host -ForegroundColor DarkGray ">>> Importing registry settings to Default Profile <<<" +# +## Copy the registry files to the default profile +#Copy-Item "$exportPath\TaskbarSettings.reg" "C:\Users\Default\Desktop" +#Copy-Item "$exportPath\SearchSettings.reg" "C:\Users\Default\Desktop" +# +## Remove the temporary folder +#Remove-Item -Path $exportPath -Recurse -Force +# +#Write-Host "" ########################################################################################## # # @@ -265,7 +415,7 @@ Write-Host "" ########################################################################################## # # -# Windows Update # +# Windows Update Setting # # # ########################################################################################## @@ -273,11 +423,6 @@ Write-Host -ForegroundColor Yellow ">>> Windows Update settings <<<" Write-Host "" Write-Host -ForegroundColor DarkGray ">>> Enable 'Get updates for other Microsoft products' <<<" -# Check if the script is running as administrator -if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) { - Write-Error -ForegroundColor Red "This script must be run with administrator privileges." - exit -} try { $UpdateServiceManager = New-Object -ComObject "Microsoft.Update.ServiceManager" @@ -287,6 +432,10 @@ try { catch { Write-Error "An error occurred while configuring Microsoft Update: $($_.Exception.Message)" } + +#################################################################################################################################### + + Write-Host -ForegroundColor DarkGray ">>> Set the notification behavior for updates to 'Do not show any notifications (excluding restart notifications)' <<<" $RegistryPath = "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" $RegistryName = "ConfigureNotificationsForWU" @@ -298,12 +447,6 @@ $RegistryValue = 0 # Do not show any notifications (excluding restart notificat # 2: Notify for download and installation # 3: Disable all notifications -# Check if the script is running as administrator -if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) { - Write-Error -ForegroundColor Red "This script must be run with administrator privileges." - exit -} - try { # Check if the registry path exists if (-not (Test-Path -Path $RegistryPath)) { @@ -319,12 +462,12 @@ catch { Write-Error "An error occurred while modifying the registry: $($_.Exception.Message)" } +#################################################################################################################################### + # Set "Do not restart if user is logged on" Write-Host -ForegroundColor DarkGray ">>> Set 'Do not restart if user is logged on' <<<" - # Define the value to disable automatic reboots when a user is logged on $NoAutoRebootWithLoggedOnUsers = 1 -# Registry path for Windows Update $WindowsUpdateRegistryPath = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update" # Check if the registry key exists, otherwise create it @@ -335,8 +478,7 @@ if (!(Test-Path $WindowsUpdateRegistryPath)) { # Set the NoAutoRebootWithLoggedOnUsers value Set-ItemProperty -Path $WindowsUpdateRegistryPath -Name "NoAutoRebootWithLoggedOnUsers" -Value $NoAutoRebootWithLoggedOnUsers -Type DWORD | Out-Null -# Check if the setting has been applied correctly -$CheckValue = Get-ItemProperty -Path $WindowsUpdateRegistryPath -Name "NoAutoRebootWithLoggedOnUsers" +#################################################################################################################################### # Restart the Windows Update service to apply the change immediately Restart-Service -Name "wuauserv" -Force | Out-Null @@ -345,6 +487,12 @@ Restart-Service -Name "wuauserv" -Force | Out-Null taskkill /f /im explorer.exe | Out-Null start explorer.exe | Out-Null +########################################################################################## +# # +# Available Updates # +# # +########################################################################################## + # Checking for Available Updates Install-Module -Name PSWindowsUpdate -Force -Confirm:$False Write-Host "" @@ -354,7 +502,7 @@ Write-Host "" # Installing Windows Updates Write-Host -ForegroundColor Yellow ">>> Installing Windows Updates... <<<" -Install-WindowsUpdate -AcceptAll +Install-WindowsUpdate -AcceptAll -Force -Verbose -NoReboot # Monitoring Update Installation # Write-Host "" @@ -370,13 +518,16 @@ Write-Host "" Write-Host -ForegroundColor Yellow ">>> Starting the process to remove unnecessary bloatware applications... <<<" Write-Host "" -# Read the content of the bloatware-list.txt file -$appsToRemove = Get-Content (Join-Path $env:USERPROFILE "Desktop\bloatware-list.txt") +# Get the directory of the currently executing script +$scriptDirectory = Split-Path -Parent $MyInvocation.MyCommand.Path + +# Construct the path to the bloatware-apps.txt file +$appsToRemove = Get-Content (Join-Path $scriptDirectory "bloatware-apps.txt") # Remove the specified apps from the list foreach ($app in $appsToRemove) { try { - Get-AppxPackage -Name $app | Remove-AppxPackage -AllUsers -ErrorAction Stop + winget uninstall --name $app Write-Host "Removed: $app" } catch { Write-Host "Error removing: $app. Details: $_" @@ -387,9 +538,22 @@ Write-Host -ForegroundColor Yellow ">>> Uninstallation of Microsoft Office <<<" Start-Process "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" "https://aka.ms/SaRA-officeUninstallFromPC" Write-Host "" -# Write-Host -ForegroundColor Yellow ">>> Retrieving the list of installed Win32 programs... <<<" -# List of Win32 programs -# Get-WmiObject -Class Win32_Product | Select-Object -Property Name +# >>>>>> https://pureinfotech.com/windows-11-policy-remove-bloatware/ <<<<<< +Write-Host -ForegroundColor Yellow ">>> From Windows 24H2, enable the policy " +Write-Host "" +Write-Host -ForegroundColor Magenta "Computer Configuration > Administrative Templates > Windows Components > App Package Deployment > 'Remove Default Microsoft Store packages from the system' " +Write-Host "" +Write-Host -ForegroundColor Yellow "to prevent bloatware from being installed for every user... <<<" +Write-Host "" + +# Sleep for 30 seconds +Start-Sleep -Seconds 60 + +########################################################################################## +# # +# End # +# # +########################################################################################## # Show the message Write-Host -ForegroundColor Cyan ">>> Press any key to continue... <<<"