0% found this document useful (0 votes)
153 views

Functions

This PowerShell script installs and uninstalls various applications on a Windows system using Winget. It contains functions to install utilities like O&O Shutup, Adobe Reader, Java, 7-Zip and more. It also contains functions to uninstall default Microsoft apps like Edge, Cortana, News and Office. The script ensures Winget is installed before using it to install other applications.

Uploaded by

finlay walters
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
153 views

Functions

This PowerShell script installs and uninstalls various applications on a Windows system using Winget. It contains functions to install utilities like O&O Shutup, Adobe Reader, Java, 7-Zip and more. It also contains functions to uninstall default Microsoft apps like Edge, Cortana, News and Office. The script ensures Winget is installed before using it to install other applications.

Uploaded by

finlay walters
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 60

#region Third

# Install Winget and O&O Shutup


Function InstallFTTProgs {
# Check if winget is installed
if (Test-Path ~\AppData\Local\Microsoft\WindowsApps\winget.exe){
Write-Output "Winget Already Installed."
}
else{
# Installing winget from the Microsoft Store
Write-Output "Winget not found, installing it now."
Start-Process "ms-appinstaller:?source=https://aka.ms/getwinget"
$nid = (Get-Process AppInstaller).Id
Wait-Process -Id $nid
Write-Output "Winget Installed"
}

Write-Output "Running O&O Shutup with Recommended Settings"


Import-Module BitsTransfer
Start-BitsTransfer -Source
"https://dl5.oo-software.com/files/ooshutup10/OOSU10.exe" -Destination OOSU10.exe
.\OOSU10.exe ooshutup10.cfg /quiet
}

# Install Adobe Reader


Function InstallAdobe {
Write-Output "Installing Adobe Acrobat Reader"
winget install -e Adobe.AdobeAcrobatReaderDC
}

# Do not install Adobe Reader


Function DoNotInstallAdobe {
Write-Output "Not installing Adobe Acrobat Reader"
}

# Install Java
Function InstallJava {
Write-Output "Installing Java"
winget install -e Oracle.JavaRuntimeEnvironment
}

# Do not install Java


Function DoInstallJava {
Write-Output "Not installing Java"
}

# Install 7-Zip
Function Install7Zip {
Write-Output "Installing 7-Zip"
winget install -e 7zip.7zip
}

# Do not install 7-Zip


Function DoNotInstall7Zip {
Write-Output "Not installing 7-Zip"
}

# Install Notepad ++
Function InstallNotepadplusplus {
Write-Output "Installing Notepad++"
winget install -e Notepad++.Notepad++
}

# Do not install Notepad ++


Function DoNotInstallNotepadplusplus {
Write-Output "Not installing Notepad++"
}

# Install MPCHC
Function InstallMediaPlayerClassic {
Write-Output "Installing Media Player Classic (VLC Alternative)"
winget install -e clsid2.mpc-hc
}

# Do not install MPCHC


Function DoNotInstallMediaPlayerClassic {
Write-Output "Not installing Media Player Classic (VLC Alternative)"
}

# Install VLC
Function InstallVLCMediaPlayer {
Write-Output "Installing VLC"
winget install -e VideoLAN.VLC
}

# Do not install VLC


Function DoNotInstallVLCMediaPlayer {
Write-Output "Not installing VLC"
}

# Install Brave
Function InstallBrave {
Write-Output "Installing Brave"
winget install -e BraveSoftware.BraveBrowser
}

# Do not install Brave


Function DoNotInstallBrave {
Write-Output "Not installing Brave"
}

# Install Firefox
Function InstallFirefox {
Write-Output "Installing Firefox"
winget install -e Mozilla.Firefox
}

# Do not install Firefox


Function DoNotInstallFirefox {
Write-Output "Not installing Firefox"
}

# Install Microsoft Terminal


Function InstallTerminal {
Write-Output "Installing Microsoft Terminal"
winget install -e Microsoft.WindowsTerminal
}
# Do not install Microsoft Terminal
Function DoNotInstallTerminal {
Write-Output "Not installing Microsoft Terminal"
}

# Install Microsoft PowerToys


Function InstallPowertoys {
Write-Output "Installing Microsoft PowerToys"
winget install -e Microsoft.PowerToys
}

# Do not install Microsoft PowerToys


Function DoNotInstallPowertoys {
Write-Output "Not installing Microsoft PowerToys"
}

# Install Google Chrome


Function InstallChrome {
Write-Output "Installing Google Chrome"
winget install -e Google.Chrome
}

# Do not install Google Chrome


Function DoNotInstallChrome {
Write-Output "Not installing Google Chrome"
}

# Install Irfanview
Function InstallIrfanview {
Write-Output "Installing Irfanview"
winget install -e IrfanSkiljan.IrfanView
}

# Do not install Irfanview


Function DoNotInstallIrfanview {
Write-Output "Not installing Irfanview"
}

# Install SumatraPDF
Function InstallSumatrapdf {
Write-Output "Installing SumatraPDF"
winget install -e SumatraPDF.SumatraPDF
}

# Do not install SumatraPDF


Function DoNotInstallSumatrapdf {
Write-Output "Not installing SumatraPDF"
}

# Install AutoHotkey
Function InstallAutoHotkey {
Write-Output "Installing AutoHotkey"
winget install -e Lexikos.AutoHotkey
}

# Do not install AutoHotkey


Function DoNotInstallAutoHotkey {
Write-Output "Not installing AutoHotkey"
}
# Install ImageGlass
Function InstallImageGlass {
Write-Output "Installing Image Glass"
winget install -e DuongDieuPhap.ImageGlass
}

# Do not install ImageGlass


Function DoNotInstallImageGlass {
Write-Output "Not installing ImageGlass"
}

# Install Discord
Function InstallDiscord {
Write-Output "Installing Discord"
winget install -e Discord.Discord
}

# Do not install Discord


Function DoNotInstallDiscord {
Write-Output "Not installing Discord"
}

# Install Visual Studio Code


Function InstallVisualStudioCode {
Write-Output "Installing Visual Studio Code"
winget install -e Microsoft.VisualStudioCode --source winget
}

# Do not install Visual Studio Code


Function DoNotInstallVisualStudioCode {
Write-Output "Not installing Visual Studio Code"
}

# Install VS Codium
Function InstallVSCodium {
Write-Output "Installing VS Codium"
winget install -e VSCodium.VSCodium
}

# Do not install VS Codium


Function DoNotInstallVSCodium {
Write-Output "Not installing VS Codium"
}

# Install Voidtools Everything Search


Function InstallVoidtoolsEverything {
Write-Output "Installing Voidtools Everything Search"
winget install -e voidtools.Everything --source winget
}

# Do not install VS Codium


Function DoNotInstallVoidtoolsEverything {
Write-Output "Not installing Voidtools Everything Search"
}

# Install GitHub Desktop


Function InstallGitHubDesktop {
Write-Output "Installing GitHub Desktop"
winget install -e GitHub.GitHubDesktop
}

# Do not install GitHub Desktop


Function DoNotInstallGitHubDesktop {
Write-Output "Not installing GitHub Desktop"
}

# Install Translucent Taskbar


Function InstallTranslucentTB {
Write-Output "Installing Translucent Taskbar"
winget install -e TranslucentTB.TranslucentTB
}

# Do not install Translucent Taskbar


Function DoNotInstallTranslucentTB {
Write-Output "Not installing Translucent Taskbar"
}

# Install Etcher USB Imager


Function InstallEtcher {
Write-Output "Installing Etcher USB Imager"
winget install -e Balena.Etcher
}

# Do not install Etcher USB Imager


Function DoNotInstallEtcher {
Write-Output "Not installing Etcher USB Imager"
}

# Install PuTTY & WinSCP


Function InstallPuTTYWinSCP {
Write-Output "Installing PuTTY & WinSCP"
winget install -e PuTTY.PuTTY
winget install -e WinSCP.WinSCP
}

# Do not install PuTTY & WinSCP


Function DoNotInstallPuTTYWinSCP {
Write-Output "Not installing PuTTY & WinSCP"
}

# Install Advanced IP Scanner


Function InstallAdvancedIPScanner {
Write-Output "Installing Advanced IP Scanner"
winget install -e Famatech.AdvancedIPScanner
}

# Do not install Advanced IP Scanner


Function DoNotInstallAdvancedIPScanner {
Write-Output "Not installing Advanced IP Scanner"
}

# Install ShareX Screenshot Tool


Function InstallShareX {
Write-Output "Installing ShareX Screenshot Tool"
winget install -e ShareX.ShareX
}
# Do not install ShareX Screenshot Tool
Function DoNotInstallShareX {
Write-Output "Not installing ShareX Screenshot Tool"
}

# Install GIMP Image Editor


Function InstallGIMP {
Write-Output "Installing GIMP Image Editor"
winget install -e GIMP.GIMP
}

# Do not install GIMP Image Editor


Function DoNotInstallGIMP {
Write-Output "Not installing GIMP Image Editor"
}

#endregion Third

#region Windows Apps

# Remove Microsoft App (Read Function name)


Function MicrosoftEdge {
winget uninstall "Microsoft Edge"
Write-Output "Trying to remove Microsoft Edge"
}

# Remove Microsoft App (Read Function name)


Function MicrosoftEdgeUpdate {
winget uninstall "Microsoft Edge Update"
Write-Output "Trying to remove Microsoft Edge Update"
}

# Remove Microsoft App (Read Function name)


Function MicrosoftEdgeWebView2Runtime {
winget uninstall "Microsoft Edge WebView2 Runtime"
Write-Output "Trying to remove Microsoft Edge WebView2 Runtime"
}

# Remove Microsoft App (Read Function name)


Function Cortana {
winget uninstall "Cortana"
Write-Output "Trying to remove Cortana"
}

# Remove Microsoft App (Read Function name)


Function MicrosoftNews {
winget uninstall "Microsoft News"
Write-Output "Trying to remove Microsoft News"
}

# Remove Microsoft App (Read Function name)


Function MSNWeather {
winget uninstall "MSN Weather"
Write-Output "Trying to remove MSN Weather"
}

# Remove Microsoft App (Read Function name)


Function Xbox {
winget uninstall "Xbox"
Write-Output "Trying to remove Xbox"
}

# Remove Microsoft App (Read Function name)


Function GetHelp {
winget uninstall "Get Help"
Write-Output "Trying to remove Get Help"
}

# Remove Microsoft App (Read Function name)


Function MicrosoftTips {
winget uninstall "Microsoft Tips"
Write-Output "Trying to remove Microsoft Tips"
}

# Remove Microsoft App (Read Function name)


Function HEIFImageExtensions {
winget uninstall "HEIF Image Extensions"
Write-Output "Trying to remove HEIF Image Extensions"
}

# Remove Microsoft App (Read Function name)


Function Office {
winget uninstall "Office"
Write-Output "Trying to remove Office"
}

# Remove Microsoft App (Read Function name)


Function MicrosoftSolitaireCollection {
winget uninstall "Microsoft Solitaire Collection"
Write-Output "Trying to remove Microsoft Solitaire Collection"
}

# Remove Microsoft App (Read Function name)


Function MicrosoftStickyNotes {
winget uninstall "Microsoft Sticky Notes"
Write-Output "Trying to remove Microsoft Sticky Notes"
}

# Remove Microsoft App (Read Function name)


Function Paint {
winget uninstall "Paint"
Write-Output "Trying to remove Paint"
}

# Remove Microsoft App (Read Function name)


Function MicrosoftPeople {
winget uninstall "Microsoft People"
Write-Output "Trying to remove Microsoft People"
}

# Remove Microsoft App (Read Function name)


Function PowerAutomate {
winget uninstall "Power Automate"
Write-Output "Trying to remove Power Automate"
}

# Remove Microsoft App (Read Function name)


Function SnippingTool {
winget uninstall "Snipping Tool"
Write-Output "Trying to remove Snipping Tool"
}

# Remove Microsoft App (Read Function name)


Function WindowsSecurity {
winget uninstall "Windows Security"
Write-Output "Trying to remove Windows Security"
}

# Remove Microsoft App (Read Function name)


Function StoreExperienceHost {
winget uninstall "Store Experience Host"
Write-Output "Trying to remove Store Experience Host"
}

# Remove Microsoft App (Read Function name)


Function MicrosoftToDo {
winget uninstall "Microsoft To Do"
Write-Output "Trying to remove Microsoft To Do"
}

# Remove Microsoft App (Read Function name)


Function VP9VideoExtensions {
winget uninstall "VP9 Video Extensions"
Write-Output "Trying to remove VP9 Video Extensions"
}

# Remove Microsoft App (Read Function name)


Function WebMediaExtensions {
winget uninstall "Web Media Extensions"
Write-Output "Trying to remove Web Media Extensions"
}

# Remove Microsoft App (Read Function name)


Function WebpImageExtensions {
winget uninstall "Webp Image Extensions"
Write-Output "Trying to remove Webp Image Extensions"
}

# Remove Microsoft App (Read Function name)


Function MicrosoftPhotos {
winget uninstall "Microsoft Photos"
Write-Output "Trying to remove Microsoft Photos"
}

# Remove Microsoft App (Read Function name)


Function WindowsAlarmsClock {
winget uninstall "Windows Alarms & Clock"
Write-Output "Trying to remove Windows Alarms & Clock"
}

# Remove Microsoft App (Read Function name)


Function WindowsCalculator {
winget uninstall "Windows Calculator"
Write-Output "Trying to remove Windows Calculator"
}
# Remove Microsoft App (Read Function name)
Function WindowsCamera {
winget uninstall "Windows Camera"
Write-Output "Trying to remove Windows Camera"
}

# Remove Microsoft App (Read Function name)


Function FeedbackHub {
winget uninstall "Feedback Hub"
Write-Output "Trying to remove Feedback Hub"
}

# Remove Microsoft App (Read Function name)


Function WindowsMaps {
winget uninstall "Windows Maps"
Write-Output "Trying to remove Windows Maps"
}

# Remove Microsoft App (Read Function name)


Function WindowsNotepad {
winget uninstall "Windows Notepad"
Write-Output "Trying to remove Windows Notepad"
}

# Remove Microsoft App (Read Function name)


Function WindowsVoiceRecorder {
winget uninstall "Windows Voice Recorder"
Write-Output "Trying to remove Windows Voice Recorder"
}

# Remove Microsoft App (Read Function name)


Function XboxTCUI {
winget uninstall "Xbox TCUI"
Write-Output "Trying to remove Xbox TCUI"
}

# Remove Microsoft App (Read Function name)


Function XboxGameBarPlugin {
winget uninstall "Xbox Game Bar Plugin"
Write-Output "Trying to remove Xbox Game Bar Plugin"
}

# Remove Microsoft App (Read Function name)


