# Cleans up default start menu and taskbar (some settings require Windows Pro) function Install-PSModule { param( [Parameter(Position = 0, Mandatory = $true)] [String[]]$Modules ) Write-Output "`nChecking for necessary PowerShell modules..." try { # Set PowerShell to TLS 1.2 (https://devblogs.microsoft.com/powershell/powershell-gallery-tls-support/) if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12' -and [Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls13') { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 } # Install NuGet package provider if (!(Get-PackageProvider -ListAvailable -Name 'NuGet' -ErrorAction Ignore)) { Write-Output 'Installing NuGet package provider...' Install-PackageProvider -Name 'NuGet' -MinimumVersion 2.8.5.201 -Force } # Set PSGallery to trusted repository Register-PSRepository -Default -InstallationPolicy 'Trusted' -ErrorAction Ignore if (!(Get-PSRepository -Name 'PSGallery' -ErrorAction Ignore).InstallationPolicy -eq 'Trusted') { Set-PSRepository -Name 'PSGallery' -InstallationPolicy 'Trusted' } # Install & import modules ForEach ($Module in $Modules) { if (!(Get-Module -ListAvailable -Name $Module -ErrorAction Ignore)) { Write-Output "`nInstalling $Module module..." Install-Module -Name $Module -Force Import-Module $Module } } Write-Output 'Modules installed successfully.' } catch { Write-Warning 'Unable to install modules.' Write-Warning $_ exit 1 } } function Set-LayoutXML { param ( [Parameter (Mandatory = $true)] [String]$XMLFile ) $Path = Split-Path -Path $XMLFile -Parent if (!(Test-Path -PathType Container $Path)) { New-Item -ItemType Directory -Path $Path | Out-Null } $XML = [XML]@' '@ $XML.Save("$XMLFile") } # Variables $Modules = @('PolicyFileEditor') $ComputerPolicyFile = ($env:SystemRoot + '\System32\GroupPolicy\Machine\registry.pol') $UserPolicyFile = ($env:SystemRoot + '\System32\GroupPolicy\User\registry.pol') $WinVer = Get-WmiObject win32_operatingsystem Set-Location -Path $env:SystemRoot # Define policies $ComputerPolicies = @( [PSCustomObject]@{Key = 'Software\Microsoft\Windows\CurrentVersion\Communications'; ValueName = 'ConfigureChatAutoInstall'; Data = '0'; Type = 'Dword' } # Disable Teams (personal) auto install (W11) [PSCustomObject]@{Key = 'Software\Policies\Microsoft\Windows\Windows Chat'; ValueName = 'ChatIcon'; Data = '2'; Type = 'Dword' } # Hide Chat icon by default (W11) [PSCustomObject]@{Key = 'Software\Policies\Microsoft\Windows\Windows Search'; ValueName = 'AllowCortana'; Data = '0'; Type = 'Dword' } # Disable Cortana [PSCustomObject]@{Key = 'Software\Policies\Microsoft\Windows\Windows Feeds'; ValueName = 'EnableFeeds'; Data = '0'; Type = 'Dword' } # Disable news/interests on taskbar [PSCustomObject]@{Key = 'Software\Policies\Microsoft\Windows\Windows Search'; ValueName = 'DisableWebSearch'; Data = '1'; Type = 'Dword' } # Disable web search in Start [PSCustomObject]@{Key = 'Software\Policies\Microsoft\Windows\Windows Search'; ValueName = 'AllowCloudSearch'; Data = '0'; Type = 'Dword' } # Disable web search in Start [PSCustomObject]@{Key = 'Software\Policies\Microsoft\Windows\CloudContent'; ValueName = 'DisableCloudOptimizedContent'; Data = '1'; Type = 'Dword' } # Disable cloud consumer content [PSCustomObject]@{Key = 'Software\Policies\Microsoft\Windows\CloudContent'; ValueName = 'DisableConsumerAccountStateContent'; Data = '1'; Type = 'Dword' } # Disable cloud consumer content [PSCustomObject]@{Key = 'Software\Policies\Microsoft\Windows\CloudContent'; ValueName = 'DisableWindowsConsumerFeatures'; Data = '1'; Type = 'Dword' } # Disable Consumer Experiences ) $UserPolicies = @( [PSCustomObject]@{Key = 'Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced'; ValueName = 'TaskbarMn'; Data = '0'; Type = 'Dword' } # Disable Chat Icon [PSCustomObject]@{Key = 'Software\Microsoft\Windows\CurrentVersion\Policies\Explorer'; ValueName = 'HideSCAMeetNow'; Data = '1'; Type = 'Dword' } # Disable Meet Now icon (W10) [PSCustomObject]@{Key = 'Software\Microsoft\Windows\CurrentVersion\Search'; ValueName = 'SearchboxTaskbarMode'; Data = '0'; Type = 'Dword' } # Set Search in taskbar, 1 = icon only, 0 = OFF [PSCustomObject]@{Key = 'Software\Policies\Microsoft\Windows\CloudContent'; ValueName = 'DisableWindowsSpotlightFeatures'; Data = '1'; Type = 'Dword' } # Disable Windows Spotlight ) # Set group policies Install-PSModule $Modules try { Write-Output 'Setting group policies...' $ComputerPolicies | Set-PolicyFileEntry -Path $ComputerPolicyFile -ErrorAction Stop $UserPolicies | Set-PolicyFileEntry -Path $UserPolicyFile -ErrorAction Stop gpupdate /force /wait:0 | Out-Null Write-Output 'Group policies set.' } catch { Write-Warning 'Unable to apply group policies.' Write-Output $_ } # Cleanup start menu & taskbar try { if ($WinVer.Caption -like '*Windows 11*') { # Reset existing start menu layouts $Layout = 'AppData\Local\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState' Get-ChildItem 'C:\Users' | ForEach-Object { Remove-Item "C:\Users\$($_.Name)\$Layout" -Recurse -Force -ErrorAction Ignore } # Remove chat & widget icons (current user) $Path = 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced' $Settings = @( [PSCustomObject]@{ Name = 'TaskbarMn'; Value = 0; PropertyType = 'DWORD'; } # Disable Chat Icon [PSCustomObject]@{ Name = 'TaskbarDa'; Value = 0; PropertyType = 'DWORD'; } # Disable Widget Icon ) if (!(Test-Path $Path)) { New-Item -Path $Path -Force | Out-Null } $Settings | New-ItemProperty -Path $Path -Force | Out-Null } elseif ($WinVer.Caption -like '*Windows 10*') { $LayoutModification = 'C:\Users\Default\AppData\Local\Microsoft\Windows\Shell\LayoutModification.xml' Set-LayoutXML -XMLFile $LayoutModification New-PSDrive -PSProvider 'Registry' -Name 'HKU' -Root 'HKEY_USERS' | Out-Null $SubKeys = Get-ChildItem -Path 'HKU:' | Where-Object { $_.PSChildName -match '^S-\d-(?:\d+-){1,14}\d+$' } | Select-Object -ExpandProperty PSChildName foreach ($SubKey in $SubKeys) { $Path = "HKU:\$SubKey\SOFTWARE\Microsoft\Windows\CurrentVersion\CloudStore\Store\Cache\DefaultAccount" if (Test-Path -Path $Path) { Remove-Item -Path $Path -Force -Recurse } } Remove-PSDrive -Name 'HKU' } # Restart Explorer if ($env:USERNAME -ne 'defaultuser0') { Stop-Process -Name explorer -Force } } catch { Write-Warning 'Unable to complete start menu & taskbar cleanup tasks.' Write-Output $_ }