migliorato lo script, aggiungendo diverse sezioni, e testato il funzionamento
This commit is contained in:
		
							
								
								
									
										414
									
								
								configwinpc.ps1
									
									
									
									
									
								
							
							
						
						
									
										414
									
								
								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... <<<"
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user