Function XboxGameBar {
winget uninstall "Xbox Game Bar"
Write-Output "Trying to remove Xbox Game Bar"
}

# Remove Microsoft App (Read Function name)


Function XboxIdentityProvider {
winget uninstall "Xbox Identity Provider"
Write-Output "Trying to remove Xbox Identity Provider"
}

# Remove Microsoft App (Read Function name)


Function XboxGameSpeechWindow {
winget uninstall "Xbox Game Speech Window"
Write-Output "Trying to remove Xbox Game Speech Window"
}
# Remove Microsoft App (Read Function name)
Function YourPhone {
winget uninstall "Your Phone"
Write-Output "Trying to remove Your Phone"
}

# Remove Microsoft App (Read Function name)


Function GrooveMusic {
winget uninstall "Groove Music"
Write-Output "Trying to remove Groove Music"
}

# Remove Microsoft App (Read Function name)


Function MoviesTV {
winget uninstall "Movies & TV"
Write-Output "Trying to remove Movies & TV"
}

# Remove Microsoft App (Read Function name)


Function MicrosoftTeams {
winget uninstall "Microsoft Teams"
Write-Output "Trying to remove Microsoft Teams"
}

# Remove Microsoft App (Read Function name)


Function WindowsWebExperiencePack {
winget uninstall "Windows Web Experience Pack"
Write-Output "Trying to remove Windows Web Experience Pack"
}

# Remove Microsoft App (Read Function name)


Function MailCalendar {
winget uninstall "Mail and Calendar"
Write-Output "Trying to remove Mail and Calendar"
}

# Remove Microsoft App (Read Function name)


Function MicrosoftStore {
winget uninstall "Microsoft Store"
Write-Output "Trying to remove Microsoft Store"
}

# Remove Microsoft App (Read Function name)


Function WindowsTerminal {
winget uninstall "Windows Terminal"
Write-Output "Trying to remove Windows Terminal"
}

# Remove Microsoft App (Read Function name)


Function MicrosoftBingNews {
Get-AppxPackage -Name Microsoft.BingNews| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
Microsoft.BingNews | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove Microsoft.BingNews."
}

# Remove Microsoft App (Read Function name)


Function MicrosoftGetHelp {
Get-AppxPackage -Name Microsoft.GetHelp| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
Microsoft.GetHelp | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove Microsoft.GetHelp."
}

# Remove Microsoft App (Read Function name)


Function MicrosoftGetstarted {
Get-AppxPackage -Name Microsoft.Getstarted| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
Microsoft.Getstarted | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove Microsoft.Getstarted."
}

# Remove Microsoft App (Read Function name)


Function MicrosoftMessaging {
Get-AppxPackage -Name Microsoft.Messaging"| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
Microsoft.Messaging" | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove Microsoft.Messaging."
}

# Remove Microsoft App (Read Function name)


Function MicrosoftMicrosoft3DViewer {
Get-AppxPackage -Name Microsoft.Microsoft3DViewer| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
Microsoft.Microsoft3DViewer | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove Microsoft.Microsoft3DViewer."
}

# Remove Microsoft App (Read Function name)


Function MicrosoftMicrosoftSolitaireCollection {
Get-AppxPackage -Name Microsoft.MicrosoftSolitaireCollection| Remove-
AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
Microsoft.MicrosoftSolitaireCollection | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove Microsoft.MicrosoftSolitaireCollection."
}

# Remove Microsoft App (Read Function name)


Function MicrosoftNetworkSpeedTest {
Get-AppxPackage -Name Microsoft.NetworkSpeedTest| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
Microsoft.NetworkSpeedTest | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove Microsoft.NetworkSpeedTest."
}

# Remove Microsoft App (Read Function name)


Function MicrosoftNews {
Get-AppxPackage -Name Microsoft.News| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
Microsoft.News | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove Microsoft.News."
}

# Remove Microsoft App (Read Function name)


Function MicrosoftOfficeLens {
Get-AppxPackage -Name Microsoft.Office.Lens| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
Microsoft.Office.Lens | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove Microsoft.Office.Lens."
}

# Remove Microsoft App (Read Function name)


Function MicrosoftOfficeSway {
Get-AppxPackage -Name Microsoft.Office.Sway| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
Microsoft.Office.Sway | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove Microsoft.Office.Sway."
}

# Remove Microsoft App (Read Function name)


Function MicrosoftOneConnect {
Get-AppxPackage -Name Microsoft.OneConnect| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
Microsoft.OneConnect | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove Microsoft.OneConnect."
}

# Remove Microsoft App (Read Function name)


Function MicrosoftPrint3D {
Get-AppxPackage -Name Microsoft.Print3D| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
Microsoft.Print3D | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove Microsoft.Print3D."
}

# Remove Microsoft App (Read Function name)


Function MicrosoftSkypeApp {
Get-AppxPackage -Name Microsoft.SkypeApp| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
Microsoft.SkypeApp | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove Microsoft.SkypeApp."
}

# Remove Microsoft App (Read Function name)


Function MicrosoftStorePurchaseApp {
Get-AppxPackage -Name Microsoft.StorePurchaseApp| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
Microsoft.StorePurchaseApp | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove Microsoft.StorePurchaseApp."
}

# Remove Microsoft App (Read Function name)


Function MicrosoftWhiteboard {
Get-AppxPackage -Name Microsoft.Whiteboard| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
Microsoft.Whiteboard | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove Microsoft.Whiteboard."
}

# Remove Microsoft App (Read Function name)


Function MicrosoftWindowsAlarms {
Get-AppxPackage -Name Microsoft.WindowsAlarms| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
Microsoft.WindowsAlarms | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove Microsoft.WindowsAlarms."
}
# Remove Microsoft App (Read Function name)
Function microsoftwindowscommunicationsapps {
Get-AppxPackage -Name microsoft.windowscommunicationsapps| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
microsoft.windowscommunicationsapps | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove microsoft.windowscommunicationsapps."
}

# Remove Microsoft App (Read Function name)


Function MicrosoftWindowsFeedbackHub {
Get-AppxPackage -Name Microsoft.WindowsFeedbackHub| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
Microsoft.WindowsFeedbackHub | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove Microsoft.WindowsFeedbackHub."
}

# Remove Microsoft App (Read Function name)


Function MicrosoftWindowsMaps {
Get-AppxPackage -Name Microsoft.WindowsMaps| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
Microsoft.WindowsMaps | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove Microsoft.WindowsMaps."
}

# Remove Microsoft App (Read Function name)


Function MicrosoftWindowsSoundRecorder {
Get-AppxPackage -Name Microsoft.WindowsSoundRecorder| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
Microsoft.WindowsSoundRecorder | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove Microsoft.WindowsSoundRecorder."
}

# Remove Microsoft App (Read Function name)


Function MicrosoftZuneMusic {
Get-AppxPackage -Name Microsoft.ZuneMusic| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
Microsoft.ZuneMusic | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove Microsoft.ZuneMusic."
}

# Remove Microsoft App (Read Function name)


Function MicrosoftZuneVideo {
Get-AppxPackage -Name Microsoft.ZuneVideo| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
Microsoft.ZuneVideo | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove Microsoft.ZuneVideo."
}

# Remove Microsoft App (Read Function name)


Function EclipseManager {
Get-AppxPackage -Name *EclipseManager*| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
*EclipseManager* | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove *EclipseManager*."
}

# Remove Microsoft App (Read Function name)


Function ActiproSoftwareLLC {
Get-AppxPackage -Name *ActiproSoftwareLLC*| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
*ActiproSoftwareLLC* | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove *ActiproSoftwareLLC*."
}

# Remove Microsoft App (Read Function name)


Function AdobeSystemsIncorporatedAdobePhotoshopExpress {
Get-AppxPackage -Name *AdobeSystemsIncorporated.AdobePhotoshopExpress*| Remove-
AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
*AdobeSystemsIncorporated.AdobePhotoshopExpress* | Remove-AppxProvisionedPackage -
Online
Write-Output "Trying to remove
*AdobeSystemsIncorporated.AdobePhotoshopExpress*."
}

# Remove Microsoft App (Read Function name)


Function Duolingo_LearnLanguagesforFree {
Get-AppxPackage -Name *Duolingo-LearnLanguagesforFree*| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like *Duolingo-
LearnLanguagesforFree* | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove *Duolingo-LearnLanguagesforFree*."
}

# Remove Microsoft App (Read Function name)


Function PandoraMediaInc {
Get-AppxPackage -Name *PandoraMediaInc*| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
*PandoraMediaInc* | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove *PandoraMediaInc*."
}

# Remove Microsoft App (Read Function name)


Function CandyCrush {
Get-AppxPackage -Name *CandyCrush*| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
*CandyCrush* | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove *CandyCrush*."
}

# Remove Microsoft App (Read Function name)


Function BubbleWitch3Saga {
Get-AppxPackage -Name *BubbleWitch3Saga*| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
*BubbleWitch3Saga* | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove *BubbleWitch3Saga*."
}

# Remove Microsoft App (Read Function name)


Function Wunderlist {
Get-AppxPackage -Name *Wunderlist*| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
*Wunderlist* | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove *Wunderlist*."
}

# Remove Microsoft App (Read Function name)


Function Flipboard {
Get-AppxPackage -Name *Flipboard*| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like *Flipboard*
| Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove *Flipboard*."
}

# Remove Microsoft App (Read Function name)


Function Twitter {
Get-AppxPackage -Name *Twitter*| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like *Twitter* |
Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove *Twitter*."
}

# Remove Microsoft App (Read Function name)


Function Facebook {
Get-AppxPackage -Name *Facebook*| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like *Facebook*
| Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove *Facebook*."
}

# Remove Microsoft App (Read Function name)


Function Spotify {
Get-AppxPackage -Name *Spotify*| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like *Spotify* |
Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove *Spotify*."
}

# Remove Microsoft App (Read Function name)


Function RoyalRevolt {
Get-AppxPackage -Name *RoyalRevolt*| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
*RoyalRevolt* | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove *RoyalRevolt*."
}

# Remove Microsoft App (Read Function name)


Function Sway {
Get-AppxPackage -Name *Sway*| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like *Sway* |
Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove *Sway*."
}

# Remove Microsoft App (Read Function name)


Function SpeedTest {
Get-AppxPackage -Name *SpeedTest*| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like *SpeedTest*
| Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove *SpeedTest*."
}

# Remove Microsoft App (Read Function name)


Function Dolby {
Get-AppxPackage -Name *Dolby*| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like *Dolby* |
Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove *Dolby*."
}

# Remove Microsoft App (Read Function name)


Function MicrosoftAdvertisingXaml_10171250_x64__8wekyb3d8bbwe {
Get-AppxPackage -Name
*Microsoft.Advertising.Xaml_10.1712.5.0_x64__8wekyb3d8bbwe*| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
*Microsoft.Advertising.Xaml_10.1712.5.0_x64__8wekyb3d8bbwe* | Remove-
AppxProvisionedPackage -Online
Write-Output "Trying to remove
*Microsoft.Advertising.Xaml_10.1712.5.0_x64__8wekyb3d8bbwe*."
}

# Remove Microsoft App (Read Function name)


Function MicrosoftAdvertisingXaml_10171250_x86__8wekyb3d8bbwe {
Get-AppxPackage -Name
*Microsoft.Advertising.Xaml_10.1712.5.0_x86__8wekyb3d8bbwe*| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
*Microsoft.Advertising.Xaml_10.1712.5.0_x86__8wekyb3d8bbwe* | Remove-
AppxProvisionedPackage -Online
Write-Output "Trying to remove
*Microsoft.Advertising.Xaml_10.1712.5.0_x86__8wekyb3d8bbwe*."
}

# Remove Microsoft App (Read Function name)


Function MicrosoftBingWeather {
Get-AppxPackage -Name *Microsoft.BingWeather*| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
*Microsoft.BingWeather* | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove *Microsoft.BingWeather*."
}

# Remove Microsoft App (Read Function name)


Function MicrosoftMSPaint {
Get-AppxPackage -Name *Microsoft.MSPaint*| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
*Microsoft.MSPaint* | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove *Microsoft.MSPaint*."
}

# Remove Microsoft App (Read Function name)


Function MicrosoftMicrosoftStickyNotes {
Get-AppxPackage -Name *Microsoft.MicrosoftStickyNotes*| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
*Microsoft.MicrosoftStickyNotes* | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove *Microsoft.MicrosoftStickyNotes*."
}

# Remove Microsoft App (Read Function name)


Function MicrosoftWindowsPhotos {
Get-AppxPackage -Name *Microsoft.Windows.Photos*| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
*Microsoft.Windows.Photos* | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove *Microsoft.Windows.Photos*."
}

# Remove Microsoft App (Read Function name)


Function MicrosoftWindowsCalculator {
Get-AppxPackage -Name *Microsoft.WindowsCalculator*| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
*Microsoft.WindowsCalculator* | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove *Microsoft.WindowsCalculator*."
}

# Remove Microsoft App (Read Function name)


Function MicrosoftWindowsStore {
Get-AppxPackage -Name *Microsoft.WindowsStore*| Remove-AppxPackage
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like
*Microsoft.WindowsStore* | Remove-AppxProvisionedPackage -Online
Write-Output "Trying to remove *Microsoft.WindowsStore*."
}

#endregion Windows Apps

#region Privacy & Telemetry

# Disable the Connected User Experiences and Telemetry (DiagTrack) service, and
block connection for the Unified Telemetry Client Outbound Traffic
Function DisableDiagTrackService {
Write-Output "Disabling DiagTrack Service ..."
# Connected User Experiences and Telemetry
Get-Service -Name DiagTrack | Stop-Service -Force
Get-Service -Name DiagTrack | Set-Service -StartupType Disabled

# Block connection for the Unified Telemetry Client Outbound Traffic


Get-NetFirewallRule -Group DiagTrack | Set-NetFirewallRule -Enabled False -
Action Block
}

# Enable the Connected User Experiences and Telemetry (DiagTrack) service, and
allow connection for the Unified Telemetry Client Outbound Traffic
Function EnableDiagTrackService {
Write-Output "Enabling DiagTrack Service ..."
# Connected User Experiences and Telemetry
Get-Service -Name DiagTrack | Set-Service -StartupType Automatic
Get-Service -Name DiagTrack | Start-Service

# Allow connection for the Unified Telemetry Client Outbound Traffic


Get-NetFirewallRule -Group DiagTrack | Set-NetFirewallRule -Enabled True -
Action Allow
}

# Set the diagnostic data collection to minimum


