Compare commits
	
		
			3 Commits
		
	
	
		
			81b5e39e79
			...
			e4438cb8a6
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					e4438cb8a6 | ||
| 
						 | 
					99e6f9b237 | ||
| 
						 | 
					96496d288e | 
							
								
								
									
										12
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								README.md
									
									
									
									
									
								
							@@ -1,3 +1,13 @@
 | 
			
		||||
# powershell-script
 | 
			
		||||
 | 
			
		||||
A list of PowerShell scripts for configuring and debloating Windows
 | 
			
		||||
A list of PowerShell scripts for configuring and debloating Windows.
 | 
			
		||||
 | 
			
		||||
## First run
 | 
			
		||||
 | 
			
		||||
To allow the execution of scripts, but only for the local user, run the following command in a PowerShell window:
 | 
			
		||||
 | 
			
		||||
```powershell
 | 
			
		||||
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Scripts downloaded from the Internet must be signed by a trusted entity, while local scripts can be executed without restrictions. This setting applies exclusively to the current user and does not affect the execution policies of other users on the system.
 | 
			
		||||
 
 | 
			
		||||
@@ -1,28 +1,23 @@
 | 
			
		||||
Microsoft.Windows.ParentalControls
 | 
			
		||||
Microsoft.Windows.PeopleExperienceHost
 | 
			
		||||
Microsoft.XboxGameCallableUI
 | 
			
		||||
Clipchamp.Clipchamp
 | 
			
		||||
Microsoft.BingNews
 | 
			
		||||
Microsoft.BingSearch
 | 
			
		||||
Microsoft.BingWeather
 | 
			
		||||
Microsoft.Edge.GameAssist
 | 
			
		||||
Microsoft.GamingApp
 | 
			
		||||
Microsoft.MicrosoftOfficeHub
 | 
			
		||||
Microsoft.MicrosoftSolitaireCollection
 | 
			
		||||
Microsoft.MicrosoftStickyNotes
 | 
			
		||||
Microsoft.WindowsCalculator
 | 
			
		||||
Microsoft.WindowsFeedbackHub
 | 
			
		||||
Microsoft.WindowsSoundRecorder
 | 
			
		||||
Microsoft.ZuneMusic
 | 
			
		||||
Microsoft.XboxIdentityProvider
 | 
			
		||||
Microsoft.ScreenSketch
 | 
			
		||||
Microsoft.Paint
 | 
			
		||||
Microsoft.StartExperiencesApp
 | 
			
		||||
Microsoft.WidgetsPlatformRuntime
 | 
			
		||||
Microsoft.Todos
 | 
			
		||||
Microsoft.PowerAutomateDesktop
 | 
			
		||||
MicrosoftCorporationII.QuickAssist
 | 
			
		||||
Microsoft.YourPhone
 | 
			
		||||
Microsoft.XboxSpeechToTextOverlay
 | 
			
		||||
Microsoft.XboxGamingOverlay
 | 
			
		||||
Microsoft.Xbox.TCUI
 | 
			
		||||
Microsoft Clipchamp
 | 
			
		||||
Microsoft Teams
 | 
			
		||||
Microsoft News
 | 
			
		||||
Microsoft Bing
 | 
			
		||||
MSN Weather
 | 
			
		||||
Microsoft Edge Game Assist
 | 
			
		||||
Xbox
 | 
			
		||||
Microsoft 365 Copilot
 | 
			
		||||
Solitaire & Casual Games
 | 
			
		||||
Microsoft Sticky Notes
 | 
			
		||||
Outlook for Windows
 | 
			
		||||
Paint
 | 
			
		||||
Power Automate
 | 
			
		||||
Microsoft To Do
 | 
			
		||||
Widgets Platform Runtime
 | 
			
		||||
Windows Sound Recorder
 | 
			
		||||
Xbox TCUI
 | 
			
		||||
Game Bar
 | 
			
		||||
Xbox Identity Provider
 | 
			
		||||
Game Speech Window
 | 
			
		||||
Phone Link
 | 
			
		||||
Windows Web Experience Pack
 | 
			
		||||
9MSSGKG348SP
 | 
			
		||||
							
								
								
									
										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