Function MinimalDiagnosticDataLevel {
Write-Output "Setting Minimal Diagnostic Data Level ..."
if (Get-WindowsEdition -Online | Where-Object -FilterScript {$_.Edition -like
"Enterprise*" -or $_.Edition -eq "Education"})
{
# Diagnostic data off
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Policies\DataCollection -Name AllowTelemetry -PropertyType DWord -Value 0 -Force
}
else
{
# Send required diagnostic data
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Policies\DataCollection -Name AllowTelemetry -PropertyType DWord -Value 1 -Force
}
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Policies\DataCollection -Name MaxTelemetryAllowed -PropertyType DWord -Value 1 -
Force

New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\


Diagnostics\DiagTrack -Name ShowedToastAtLevel -PropertyType DWord -Value 1 -Force
}

# Set the diagnostic data collection to default


Function DefaultDiagnosticDataLevel {
Write-Output "Setting Default Diagnostic Data Level ..."
# Optional diagnostic data
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Policies\DataCollection -Name AllowTelemetry -PropertyType DWord -Value 3 -Force
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Policies\DataCollection -Name MaxTelemetryAllowed -PropertyType DWord -Value 3 -
Force

New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\


Diagnostics\DiagTrack -Name ShowedToastAtLevel -PropertyType DWord -Value 3 -Force
}

# Turn off Windows Error Reporting


Function DisableErrorReporting {
Write-Output "Disabling Error Reporting ..."
if ((Get-WindowsEdition -Online).Edition -notmatch "Core")
{
Get-ScheduledTask -TaskName QueueReporting | Disable-ScheduledTask
New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\Windows Error
Reporting" -Name Disabled -PropertyType DWord -Value 1 -Force
}

Get-Service -Name WerSvc | Stop-Service -Force


Get-Service -Name WerSvc | Set-Service -StartupType Disabled
}

# Turn on Windows Error Reporting


Function EnableErrorReporting {
Write-Output "Enabling Error Reporting ..."
Get-ScheduledTask -TaskName QueueReporting | Enable-ScheduledTask
Remove-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\Windows Error
Reporting" -Name Disabled -Force -ErrorAction Ignore

Get-Service -Name WerSvc | Set-Service -StartupType Manual


Get-Service -Name WerSvc | Start-Service
}

# Change the feedback frequency to "Never"


Function NeverFeedbackFrequency {
Write-Output "Setting Never Feedback Frequency ..."
if (-not (Test-Path -Path HKCU:\SOFTWARE\Microsoft\Siuf\Rules))
{
New-Item -Path HKCU:\SOFTWARE\Microsoft\Siuf\Rules -Force
}
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Siuf\Rules -Name
NumberOfSIUFInPeriod -PropertyType DWord -Value 0 -Force
}
# Change feedback frequency to "Automatically"
Function AutomaticallyFeedbackFrequency {
Write-Output "Setting Automatically Feedback Frequency ..."
Remove-Item -Path HKCU:\SOFTWARE\Microsoft\Siuf\Rules -Force -ErrorAction
Ignore
}

# Do not use sign-in info to automatically finish setting up device after an update
Function DisableSigninInfo {
Write-Output "Disabling Signin Info ..."
$SID = (Get-CimInstance -ClassName Win32_UserAccount | Where-Object -
FilterScript {$_.Name -eq $env:USERNAME}).SID
if (-not (Test-Path -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\
CurrentVersion\Winlogon\UserARSO\$SID"))
{
New-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\
Winlogon\UserARSO\$SID" -Force
}
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\
Winlogon\UserARSO\$SID" -Name OptOut -PropertyType DWord -Value 1 -Force
}

# Use sign-in info to automatically finish setting up device after an update


Function EnableSigninInfo {
Write-Output "Enabling Signin Info ..."
$SID = (Get-CimInstance -ClassName Win32_UserAccount | Where-Object -
FilterScript {$_.Name -eq $env:USERNAME}).SID
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\
CurrentVersion\Winlogon\UserARSO\$SID" -Name OptOut -Force -ErrorAction Ignore
}

# Do not let websites show me locally relevant content by accessing my language


list
Function DisableLanguageListAccess {
Write-Output "Disabling Language List Access ..."
New-ItemProperty -Path "HKCU:\Control Panel\International\User Profile" -Name
HttpAcceptLanguageOptOut -PropertyType DWord -Value 1 -Force
}

# Let websites show me locally relevant content by accessing language my list


Function EnableLanguageListAccess {
Write-Output "Enabling Language List Access ..."
Remove-ItemProperty -Path "HKCU:\Control Panel\International\User Profile" -
Name HttpAcceptLanguageOptOut -Force -ErrorAction Ignore
}

# Do not let apps show me personalized ads by using my advertising ID


Function DisableAdvertisingID {
Write-Output "Disabling Advertising ID ..."
if (-not (Test-Path -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
AdvertisingInfo))
{
New-Item -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
AdvertisingInfo -Force
}
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
AdvertisingInfo -Name Enabled -PropertyType DWord -Value 0 -Force
}
# Let apps show me personalized ads by using my advertising ID
Function EnableAdvertisingID {
Write-Output "Enabling Advertising ID ..."
if (-not (Test-Path -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
AdvertisingInfo))
{
New-Item -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
AdvertisingInfo -Force
}
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
AdvertisingInfo -Name Enabled -PropertyType DWord -Value 1 -Force
}

# Hide the Windows welcome experiences after updates and occasionally when I sign
in to highlight what's new and suggested
Function HideWindowsWelcomeExperience {
Write-Output "Hiding Windows Welcome Experience ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
ContentDeliveryManager -Name SubscribedContent-310093Enabled -PropertyType DWord -
Value 0 -Force
}

# Show the Windows welcome experiences after updates and occasionally when I sign
in to highlight what's new and suggested
Function ShowWindowsWelcomeExperience {
Write-Output "Showing Windows Welcome Experience ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
ContentDeliveryManager -Name SubscribedContent-310093Enabled -PropertyType DWord -
Value 1 -Force
}

# Do not get tip and suggestions when I use Windows


Function DisableWindowsTips {
Write-Output "Disabling Windows Tips ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
ContentDeliveryManager -Name SubscribedContent-338389Enabled -PropertyType DWord -
Value 0 -Force
}

# Get tip and suggestions when I use Windows


Function EnableWindowsTips {
Write-Output "Enabling Windows Tips ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
ContentDeliveryManager -Name SubscribedContent-338389Enabled -PropertyType DWord -
Value 1 -Force
}

# Hide from me suggested content in the Settings app


Function HideSettingsSuggestedContent {
Write-Output "Hiding Settings Suggested Content ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
ContentDeliveryManager -Name SubscribedContent-338393Enabled -PropertyType DWord -
Value 0 -Force
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
ContentDeliveryManager -Name SubscribedContent-353694Enabled -PropertyType DWord -
Value 0 -Force
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
ContentDeliveryManager -Name SubscribedContent-353696Enabled -PropertyType DWord -
Value 0 -Force
}

# Show me suggested content in the Settings app


Function ShowSettingsSuggestedContent {
Write-Output "Showing Settings Suggested Content ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
ContentDeliveryManager -Name SubscribedContent-338393Enabled -PropertyType DWord -
Value 1 -Force
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
ContentDeliveryManager -Name SubscribedContent-353694Enabled -PropertyType DWord -
Value 1 -Force
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
ContentDeliveryManager -Name SubscribedContent-353696Enabled -PropertyType DWord -
Value 1 -Force
}

# Turn off automatic installing suggested apps


Function DisableAppsSilentInstalling {
Write-Output "Disabling Apps Silent Installing ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
ContentDeliveryManager -Name SilentInstalledAppsEnabled -PropertyType DWord -Value
0 -Force
}

# Turn on automatic installing suggested apps


Function EnableAppsSilentInstalling {
Write-Output "Enabling Apps Silent Installing ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
ContentDeliveryManager -Name SilentInstalledAppsEnabled -PropertyType DWord -Value
1 -Force
}

# Disable suggestions on how I can set up my device


Function DisableWhatsNewInWindows {
Write-Output "Disabling Whats New In Windows ..."
if (-not (Test-Path -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
UserProfileEngagement))
{
New-Item -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
UserProfileEngagement -Force
}
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
UserProfileEngagement -Name ScoobeSystemSettingEnabled -PropertyType DWord -Value 0
-Force
}

# Offer suggestions on how I can set up my device


Function EnableWhatsNewInWindows {
Write-Output "Enabling Whats New In Windows ..."
if (-not (Test-Path -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
UserProfileEngagement))
{
New-Item -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
UserProfileEngagement -Force
}
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
UserProfileEngagement -Name ScoobeSystemSettingEnabled -PropertyType DWord -Value 1
-Force
}
# Do not let Microsoft use your diagnostic data for personalized tips, ads, and
recommendations
Function DisableTailoredExperiences {
Write-Output "Disabling Tailored Experiences ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Privacy -Name TailoredExperiencesWithDiagnosticDataEnabled -PropertyType DWord -
Value 0 -Force
}

# Let Microsoft use your diagnostic data for personalized tips, ads, and
recommendations
Function EnableTailoredExperiences {
Write-Output "Enabling Tailored Experiences ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Privacy -Name TailoredExperiencesWithDiagnosticDataEnabled -PropertyType DWord -
Value 1 -Force
}

# Disable Bing search in the Start Menu


Function DisableBingSearch {
Write-Output "Disabling Bing Search ..."
if (-not (Test-Path -Path HKCU:\SOFTWARE\Policies\Microsoft\Windows\
Explorer))
{
New-Item -Path HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer -
Force
}
New-ItemProperty -Path HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer -
Name DisableSearchBoxSuggestions -PropertyType DWord -Value 1 -Force
}

# Enable Bing search in the Start Menu


Function EnableBingSearch {
Write-Output "Enabling Bing Search ..."
Remove-ItemProperty -Path HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer
-Name DisableSearchBoxSuggestions -Force -ErrorAction Ignore
}

#endregion Privacy & Telemetry

#region UI & Personalization

# Show the "This PC" icon on Desktop


Function ShowThisPC {
Write-Output "Showing This PC ..."
if (-not (Test-Path -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\HideDesktopIcons\NewStartPanel))
{
New-Item -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\HideDesktopIcons\NewStartPanel -Force
}
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\HideDesktopIcons\NewStartPanel -Name "{20D04FE0-3AEA-1069-A2D8-
08002B30309D}" -PropertyType DWord -Value 0 -Force
}

# Hide the "This PC" icon on Desktop


Function HideThisPC {
Write-Output "Hiding This PC ..."
Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\HideDesktopIcons\NewStartPanel -Name "{20D04FE0-3AEA-1069-A2D8-
08002B30309D}" -Force -ErrorAction Ignore
}

# Enable the Windows 10 File Explorer


Function EnableWindows10FileExplorer {
Write-Output "Enabling Windows 10 File Explorer ..."
if (-not (Test-Path -Path "HKCU:\Software\Classes\CLSID\{d93ed569-3b3e-4bff-
8355-3c44f6a52bb5}\InprocServer32"))
{
New-Item -Path "HKCU:\Software\Classes\CLSID\{d93ed569-3b3e-4bff-8355-
3c44f6a52bb5}\InprocServer32" -Force
}
New-ItemProperty -Path "HKCU:\Software\Classes\CLSID\{d93ed569-3b3e-4bff-
8355-3c44f6a52bb5}\InprocServer32" -Name "(default)" -PropertyType String -Value ""
-Force
}

# Disable the Windows 10 File Explorer


Function DisableWindows10FileExplorer {
Write-Output "Disabling Windows 10 File Explorer ..."
Remove-Item -Path "HKCU:\Software\Classes\CLSID\{d93ed569-3b3e-4bff-8355-
3c44f6a52bb5}" -Recurse -Force -ErrorAction Ignore
}

# Do not use item check boxes


Function DisableCheckBoxes {
Write-Output "Disabling CheckBoxes ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name AutoCheckSelect -PropertyType DWord -Value 0 -Force
}

# Use check item check boxes


Function EnableCheckBoxes {
Write-Output "Enabling CheckBoxes ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name AutoCheckSelect -PropertyType DWord -Value 1 -Force
}

# Show hidden files, folders, and drives


Function EnableHiddenItems {
Write-Output "Enabling Hidden Items ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name Hidden -PropertyType DWord -Value 1 -Force
}

# Do not show hidden files, folders, and drives


Function DisableHiddenItems {
Write-Output "Disabling Hidden Items ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name Hidden -PropertyType DWord -Value 2 -Force
}

# Show file name extensions


Function ShowFileExtensions {
Write-Output "Showing File Extensions ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name HideFileExt -PropertyType DWord -Value 0 -Force
}

# Hide file name extensions


Function HideFileExtensions {
Write-Output "Hiding File Extensions ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name HideFileExt -PropertyType DWord -Value 1 -Force
}

# Show folder merge conflicts


Function ShowMergeConflicts {
Write-Output "Showing Merge Conflicts ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name HideMergeConflicts -PropertyType DWord -Value 0 -Force
}

# Hide folder merge conflicts


Function HideMergeConflicts {
Write-Output "Hiding Merge Conflicts ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name HideMergeConflicts -PropertyType DWord -Value 1 -Force
}

# Open File Explorer to "This PC"


Function ThisPCOpenFileExplorerTo {
Write-Output "This PC Open File Explorer To ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name LaunchTo -PropertyType DWord -Value 1 -Force
}

# Open File Explorer to Quick access


Function QuickAccessOpenFileExplorerTo {
Write-Output "Quick Access Open File Explorer To ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name LaunchTo -PropertyType DWord -Value 2 -Force
}

# Disable the File Explorer compact mode


Function DisableFileExplorerCompactMode {
Write-Output "Disabling File Explorer Compact Mode ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name UseCompactMode -PropertyType DWord -Value 1 -Force
}

# Enable the File Explorer compact mode


Function EnableFileExplorerCompactMode {
Write-Output "Enabling File Explorer Compact Mode ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name UseCompactMode -PropertyType DWord -Value 0 -Force
}

# Do not show sync provider notification within File Explorer


Function HideOneDriveFileExplorerAd {
Write-Output "Hiding OneDrive File Explorer Ad ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name ShowSyncProviderNotifications -PropertyType DWord -Value 0
-Force
}
# Show sync provider notification within File Explorer
Function ShowOneDriveFileExplorerAd {
Write-Output "Showing OneDrive File Explorer Ad ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name ShowSyncProviderNotifications -PropertyType DWord -Value 1
-Force
}

# When I snap a window, do not show what I can snap next to it


Function DisableSnapAssist {
Write-Output "Disabling Snap Assist ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name SnapAssist -PropertyType DWord -Value 0 -Force
}

# When I snap a window, show what I can snap next to it


Function EnableSnapAssist {
Write-Output "Enabling Snap Assist ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name SnapAssist -PropertyType DWord -Value 1 -Force
}

# Show snap layouts when I hover over a windows's maximize button


Function EnableSnapAssistFlyout {
Write-Output "Enabling Snap Assist Flyout ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name EnableSnapAssistFlyout -PropertyType DWord -Value 1 -Force
}

# Hide snap layouts when I hover over a windows's maximize button


Function DisableSnapAssistFlyout {
Write-Output "Disabling Snap Assist Flyout ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name EnableSnapAssistFlyout -PropertyType DWord -Value 0 -Force
}

# Show the file transfer dialog box in the detailed mode


Function DetailedFileTransferDialog {
Write-Output "Setting Detailed File Transfer Dialog ..."
if (-not (Test-Path -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\OperationStatusManager))
{
New-Item -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\OperationStatusManager -Force
}
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\OperationStatusManager -Name EnthusiastMode -PropertyType DWord -Value 1 -
Force
}

# Show the file transfer dialog box in the compact mode


Function CompactFileTransferDialog {
Write-Output "Setting Compact File Transfer Dialog ..."
if (-not (Test-Path -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\OperationStatusManager))
{
New-Item -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\OperationStatusManager -Force
}
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\OperationStatusManager -Name EnthusiastMode -PropertyType DWord -Value 0 -
Force
}

# Expand the Windows 10 File Explorer ribbon


Function ExpandedWindows10FileExplorerRibbon {
Write-Output "Setting Expanded Windows 10 File Explorer Ribbon ..."
if (Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Shell Extensions\Blocked" -Name "{e2bf9676-5f8f-435c-97eb-11607a5bedf7}" -
ErrorAction Ignore)
{
if (-not (Test-Path -Path HKCU:\SOFTWARE\Microsoft\Windows\
CurrentVersion\Explorer\Ribbon))
{
New-Item -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\Ribbon -Force
}
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\Ribbon -Name MinimizedStateTabletModeOff -PropertyType DWord -Value 0 -
Force
}
}

# Minimize the Windows 10 File Explorer ribbon


Function MinimizedWindows10FileExplorerRibbon {
Write-Output "Setting Minimized Windows 10 File Explorer Ribbon ..."
if (Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Shell Extensions\Blocked" -Name "{e2bf9676-5f8f-435c-97eb-11607a5bedf7}" -
ErrorAction Ignore)
{
if (-not (Test-Path -Path HKCU:\SOFTWARE\Microsoft\Windows\
CurrentVersion\Explorer\Ribbon))
{
New-Item -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\Ribbon -Force
}
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\Ribbon -Name MinimizedStateTabletModeOff -PropertyType DWord -Value 1 -
Force
}
}

# Display the recycle bin files delete confirmation dialog


Function EnableRecycleBinDeleteConfirmation {
Write-Output "Enabling Recycle Bin Delete Confirmation ..."
$ShellState = Get-ItemPropertyValue -Path HKCU:\SOFTWARE\Microsoft\Windows\
CurrentVersion\Explorer -Name ShellState
$ShellState[4] = 51
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer -Name ShellState -PropertyType Binary -Value $ShellState -Force
}

# Do not display the recycle bin files delete confirmation dialog


Function DisableRecycleBinDeleteConfirmation {
Write-Output "Disabling Recycle Bin Delete Confirmation ..."
$ShellState = Get-ItemPropertyValue -Path HKCU:\SOFTWARE\Microsoft\Windows\
CurrentVersion\Explorer -Name ShellState
$ShellState[4] = 55
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer -Name ShellState -PropertyType Binary -Value $ShellState -Force
}

# Hide recently used files in Quick access


Function HideQuickAccessRecentFiles {
Write-Output "Hiding Quick Access Recent Files ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer -Name ShowRecent -PropertyType DWord -Value 0 -Force
}

# Show recently used files in Quick access


Function ShowQuickAccessRecentFiles {
Write-Output "Showing Quick Access Recent Files ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer -Name ShowRecent -PropertyType DWord -Value 1 -Force
}

# Set the taskbar alignment to the left


Function LeftTaskbarAlignment {
Write-Output "Setting Left Taskbar Alignment ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name TaskbarAl -PropertyType DWord -Value 0 -Force
}

# Set the taskbar alignment to the center


Function CenterTaskbarAlignment {
Write-Output "Setting Center Taskbar Alignment ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name TaskbarAl -PropertyType DWord -Value 1 -Force
}

# Hide the search icon on the taskbar


Function HideTaskbarSearch {
Write-Output "Hiding Taskbar Search ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Search
-Name SearchboxTaskbarMode -PropertyType DWord -Value 0 -Force
}

# Show the search icon on the taskbar


Function ShowTaskbarSearch {
Write-Output "Showing Taskbar Search ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Search
-Name SearchboxTaskbarMode -PropertyType DWord -Value 1 -Force
}

# Hide the Task view button on the taskbar


Function HideTaskViewButton {
Write-Output "Hiding Task View Button ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name ShowTaskViewButton -PropertyType DWord -Value 0 -Force
}

# Show the Task View button on the taskbar


Function ShowTaskViewButton {
Write-Output "Showing Task View Button ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name ShowTaskViewButton -PropertyType DWord -Value 1 -Force
}

# Hide the widgets icon on the taskbar


Function HideTaskbarWidgets {
Write-Output "Hiding Taskbar Widgets ..."
if (Get-AppxPackage -Name MicrosoftWindows.Client.WebExperience)
{
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name TaskbarDa -PropertyType DWord -Value 0 -Force
}
}

# Show the widgets icon on the taskbar


Function ShowTaskbarWidgets {
Write-Output "Showing Taskbar Widgets ..."
if (Get-AppxPackage -Name MicrosoftWindows.Client.WebExperience)
{
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name TaskbarDa -PropertyType DWord -Value 1 -Force
}
}

# Hide the Chat icon (Microsoft Teams) on the taskbar


Function HideTaskbarChat {
Write-Output "Hiding Taskbar Chat ..."
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name TaskbarMn -PropertyType DWord -Value 0 -Force
}

# Show the Chat icon (Microsoft Teams) on the taskbar


Function ShowTaskbarChat {
Write-Output "Showing Taskbar Chat ..."
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name TaskbarMn -PropertyType DWord -Value 1 -Force
}

# Set the default Windows mode to dark


Function DarkWindowsColorMode {
Write-Output "Setting Dark Windows Color Mode ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Themes\Personalize -Name SystemUsesLightTheme -PropertyType DWord -Value 0 -Force
}

# Set the default Windows mode to light


Function LightWindowsColorMode {
Write-Output "Setting Light Windows Color Mode ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Themes\Personalize -Name SystemUsesLightTheme -PropertyType DWord -Value 1 -Force
}

# Set the default app mode to dark


Function DarkAppColorMode {
Write-Output "Setting Dark App Color Mode ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Themes\Personalize -Name AppsUseLightTheme -PropertyType DWord -Value 0 -Force
}

# Set the default app mode to light


Function LightAppColorMode {
Write-Output "Setting Light App Color Mode ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Themes\Personalize -Name AppsUseLightTheme -PropertyType DWord -Value 1 -Force
}

# Disable first sign-in animation after the upgrade


Function DisableFirstLogonAnimation {
Write-Output "Disabling First Logon Animation ..."
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\
Winlogon" -Name EnableFirstLogonAnimation -PropertyType DWord -Value 0 -Force
}

# Enable first sign-in animation after the upgrade


Function EnableFirstLogonAnimation {
Write-Output "Enabling First Logon Animation ..."
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\
Winlogon" -Name EnableFirstLogonAnimation -PropertyType DWord -Value 1 -Force
}

# Set the quality factor of the JPEG desktop wallpapers to maximum


Function MaxJPEGWallpapersQuality {
Write-Output "Setting Max JPEG Wallpapers Quality ..."
New-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name JPEGImportQuality
-PropertyType DWord -Value 100 -Force
}

# Set the quality factor of the JPEG desktop wallpapers to default


Function DefaultJPEGWallpapersQuality {
Write-Output "Setting Default JPEG Wallpapers Quality ..."
Remove-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name
JPEGImportQuality -Force -ErrorAction Ignore
}

# Start Task Manager in the expanded mode


Function ExpandedTaskManagerWindow {
Write-Output "Setting Expanded Task Manager Window ..."
$Taskmgr = Get-Process -Name Taskmgr -ErrorAction Ignore

Start-Sleep -Seconds 1

if ($Taskmgr)
{
$Taskmgr.CloseMainWindow()
}
Start-Process -FilePath Taskmgr.exe -PassThru

Start-Sleep -Seconds 3

do
{
Start-Sleep -Milliseconds 100
$Preferences = Get-ItemPropertyValue -Path HKCU:\SOFTWARE\Microsoft\
Windows\CurrentVersion\TaskManager -Name Preferences
}
until ($Preferences)

Stop-Process -Name Taskmgr -ErrorAction Ignore

$Preferences[28] = 0
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
TaskManager -Name Preferences -PropertyType Binary -Value $Preferences -Force
}

# Start Task Manager in the compact mode


Function CompactTaskManagerWindow {
Write-Output "Setting Compact Task Manager Window ..."
$Taskmgr = Get-Process -Name Taskmgr -ErrorAction Ignore

Start-Sleep -Seconds 1

if ($Taskmgr)
{
$Taskmgr.CloseMainWindow()
}
Start-Process -FilePath Taskmgr.exe -PassThru

Start-Sleep -Seconds 3

do
{
Start-Sleep -Milliseconds 100
$Preferences = Get-ItemPropertyValue -Path HKCU:\SOFTWARE\Microsoft\
Windows\CurrentVersion\TaskManager -Name Preferences
}
until ($Preferences)

Stop-Process -Name Taskmgr -ErrorAction Ignore


$Preferences[28] = 1
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
TaskManager -Name Preferences -PropertyType Binary -Value $Preferences -Force
}

# Notify me when a restart is required to finish updating


Function ShowRestartNotification {
Write-Output "Showing Restart Notification ..."
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings -
Name RestartNotificationsAllowed2 -PropertyType DWord -Value 1 -Force
}

# Do not notify me when a restart is required to finish updating


Function HideRestartNotification {
Write-Output "Hiding Restart Notification ..."
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings -
Name RestartNotificationsAllowed2 -PropertyType DWord -Value 0 -Force
}

# Do not add the "- Shortcut" suffix to the file name of created shortcuts
Function DisableShortcutsSuffix {
Write-Output "Disabling Shortcuts Suffix ..."
if (-not (Test-Path -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\NamingTemplates))
{
New-Item -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\NamingTemplates -Force
}
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\NamingTemplates -Name ShortcutNameTemplate -PropertyType String -Value
"%s.lnk" -Force
}

# Add the "- Shortcut" suffix to the file name of created shortcuts
Function EnableShortcutsSuffix {
Write-Output "Enabling Shortcuts Suffix ..."
Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\NamingTemplates -Name ShortcutNameTemplate -Force -ErrorAction Ignore
}

# Use the Print screen button to open screen snipping


Function EnablePrtScnSnippingTool {
Write-Output "Enabling PrtScn Snipping Tool ..."
New-ItemProperty -Path "HKCU:\Control Panel\Keyboard" -Name
PrintScreenKeyForSnippingEnabled -PropertyType DWord -Value 1 -Force
}

# Do not use the Print screen button to open screen snipping


Function DisablePrtScnSnippingTool {
Write-Output "Disabling PrtScn Snipping Tool ..."
New-ItemProperty -Path "HKCU:\Control Panel\Keyboard" -Name
PrintScreenKeyForSnippingEnabled -PropertyType DWord -Value 0 -Force
}

# Do not use a different input method for each app window


Function DisableAppsLanguageSwitch {
Write-Output "Disabling Apps Language Switch ..."
Set-WinLanguageBarOption
}

# Let me use a different input method for each app window


Function EnableAppsLanguageSwitch {
Write-Output "Enabling Apps Language Switch ..."
Set-WinLanguageBarOption -UseLegacySwitchMode
}

# When I grab a windows's title bar and shake it, don't minimize all other windows
Function DisableAeroShaking {
Write-Output "Disabling Aero Shaking ..."
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name DisallowShaking -PropertyType DWord -Value 1 -Force
}

# When I grab a windows's title bar and shake it, minimize all other windows
Function EnableAeroShaking {
Write-Output "Enabling Aero Shaking ..."
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name DisallowShaking -PropertyType DWord -Value 0 -Force
}

#endregion UI & Personalization

#region OneDrive

# Uninstall OneDrive
Function UninstallOneDrive {
Write-Output "Uninstalling OneDrive ..."
If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\OneDrive")) {
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\OneDrive" |
Out-Null
}
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\OneDrive" -
Name "DisableFileSyncNGSC" -Type DWord -Value 1

Stop-Process -Name "OneDrive" -ErrorAction SilentlyContinue


Start-Sleep -s 2
$onedrive = "$env:SYSTEMROOT\SysWOW64\OneDriveSetup.exe"
If (!(Test-Path $onedrive)) {
$onedrive = "$env:SYSTEMROOT\System32\OneDriveSetup.exe"
}
Start-Process $onedrive "/uninstall" -NoNewWindow -Wait
Start-Sleep -s 2
Stop-Process -Name "explorer" -ErrorAction SilentlyContinue
Start-Sleep -s 2
Remove-Item -Path "$env:USERPROFILE\OneDrive" -Force -Recurse -ErrorAction
SilentlyContinue
Remove-Item -Path "$env:LOCALAPPDATA\Microsoft\OneDrive" -Force -Recurse -
ErrorAction SilentlyContinue
Remove-Item -Path "$env:PROGRAMDATA\Microsoft OneDrive" -Force -Recurse -
ErrorAction SilentlyContinue
Remove-Item -Path "$env:SYSTEMDRIVE\OneDriveTemp" -Force -Recurse -
ErrorAction SilentlyContinue
If (!(Test-Path "HKCR:")) {
New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT |
Out-Null
}
Remove-Item -Path "HKCR:\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}" -
Recurse -ErrorAction SilentlyContinue
Remove-Item -Path "HKCR:\Wow6432Node\CLSID\{018D5C66-4533-4307-9B53-
224DE2ED1FE6}" -Recurse -ErrorAction SilentlyContinue
}

# Install OneDrive
Function InstallOneDrive {
Write-Output "Installing OneDrive ..."
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\
OneDrive" -Name "DisableFileSyncNGSC" -ErrorAction SilentlyContinue
& "$env:SystemRoot\SysWOW64\OneDriveSetup.exe"
}

#endregion OneDrive

#region System

# Turn on Storage Sense


Function EnableStorageSense {
Write-Output "Enabling Storage Sense ..."
if (-not (Test-Path -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
StorageSense\Parameters\StoragePolicy))
{
New-Item -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
StorageSense\Parameters\StoragePolicy -ItemType Directory -Force
}
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
StorageSense\Parameters\StoragePolicy -Name 01 -PropertyType DWord -Value 1 -Force
}

# Turn off Storage Sense


Function DisableStorageSense {
Write-Output "Disabling Storage Sense ..."
if (-not (Test-Path -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
StorageSense\Parameters\StoragePolicy))
{
New-Item -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
StorageSense\Parameters\StoragePolicy -ItemType Directory -Force
}
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
StorageSense\Parameters\StoragePolicy -Name 01 -PropertyType DWord -Value 0 -Force
}

# Turn on automatic cleaning up temporary system and app files


Function EnableStorageSenseTempFiles {
Write-Output "Enabling Storage Sense Temp Files ..."
if ((Get-ItemPropertyValue -Path HKCU:\SOFTWARE\Microsoft\Windows\
CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 01) -eq "1")
{
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
StorageSense\Parameters\StoragePolicy -Name 04 -PropertyType DWord -Value 1 -Force
}
}

# Turn off automatic cleaning up temporary system and app files


Function DisableStorageSenseTempFiles {
Write-Output "Disabling Storage Sense Temp Files ..."
if ((Get-ItemPropertyValue -Path HKCU:\SOFTWARE\Microsoft\Windows\
CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 01) -eq "1")
{
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
StorageSense\Parameters\StoragePolicy -Name 04 -PropertyType DWord -Value 0 -Force
}
}

# Run Storage Sense every month


Function MonthStorageSenseFrequency {
Write-Output "Setting Month Storage Sense Frequency ..."
if ((Get-ItemPropertyValue -Path HKCU:\SOFTWARE\Microsoft\Windows\
CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 01) -eq "1")
{
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
StorageSense\Parameters\StoragePolicy -Name 2048 -PropertyType DWord -Value 30 -
Force
}
}

# Run Storage Sense during low free disk space


Function DefaultStorageSenseFrequency {
Write-Output "Setting Default Storage Sense Frequency ..."
if ((Get-ItemPropertyValue -Path HKCU:\SOFTWARE\Microsoft\Windows\
CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 01) -eq "1")
{
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
StorageSense\Parameters\StoragePolicy -Name 2048 -PropertyType DWord -Value 0 -
Force
}
}

# Disable hibernation
Function DisableHibernation {
Write-Output "Disabling Hibernation ..."
POWERCFG /HIBERNATE OFF
}

# Enable hibernation
Function EnableHibernation {
Write-Output "Enabling Hibernation ..."
POWERCFG /HIBERNATE ON
}

# Disable the Windows 260 character path limit


Function DisableWin32LongPathLimit {
Write-Output "Disabling Win32 Long Path Limit ..."
New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem -
Name LongPathsEnabled -PropertyType DWord -Value 1 -Force
}

# Enable the Windows 260 character path limit


Function EnableWin32LongPathLimit {
Write-Output "Enabling Win32 Long Path Limit ..."
New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem -
Name LongPathsEnabled -PropertyType DWord -Value 0 -Force
}

# Display the Stop error information on the BSoD


Function EnableBSoDStopError {
Write-Output "Enabling BSoD Stop Error ..."
New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl -
Name DisplayParameters -PropertyType DWord -Value 1 -Force
}

# Do not display the Stop error information on the BSoD


Function DisableBSoDStopError {
Write-Output "Disabling BSoD Stop Error ..."
New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl -
Name DisplayParameters -PropertyType DWord -Value 0 -Force
}

# Never notify when apps try to make changes to my computer


Function NeverAdminApprovalMode {
Write-Output "Setting Never Admin Approval Mode ..."
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Policies\System -Name ConsentPromptBehaviorAdmin -PropertyType DWord -Value 0 -
Force
}

# Notify me only when apps try to make changes to my computer


Function DefaultAdminApprovalMode {
Write-Output "Setting Default Admin Approval Mode ..."
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Policies\System -Name ConsentPromptBehaviorAdmin -PropertyType DWord -Value 5 -
Force
}

# Turn on access to mapped drives from app running with elevated permissions with
Admin Approval Mode enabled
Function EnableMappedDrivesAppElevatedAccess {
Write-Output "Enabling Mapped Drives App Elevated Access ..."
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Policies\System -Name EnableLinkedConnections -PropertyType DWord -Value 1 -Force
}

# Turn off access to mapped drives from app running with elevated permissions with
Admin Approval Mode enabled
Function DisableMappedDrivesAppElevatedAccess {
Write-Output "Disabling Mapped Drives App Elevated Access ..."
Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Policies\System -Name EnableLinkedConnections -Force -ErrorAction Ignore
}

# Turn off Delivery Optimization


Function DisableDeliveryOptimization {
Write-Output "Disabling Delivery Optimization ..."
New-ItemProperty -Path Registry::HKEY_USERS\S-1-5-20\SOFTWARE\Microsoft\
Windows\CurrentVersion\DeliveryOptimization\Settings -Name DownloadMode -
PropertyType DWord -Value 0 -Force
Delete-DeliveryOptimizationCache -Force
}

# Turn on Delivery Optimization


Function EnableDeliveryOptimization {
Write-Output "Enabling Delivery Optimization ..."
New-ItemProperty -Path Registry::HKEY_USERS\S-1-5-20\SOFTWARE\Microsoft\
Windows\CurrentVersion\DeliveryOptimization\Settings -Name DownloadMode -
PropertyType DWord -Value 1 -Force
}

# Always wait for the network at computer startup and logon for workgroup networks
Function EnableWaitNetworkStartup {
Write-Output "Enabling Wait Network Startup ..."
if ((Get-CimInstance -ClassName CIM_ComputerSystem).PartOfDomain -eq $true)
{
if (-not (Test-Path -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows
NT\CurrentVersion\Winlogon"))
{
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\
CurrentVersion\Winlogon" -Force
}
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\
CurrentVersion\Winlogon" -Name SyncForegroundPolicy -PropertyType DWord -Value 1 -
Force
}
}

# Never wait for the network at computer startup and logon for workgroup networks
Function DisableWaitNetworkStartup {
Write-Output "Disabling Wait Network Startup ..."
if ((Get-CimInstance -ClassName CIM_ComputerSystem).PartOfDomain -eq $true)
{
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows
NT\CurrentVersion\Winlogon" -Name SyncForegroundPolicy -Force -ErrorAction Ignore
}
}

# Do not let Windows manage my default printer


Function DisableWindowsManageDefaultPrinter {
Write-Output "Disabling Windows Manage Default Printer ..."
New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\
Windows" -Name LegacyDefaultPrinterMode -PropertyType DWord -Value 1 -Force
}

# Let Windows manage my default printer


Function EnableWindowsManageDefaultPrinter {
Write-Output "Enabling Windows Manage Default Printer ..."
New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\
Windows" -Name LegacyDefaultPrinterMode -PropertyType DWord -Value 0 -Force
}

# Receive updates for other Microsoft products


Function EnableUpdateMicrosoftProducts {
Write-Output "Enabling Update Microsoft Products ..."
(New-Object -ComObject
Microsoft.Update.ServiceManager).AddService2("7971f918-a847-4430-9279-
4a52d1efe18d", 7, "")
}

# Do not receive updates for other Microsoft products


Function DisableUpdateMicrosoftProducts {
Write-Output "Disabling Update Microsoft Products ..."
if ((New-Object -ComObject Microsoft.Update.ServiceManager).Services | Where-
Object -FilterScript {$_.ServiceID -eq "7971f918-a847-4430-9279-4a52d1efe18d"})
{
(New-Object -ComObject
Microsoft.Update.ServiceManager).RemoveService("7971f918-a847-4430-9279-
4a52d1efe18d")
}
}

# Set power plan on "High performance"


Function HighPowerPlan {
Write-Output "Setting High Power Plan ..."
POWERCFG /SETACTIVE SCHEME_MIN
}

# Set power plan on "Balanced"


Function BalancedPowerPlan {
Write-Output "Setting Balanced Power Plan ..."
POWERCFG /SETACTIVE SCHEME_BALANCED
}

# Use the latest installed .NET runtime for all apps


Function EnableLatestInstalledNET {
Write-Output "Enabling Latest Installed .NET ..."
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\.NETFramework -Name
OnlyUseLatestCLR -PropertyType DWord -Value 1 -Force
New-ItemProperty -Path HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NETFramework -
Name OnlyUseLatestCLR -PropertyType DWord -Value 1 -Force
}

# Do not use the latest installed .NET runtime for all apps
Function DisableLatestInstalledNET {
Write-Output "Disabling Latest Installed .NET ..."
Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\.NETFramework -Name
OnlyUseLatestCLR -Force -ErrorAction Ignore
Remove-ItemProperty -Path HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NETFramework
-Name OnlyUseLatestCLR -Force -ErrorAction Ignore
}
# Do not allow the computer to turn off the network adapters to save power
Function DisableNetworkAdaptersSavePower {
Write-Output "Disabling Network Adapters Save Power ..."
$Adapters = Get-NetAdapter -Physical | Get-NetAdapterPowerManagement | Where-
Object -FilterScript {$_.AllowComputerToTurnOffDevice -ne "Unsupported"}
foreach ($Adapter in $Adapters)
{
$Adapter.AllowComputerToTurnOffDevice = "Disabled"
$Adapter | Set-NetAdapterPowerManagement
}
}

# Allow the computer to turn off the network adapters to save power
Function EnableNetworkAdaptersSavePower {
Write-Output "Enabling Network Adapters Save Power ..."
$Adapters = Get-NetAdapter -Physical | Get-NetAdapterPowerManagement | Where-
Object -FilterScript {$_.AllowComputerToTurnOffDevice -ne "Unsupported"}
foreach ($Adapter in $Adapters)
{
$Adapter.AllowComputerToTurnOffDevice = "Enabled"
$Adapter | Set-NetAdapterPowerManagement
}
}

# Override for default input method: English


Function EnglishInputMethod {
Write-Output "Setting English Input Method ..."
Set-WinDefaultInputMethodOverride -InputTip "0409:00000409"
}

# Override for default input method: use language list


Function DefaultInputMethod {
Write-Output "Setting Default Input Method ..."
Remove-ItemProperty -Path "HKCU:\Control Panel\International\User Profile" -
Name InputMethodOverride -Force -ErrorAction Ignore
}

# Save screenshots by pressing Win+PrtScr on the Desktop


Function DesktopWinPrtScrFolder {
Write-Output "Setting Desktop Win+PrtScr Folder ..."
$DesktopFolder = Get-ItemPropertyValue -Path "HKCU:\SOFTWARE\Microsoft\
Windows\CurrentVersion\Explorer\User Shell Folders" -Name Desktop
New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\User Shell Folders" -Name "{B7BEDE81-DF94-4682-A7D8-57A52620B86F}" -Type
ExpandString -Value $DesktopFolder -Force
}

# Save screenshots by pressing Win+PrtScr in the Pictures folder


Function DefaultWinPrtScrFolder {
Write-Output "Setting Default Win+PrtScr Folder ..."
Remove-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\User Shell Folders" -Name "{B7BEDE81-DF94-4682-A7D8-57A52620B86F}" -Force
-ErrorAction Ignore
}

# Run troubleshooter automatically, then notify me


Function AutomaticallyRecommendedTroubleshooting {
Write-Output "Setting Automatically Recommended Troubleshooting ..."
if (-not (Test-Path -Path HKLM:\SOFTWARE\Microsoft\WindowsMitigation))
{
New-Item -Path HKLM:\SOFTWARE\Microsoft\WindowsMitigation -Force
}
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\WindowsMitigation -Name
UserPreference -PropertyType DWord -Value 3 -Force

# Set the OS level of diagnostic data gathering to "Optional diagnostic data"


New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Policies\DataCollection -Name AllowTelemetry -PropertyType DWord -Value 3 -Force
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Policies\DataCollection -Name MaxTelemetryAllowed -PropertyType DWord -Value 3 -
Force

New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\


Diagnostics\DiagTrack -Name ShowedToastAtLevel -PropertyType DWord -Value 3 -Force

# Turn on Windows Error Reporting


Get-ScheduledTask -TaskName QueueReporting | Enable-ScheduledTask
Remove-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\Windows Error
Reporting" -Name Disabled -Force -ErrorAction Ignore

Get-Service -Name WerSvc | Set-Service -StartupType Manual


Get-Service -Name WerSvc | Start-Service
}

# Ask me before running troubleshooter


Function DefaultRecommendedTroubleshooting {
Write-Output "Setting Default Recommended Troubleshooting ..."
if (-not (Test-Path -Path HKLM:\SOFTWARE\Microsoft\WindowsMitigation))
{
New-Item -Path HKLM:\SOFTWARE\Microsoft\WindowsMitigation -Force
}
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\WindowsMitigation -Name
UserPreference -PropertyType DWord -Value 2 -Force

# Set the OS level of diagnostic data gathering to "Optional diagnostic data"


New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Policies\DataCollection -Name AllowTelemetry -PropertyType DWord -Value 3 -Force
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Policies\DataCollection -Name MaxTelemetryAllowed -PropertyType DWord -Value 3 -
Force

New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\


Diagnostics\DiagTrack -Name ShowedToastAtLevel -PropertyType DWord -Value 3 -Force

# Turn on Windows Error Reporting


Get-ScheduledTask -TaskName QueueReporting | Enable-ScheduledTask
Remove-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\Windows Error
Reporting" -Name Disabled -Force -ErrorAction Ignore

Get-Service -Name WerSvc | Set-Service -StartupType Manual


Get-Service -Name WerSvc | Start-Service
}

# Launch folder windows in a separate process


Function EnableFoldersLaunchSeparateProcess {
Write-Output "Enabling Folders Launch Separate Process ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name SeparateProcess -PropertyType DWord -Value 1 -Force
}

# Do not launch folder windows in a separate process


Function DisableFoldersLaunchSeparateProcess {
Write-Output "Disabling Folders Launch Separate Process ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name SeparateProcess -PropertyType DWord -Value 0 -Force
}

# Disable and delete reserved storage after the next update installation
Function DisableReservedStorage {
Write-Output "Disabling Reserved Storage ..."
try
{
Set-WindowsReservedStorageState -State Disabled
}
catch [System.Runtime.InteropServices.COMException]
{
Write-Error -Message ($Localization.ReservedStorageIsInUse -f
$MyInvocation.Line) -ErrorAction SilentlyContinue
}
}

# Enable reserved storage after the next update installation


Function EnableReservedStorage {
Write-Output "Enabling Reserved Storage ..."
Set-WindowsReservedStorageState -State Enabled
}

# Disable help lookup via F1


Function DisableF1HelpPage {
Write-Output "Disabling F1 Help Page ..."
if (-not (Test-Path -Path "HKCU:\SOFTWARE\Classes\Typelib\{8cec5860-07a1-
11d9-b15e-000d56bfe6ee}\1.0\0\win64"))
{
New-Item -Path "HKCU:\SOFTWARE\Classes\Typelib\{8cec5860-07a1-11d9-
b15e-000d56bfe6ee}\1.0\0\win64" -Force
}
New-ItemProperty -Path "HKCU:\SOFTWARE\Classes\Typelib\{8cec5860-07a1-11d9-
b15e-000d56bfe6ee}\1.0\0\win64" -Name "(default)" -PropertyType String -Value "" -
Force
}

# Enable help lookup via F1


Function EnableF1HelpPage {
Write-Output "Enabling F1 Help Page ..."
Remove-Item -Path "HKCU:\SOFTWARE\Classes\Typelib\{8cec5860-07a1-11d9-b15e-
000d56bfe6ee}" -Recurse -Force -ErrorAction Ignore
}

# Enable Num Lock at startup


Function EnableNumLock {
Write-Output "Enabling NumLock at startup ..."
New-ItemProperty -Path "Registry::HKEY_USERS\.DEFAULT\Control Panel\Keyboard"
-Name InitialKeyboardIndicators -PropertyType String -Value 2147483650 -Force
}

# Disable Num Lock at startup


Function DisableNumLock {
Write-Output "Disabling NumLock at startup ..."
New-ItemProperty -Path "Registry::HKEY_USERS\.DEFAULT\Control Panel\Keyboard"
-Name InitialKeyboardIndicators -PropertyType String -Value 2147483648 -Force
}

# Disable Caps Lock


Function DisableCapsLock {
Write-Output "Disabling Caps Lock ..."
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Keyboard
Layout" -Name "Scancode Map" -PropertyType Binary -Value ([byte[]]
(0,0,0,0,0,0,0,0,2,0,0,0,0,0,58,0,0,0,0,0)) -Force
}

# Enable Caps Lock


Function EnableCapsLock {
Write-Output "Enabling Caps Lock ..."
Remove-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Keyboard
Layout" -Name "Scancode Map" -Force -ErrorAction Ignore
}

# Turn off pressing the Shift key 5 times to turn Sticky keys
Function DisableStickyShift {
Write-Output "Disabling Sticky Shift ..."
New-ItemProperty -Path "HKCU:\Control Panel\Accessibility\StickyKeys" -Name
Flags -PropertyType String -Value 506 -Force
}

# Turn on pressing the Shift key 5 times to turn Sticky keys


Function EnableStickyShift {
Write-Output "Enabling Sticky Shift ..."
New-ItemProperty -Path "HKCU:\Control Panel\Accessibility\StickyKeys" -Name
Flags -PropertyType String -Value 510 -Force
}

# Don't use AutoPlay for all media and devices


Function DisableAutoplay {
Write-Output "Disabling Autoplay ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\AutoplayHandlers -Name DisableAutoplay -PropertyType DWord -Value 1 -Force
}

# Use AutoPlay for all media and devices


Function EnableAutoplay {
Write-Output "Enabling Autoplay ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\AutoplayHandlers -Name DisableAutoplay -PropertyType DWord -Value 0 -Force
}

# Disable thumbnail cache removal


Function DisableThumbnailCacheRemoval {
Write-Output "Disabling Thumbnail Cache Removal ..."
New-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\
CurrentVersion\Explorer\VolumeCaches\Thumbnail Cache" -Name Autorun -PropertyType
DWord -Value 0 -Force
}

# Enable thumbnail cache removal


Function EnableThumbnailCacheRemoval {
Write-Output "Enabling Thumbnail Cache Removal ..."
New-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\
CurrentVersion\Explorer\VolumeCaches\Thumbnail Cache" -Name Autorun -PropertyType
DWord -Value 3 -Force
}

# Automatically saving my restartable apps and restart them when I sign back in
Function EnableSaveRestartableApps {
Write-Output "Enabling Save Restartable Apps ..."
New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\
Winlogon" -Name RestartApps -Value 1 -Force
}

# Turn off automatically saving my restartable apps and restart them when I sign
back in
Function DisableSaveRestartableApps {
Write-Output "Disabling Save Restartable Apps ..."
New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\
Winlogon" -Name RestartApps -Value 0 -Force
}

# Enable "Network Discovery" and "File and Printers Sharing" for workgroup networks
Function EnableNetworkDiscovery {
Write-Output "Enabling Network Discovery ..."
$FirewallRules = @(
# File and printer sharing
"@FirewallAPI.dll,-32752",

# Network discovery
"@FirewallAPI.dll,-28502"
)
if ((Get-CimInstance -ClassName CIM_ComputerSystem).PartOfDomain -eq $false)
{
Set-NetFirewallRule -Group $FirewallRules -Profile Private -Enabled
True
Set-NetFirewallRule -Profile Public, Private -Name FPS-SMB-In-TCP -
Enabled True
Set-NetConnectionProfile -NetworkCategory Private
}
}

# Disable "Network Discovery" and "File and Printers Sharing" for workgroup
networks
Function DisableNetworkDiscovery {
Write-Output "Disabling Network Discovery ..."
$FirewallRules = @(
# File and printer sharing
"@FirewallAPI.dll,-32752",

# Network discovery
"@FirewallAPI.dll,-28502"
)
if ((Get-CimInstance -ClassName CIM_ComputerSystem).PartOfDomain -eq $false)
{
Set-NetFirewallRule -Group $FirewallRules -Profile Private -Enabled
False
}
}
# Automatically adjust active hours for me based on daily usage
Function AutomaticallyActiveHours {
Write-Output "Setting Automatically Active Hours ..."
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings -
Name SmartActiveHoursState -PropertyType DWord -Value 1 -Force
}

# Manually adjust active hours for me based on daily usage


Function ManuallyActiveHours {
Write-Output "Setting Manually Active Hours ..."
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings -
Name SmartActiveHoursState -PropertyType DWord -Value 0 -Force
}

# Restart as soon as possible to finish updating


Function EnableDeviceRestartAfterUpdate {
Write-Output "Enabling Device Restart After Update ..."
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings -
Name IsExpedited -PropertyType DWord -Value 1 -Force
}

# Don't restart as soon as possible to finish updating


Function DisableDeviceRestartAfterUpdate {
Write-Output "Disabling Device Restart After Update ..."
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings -
Name IsExpedited -PropertyType DWord -Value 0 -Force
}

# Set Windows Terminal Preview as default terminal app to host the user interface
for command-line applications
Function WindowsTerminalDefaultTerminalApp {
Write-Output "Setting Windows Terminal Default Terminal App ..."
if (Get-AppxPackage -Name Microsoft.WindowsTerminal)
{
# Checking if the Terminal version supports such feature
$TerminalVersion = (Get-AppxPackage -Name
Microsoft.WindowsTerminal).Version
if ([System.Version]$TerminalVersion -ge [System.Version]"1.11")
{
if (-not (Test-Path -Path "HKCU:\Console\%%Startup"))
{
New-Item -Path "HKCU:\Console\%%Startup" -Force
}

# Find the current GUID of Windows Terminal


$PackageFullName = (Get-AppxPackage -Name
Microsoft.WindowsTerminal).PackageFullName
Get-ChildItem -Path "HKLM:\SOFTWARE\Classes\PackagedCom\Package\
$PackageFullName\Class" | ForEach-Object -Process {
if ((Get-ItemPropertyValue -Path $_.PSPath -Name ServerId)
-eq 0)
{
New-ItemProperty -Path "HKCU:\Console\%%Startup" -
Name DelegationConsole -PropertyType String -Value $_.PSChildName -Force
}
if ((Get-ItemPropertyValue -Path $_.PSPath -Name ServerId)
-eq 1)
{
New-ItemProperty -Path "HKCU:\Console\%%Startup" -
Name DelegationTerminal -PropertyType String -Value $_.PSChildName -Force
}
}
}
}
}

# Set Windows Console Host as default terminal app to host the user interface for
command-line applications
Function ConsoleHostDefaultTerminalApp {
Write-Output "Setting Console Host Default Terminal App ..."
New-ItemProperty -Path "HKCU:\Console\%%Startup" -Name DelegationConsole -
PropertyType String -Value "{00000000-0000-0000-0000-000000000000}" -Force
New-ItemProperty -Path "HKCU:\Console\%%Startup" -Name DelegationTerminal -
PropertyType String -Value "{00000000-0000-0000-0000-000000000000}" -Force
}

#endregion System

#region Start menu

# Hide recently added apps in the Start menu


Function HideRecentlyAddedApps {
Write-Output "Hiding Recently Added Apps ..."
if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\
Explorer))
{
New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -
Force
}
New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -
Name HideRecentlyAddedApps -PropertyType DWord -Value 1 -Force
}

# Show recently added apps in the Start menu


Function ShowRecentlyAddedApps {
Write-Output "Showing Recently Added Apps ..."
Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer
-Name HideRecentlyAddedApps -Force -ErrorAction Ignore
}

# Run the Windows PowerShell shortcut from the Start menu as Administrator
Function ElevatedRunPowerShellShortcut {
Write-Output "Setting Elevated Run PowerShell Shortcut ..."
[byte[]]$bytes = Get-Content -Path "$env:APPDATA\Microsoft\Windows\Start
Menu\Programs\Windows PowerShell\Windows PowerShell.lnk" -Encoding Byte -Raw
$bytes[0x15] = $bytes[0x15] -bor 0x20
Set-Content -Path "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Windows
PowerShell\Windows PowerShell.lnk" -Value $bytes -Encoding Byte -Force
}

# Run the Windows PowerShell shortcut from the Start menu as user
Function NonElevatedRunPowerShellShortcut {
Write-Output "Setting NonElevated Run PowerShell Shortcut ..."
[byte[]]$bytes = Get-Content -Path "$env:APPDATA\Microsoft\Windows\Start
Menu\Programs\Windows PowerShell\Windows PowerShell.lnk" -Encoding Byte -Raw
$bytes[0x15] = $bytes[0x15] -bxor 0x20
Set-Content -Path "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Windows
PowerShell\Windows PowerShell.lnk" -Value $bytes -Encoding Byte -Force
}

#endregion Start menu

#region UWP apps

# Disable Cortana autostarting


Function DisableCortanaAutostart {
Write-Output "Disabling Cortana Autostart ..."
if (Get-AppxPackage -Name Microsoft.549981C3F5F10)
{
if (-not (Test-Path -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\
Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\
Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId"))
{
New-Item -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\
Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\
Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId" -Force
}
New-ItemProperty -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\
Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\
Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId" -Name State -PropertyType
DWord -Value 1 -Force
}
}

# Enable Cortana autostarting


Function EnableCortanaAutostart {
Write-Output "Enabling Cortana Autostart ..."
if (Get-AppxPackage -Name Microsoft.549981C3F5F10)
{
if (-not (Test-Path -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\
Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\
Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId"))
{
New-Item -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\
Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\
Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId" -Force
}
New-ItemProperty -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\
Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\
Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId" -Name State -PropertyType
DWord -Value 2 -Force
}
}

# Disable Teams autostarting


Function DisableTeamsAutostart {
Write-Output "Disabling Teams Autostart ..."
if (Get-AppxPackage -Name MicrosoftTeams)
{
if (-not (Test-Path -Path "HKCU:\Software\Classes\Local Settings\
Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\
MicrosoftTeams_8wekyb3d8bbwe\TeamsStartupTask"))
{
New-Item -Path "HKCU:\Software\Classes\Local Settings\Software\
Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\
MicrosoftTeams_8wekyb3d8bbwe\TeamsStartupTask" -Force
}
New-ItemProperty -Path "HKCU:\Software\Classes\Local Settings\Software\
Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\
MicrosoftTeams_8wekyb3d8bbwe\TeamsStartupTask" -Name State -PropertyType DWord -
Value 1 -Force
}
}

# Enable Teams autostarting


Function EnableTeamsAutostart {
Write-Output "Enabling Teams Autostart ..."
if (Get-AppxPackage -Name MicrosoftTeams)
{
if (-not (Test-Path -Path "HKCU:\Software\Classes\Local Settings\
Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\
MicrosoftTeams_8wekyb3d8bbwe\TeamsStartupTask"))
{
New-Item -Path "HKCU:\Software\Classes\Local Settings\Software\
Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\
MicrosoftTeams_8wekyb3d8bbwe\TeamsStartupTask" -Force
}
New-ItemProperty -Path "HKCU:\Software\Classes\Local Settings\Software\
Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\
MicrosoftTeams_8wekyb3d8bbwe\TeamsStartupTask" -Name State -PropertyType DWord -
Value 2 -Force
}
}

#endregion UWP apps

#region Gaming

# Disable Xbox Game Bar tips


Function DisableXboxGameTips {
Write-Output "Disabling Xbox Game Tips ..."
if ((Get-AppxPackage -Name Microsoft.XboxGamingOverlay) -or (Get-AppxPackage
-Name Microsoft.GamingApp))
{
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\GameBar -Name
ShowStartupPanel -PropertyType DWord -Value 0 -Force
}
}

# Enable Xbox Game Bar tips


Function EnableXboxGameTips {
Write-Output "Enabling Xbox Game Tips ..."
if ((Get-AppxPackage -Name Microsoft.XboxGamingOverlay) -or (Get-AppxPackage
-Name Microsoft.GamingApp))
{
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\GameBar -Name
ShowStartupPanel -PropertyType DWord -Value 1 -Force
}
}

# Enable hardware-accelerated GPU scheduling


Function EnableGPUScheduling {
Write-Output "Enabling GPU Scheduling ..."
if (Get-CimInstance -ClassName CIM_VideoController | Where-Object -
FilterScript {($_.AdapterDACType -ne "Internal") -and ($null -ne
$_.AdapterDACType)})
{
# Determining whether an OS is not installed on a virtual machine
if ((Get-CimInstance -ClassName CIM_ComputerSystem).Model -notmatch
"Virtual")
{
# Checking whether a WDDM verion is 2.7 or higher
$WddmVersion_Min = Get-ItemPropertyValue -Path HKLM:\SYSTEM\
CurrentControlSet\Control\GraphicsDrivers\FeatureSetUsage -Name WddmVersion_Min
if ($WddmVersion_Min -ge 2700)
{
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\
Control\GraphicsDrivers" -Name HwSchMode -PropertyType DWord -Value 2 -Force
}
}
}
}

# Disable hardware-accelerated GPU scheduling


Function DisableGPUScheduling {
Write-Output "Disabling GPU Scheduling ..."
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\
GraphicsDrivers" -Name HwSchMode -PropertyType DWord -Value 1 -Force
}

#endregion Gaming

#region Microsoft Defender & Security

# Enable Microsoft Defender Exploit Guard network protection


Function EnableNetworkProtection {
Write-Output "Enabling Network Protection ..."
if ((Get-MpComputerStatus).AntivirusEnabled -eq $true)
{
Set-MpPreference -EnableNetworkProtection Enabled
}
}

# Disable Microsoft Defender Exploit Guard network protection


Function DisableNetworkProtection {
Write-Output "Disabling Network Protection ..."
if ((Get-MpComputerStatus).AntivirusEnabled -eq $true)
{
Set-MpPreference -EnableNetworkProtection Disabled
}
}

# Enable detection for potentially unwanted applications and block them


Function EnablePUAppsDetection {
Write-Output "Enabling PU Apps Detection ..."
if ((Get-MpComputerStatus).AntivirusEnabled -eq $true)
{
Set-MpPreference -PUAProtection Enabled
}
}

# Disable detection for potentially unwanted applications and block them


Function DisablePUAppsDetection {
Write-Output "Disabling PU Apps Detection ..."
if ((Get-MpComputerStatus).AntivirusEnabled -eq $true)
{
Set-MpPreference -PUAProtection Disabled
}
}

# Enable sandboxing for Microsoft Defender


Function EnableDefenderSandbox {
Write-Output "Enabling Defender Sandbox ..."
if ((Get-MpComputerStatus).AntivirusEnabled -eq $true)
{
setx /M MP_FORCE_USE_SANDBOX 1
}
}

# Disable sandboxing for Microsoft Defender


Function DisableDefenderSandbox {
Write-Output "Disabling Defender Sandbox ..."
if ((Get-MpComputerStatus).AntivirusEnabled -eq $true)
{
setx /M MP_FORCE_USE_SANDBOX 0
}
}

# Enable events auditing generated when a process is created (starts)


Function EnableAuditProcess {
Write-Output "Enabling Audit Process ..."
auditpol /set /subcategory:"{0CCE922B-69AE-11D9-BED3-505054503030}"
/success:enable /failure:enable
}

# Disable events auditing generated when a process is created (starts)


Function DisableAuditProcess {
Write-Output "Disabling Audit Process ..."
auditpol /set /subcategory:"{0CCE922B-69AE-11D9-BED3-505054503030}"
/success:disable /failure:disable
}

# Include command line in process creation events


Function EnableCommandLineProcessAudit {
Write-Output "Enabling Command Line Process Audit ..."
# Enable events auditing generated when a process is created (starts)
auditpol /set /subcategory:"{0CCE922B-69AE-11D9-BED3-505054503030}"
/success:enable /failure:enable
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Policies\System\Audit -Name ProcessCreationIncludeCmdLine_Enabled -PropertyType
DWord -Value 1 -Force
}

# Do not include command line in process creation events


Function DisableCommandLineProcessAudit {
Write-Output "Disabling Command Line Process Audit ..."
Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Policies\System\Audit -Name ProcessCreationIncludeCmdLine_Enabled -Force -
ErrorAction Ignore
}

# Create the "Process Creation" Event Viewer сustom view to log the executed
processes and their arguments
Function EnableEventViewerCustomView {
Write-Output "Enable Event Viewer Custom View ..."
# Enable events auditing generated when a process is created (starts)
auditpol /set /subcategory:"{0CCE922B-69AE-11D9-BED3-505054503030}"
/success:enable /failure:enable

# Include command line in process creation events


New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Policies\System\Audit -Name ProcessCreationIncludeCmdLine_Enabled -PropertyType
DWord -Value 1 -Force

$XML = @"
<ViewerConfig>
<QueryConfig>
<QueryParams>
<UserQuery />
</QueryParams>
<QueryNode>
<Name>$($Localization.EventViewerCustomViewName)</Name>

<Description>$($Localization.EventViewerCustomViewDescription)</Description>
<QueryList>
<Query Id="0" Path="Security">
<Select
Path="Security">*[System[(EventID=4688)]]</Select>
</Query>
</QueryList>
</QueryNode>
</QueryConfig>
</ViewerConfig>
"@

if (-not (Test-Path -Path "$env:ProgramData\Microsoft\Event Viewer\Views"))


{
New-Item -Path "$env:ProgramData\Microsoft\Event Viewer\Views" -
ItemType Directory -Force
}

# Save ProcessCreation.xml in the UTF-8 with BOM encoding


Set-Content -Path "$env:ProgramData\Microsoft\Event Viewer\Views\
ProcessCreation.xml" -Value $XML -Encoding UTF8 -Force
}

# Remove the "Process Creation" Event Viewer custom view


Function DisableEventViewerCustomView {
Write-Output "Disabling Event Viewer Custom View ..."
Remove-Item -Path "$env:ProgramData\Microsoft\Event Viewer\Views\
ProcessCreation.xml" -Force -ErrorAction Ignore
}

# Enable logging for all Windows PowerShell modules


Function EnablePowerShellModulesLogging {
Write-Output "Enabling PowerShell Modules Logging ..."
if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\
PowerShell\ModuleLogging\ModuleNames))
{
New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\
ModuleLogging\ModuleNames -Force
}
New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\
ModuleLogging -Name EnableModuleLogging -PropertyType DWord -Value 1 -Force
New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\
ModuleLogging\ModuleNames -Name * -PropertyType String -Value * -Force
}

# Disable logging for all Windows PowerShell modules


Function DisablePowerShellModulesLogging {
Write-Output "Disabling PowerShell Modules Logging ..."
Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\
PowerShell\ModuleLogging -Name EnableModuleLogging -Force -ErrorAction Ignore
Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\
PowerShell\ModuleLogging\ModuleNames -Name * -Force -ErrorAction Ignore
}

# Enable logging for all PowerShell scripts input to the Windows PowerShell event
log
Function EnablePowerShellScriptsLogging {
Write-Output "Enabling PowerShell Scripts Logging ..."
if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\
PowerShell\ScriptBlockLogging))
{
New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\
ScriptBlockLogging -Force
}
New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\
ScriptBlockLogging -Name EnableScriptBlockLogging -PropertyType DWord -Value 1 -
Force
}

# Disable logging for all PowerShell scripts input to the Windows PowerShell event
log
Function DisablePowerShellScriptsLogging {
Write-Output "Disabling PowerShell Scripts Logging ..."
Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\
PowerShell\ScriptBlockLogging -Name EnableScriptBlockLogging -Force -ErrorAction
Ignore
}

# Disable apps and files checking within Microsoft Defender SmartScreen


Function DisableAppsSmartScreen {
Write-Output "Disabling Apps SmartScreen ..."
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer -Name SmartScreenEnabled -PropertyType String -Value Off -Force
}

# Enable apps and files checking within Microsoft Defender SmartScreen


Function EnableAppsSmartScreen {
Write-Output "Enabling Apps SmartScreen ..."
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer -Name SmartScreenEnabled -PropertyType String -Value Warn -Force
}

# Microsoft Defender SmartScreen doesn't marks downloaded files from the Internet
as unsafe
Function DisableSaveZoneInformation {
Write-Output "Disabling Save Zone Information ..."
if (-not (Test-Path -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Policies\Attachments))
{
New-Item -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Policies\Attachments -Force
}
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Policies\Attachments -Name SaveZoneInformation -PropertyType DWord -Value 1 -Force
}

# Microsoft Defender SmartScreen marks downloaded files from the Internet as unsafe
Function EnableSaveZoneInformation {
Write-Output "Enabling Save Zone Information ..."
Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Policies\Attachments -Name SaveZoneInformation -Force -ErrorAction Ignore
}

# Disable Windows Script Host


Function DisableWindowsScriptHost {
Write-Output "Disabling Windows Script Host ..."
if (-not (Test-Path -Path "HKCU:\SOFTWARE\Microsoft\Windows Script Host\
Settings"))
{
New-Item -Path "HKCU:\SOFTWARE\Microsoft\Windows Script Host\Settings"
-Force
}
New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows Script Host\
Settings" -Name Enabled -PropertyType DWord -Value 0 -Force
}

# Enable Windows Script Host


Function EnableWindowsScriptHost {
Write-Output "Enabling Windows Script Host ..."
Remove-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows Script Host\
Settings" -Name Enabled -Force -ErrorAction Ignore
}

# Disable Windows Sandbox


Function DisableWindowsSandbox {
Write-Output "Disabling Windows Sandbox ..."
if (Get-WindowsEdition -Online | Where-Object -FilterScript {$_.Edition -eq
"Professional" -or $_.Edition -like "Enterprise*"})
{
# Checking whether x86 virtualization is enabled in the firmware
if ((Get-CimInstance -ClassName
CIM_Processor).VirtualizationFirmwareEnabled -eq $true)
{
Disable-WindowsOptionalFeature -FeatureName Containers-
DisposableClientVM -Online -NoRestart
}
else
{
try
{
# Determining whether Hyper-V is enabled
if ((Get-CimInstance -ClassName
CIM_ComputerSystem).HypervisorPresent -eq $true)
{
Disable-WindowsOptionalFeature -FeatureName
Containers-DisposableClientVM -Online -NoRestart
}
}
catch [System.Exception]
{
Write-Error -Message $Localization.EnableHardwareVT -
ErrorAction SilentlyContinue
}
}
}
}

# Enable Windows Sandbox


Function EnableWindowsSandbox {
Write-Output "Enabling Windows Sandbox ..."
if (Get-WindowsEdition -Online | Where-Object -FilterScript {$_.Edition -eq
"Professional" -or $_.Edition -like "Enterprise*"})
{
# Checking whether x86 virtualization is enabled in the firmware
if ((Get-CimInstance -ClassName
CIM_Processor).VirtualizationFirmwareEnabled -eq $true)
{
Enable-WindowsOptionalFeature -FeatureName Containers-
DisposableClientVM -All -Online -NoRestart
}
else
{
try
{
# Determining whether Hyper-V is enabled
if ((Get-CimInstance -ClassName
CIM_ComputerSystem).HypervisorPresent -eq $true)
{
Enable-WindowsOptionalFeature -FeatureName
Containers-DisposableClientVM -All -Online -NoRestart
}
}
catch [System.Exception]
{
Write-Error -Message $Localization.EnableHardwareVT -
ErrorAction SilentlyContinue
}
}
}
}

#endregion Microsoft Defender & Security

#region Context menu

# Show the "Extract all" item in the Windows Installer (.msi) context menu
Function ShowMSIExtractContext {
Write-Output "Showing MSI Extract Context ..."
if (-not (Test-Path -Path Registry::HKEY_CLASSES_ROOT\Msi.Package\shell\
Extract\Command))
{
New-Item -Path Registry::HKEY_CLASSES_ROOT\Msi.Package\shell\Extract\
Command -Force
}
$Value = "{0}" -f "msiexec.exe /a `"%1`" /qb TARGETDIR=`"%1 extracted`""
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\Msi.Package\shell\Extract\
Command -Name "(default)" -PropertyType String -Value $Value -Force
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\Msi.Package\shell\Extract
-Name MUIVerb -PropertyType String -Value "@shell32.dll,-37514" -Force
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\Msi.Package\shell\Extract
-Name Icon -PropertyType String -Value "shell32.dll,-16817" -Force
}

# Hide the "Extract all" item from the Windows Installer (.msi) context menu
Function HideMSIExtractContext {
Write-Output "Hiding MSI Extract Context ..."
Remove-Item -Path Registry::HKEY_CLASSES_ROOT\Msi.Package\shell\Extract -
Recurse -Force -ErrorAction Ignore
}

# Show the "Install" item in the Cabinet (.cab) filenames extensions context menu
Function ShowCABInstallContext {
Write-Output "Showing CAB Install Context ..."
if (-not (Test-Path -Path Registry::HKEY_CLASSES_ROOT\CABFolder\Shell\RunAs\
Command))
{
New-Item -Path Registry::HKEY_CLASSES_ROOT\CABFolder\Shell\RunAs\
Command -Force
}
$Value = "{0}" -f "cmd /c DISM.exe /Online /Add-Package
/PackagePath:`"%1`" /NoRestart & pause"
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\CABFolder\Shell\RunAs\
Command -Name "(default)" -PropertyType String -Value $Value -Force
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\CABFolder\Shell\RunAs -
Name MUIVerb -PropertyType String -Value "@shell32.dll,-10210" -Force
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\CABFolder\Shell\RunAs -
Name HasLUAShield -PropertyType String -Value "" -Force
}

# Hide the "Install" item from the Cabinet (.cab) filenames extensions context menu
Function HideCABInstallContext {
Write-Output "Hiding CAB Install Context ..."
Remove-Item -Path Registry::HKEY_CLASSES_ROOT\CABFolder\Shell\RunAs -Recurse
-Force -ErrorAction Ignore
}

# Show the "Run as different user" item in the .exe filename extensions context
menu
Function ShowRunAsDifferentUserContext {
Write-Output "Showing Run As Different User Context ..."
Remove-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\exefile\shell\runasuser
-Name Extended -Force -ErrorAction Ignore
}

# Hide the "Run as different user" item from the .exe filename extensions context
menu
Function HideRunAsDifferentUserContext {
Write-Output "Hiding Run As Different User Context ..."
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\exefile\shell\runasuser -
Name Extended -PropertyType String -Value "" -Force
}

# Hide the "Cast to Device" item from the media files and folders context menu
Function HideCastToDeviceContext {
Write-Output "Hiding Cast To Device Context ..."
if (-not (Test-Path -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Shell Extensions\Blocked"))
{
New-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell
Extensions\Blocked" -Force
}
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell
Extensions\Blocked" -Name "{7AD84985-87B4-4a16-BE58-8B72A5B390F7}" -PropertyType
String -Value "Play to menu" -Force
}

# Show the "Cast to Device" item in the media files and folders context menu
Function ShowCastToDeviceContext {
Write-Output "Showing Cast To Device Context ..."
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Shell Extensions\Blocked" -Name "{7AD84985-87B4-4a16-BE58-8B72A5B390F7}" -Force -
ErrorAction Ignore
}

# Hide the "Share" item from the context menu


Function HideShareContext {
Write-Output "Hiding Share Context ..."
Remove-Item -Path "Registry::HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\
ContextMenuHandlers\ModernSharing" -Recurse -Force -ErrorAction Ignore
}

# Show the "Share" item in the context menu


Function ShowShareContext {
Write-Output "Showing Share Context ..."
if (-not (Test-Path -Path "Registry::HKEY_CLASSES_ROOT\AllFilesystemObjects\
shellex\ContextMenuHandlers\ModernSharing"))
{
New-Item -Path "Registry::HKEY_CLASSES_ROOT\AllFilesystemObjects\
shellex\ContextMenuHandlers\ModernSharing" -Force
}
New-ItemProperty -Path "Registry::HKEY_CLASSES_ROOT\AllFilesystemObjects\
shellex\ContextMenuHandlers\ModernSharing" -Name "(default)" -PropertyType String -
Value "{e2bf9676-5f8f-435c-97eb-11607a5bedf7}" -Force
}

# Hide the "Edit with Photos" item from the media files context men
Function HideEditWithPhotosContext {
Write-Output "Hiding Edit With Photos Context ..."
if (Get-AppxPackage -Name Microsoft.Windows.Photos)
{
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\
AppX43hnxtbyyps62jhe9sqpdzxn1790zetc\Shell\ShellEdit -Name ProgrammaticAccessOnly -
PropertyType String -Value "" -Force
}
}

# Show the "Edit with Photos" item in the media files context menu
Function ShowEditWithPhotosContext {
Write-Output "Showing Edit With Photos Context ..."
if (Get-AppxPackage -Name Microsoft.Windows.Photos)
{
Remove-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\
AppX43hnxtbyyps62jhe9sqpdzxn1790zetc\Shell\ShellEdit -Name ProgrammaticAccessOnly -
Force -ErrorAction Ignore
}
}

# Hide the "Create a new video" item from the media files context menu
Function HideCreateANewVideoContext {
Write-Output "Hiding Create A New Video Context ..."
if (Get-AppxPackage -Name Microsoft.Windows.Photos)
{
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\
AppX43hnxtbyyps62jhe9sqpdzxn1790zetc\Shell\ShellCreateVideo -Name
ProgrammaticAccessOnly -PropertyType String -Value "" -Force
}
}

# Show the "Create a new video" item in the media files context menu
Function ShowCreateANewVideoContext {
Write-Output "Showing Create A New Video Context ..."
if (Get-AppxPackage -Name Microsoft.Windows.Photos)
{
Remove-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\
AppX43hnxtbyyps62jhe9sqpdzxn1790zetc\Shell\ShellCreateVideo -Name
ProgrammaticAccessOnly -Force -ErrorAction Ignore
}
}

# Hide the "Print" item from the .bat and .cmd context menu
Function HidePrintCMDContext {
Write-Output "Hiding Print CMD Context ..."
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\batfile\shell\print -Name
ProgrammaticAccessOnly -PropertyType String -Value "" -Force
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\cmdfile\shell\print -Name
ProgrammaticAccessOnly -PropertyType String -Value "" -Force
}

# Show the "Print" item in the .bat and .cmd context menu
Function ShowPrintCMDContext {
Write-Output "Showing Print CMD Context ..."
Remove-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\batfile\shell\print -
Name ProgrammaticAccessOnly -Force -ErrorAction Ignore
Remove-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\cmdfile\shell\print -
Name ProgrammaticAccessOnly -Force -ErrorAction Ignore
}

# Hide the "Include in Library" item from the folders and drives context menu
Function HideIncludeInLibraryContext {
Write-Output "Hiding Include In Library Context ..."
New-ItemProperty -Path "Registry::HKEY_CLASSES_ROOT\Folder\ShellEx\
ContextMenuHandlers\Library Location" -Name "(default)" -PropertyType String -Value
"-{3dad6c5d-2167-4cae-9914-f99e41c12cfa}" -Force
}

# Show the "Include in Library" item in the folders and drives context menu
Function ShowIncludeInLibraryContext {
Write-Output "Showing Include In Library Context ..."
New-ItemProperty -Path "Registry::HKEY_CLASSES_ROOT\Folder\ShellEx\
ContextMenuHandlers\Library Location" -Name "(default)" -PropertyType String -Value
"{3dad6c5d-2167-4cae-9914-f99e41c12cfa}" -Force
}
# Hide the "Send to" item from the folders context menu
Function HideSendToContext {
Write-Output "Hiding Send To Context ..."
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\AllFilesystemObjects\
shellex\ContextMenuHandlers\SendTo -Name "(default)" -PropertyType String -Value "-
{7BA4C740-9E81-11CF-99D3-00AA004AE837}" -Force
}

# Show the "Send to" item in the folders context menu


Function ShowSendToContext {
Write-Output "Showing Send To Context ..."
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\AllFilesystemObjects\
shellex\ContextMenuHandlers\SendTo -Name "(default)" -PropertyType String -Value
"{7BA4C740-9E81-11CF-99D3-00AA004AE837}" -Force
}

# Hide the "Turn on BitLocker" item from the drives context menu
Function HideBitLockerContext {
Write-Output "Hiding BitLocker Context ..."
if (Get-WindowsEdition -Online | Where-Object -FilterScript {($_.Edition -eq
"Professional") -or ($_.Edition -like "Enterprise*")})
{
if ((Get-BitLockerVolume).ProtectionStatus -eq "Off")
{
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\Drive\shell\
encrypt-bde-elev -Name ProgrammaticAccessOnly -PropertyType String -Value "" -Force
}
}
}

# Show the "Turn on BitLocker" item in the drives context menu


Function ShowBitLockerContext {
Write-Output "Showing BitLocker Context ..."
if (Get-WindowsEdition -Online | Where-Object -FilterScript {$_.Edition -eq
"Professional" -or $_.Edition -like "Enterprise*"})
{
Remove-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\Drive\shell\
encrypt-bde-elev -Name ProgrammaticAccessOnly -Force -ErrorAction Ignore
}
}

# Hide the "Compressed (zipped) Folder" item from the "New" context menu
Function HideCompressedFolderNewContext {
Write-Output "Hiding Compressed Folder New Context ..."
Remove-Item -Path Registry::HKEY_CLASSES_ROOT\.zip\CompressedFolder\ShellNew
-Force -ErrorAction Ignore
}

# Show the "Compressed (zipped) Folder" item to the "New" context menu
Function ShowCompressedFolderNewContext {
Write-Output "Showing Compressed Folder New Context ..."
if (-not (Test-Path -Path Registry::HKEY_CLASSES_ROOT\.zip\CompressedFolder\
ShellNew))
{
New-Item -Path Registry::HKEY_CLASSES_ROOT\.zip\CompressedFolder\
ShellNew -Force
}
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\.zip\CompressedFolder\
ShellNew -Name Data -PropertyType Binary -Value ([byte[]]
(80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)) -Force
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\.zip\CompressedFolder\
ShellNew -Name ItemName -PropertyType ExpandString -Value "@%SystemRoot%\system32\
zipfldr.dll,-10194" -Force
}

# Enable the "Open", "Print", and "Edit" items if more than 15 files selected
Function EnableMultipleInvokeContext {
Write-Output "Enabling Multiple Invoke Context ..."
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer -Name MultipleInvokePromptMinimum -PropertyType DWord -Value 300 -Force
}

# Disable the "Open", "Print", and "Edit" items if more than 15 files selected
Function DisableMultipleInvokeContext {
Write-Output "Disabling Multiple Invoke Context ..."
Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer -Name MultipleInvokePromptMinimum -Force -ErrorAction Ignore
}

# Hide the "Look for an app in the Microsoft Store" item in the "Open with" dialog
Function HideUseStoreOpenWith {
Write-Output "Hiding Use Store Open With ..."
if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\
Explorer))
{
New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -
Force
}
New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -
Name NoUseStoreOpenWith -PropertyType DWord -Value 1 -Force
}

# Show the "Look for an app in the Microsoft Store" item in the "Open with" dialog
Function ShowUseStoreOpenWith {
Write-Output "Showing Use Store Open With ..."
Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer
-Name NoUseStoreOpenWith -Force -ErrorAction Ignore
}

# Hide the "Open in Windows Terminal" menu option in the folders context menu
Function HideOpenWindowsTerminalContext {
Write-Output "Hiding Open Windows Terminal Context ..."
if (Get-AppxPackage -Name Microsoft.WindowsTerminal)
{
if (-not (Test-Path -Path "HKLM:\SOFTWARE\Microsoft\Windows\
CurrentVersion\Shell Extensions\Blocked"))
{
New-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Shell Extensions\Blocked" -Force
}
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\
CurrentVersion\Shell Extensions\Blocked" -Name "{9F156763-7844-4DC4-B2B1-
901F640F5155}" -PropertyType String -Value "WindowsTerminal" -Force
}
}

# Show the "Open in Windows Terminal" menu option in the folders context menu
Function ShowOpenWindowsTerminalContext {
Write-Output "Showing Open Windows Terminal Context ..."
if (Get-AppxPackage -Name Microsoft.WindowsTerminal)
{
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\
CurrentVersion\Shell Extensions\Blocked" -Name "{9F156763-7844-4DC4-B2B1-
901F640F5155}" -Force -ErrorAction Ignore
}
}

# Hide the "Open in Windows Terminal (Admin)" item from the Desktop and folders
context menu
Function HideOpenWindowsTerminalAdminContext {
Write-Output "Hiding Open Windows Terminal Context ..."
$Items = @(
"Registry::HKEY_CLASSES_ROOT\Directory\Background\shell\runas",
"Registry::HKEY_CLASSES_ROOT\Directory\shell\runas"
)
Remove-Item -Path $Items -Recurse -Force -ErrorAction Ignore
}

# Show the "Open in Windows Terminal (Admin)" item in the Desktop and folders
context menu
Function ShowOpenWindowsTerminalAdminContext {
Write-Output "Showing Open Windows Terminal Context ..."
if (Get-AppxPackage -Name Microsoft.WindowsTerminal)
{
# Show the option in the Desktop context menu
if (-not (Test-Path -Path Registry::HKEY_CLASSES_ROOT\Directory\
Background\shell\runas\command))
{
New-Item -Path Registry::HKEY_CLASSES_ROOT\Directory\Background\
shell\runas\command -ItemType Directory -Force
}
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\Directory\
Background\shell\runas -Name "(default)" -PropertyType String -Value
$Localization.OpenInWindowsTerminalAdmin -Force
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\Directory\
Background\shell\runas -Name Icon -PropertyType String -Value "imageres.dll,73" -
Force
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\Directory\
Background\shell\runas -Name NoWorkingDirectory -PropertyType String -Value "" -
Force
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\Directory\
Background\shell\runas\command -Name "(default)" -PropertyType String -Value
"wt.exe -d ""%V""" -Force

# Show the option in the folders context menu


if (-not (Test-Path -Path Registry::HKEY_CLASSES_ROOT\Directory\shell\
runas\command))
{
New-Item -Path Registry::HKEY_CLASSES_ROOT\Directory\shell\runas\
command -ItemType Directory -Force
}
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\Directory\shell\
runas -Name "(default)" -PropertyType String -Value
$Localization.OpenInWindowsTerminalAdmin -Force
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\Directory\shell\
runas -Name Icon -PropertyType String -Value "imageres.dll,73" -Force
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\Directory\shell\
runas -Name NoWorkingDirectory -PropertyType String -Value "" -Force
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\Directory\shell\
runas\command -Name "(default)" -PropertyType String -Value "wt.exe -d ""%1""" -
Force
}
}

#endregion Context menu

#region Other

# Make the taskbar size large


Function LargeTaskbarSize {
Write-Output "Setting Large Taskbar Size ..."
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name TaskbarSi -PropertyType DWord -Value 2 -Force
}

# Make the taskbar size default


Function DefaultTaskbarSize {
Write-Output "Setting Default Taskbar Size ..."
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name TaskbarSi -PropertyType DWord -Value 1 -Force
}

# Make the taskbar size small


Function SmallTaskbarSize {
Write-Output "Setting Small Taskbar Size ..."
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name TaskbarSi -PropertyType DWord -Value 0 -Force
}

# Taskbar Always combine, hide labels


Function AlwaysCombineHideLabelsTaskbar {
Write-Output "Setting Taskbar to Always combine, hide labels ..."
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name TaskbarGlomLevel -PropertyType DWord -Value 0 -Force
}

# Taskbar Combine when taskbar is full


Function CombineWhenFullTaskbar {
Write-Output "Setting Taskbar to combine when taskbar is full ..."
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name TaskbarGlomLevel -PropertyType DWord -Value 1 -Force
}

# Taskbar Never combine


Function NeverCombineTaskbar {
Write-Output "Setting Taskbar to never combine ..."
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\
Explorer\Advanced -Name TaskbarGlomLevel -PropertyType DWord -Value 2 -Force
}

# View the Control Panel icons by category


Function CategoryControlPanelView {
Write-Output "Setting Category Control Panel View ..."
if (-not (Test-Path -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\ControlPanel))
{
New-Item -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\ControlPanel -Force
}
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\ControlPanel -Name AllItemsIconView -PropertyType DWord -Value 0 -Force
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\ControlPanel -Name StartupPage -PropertyType DWord -Value 0 -Force
}

# View the Control Panel icons by large icons


Function LargeIconsControlPanelView {
Write-Output "Setting Large Icons Control Panel View ..."
if (-not (Test-Path -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\ControlPanel))
{
New-Item -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\ControlPanel -Force
}
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\ControlPanel -Name AllItemsIconView -PropertyType DWord -Value 0 -Force
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\ControlPanel -Name StartupPage -PropertyType DWord -Value 1 -Force
}

# View the Control Panel icons by small icons


Function SmallIconsControlPanelView {
Write-Output "Setting Small Icons Control Panel View ..."
if (-not (Test-Path -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\ControlPanel))
{
New-Item -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\ControlPanel -Force
}
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\ControlPanel -Name AllItemsIconView -PropertyType DWord -Value 1 -Force
New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\ControlPanel -Name StartupPage -PropertyType DWord -Value 1 -Force
}

#endregion Other

# Holder for None (Must keep)


Function None {
}

# Relaunch the script with administrator privileges


Function RequireAdmin {
If (!([Security.Principal.WindowsPrincipal]
[Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.Wi
ndowsBuiltInRole]"Administrator")) {
Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File
`"$PSCommandPath`" $PSCommandArgs" -WorkingDirectory $pwd -Verb RunAs
Exit
}
}
# Create Restore Point
Function CreateRestorePoint {
Write-Output "Creating Restore Point incase something bad happens"
Enable-ComputerRestore -Drive "C:\"
Checkpoint-Computer -Description "RestorePoint1" -RestorePointType
"MODIFY_SETTINGS"
}

# Normalize path to preset file


$preset = ""
$PSCommandArgs = $args
If ($args -And $args[0].ToLower() -eq "-preset") {
$preset = Resolve-Path $($args | Select-Object -Skip 1)
$PSCommandArgs = "-preset `"$preset`""
}

# Load function names from command line arguments or a preset file


If ($args) {
$tweaks = $args
If ($preset) {
$tweaks = Get-Content $preset -ErrorAction Stop | ForEach { $_.Trim() }
| Where { $_ -ne "" -and $_[0] -ne "#" }
}
}

# Call the desired tweak functions


$tweaks | ForEach { Invoke-Expression $_ }

You might also like