Core changes, additions and refactor (#127)

* fix: console background color changing
- Add new background colors which works greatly with Powershell and Windows Terminal

* docs: update ISSUE_TEMPLATEs
- Log folder location
- change label to only Feature Request

* Fix: Tab 1 Panel 2 app order

* refactor: change script tmp folder to actually be on User Temp
- Get the Script Temp folder using a new function

* Delete remaining from old tmp\ folder

* arch: rename all powershell scripts to match PS naming
- Even if it isn't approved

* chore: remove unused code
- Install-HEVCSupport function which doesn't work anymore

* arch: rename remaining scripts
- Also fix an name warning from PSScriptAnalyzer
- Remove Main() functions

* style: change debloat script order
- Remove useless code from Remove-CapabilitiesList

* feat: remove old quick assist if the new one is already installed

* feat: Install Quick Assist by GUI
- Remove some console output which wasn't important

* BREAKING CHANGE: Attempt to correctly rename the remaining files (part 1)

* fix: Attempt to correctly rename the remaining files (part 2)

* Change CONTRIBUTING to a less strict policy

* Fix path not being found while downloading (#95)
- This is not a complete fix

* Fix adwcleaner not working (#95)
- Organize imports (yes, again)

* Fix adwcleaner not working (yikes!) (#95)

* Don't set NVIDIA services to Manual anymore (#98)
- Solves issues with GeForce Experience and Control Panel

* Remove more Apps: (#102)
- WhatsApp
- Amazon Prime Video
- TikTok
- Facebook
- Instagram

Spotify will not be removed, as i don't want to :v

* Remove useless files and code
- The lib Grant-RegistryPermission isn't working at all
- Removing all references from this handmade lib

* Prefer using "legacy" Windows 10 context menu on Windows 11
- If you dislike it you can click twice on "Enable Legacy Context Menu" to restore the default
- Less laggy

* Stop triggering github actions everyday

* Rename powershell-linter CI

* Refactor Issue templates
- Need less info
- Fixed punctuation.

* Logs should be divided monthly

* Modify Windows Explorer Navigation Pane behaviors
- Hide Duplicated Removable Devices
- Disable Expand to folder on navigation pane

(Seems to solve: Explorer opening as the primary window without any reason)

* Making disable expand to folder on navigation pane irreversible
- The default is already disabled

* Load PSScheduledJob Module before using it's calls (#119)

* Add DELL bloatware to remove
- Add Alienware apps, but keep them commented
.
.
.
I've been thinking about this for a long time...

* Use less colors on terminal
> This is not Cyberpunk 2077
- Change credits location

* Enable Run Dialog History back (#102)
- Press Win + R, then type something, you should see more stuff now.

* Add Hyper-V to Optional Features (#102)

* Add Windows Sandbox to Optional Features (#102)

* Add new MS Edge Apps to Remove

* Organize Bloatware list in each category
- Add Dev Home to MSApps

* Don't remove Dev Home yet, it can't be reinstalled

* Winget and Chocolatey won't install while initializing the script (#110)
- Every Winget/Chocolatey operation was moved to Software Install Tab.
- To be able to install apps again, you need to install individually Winget and Chocolatey.
- Also, you can Add or Remove Daily Upgrade for Winget and Chocolatey.
- Chocolatey can now be Uninstalled! *(Be aware to uninstall everything before)*

infra: Manage-Software and every code related to package managers were moved to /src/lib/package-managers/

* Update the message when a package manager was already found before enabling daily upgrade

* Switch Xbox app order on list
- Replace comments

No code changes.

* Update CONTRIBUTING
- I thought i made this change before, sorry for the inconvenience.

* Purge Cortana from reinstallable system apps. (#124)

* When removing Microsoft Edge, keep EdgeWebView (#125)

* Keep EdgeCore folder
- Testing to Remove Edge but keep EdgeWebView working

* Fix Remove-ItemVerified hardcode

* Revert EdgeCore commit (#125)
- Refactor what folders are removed (The Exclude param was broken)

* Move the last package manager related file to /src/lib/package-managers/

* Allow WinDebloatTools to run asking for admin perms +
+ Run Windows Terminal or PowerShell depending on winget.
- If script is in the wrong folder, it'll be able to detect and correct it.

* Install Winget, Chocolatey and WSL on DEMAND (#110 #112)
- If the user wants to install something, instead of going directly to an error, install the missing package manager.
- The 1st time installing will prompt a bigger message (I don't know how this happened)

* Fix PSScriptAnalyzer note.
- The cmdlet 'Install-Software' returns an object of type 'System.Management.Automation.ScriptBlock' but this type is not declared in the OutputType attribute.

* Add option to switch Mouse Acceleration (#102)

* Add option to turn on/off Family Safety Features from Task Schedules (#104)

* Improve Windows Search info (#112)
- Use lib to disable/enable service for WSearch service
- Isolate WSearch tweak on Services category

* Fix Mouse Acceleration persistance after reboot (#102)
- Changed Type to String.

* Add Messenger app and Spotify (#102)
- Spotify line was uncommented

* Fix missing .URL file association :D (#113)
- Took a long time to find out, I'm not doing this again
- All .reg files should wait until finished
- Add "None" type to Set-ItemPropertyVerified
  - Used to a specific case where REG_NONE was needed
- Check if system is Windows 10, then only apply on it
- Added other comment to Windows Photos App, because it's the same as Video Editor (2 apps in 1)
- Create new reg file to bypass perms, solving the .url file disassociation
- In Enable-LegacyContextMenu suppress the New-Item command output

* Use -Encoding UTF8 parameter (#118?)

* Load PSScheduledJob Module in Manage-DailyUpgradeJob (#119)
- For some reason the import was missing again.

* Disable Edge Tasks and Services after uninstalling (#123/#125)
- Add a disclaimer to the message before Removing Edge
- Fixed wildcard usage '*' in Set-ScheduledTaskState function
main
Plínio Larrubia 12 months ago committed by Plínio Larrubia
parent 950bf17ed0
commit baf699567f
No known key found for this signature in database
GPG Key ID: 057B0A87CB137C69

@ -11,19 +11,19 @@ body:
value: | value: |
## Important: Read First ## Important: Read First
- If some section doesn't apply, use "N/A" - If some section doesn't apply, use "N/A".
- type: textarea - type: textarea
id: description id: description
attributes: attributes:
label: Describe the Bug label: Describe the Bug
description: A clear and concise description of what the bug is description: A clear and concise description of what the bug "is". You can also add Screenshots.
validations: validations:
required: true required: true
- type: textarea - type: textarea
id: reproduction id: reproduction
attributes: attributes:
label: How can this issue be reproduced? label: How can this issue be reproduced?
description: Steps to reproduce the behavior description: Steps to reproduce the behavior.
placeholder: | placeholder: |
Example: Example:
1. Go to '...' 1. Go to '...'
@ -36,7 +36,7 @@ body:
id: expectedBehavior id: expectedBehavior
attributes: attributes:
label: Expected behavior? label: Expected behavior?
description: A clear and concise description of what you expected to happen description: A clear and concise description of what you expected to happen.
validations: validations:
required: false required: false
- type: markdown - type: markdown
@ -47,7 +47,7 @@ body:
id: os id: os
attributes: attributes:
label: Operating System label: Operating System
description: Versions before Windows 10 are not supported description: Versions before Windows 10 are not supported.
options: options:
- Windows 11 - Windows 11
- Windows 10 - Windows 10
@ -57,18 +57,10 @@ body:
id: osVer id: osVer
attributes: attributes:
label: Operating System Version label: Operating System Version
description: Versions before 1809 are not supported description: Versions before 1809 are not supported.
placeholder: "Example: 21H2" placeholder: "Example: 21H2"
validations: validations:
required: true required: true
- type: textarea
id: screenshots
attributes:
label: Screenshots
description: |
If your issue is better illustrated with screenshots, you may do that here
validations:
required: false
- type: textarea - type: textarea
id: logs id: logs
attributes: attributes:
@ -76,14 +68,6 @@ body:
description: | description: |
**Only needed if it's error related** **Only needed if it's error related**
Put your log file from: C:\Users\{ Your User }\AppData\Local\Temp\Win-Debloat-Tools\logs\WinDebloatTools.log Put your log file from: C:\Users\{ Your User }\AppData\Local\Temp\Win-Debloat-Tools\logs\WinDebloatTools.log
TIP: press `Win + R` and type `%Temp%` then hit `ENTER`, now find the log file TIP: press `Win + R` and type `%Temp%` then hit `ENTER`, now find the log file.
validations:
required: false
- type: textarea
id: context
attributes:
label: Additional Info
description: |
Please feel free to add any additional info here
validations: validations:
required: false required: false

@ -11,12 +11,12 @@ body:
value: | value: |
## Important: Read First ## Important: Read First
- If some section doesn't apply, use "N/A" - If some section doesn't apply, use "N/A".
- type: textarea - type: textarea
id: description id: description
attributes: attributes:
label: Description label: Description
description: A clear and concise description of what you want to happen description: A clear and concise description of what you want to happen.
validations: validations:
required: true required: true
- type: textarea - type: textarea
@ -24,7 +24,7 @@ body:
attributes: attributes:
label: Reason label: Reason
description: | description: |
Give a reason why you want this feature Give a reason why you want this feature:
- How will it make things easier for you? - How will it make things easier for you?
- What does it provide that isn't being provided currently? - What does it provide that isn't being provided currently?
- How does it benefit? - How does it benefit?
@ -35,8 +35,7 @@ body:
attributes: attributes:
label: Examples label: Examples
description: | description: |
Provide examples of the feature as implemented by other software Provide examples of the feature as implemented by other software.
Include screenshots or video if you can demonstrate how you'd like this feature to work.
Include screenshots or video if you like to help demonstrate how you'd like this feature to work
validations: validations:
required: false required: false

@ -13,15 +13,13 @@ name: PSScriptAnalyzer
on: on:
push: push:
branches: branches:
- main - main
- develop - develop
pull_request: pull_request:
branches: branches:
- main - main
- develop - develop
schedule:
- cron: '30 12 * * 0-6'
jobs: jobs:
build: build:
name: PSScriptAnalyzer name: PSScriptAnalyzer
@ -34,7 +32,7 @@ jobs:
with: with:
# The below set up runs PSScriptAnalyzer to your entire repository and runs some basic security rules. # The below set up runs PSScriptAnalyzer to your entire repository and runs some basic security rules.
path: .\ path: .\
recurse: true recurse: true
# Exclude rules that will not be worked on / are invalid # Exclude rules that will not be worked on / are invalid
# Command: invoke-scriptanalyzer . -recurse -excludeRule: "PSAvoidUsingInvokeExpression", "PSAvoidUsingWriteHost", "PSUseShouldProcessForStateChangingFunctions" # Command: invoke-scriptanalyzer . -recurse -excludeRule: "PSAvoidUsingInvokeExpression", "PSAvoidUsingWriteHost", "PSUseShouldProcessForStateChangingFunctions"
excludeRule: '"PSAvoidUsingInvokeExpression", "PSAvoidUsingWriteHost", "PSUseShouldProcessForStateChangingFunctions"' excludeRule: '"PSAvoidUsingInvokeExpression", "PSAvoidUsingWriteHost", "PSUseShouldProcessForStateChangingFunctions"'

@ -3,7 +3,7 @@
**Warning**: this file is subject to changing without notice. **Warning**: this file is subject to changing without notice.
I would be happy to extend the collection of scripts. I would be happy to extend the collection of scripts.
If you want to send me a **PULL REQUEST**, you can send PRs to `main` branch, i'll check your code, request changes if necessary or approve, and merge directly unless it's a "Draft PR". If you want to send me a **PULL REQUEST**, send you PRs to the `develop` branch, select your `local branch (from)` and put into `develop`, i'll check your code, request changes if necessary or approve, and merge directly unless it's a "Draft PR".
## 🖌 Coding Style ## 🖌 Coding Style

@ -110,10 +110,6 @@ Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Force; ls -Recurse *.ps*1 |
- [Import all necessary _modules_ before executing everything](./src/lib/); - [Import all necessary _modules_ before executing everything](./src/lib/);
- Logs both script runs on `C:\Users\<<USERNAME>>\AppData\Local\Temp\Win-DT-Logs`; - Logs both script runs on `C:\Users\<<USERNAME>>\AppData\Local\Temp\Win-DT-Logs`;
- [Make a Restore Point and Backup the Hosts file](./src/scripts/Backup-System.ps1); - [Make a Restore Point and Backup the Hosts file](./src/scripts/Backup-System.ps1);
- [Install _Winget/Chocolatey_ package managers by default](./src/scripts/Install-PackageManager.ps1);
- Creates a new Scheduled Task to daily upgrade all available softwares via _Winget_ at **12:00** and _Chocolatey_ at **13:00**;
- Find the Scheduled Task on `Task Scheduler > Microsoft > Windows > PowerShell > ScheduledJobs > Chocolatey/Winget Daily Upgrade`;
- Register daily upgrade logs on `C:\Users\<<USERNAME>>\AppData\Local\Temp\Win-DT-Logs` and remove old log files;
- [Download AdwCleaner and Run the latest version for _Virus/Adware_ scan and from OOShutUp10 and import all Recommended settings from a file](./src/scripts/silent-debloat-softwares.ps1); - [Download AdwCleaner and Run the latest version for _Virus/Adware_ scan and from OOShutUp10 and import all Recommended settings from a file](./src/scripts/silent-debloat-softwares.ps1);
- [Disable _non-essential_ Telemetry from Scheduled Tasks and Optimize it](./src/scripts/Optimize-TaskScheduler.ps1); - [Disable _non-essential_ Telemetry from Scheduled Tasks and Optimize it](./src/scripts/Optimize-TaskScheduler.ps1);
- [Disable _heavy_ Services, but enable some on SSDs for optimum performance](./src/scripts/Optimize-ServicesRunning.ps1); - [Disable _heavy_ Services, but enable some on SSDs for optimum performance](./src/scripts/Optimize-ServicesRunning.ps1);
@ -143,6 +139,7 @@ Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Force; ls -Recurse *.ps*1 |
- `Enable/Disable Clipboard Sync Across Devices`: Manages the **Clipboard Sync Across Devices** setting, which allows to use the same clipboard for multiple devices (must be using a MS account); - `Enable/Disable Clipboard Sync Across Devices`: Manages the **Clipboard Sync Across Devices** setting, which allows to use the same clipboard for multiple devices (must be using a MS account);
- `Enable/Disable Cortana`: Manages the **Cortana** setting; - `Enable/Disable Cortana`: Manages the **Cortana** setting;
- `Enable/Disable Hibernate`: Manages the **Hibernate** setting; - `Enable/Disable Hibernate`: Manages the **Hibernate** setting;
- `Enable/Disable Legacy Context Menu`: Bring back the Windows 10 **context menu** from right-clicking or default on Windows 11;
- `Enable/Disable Old Volume Control`: Manages the **Old Volume Control (Win 7/8.1)** setting; - `Enable/Disable Old Volume Control`: Manages the **Old Volume Control (Win 7/8.1)** setting;
- `Enable/Disable Online Speech Recognition`: Manages the **Online Speech Recognition** setting, by pressing the keys `Windows + H` you can speak through your mic, then use it to type text using your voice; - `Enable/Disable Online Speech Recognition`: Manages the **Online Speech Recognition** setting, by pressing the keys `Windows + H` you can speak through your mic, then use it to type text using your voice;
- `Enable/Disable Phone Link`: Manages the **Phone Link** setting, which can link your Android/iPhone devices notifications to Windows; - `Enable/Disable Phone Link`: Manages the **Phone Link** setting, which can link your Android/iPhone devices notifications to Windows;
@ -156,7 +153,7 @@ Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Force; ls -Recurse *.ps*1 |
- `Apply Tweaks`: Run every Common Tweak scripts ([Go To **☑️ Common Script Features** section](#%EF%B8%8F-common-script-features)); - `Apply Tweaks`: Run every Common Tweak scripts ([Go To **☑️ Common Script Features** section](#%EF%B8%8F-common-script-features));
- `Undo Tweaks`: Re-apply some tweaks and _Revert_ all possible ones, covering the, `ShutUp10 settings`, `Scheduled Tasks`, `Services`, `Privacy and Performance`, `Personal` and `Optional Features` tweaks, then try to `Reinstall Pre-Installed Apps`; - `Undo Tweaks`: Re-apply some tweaks and _Revert_ all possible ones, covering the, `ShutUp10 settings`, `Scheduled Tasks`, `Services`, `Privacy and Performance`, `Personal` and `Optional Features` tweaks, then try to `Reinstall Pre-Installed Apps`;
- [`Remove Microsoft Edge`](./src/scripts/Remove-MSEdge.ps1): uninstalls Microsoft Edge/WebView, then remove the remaining files; - [`Remove Microsoft Edge`](./src/scripts/Remove-MSEdge.ps1): uninstalls **Microsoft Edge**, then remove the remaining files, **Edge Web View** files will remain untouched;
- [`Remove OneDrive`](./src/scripts/Remove-OneDrive.ps1): completely removes OneDrive from the System, re-install is possible via Win Store; - [`Remove OneDrive`](./src/scripts/Remove-OneDrive.ps1): completely removes OneDrive from the System, re-install is possible via Win Store;
- [`Remove Xbox`](./src/scripts/Remove-Xbox.ps1): wipe Xbox Apps, disable Services related to Xbox and GameBar/GameDVR; - [`Remove Xbox`](./src/scripts/Remove-Xbox.ps1): wipe Xbox Apps, disable Services related to Xbox and GameBar/GameDVR;
@ -164,7 +161,6 @@ Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Force; ls -Recurse *.ps*1 |
_This section contains options to restore the system apps, by downloading them from the **MS Store** (mostly) and doing **Stock configurations** (for some Apps)._ _This section contains options to restore the system apps, by downloading them from the **MS Store** (mostly) and doing **Stock configurations** (for some Apps)._
- `Cortana`;
- `Dolby Audio`; - `Dolby Audio`;
- `Microsoft Edge`; - `Microsoft Edge`;
- `OneDrive`; - `OneDrive`;
@ -202,6 +198,17 @@ _This section can manually adjust `Optional Features` from the system, working a
### Software Install ### Software Install
- [Install _Winget/Chocolatey_ package managers](./src/lib/package-managers/);
- Be able to install the listed software in this script! Even from System apps.
- [**Create** or **Remove** a Daily Upgrade Task for _Winget/Chocolatey_ packages](./src/lib/package-managers/);
- Creates a new Scheduled Job to daily upgrade all available softwares via _Winget_ at **12:00** and _Chocolatey_ at **13:00**;
- Register daily upgrade logs on `C:\Users\<<USERNAME>>\AppData\Local\Temp\Win-DT-Logs` and remove old log files;
- `Remove All Chocolatey Packages`: List all packages from Chocolatey which are installed and remove everything at once;
- `Upgrade All Softwares`: Upgrades all Softwares installed on your machine installed through _Winget_ and _Chocolatey_. - `Upgrade All Softwares`: Upgrades all Softwares installed on your machine installed through _Winget_ and _Chocolatey_.
- WSL will only update itself, not the distros installed. - WSL will only update itself, not the distros installed.
- `Install Selected`: Install the selected apps by marking the checkbox(es); - `Install Selected`: Install the selected apps by marking the checkbox(es);

@ -23,12 +23,16 @@ function Main() {
Import-Module -DisableNameChecking "$PSScriptRoot\src\lib\Get-HardwareInfo.psm1" -Force Import-Module -DisableNameChecking "$PSScriptRoot\src\lib\Get-HardwareInfo.psm1" -Force
Import-Module -DisableNameChecking "$PSScriptRoot\src\lib\Open-File.psm1" -Force Import-Module -DisableNameChecking "$PSScriptRoot\src\lib\Open-File.psm1" -Force
Import-Module -DisableNameChecking "$PSScriptRoot\src\lib\Manage-Software.psm1" -Force
Import-Module -DisableNameChecking "$PSScriptRoot\src\lib\Request-FileDownload.psm1" -Force Import-Module -DisableNameChecking "$PSScriptRoot\src\lib\Request-FileDownload.psm1" -Force
Import-Module -DisableNameChecking "$PSScriptRoot\src\lib\Set-ConsoleStyle.psm1" -Force Import-Module -DisableNameChecking "$PSScriptRoot\src\lib\Set-ConsoleStyle.psm1" -Force
Import-Module -DisableNameChecking "$PSScriptRoot\src\lib\Set-RevertStatus.psm1" -Force Import-Module -DisableNameChecking "$PSScriptRoot\src\lib\Set-RevertStatus.psm1" -Force
Import-Module -DisableNameChecking "$PSScriptRoot\src\lib\Start-Logging.psm1" -Force Import-Module -DisableNameChecking "$PSScriptRoot\src\lib\Start-Logging.psm1" -Force
Import-Module -DisableNameChecking "$PSScriptRoot\src\lib\Title-Templates.psm1" -Force Import-Module -DisableNameChecking "$PSScriptRoot\src\lib\Title-Templates.psm1" -Force
Import-Module -DisableNameChecking "$PSScriptRoot\src\lib\package-managers\Manage-Chocolatey.psm1" -Force
Import-Module -DisableNameChecking "$PSScriptRoot\src\lib\package-managers\Manage-DailyUpgradeJob.psm1" -Force
Import-Module -DisableNameChecking "$PSScriptRoot\src\lib\package-managers\Manage-Software.psm1" -Force
Import-Module -DisableNameChecking "$PSScriptRoot\src\lib\package-managers\Manage-Winget.psm1" -Force
Import-Module -DisableNameChecking "$PSScriptRoot\src\lib\package-managers\Update-AllPackage.psm1" -Force
Import-Module -DisableNameChecking "$PSScriptRoot\src\lib\ui\Get-CurrentResolution.psm1" -Force Import-Module -DisableNameChecking "$PSScriptRoot\src\lib\ui\Get-CurrentResolution.psm1" -Force
Import-Module -DisableNameChecking "$PSScriptRoot\src\lib\ui\Get-DefaultColor.psm1" -Force Import-Module -DisableNameChecking "$PSScriptRoot\src\lib\ui\Get-DefaultColor.psm1" -Force
Import-Module -DisableNameChecking "$PSScriptRoot\src\lib\ui\New-LayoutPage.psm1" -Force Import-Module -DisableNameChecking "$PSScriptRoot\src\lib\ui\New-LayoutPage.psm1" -Force
@ -37,15 +41,19 @@ function Main() {
Import-Module -DisableNameChecking "$PSScriptRoot\src\utils\Individual-Tweaks.psm1" -Force Import-Module -DisableNameChecking "$PSScriptRoot\src\utils\Individual-Tweaks.psm1" -Force
Import-Module -DisableNameChecking "$PSScriptRoot\src\utils\Install-Individual-System-Apps.psm1" -Force Import-Module -DisableNameChecking "$PSScriptRoot\src\utils\Install-Individual-System-Apps.psm1" -Force
If ("$pwd" -notlike "$PSScriptRoot") {
Write-Host "Wrong location detected, changing to script folder!" -BackgroundColor Yellow
Set-Location -Path "$PSScriptRoot"
}
Set-ConsoleStyle Set-ConsoleStyle
$CurrentFileName = (Split-Path -Path $PSCommandPath -Leaf).Split('.')[0] $CurrentFileName = (Split-Path -Path $PSCommandPath -Leaf).Split('.')[0]
$CurrentFileLastModified = (Get-Item "$(Split-Path -Path $PSCommandPath -Leaf)").LastWriteTimeUtc | Get-Date -Format "yyyy-MM-dd" $CurrentFileLastModified = (Get-Item "$(Split-Path -Path $PSCommandPath -Leaf)").LastWriteTimeUtc | Get-Date -Format "yyyy-MM-dd"
(Get-Item "$(Split-Path -Path $PSCommandPath -Leaf)").LastWriteTimeUtc | Get-Date -Format "yyyy-MM-dd" (Get-Item "$(Split-Path -Path $PSCommandPath -Leaf)").LastWriteTimeUtc | Get-Date -Format "yyyy-MM-dd"
Start-Logging -File $CurrentFileName Start-Logging -File "$CurrentFileName-$(Get-Date -Format "yyyy-MM")"
Write-Caption "$CurrentFileName v$CurrentFileLastModified" Write-Caption "$CurrentFileName v$CurrentFileLastModified"
Write-Host "Your Current Folder $pwd" Write-Host "Your Current Folder $pwd"
Write-Host "Script Root Folder $PSScriptRoot" Write-Host "Script Root Folder $PSScriptRoot"
Open-PowerShellFilesCollection -RelativeLocation "src\scripts" -Scripts "Install-PackageManager.ps1" -NoDialog
Write-ScriptLogo Write-ScriptLogo
If ($args) { If ($args) {
@ -100,7 +108,14 @@ function Open-DebloatScript {
function Request-AdminPrivilege() { function Request-AdminPrivilege() {
# Used from https://stackoverflow.com/a/31602095 because it preserves the working directory! # Used from https://stackoverflow.com/a/31602095 because it preserves the working directory!
If (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs; exit } If (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
Try {
winget --version
Start-Process -Verb RunAs -FilePath "wt.exe" -ArgumentList "--startingDirectory `"$PSScriptRoot`" --profile `"Windows PowerShell`"", "cmd /c powershell.exe -NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`""; taskkill.exe /f /im $PID; exit
} Catch {
Start-Process -Verb RunAs -FilePath powershell.exe -ArgumentList "-NoProfile", "-ExecutionPolicy Bypass", "-File `"$PSCommandPath`""; exit
}
}
} }
function Show-GUI() { function Show-GUI() {
@ -121,7 +136,7 @@ function Show-GUI() {
# <===== UI =====> # <===== UI =====>
# Main Window: # Main Window:
$Form = New-Form -Width $LayoutT1.FormWidth -Height $LayoutT1.FormHeight -Text "Win Debloat Tools (LeDragoX) | $(Get-SystemSpec)" -BackColor $BrandColors.Win.Dark -FormBorderStyle 'Sizable' # Loading the specs takes longer time to load the GUI $Form = New-Form -Width $LayoutT1.FormWidth -Height $LayoutT1.FormHeight -Text "Win Debloat Tools | $(Get-SystemSpec)" -BackColor $BrandColors.Win.Dark -FormBorderStyle 'Sizable' # Loading the specs takes longer time to load the GUI
$Form = New-FormIcon -Form $Form -ImageLocation "$PSScriptRoot\src\assets\script-icon-32px.png" $Form = New-FormIcon -Form $Form -ImageLocation "$PSScriptRoot\src\assets\script-icon-32px.png"
@ -149,14 +164,14 @@ function Show-GUI() {
$CbClipboardSyncAcrossDevice = New-CheckBox -Text "Enable Clipboard Sync Across Devices" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbClipboardHistory $CbClipboardSyncAcrossDevice = New-CheckBox -Text "Enable Clipboard Sync Across Devices" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbClipboardHistory
$CbCortana = New-CheckBox -Text "Enable Cortana" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbClipboardSyncAcrossDevice $CbCortana = New-CheckBox -Text "Enable Cortana" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbClipboardSyncAcrossDevice
$CbHibernate = New-CheckBox -Text "Enable Hibernate" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbCortana $CbHibernate = New-CheckBox -Text "Enable Hibernate" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbCortana
$CbOldVolumeControl = New-CheckBox -Text "Enable Old Volume Control" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbHibernate $CbLegacyContextMenu = New-CheckBox -Text "Enable Legacy Context Menu" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbHibernate
$CbOldVolumeControl = New-CheckBox -Text "Enable Old Volume Control" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbLegacyContextMenu
$CbOnlineSpeechRecognition = New-CheckBox -Text "Enable Online Speech Recognition" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbOldVolumeControl $CbOnlineSpeechRecognition = New-CheckBox -Text "Enable Online Speech Recognition" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbOldVolumeControl
$CbPhoneLink = New-CheckBox -Text "Enable Phone Link" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbOnlineSpeechRecognition $CbPhoneLink = New-CheckBox -Text "Enable Phone Link" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbOnlineSpeechRecognition
$CbPhotoViewer = New-CheckBox -Text "Enable Photo Viewer" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbPhoneLink $CbPhotoViewer = New-CheckBox -Text "Enable Photo Viewer" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbPhoneLink
$CbSearchAppForUnknownExt = New-CheckBox -Text "Enable Search App for Unknown Ext." -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbPhotoViewer $CbSearchAppForUnknownExt = New-CheckBox -Text "Enable Search App for Unknown Ext." -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbPhotoViewer
$CbTelemetry = New-CheckBox -Text "Enable Telemetry" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbSearchAppForUnknownExt $CbTelemetry = New-CheckBox -Text "Enable Telemetry" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbSearchAppForUnknownExt
$CbWSearchService = New-CheckBox -Text "Enable WSearch Service" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbTelemetry $CbXboxGameBarDVRandMode = New-CheckBox -Text "Enable Xbox Game Bar/DVR/Mode" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbWindowsSearch
$CbXboxGameBarDVRandMode = New-CheckBox -Text "Enable Xbox Game Bar/DVR/Mode" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbWSearchService
# ==> T1 Panel 2 # ==> T1 Panel 2
$ClDebloatTools = New-Label -Text "System Debloat Tools" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CaptionLabelHeight -LocationX $LayoutT1.PanelElementX -LocationY 0 -FontSize $LayoutT1.Heading[2] -FontStyle 'Bold' $ClDebloatTools = New-Label -Text "System Debloat Tools" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CaptionLabelHeight -LocationX $LayoutT1.PanelElementX -LocationY 0 -FontSize $LayoutT1.Heading[2] -FontStyle 'Bold'
@ -168,8 +183,7 @@ function Show-GUI() {
$PictureBox1 = New-PictureBox -ImageLocation "$PSScriptRoot\src\assets\script-image.png" -Width $LayoutT1.PanelElementWidth -Height (($LayoutT1.ButtonHeight * 4) + ($LayoutT1.DistanceBetweenElements * 4)) -LocationX $LayoutT1.PanelElementX -ElementBefore $RemoveXbox -MarginTop $LayoutT1.DistanceBetweenElements -SizeMode 'Zoom' $PictureBox1 = New-PictureBox -ImageLocation "$PSScriptRoot\src\assets\script-image.png" -Width $LayoutT1.PanelElementWidth -Height (($LayoutT1.ButtonHeight * 4) + ($LayoutT1.DistanceBetweenElements * 4)) -LocationX $LayoutT1.PanelElementX -ElementBefore $RemoveXbox -MarginTop $LayoutT1.DistanceBetweenElements -SizeMode 'Zoom'
$ClInstallSystemApps = New-Label -Text "Install System Apps" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CaptionLabelHeight -LocationX 0 -FontSize $LayoutT1.Heading[2] -FontStyle 'Bold' -ElementBefore $PictureBox1 $ClInstallSystemApps = New-Label -Text "Install System Apps" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CaptionLabelHeight -LocationX 0 -FontSize $LayoutT1.Heading[2] -FontStyle 'Bold' -ElementBefore $PictureBox1
$InstallCortana = New-Button -Text "Cortana" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.ButtonHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $ClInstallSystemApps $InstallDolbyAudio = New-Button -Text "Dolby Audio" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.ButtonHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $ClInstallSystemApps -MarginTop $LayoutT1.DistanceBetweenElements
$InstallDolbyAudio = New-Button -Text "Dolby Audio" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.ButtonHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $InstallCortana -MarginTop $LayoutT1.DistanceBetweenElements
$InstallMicrosoftEdge = New-Button -Text "Microsoft Edge" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.ButtonHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $InstallDolbyAudio -MarginTop $LayoutT1.DistanceBetweenElements $InstallMicrosoftEdge = New-Button -Text "Microsoft Edge" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.ButtonHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $InstallDolbyAudio -MarginTop $LayoutT1.DistanceBetweenElements
$InstallOneDrive = New-Button -Text "OneDrive" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.ButtonHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $InstallMicrosoftEdge -MarginTop $LayoutT1.DistanceBetweenElements $InstallOneDrive = New-Button -Text "OneDrive" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.ButtonHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $InstallMicrosoftEdge -MarginTop $LayoutT1.DistanceBetweenElements
$InstallPaintPaint3D = New-Button -Text "Paint + Paint 3D" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.ButtonHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $InstallOneDrive -MarginTop $LayoutT1.DistanceBetweenElements $InstallPaintPaint3D = New-Button -Text "Paint + Paint 3D" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.ButtonHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $InstallOneDrive -MarginTop $LayoutT1.DistanceBetweenElements
@ -191,24 +205,48 @@ function Show-GUI() {
$CbAutomaticWindowsUpdate = New-CheckBox -Text "Enable Automatic Windows Update" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $ClWindowsUpdate $CbAutomaticWindowsUpdate = New-CheckBox -Text "Enable Automatic Windows Update" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $ClWindowsUpdate
$ClOptionalFeatures = New-Label -Text "Optional Features" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CaptionLabelHeight -LocationX 0 -FontSize $LayoutT1.Heading[2] -FontStyle 'Bold' -ElementBefore $CbAutomaticWindowsUpdate $ClOptionalFeatures = New-Label -Text "Optional Features" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CaptionLabelHeight -LocationX 0 -FontSize $LayoutT1.Heading[2] -FontStyle 'Bold' -ElementBefore $CbAutomaticWindowsUpdate
$CbInternetExplorer = New-CheckBox -Text "Internet Explorer" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $ClOptionalFeatures $CbHyperV = New-CheckBox -Text "Hyper-V" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $ClOptionalFeatures
$CbInternetExplorer = New-CheckBox -Text "Internet Explorer" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbHyperV
$CbPrintToPDFServices = New-CheckBox -Text "Printing-PrintToPDFServices-Features" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbInternetExplorer $CbPrintToPDFServices = New-CheckBox -Text "Printing-PrintToPDFServices-Features" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbInternetExplorer
$CbPrintingXPSServices = New-CheckBox -Text "Printing-XPSServices-Features" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbPrintToPDFServices $CbPrintingXPSServices = New-CheckBox -Text "Printing-XPSServices-Features" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbPrintToPDFServices
$CbWindowsMediaPlayer = New-CheckBox -Text "Windows Media Player" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbPrintingXPSServices $CbWindowsMediaPlayer = New-CheckBox -Text "Windows Media Player" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbPrintingXPSServices
$CbWindowsSandbox = New-CheckBox -Text "Windows Sandbox" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbWindowsMediaPlayer
$ClWindowsCapabilities = New-Label -Text "Windows Capabilities" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CaptionLabelHeight -LocationX 0 -FontSize $LayoutT1.Heading[2] -FontStyle 'Bold' -ElementBefore $CbWindowsMediaPlayer $ClTaskScheduler = New-Label -Text "Task Scheduler" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CaptionLabelHeight -LocationX 0 -FontSize $LayoutT1.Heading[2] -FontStyle 'Bold' -ElementBefore $CbWindowsSandbox
$CbFamilySafety = New-CheckBox -Text "Family Safety Features" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $ClTaskScheduler
$ClServices = New-Label -Text "Services" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CaptionLabelHeight -LocationX 0 -FontSize $LayoutT1.Heading[2] -FontStyle 'Bold' -ElementBefore $CbFamilySafety
$CbWindowsSearch = New-CheckBox -Text "Windows Search Indexing" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $ClServices
$ClWindowsCapabilities = New-Label -Text "Windows Capabilities" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CaptionLabelHeight -LocationX 0 -FontSize $LayoutT1.Heading[2] -FontStyle 'Bold' -ElementBefore $CbWindowsSearch
$CbPowerShellISE = New-CheckBox -Text "PowerShell ISE" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $ClWindowsCapabilities $CbPowerShellISE = New-CheckBox -Text "PowerShell ISE" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $ClWindowsCapabilities
$ClMiscFeatures = New-Label -Text "Miscellaneous Features" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CaptionLabelHeight -LocationX 0 -FontSize $LayoutT1.Heading[2] -FontStyle 'Bold' -ElementBefore $CbPowerShellISE $ClMiscFeatures = New-Label -Text "Miscellaneous Features" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CaptionLabelHeight -LocationX 0 -FontSize $LayoutT1.Heading[2] -FontStyle 'Bold' -ElementBefore $CbPowerShellISE
$CbEncryptedDNS = New-CheckBox -Text "Enable Encrypted DNS" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $ClMiscFeatures $CbEncryptedDNS = New-CheckBox -Text "Enable Encrypted DNS" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $ClMiscFeatures
$CbGodMode = New-CheckBox -Text "Enable God Mode" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbEncryptedDNS $CbGodMode = New-CheckBox -Text "Enable God Mode" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbEncryptedDNS
$CbMouseNaturalScroll = New-CheckBox -Text "Enable Mouse Natural Scroll" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbGodMode $CbMouseAcceleration = New-CheckBox -Text "Enable Mouse Acceleration" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbGodMode
$CbMouseNaturalScroll = New-CheckBox -Text "Enable Mouse Natural Scroll" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbMouseAcceleration
$CbTakeOwnership = New-CheckBox -Text "Enable Take Ownership menu" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbMouseNaturalScroll $CbTakeOwnership = New-CheckBox -Text "Enable Take Ownership menu" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbMouseNaturalScroll
$CbFastShutdownPCShortcut = New-CheckBox -Text "Enable Fast Shutdown shortcut" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbTakeOwnership $CbFastShutdownPCShortcut = New-CheckBox -Text "Enable Fast Shutdown shortcut" -Width $LayoutT1.PanelElementWidth -Height $LayoutT1.CheckBoxHeight -LocationX $LayoutT1.PanelElementX -FontSize $LayoutT1.Heading[3] -ElementBefore $CbTakeOwnership
# ==> Tab 2 # ==> Tab 2
$TlSoftwareInstall = New-Label -Text "Software Install" -Width $LayoutT2.TotalWidth -Height $LayoutT2.TitleLabelHeight -LocationX 0 -LocationY $TitleLabelY -FontSize $LayoutT2.Heading[0] -FontStyle "Bold" -ForeColor $Colors.Cyan $TlSoftwareInstall = New-Label -Text "Software Install" -Width $LayoutT2.TotalWidth -Height $LayoutT2.TitleLabelHeight -LocationX 0 -LocationY $TitleLabelY -FontSize $LayoutT2.Heading[0] -FontStyle "Bold" -ForeColor $Colors.Cyan
$ClSoftwareInstall = New-Label -Text "Package Managers: Winget and Chocolatey" -Width $LayoutT2.TotalWidth -Height $LayoutT2.CaptionLabelHeight -LocationX 0 -FontSize $LayoutT1.Heading[1] -ElementBefore $TlSoftwareInstall -MarginTop $LayoutT2.DistanceBetweenElements -ForeColor $Colors.White
$T2PanelPackageManagersSettings = New-Panel -Width $LayoutT2.TotalWidth -Height ($LayoutT2.ButtonHeight * 7) -ElementBefore $TlSoftwareInstall
$ClWingetSettings = New-Label -Text "Winget Settings" -Width $LayoutT2.TotalWidth -Height $LayoutT2.CaptionLabelHeight -LocationX 0 -FontSize $LayoutT1.Heading[1] -LocationY 0 -MarginTop $LayoutT2.DistanceBetweenElements -ForeColor $Colors.White
$InstallWinget = New-Button -Text "Install Winget" -Width $LayoutT2.PanelElementWidth -Height $LayoutT2.ButtonHeight -LocationX (($LayoutT2.PanelWidth * 0) + $LayoutT2.PanelElementX) -ElementBefore $ClWingetSettings -FontSize $LayoutT2.Heading[3] -FontStyle 'Bold' -ForeColor $Colors.Cyan
$EnableWingetDailyUpgrade = New-Button -Text "Enable Winget Daily Upgrade" -Width $LayoutT2.PanelElementWidth -Height $LayoutT2.ButtonHeight -LocationX (($LayoutT2.PanelWidth * 2) + $LayoutT2.PanelElementX) -ElementBefore $ClWingetSettings -FontSize $LayoutT2.Heading[3] -FontStyle 'Bold' -ForeColor $Colors.Cyan
$RemoveWingetDailyUpgrade = New-Button -Text "Remove Winget Daily Upgrade" -Width $LayoutT2.PanelElementWidth -Height $LayoutT2.ButtonHeight -LocationX (($LayoutT2.PanelWidth * 3) + $LayoutT2.PanelElementX) -ElementBefore $ClWingetSettings -FontSize $LayoutT2.Heading[3] -FontStyle 'Bold' -ForeColor $Colors.Cyan
$ClChocolateySettings = New-Label -Text "Chocolatey Settings" -Width $LayoutT2.TotalWidth -Height $LayoutT2.CaptionLabelHeight -LocationX 0 -FontSize $LayoutT1.Heading[1] -ElementBefore $InstallWinget -MarginTop $LayoutT2.DistanceBetweenElements -ForeColor $Colors.White
$InstallChocolatey = New-Button -Text "Install Chocolatey" -Width $LayoutT2.PanelElementWidth -Height $LayoutT2.ButtonHeight -LocationX (($LayoutT2.PanelWidth * 0) + $LayoutT2.PanelElementX) -ElementBefore $ClChocolateySettings -FontSize $LayoutT2.Heading[3] -FontStyle 'Bold' -ForeColor $Colors.Cyan
$UninstallChocolatey = New-Button -Text "Uninstall Chocolatey" -Width $LayoutT2.PanelElementWidth -Height $LayoutT2.ButtonHeight -LocationX (($LayoutT2.PanelWidth * 1) + $LayoutT2.PanelElementX) -ElementBefore $ClChocolateySettings -FontSize $LayoutT2.Heading[3] -FontStyle 'Bold' -ForeColor $Colors.Cyan
$EnableChocolateyDailyUpgrade = New-Button -Text "Enable Chocolatey Daily Upgrade" -Width $LayoutT2.PanelElementWidth -Height $LayoutT2.ButtonHeight -LocationX (($LayoutT2.PanelWidth * 2) + $LayoutT2.PanelElementX) -ElementBefore $ClChocolateySettings -FontSize $LayoutT2.Heading[3] -FontStyle 'Bold' -ForeColor $Colors.Cyan
$RemoveChocolateyDailyUpgrade = New-Button -Text "Remove Chocolatey Daily Upgrade" -Width $LayoutT2.PanelElementWidth -Height $LayoutT2.ButtonHeight -LocationX (($LayoutT2.PanelWidth * 3) + $LayoutT2.PanelElementX) -ElementBefore $ClChocolateySettings -FontSize $LayoutT2.Heading[3] -FontStyle 'Bold' -ForeColor $Colors.Cyan
$RemoveAllChocolateyPackages = New-Button -Text "Remove All Chocolatey Packages" -Width $LayoutT2.PanelElementWidth -Height $LayoutT2.ButtonHeight -LocationX (($LayoutT2.PanelWidth * 0) + $LayoutT2.PanelElementX) -ElementBefore $InstallChocolatey -MarginTop $LayoutT2.DistanceBetweenElements -FontSize $LayoutT2.Heading[3] -FontStyle 'Bold' -ForeColor $Colors.WarningYellow
$ClSoftwareInstall = New-Label -Text "Select and Install/Uninstall" -Width $LayoutT2.TotalWidth -Height $LayoutT2.CaptionLabelHeight -LocationX 0 -FontSize $LayoutT1.Heading[1] -ElementBefore $T2PanelPackageManagersSettings -MarginTop $LayoutT2.DistanceBetweenElements -ForeColor $Colors.LightGreen
$CurrentPanelIndex = 0 $CurrentPanelIndex = 0
$T2Panel1 = New-Panel -Width $LayoutT2.PanelWidth -Height $LayoutT2.PanelHeight -LocationX ($LayoutT2.PanelWidth * $CurrentPanelIndex) -ElementBefore $ClSoftwareInstall $T2Panel1 = New-Panel -Width $LayoutT2.PanelWidth -Height $LayoutT2.PanelHeight -LocationX ($LayoutT2.PanelWidth * $CurrentPanelIndex) -ElementBefore $ClSoftwareInstall
@ -388,8 +426,7 @@ function Show-GUI() {
$InstallOpenSuse = New-CheckBox -Text "Open SUSE 42" -Width $LayoutT2.PanelElementWidth -Height $LayoutT2.CheckBoxHeight -LocationX $LayoutT2.PanelElementX -FontSize $LayoutT2.Heading[3] -ElementBefore $InstallKaliLinux $InstallOpenSuse = New-CheckBox -Text "Open SUSE 42" -Width $LayoutT2.PanelElementWidth -Height $LayoutT2.CheckBoxHeight -LocationX $LayoutT2.PanelElementX -FontSize $LayoutT2.Heading[3] -ElementBefore $InstallKaliLinux
$InstallSles = New-CheckBox -Text "SLES v12" -Width $LayoutT2.PanelElementWidth -Height $LayoutT2.CheckBoxHeight -LocationX $LayoutT2.PanelElementX -FontSize $LayoutT2.Heading[3] -ElementBefore $InstallOpenSuse $InstallSles = New-CheckBox -Text "SLES v12" -Width $LayoutT2.PanelElementWidth -Height $LayoutT2.CheckBoxHeight -LocationX $LayoutT2.PanelElementX -FontSize $LayoutT2.Heading[3] -ElementBefore $InstallOpenSuse
$InstallUbuntu = New-CheckBox -Text "Ubuntu" -Width $LayoutT2.PanelElementWidth -Height $LayoutT2.CheckBoxHeight -LocationX $LayoutT2.PanelElementX -FontSize $LayoutT2.Heading[3] -ElementBefore $InstallSles $InstallUbuntu = New-CheckBox -Text "Ubuntu" -Width $LayoutT2.PanelElementWidth -Height $LayoutT2.CheckBoxHeight -LocationX $LayoutT2.PanelElementX -FontSize $LayoutT2.Heading[3] -ElementBefore $InstallSles
$InstallUbuntu16Lts = New-CheckBox -Text "Ubuntu 16.04 LTS" -Width $LayoutT2.PanelElementWidth -Height $LayoutT2.CheckBoxHeight -LocationX $LayoutT2.PanelElementX -FontSize $LayoutT2.Heading[3] -ElementBefore $InstallUbuntu $InstallUbuntu18Lts = New-CheckBox -Text "Ubuntu 18.04 LTS" -Width $LayoutT2.PanelElementWidth -Height $LayoutT2.CheckBoxHeight -LocationX $LayoutT2.PanelElementX -FontSize $LayoutT2.Heading[3] -ElementBefore $InstallUbuntu
$InstallUbuntu18Lts = New-CheckBox -Text "Ubuntu 18.04 LTS" -Width $LayoutT2.PanelElementWidth -Height $LayoutT2.CheckBoxHeight -LocationX $LayoutT2.PanelElementX -FontSize $LayoutT2.Heading[3] -ElementBefore $InstallUbuntu16Lts
$InstallUbuntu20Lts = New-CheckBox -Text "Ubuntu 20.04 LTS" -Width $LayoutT2.PanelElementWidth -Height $LayoutT2.CheckBoxHeight -LocationX $LayoutT2.PanelElementX -FontSize $LayoutT2.Heading[3] -ElementBefore $InstallUbuntu18Lts $InstallUbuntu20Lts = New-CheckBox -Text "Ubuntu 20.04 LTS" -Width $LayoutT2.PanelElementWidth -Height $LayoutT2.CheckBoxHeight -LocationX $LayoutT2.PanelElementX -FontSize $LayoutT2.Heading[3] -ElementBefore $InstallUbuntu18Lts
$ClDevelopment = New-Label -Text "⌨ Development on Windows" -Width $LayoutT2.PanelElementWidth -Height $LayoutT2.CaptionLabelHeight -LocationX $LayoutT2.PanelElementX -FontSize $LayoutT2.Heading[2] -FontStyle 'Bold' -ElementBefore $InstallUbuntu20Lts $ClDevelopment = New-Label -Text "⌨ Development on Windows" -Width $LayoutT2.PanelElementWidth -Height $LayoutT2.CaptionLabelHeight -LocationX $LayoutT2.PanelElementX -FontSize $LayoutT2.Heading[2] -FontStyle 'Bold' -ElementBefore $InstallUbuntu20Lts
@ -418,16 +455,21 @@ function Show-GUI() {
# Tabs # Tabs
$FormTabControl.Controls.AddRange(@($TabSystemTweaks, $TabSoftwareInstall)) $FormTabControl.Controls.AddRange(@($TabSystemTweaks, $TabSoftwareInstall))
$TabSystemTweaks.Controls.AddRange(@($TlSystemTweaks, $ClSystemTweaks, $T1Panel1, $T1Panel2, $T1Panel3)) $TabSystemTweaks.Controls.AddRange(@($TlSystemTweaks, $ClSystemTweaks, $T1Panel1, $T1Panel2, $T1Panel3))
$TabSoftwareInstall.Controls.AddRange(@($TlSoftwareInstall, $ClSoftwareInstall, $T2Panel1, $T2Panel2, $T2Panel3, $T2Panel4)) $TabSoftwareInstall.Controls.AddRange(@($TlSoftwareInstall, $ClSoftwareInstall, $T2PanelPackageManagersSettings, $T2Panel1, $T2Panel2, $T2Panel3, $T2Panel4))
# Add Elements to each Tab Panel # Add Elements to each Tab Panel
$T1Panel1.Controls.AddRange(@($ClCustomizeFeatures, $CbDarkTheme, $CbActivityHistory, $CbBackgroundsApps, $CbClipboardHistory, $CbClipboardSyncAcrossDevice, $CbCortana, $CbHibernate, $CbOldVolumeControl, $CbOnlineSpeechRecognition, $CbPhoneLink, $CbPhotoViewer, $CbSearchAppForUnknownExt, $CbTelemetry, $CbWSearchService, $CbXboxGameBarDVRandMode)) $T1Panel1.Controls.AddRange(@($ClCustomizeFeatures, $CbDarkTheme, $CbActivityHistory, $CbBackgroundsApps, $CbClipboardHistory, $CbClipboardSyncAcrossDevice, $CbCortana, $CbHibernate, $CbLegacyContextMenu, $CbOldVolumeControl, $CbOnlineSpeechRecognition, $CbPhoneLink, $CbPhotoViewer, $CbSearchAppForUnknownExt, $CbTelemetry, $CbXboxGameBarDVRandMode))
$T1Panel2.Controls.AddRange(@($ClDebloatTools, $ApplyTweaks, $UndoTweaks, $RemoveMSEdge, $RemoveOneDrive, $RemoveXbox, $PictureBox1)) $T1Panel2.Controls.AddRange(@($ClDebloatTools, $ApplyTweaks, $UndoTweaks, $RemoveMSEdge, $RemoveOneDrive, $RemoveXbox, $PictureBox1))
$T1Panel2.Controls.AddRange(@($ClInstallSystemApps, $InstallCortana, $InstallDolbyAudio, $InstallMicrosoftEdge, $InstallOneDrive, $InstallPaintPaint3D, $InstallPhoneLink, $InstallQuickAssist, $InstallSoundRecorder, $InstallTaskbarWidgets, $InstallUWPWMediaPlayer, $InstallXbox)) $T1Panel2.Controls.AddRange(@($ClInstallSystemApps, $InstallDolbyAudio, $InstallMicrosoftEdge, $InstallOneDrive, $InstallPaintPaint3D, $InstallPhoneLink, $InstallQuickAssist, $InstallSoundRecorder, $InstallTaskbarWidgets, $InstallUWPWMediaPlayer, $InstallXbox))
$T1Panel2.Controls.AddRange(@($ClOtherTools, $RandomizeSystemColor, $ReinstallBloatApps, $RepairWindows, $ShowDebloatInfo)) $T1Panel2.Controls.AddRange(@($ClOtherTools, $RandomizeSystemColor, $ReinstallBloatApps, $RepairWindows, $ShowDebloatInfo))
$T1Panel3.Controls.AddRange(@($ClWindowsUpdate, $CbAutomaticWindowsUpdate)) $T1Panel3.Controls.AddRange(@($ClWindowsUpdate, $CbAutomaticWindowsUpdate))
$T1Panel3.Controls.AddRange(@($ClOptionalFeatures, $CbInternetExplorer, $CbPrintToPDFServices, $CbPrintingXPSServices, $CbWindowsMediaPlayer)) $T1Panel3.Controls.AddRange(@($ClOptionalFeatures, $CbHyperV, $CbInternetExplorer, $CbPrintToPDFServices, $CbPrintingXPSServices, $CbWindowsMediaPlayer, $CbWindowsSandbox))
$T1Panel3.Controls.AddRange(@($ClTaskScheduler, $CbFamilySafety))
$T1Panel3.Controls.AddRange(@($ClServices, $CbWindowsSearch))
$T1Panel3.Controls.AddRange(@($ClWindowsCapabilities, $CbPowerShellISE)) $T1Panel3.Controls.AddRange(@($ClWindowsCapabilities, $CbPowerShellISE))
$T1Panel3.Controls.AddRange(@($ClMiscFeatures, $CbEncryptedDNS, $CbGodMode, $CbMouseNaturalScroll, $CbTakeOwnership, $CbFastShutdownPCShortcut)) $T1Panel3.Controls.AddRange(@($ClMiscFeatures, $CbEncryptedDNS, $CbGodMode, $CbMouseAcceleration, $CbMouseNaturalScroll, $CbTakeOwnership, $CbFastShutdownPCShortcut))
$T2PanelPackageManagersSettings.Controls.AddRange(@($ClWingetSettings, $InstallWinget, $EnableWingetDailyUpgrade, $RemoveWingetDailyUpgrade))
$T2PanelPackageManagersSettings.Controls.AddRange(@($ClChocolateySettings, $InstallChocolatey, $UninstallChocolatey, $EnableChocolateyDailyUpgrade, $RemoveChocolateyDailyUpgrade, $RemoveAllChocolateyPackages))
$T2Panel1.Controls.AddRange(@($UpgradeAll)) $T2Panel1.Controls.AddRange(@($UpgradeAll))
$T2Panel1.Controls.AddRange(@($ClCpuGpuDrivers, $InstallAmdRyzenChipsetDriver, $InstallIntelDSA, $InstallNvidiaGeForceExperience, $InstallDDU, $InstallNVCleanstall)) $T2Panel1.Controls.AddRange(@($ClCpuGpuDrivers, $InstallAmdRyzenChipsetDriver, $InstallIntelDSA, $InstallNvidiaGeForceExperience, $InstallDDU, $InstallNVCleanstall))
@ -456,7 +498,7 @@ function Show-GUI() {
$T2Panel3.Controls.AddRange(@($ClRecordingAndStreaming, $InstallElgatoStreamDeck, $InstallHandBrake, $InstallObsStudio, $InstallStreamlabs)) $T2Panel3.Controls.AddRange(@($ClRecordingAndStreaming, $InstallElgatoStreamDeck, $InstallHandBrake, $InstallObsStudio, $InstallStreamlabs))
$T2Panel3.Controls.AddRange(@($ClEmulation, $InstallBSnesHd, $InstallCemu, $InstallDolphin, $InstallKegaFusion, $InstallMGba, $InstallPPSSPP, $InstallProject64, $InstallRetroArch, $InstallRyujinx, $InstallSnes9x)) $T2Panel3.Controls.AddRange(@($ClEmulation, $InstallBSnesHd, $InstallCemu, $InstallDolphin, $InstallKegaFusion, $InstallMGba, $InstallPPSSPP, $InstallProject64, $InstallRetroArch, $InstallRyujinx, $InstallSnes9x))
$T2Panel4.Controls.AddRange(@($ClTextEditors, $InstallJetBrainsToolbox, $InstallNotepadPlusPlus, $InstallVisualStudioCommunity, $InstallVSCode, $InstallVSCodium)) $T2Panel4.Controls.AddRange(@($ClTextEditors, $InstallJetBrainsToolbox, $InstallNotepadPlusPlus, $InstallVisualStudioCommunity, $InstallVSCode, $InstallVSCodium))
$T2Panel4.Controls.AddRange(@($ClWsl, $InstallWSL, $InstallArchWSL, $InstallDebian, $InstallKaliLinux, $InstallOpenSuse, $InstallSles, $InstallUbuntu, $InstallUbuntu16Lts, $InstallUbuntu18Lts, $InstallUbuntu20Lts)) $T2Panel4.Controls.AddRange(@($ClWsl, $InstallWSL, $InstallArchWSL, $InstallDebian, $InstallKaliLinux, $InstallOpenSuse, $InstallSles, $InstallUbuntu, $InstallUbuntu18Lts, $InstallUbuntu20Lts))
$T2Panel4.Controls.AddRange(@($ClDevelopment, $InstallWindowsTerminal, $InstallNerdFonts, $InstallGitGnupgSshSetup, $InstallAdb, $InstallAndroidStudio, $InstallDockerDesktop, $InstallInsomnia, $InstallJavaJdks, $InstallJavaJre, $InstallMySql, $InstallNodeJs, $InstallNodeJsLts, $InstallPostgreSql, $InstallPython3, $InstallPythonAnaconda3, $InstallRuby, $InstallRubyMsys, $InstallRustGnu, $InstallRustMsvc)) $T2Panel4.Controls.AddRange(@($ClDevelopment, $InstallWindowsTerminal, $InstallNerdFonts, $InstallGitGnupgSshSetup, $InstallAdb, $InstallAndroidStudio, $InstallDockerDesktop, $InstallInsomnia, $InstallJavaJdks, $InstallJavaJre, $InstallMySql, $InstallNodeJs, $InstallNodeJsLts, $InstallPostgreSql, $InstallPython3, $InstallPythonAnaconda3, $InstallRuby, $InstallRubyMsys, $InstallRustGnu, $InstallRustMsvc))
# <===== CLICK EVENTS =====> # <===== CLICK EVENTS =====>
@ -508,10 +550,6 @@ function Show-GUI() {
Open-PowerShellFilesCollection -RelativeLocation "src\scripts" -Scripts @("Backup-System.ps1", "Repair-WindowsSystem.ps1") -DoneTitle $DoneTitle -DoneMessage $DoneMessage Open-PowerShellFilesCollection -RelativeLocation "src\scripts" -Scripts @("Backup-System.ps1", "Repair-WindowsSystem.ps1") -DoneTitle $DoneTitle -DoneMessage $DoneMessage
}) })
$InstallCortana.Add_Click( {
Install-Cortana
})
$InstallDolbyAudio.Add_Click( { $InstallDolbyAudio.Add_Click( {
Install-DolbyAudio Install-DolbyAudio
}) })
@ -644,6 +682,16 @@ function Show-GUI() {
} }
}) })
$CbLegacyContextMenu.Add_Click( {
If ($CbLegacyContextMenu.CheckState -eq "Checked") {
Enable-LegacyContextMenu
$CbLegacyContextMenu.Text = "[ON] Legacy Context Menu"
} Else {
Disable-LegacyContextMenu
$CbLegacyContextMenu.Text = "[OFF] Legacy Context Menu *"
}
})
$CbOldVolumeControl.Add_Click( { $CbOldVolumeControl.Add_Click( {
If ($CbOldVolumeControl.CheckState -eq "Checked") { If ($CbOldVolumeControl.CheckState -eq "Checked") {
Enable-OldVolumeControl Enable-OldVolumeControl
@ -704,16 +752,6 @@ function Show-GUI() {
} }
}) })
$CbWSearchService.Add_Click( {
If ($CbWSearchService.CheckState -eq "Checked") {
Enable-WSearchService
$CbWSearchService.Text = "[ON] WSearch Service *"
} Else {
Disable-WSearchService
$CbWSearchService.Text = "[OFF] WSearch Service"
}
})
$CbXboxGameBarDVRandMode.Add_Click( { $CbXboxGameBarDVRandMode.Add_Click( {
If ($CbXboxGameBarDVRandMode.CheckState -eq "Checked") { If ($CbXboxGameBarDVRandMode.CheckState -eq "Checked") {
Enable-XboxGameBarDVRandMode Enable-XboxGameBarDVRandMode
@ -724,6 +762,16 @@ function Show-GUI() {
} }
}) })
$CbHyperV.Add_Click( {
If ($CbHyperV.CheckState -eq "Checked") {
Enable-HyperV
$CbHyperV.Text = "[ON] Hyper-V"
} Else {
Disable-HyperV
$CbHyperV.Text = "[OFF] Hyper-V *"
}
})
$CbInternetExplorer.Add_Click( { $CbInternetExplorer.Add_Click( {
If ($CbInternetExplorer.CheckState -eq "Checked") { If ($CbInternetExplorer.CheckState -eq "Checked") {
Enable-InternetExplorer Enable-InternetExplorer
@ -764,6 +812,36 @@ function Show-GUI() {
} }
}) })
$CbWindowsSandbox.Add_Click( {
If ($CbWindowsSandbox.CheckState -eq "Checked") {
Enable-WindowsSandbox
$CbWindowsSandbox.Text = "[ON] Windows Sandbox"
} Else {
Disable-WindowsSandbox
$CbWindowsSandbox.Text = "[OFF] Windows Sandbox *"
}
})
$CbFamilySafety.Add_Click( {
If ($CbFamilySafety.CheckState -eq "Checked") {
Enable-FamilySafety
$CbFamilySafety.Text = "[ON] Family Safety Features *"
} Else {
Disable-FamilySafety
$CbFamilySafety.Text = "[OFF] Family Safety Features"
}
})
$CbWindowsSearch.Add_Click( {
If ($CbWindowsSearch.CheckState -eq "Checked") {
Enable-WindowsSearch
$CbWindowsSearch.Text = "[ON] Windows Search Indexing *"
} Else {
Disable-WindowsSearch
$CbWindowsSearch.Text = "[OFF] Windows Search Indexing"
}
})
$CbPowerShellISE.Add_Click( { $CbPowerShellISE.Add_Click( {
If ($CbPowerShellISE.CheckState -eq "Checked") { If ($CbPowerShellISE.CheckState -eq "Checked") {
Enable-PowerShellISE Enable-PowerShellISE
@ -794,6 +872,16 @@ function Show-GUI() {
} }
}) })
$CbMouseAcceleration.Add_Click( {
If ($CbMouseAcceleration.CheckState -eq "Checked") {
Enable-MouseAcceleration
$CbMouseAcceleration.Text = "[ON] Mouse Acceleration *"
} Else {
Disable-MouseAcceleration
$CbMouseAcceleration.Text = "[OFF] Mouse Acceleration"
}
})
$CbMouseNaturalScroll.Add_Click( { $CbMouseNaturalScroll.Add_Click( {
If ($CbMouseNaturalScroll.CheckState -eq "Checked") { If ($CbMouseNaturalScroll.CheckState -eq "Checked") {
Enable-MouseNaturalScroll Enable-MouseNaturalScroll
@ -824,8 +912,40 @@ function Show-GUI() {
} }
}) })
$InstallWinget.Add_Click( {
Install-Winget
})
$EnableWingetDailyUpgrade.Add_Click( {
Register-WingetDailyUpgrade
})
$RemoveWingetDailyUpgrade.Add_Click( {
Unregister-WingetDailyUpgrade
})
$InstallChocolatey.Add_Click( {
Install-Chocolatey
})
$UninstallChocolatey.Add_Click( {
Uninstall-Chocolatey
})
$EnableChocolateyDailyUpgrade.Add_Click( {
Register-ChocolateyDailyUpgrade
})
$RemoveChocolateyDailyUpgrade.Add_Click( {
Unregister-ChocolateyDailyUpgrade
})
$RemoveAllChocolateyPackages.Add_Click( {
Remove-AllChocolateyPackage
})
$UpgradeAll.Add_Click( { $UpgradeAll.Add_Click( {
Open-PowerShellFilesCollection -RelativeLocation "src\scripts\other-scripts" -Scripts @("Update-AllPackage.ps1") -DoneTitle $DoneTitle -DoneMessage $DoneMessage Update-AllPackage
}) })
$InstallSelected.Add_Click( { $InstallSelected.Add_Click( {
@ -1408,11 +1528,6 @@ function Show-GUI() {
$InstallUbuntu.CheckState = "Unchecked" $InstallUbuntu.CheckState = "Unchecked"
} }
If ($InstallUbuntu16Lts.CheckState -eq "Checked") {
$AppsSelected.WSLDistros.Add("Ubuntu-16.04")
$InstallUbuntu16Lts.CheckState = "Unchecked"
}
If ($InstallUbuntu18Lts.CheckState -eq "Checked") { If ($InstallUbuntu18Lts.CheckState -eq "Checked") {
$AppsSelected.WSLDistros.Add("Ubuntu-18.04") $AppsSelected.WSLDistros.Add("Ubuntu-18.04")
$InstallUbuntu18Lts.CheckState = "Unchecked" $InstallUbuntu18Lts.CheckState = "Unchecked"

@ -1,29 +0,0 @@
Import-Module -DisableNameChecking "$PSScriptRoot\Title-Templates.psm1"
# Adapted from: https://www.ipswitch.com/blog/how-to-change-registry-permissions-with-powershell
function Grant-RegistryPermission() {
[CmdletBinding()]
param (
[Parameter(Position = 0, Mandatory)]
[String] $Key
)
Write-Status -Types "@" -Status "Trying to take ownership over the registry key: $Key"
$Acl = Get-Acl 'HKLM:\SOFTWARE\Microsoft\WindowsRuntime\ActivatableClassId\Windows.Gaming.GameBar.PresenceServer.Internal.PresenceWriter'
$IdentityRef = [System.Security.Principal.NTAccount]("$env:COMPUTERNAME\$env:USERNAME") # Identity
$RegistryRights = [System.Security.AccessControl.RegistryRights]::FullControl # Rights wanted
$InheritanceFlags = [System.Security.AccessControl.InheritanceFlags]::None # Inheritance flags type
$PropagationFlags = [System.Security.AccessControl.PropagationFlags]::None # Propagation flags type
$AccessControlType = [System.Security.AccessControl.AccessControlType]::Allow # Access control type
$Rule = New-Object System.Security.AccessControl.RegistryAccessRule ($IdentityRef, $RegistryRights, $InheritanceFlags, $PropagationFlags, $AccessControlType) # Registry access rule
$Acl.AddAccessRule($Rule) # Add rule
$Acl | Set-Acl # Apply the Acl changes
}
<#
.EXAMPLE
Grant-RegistryPermission -Key "HKLM:\SOFTWARE\Microsoft\WindowsRuntime\ActivatableClassId\Windows.Gaming.GameBar.PresenceServer.Internal.PresenceWriter" # Sadly returns an error
#>

@ -49,7 +49,7 @@ function Open-RegFilesCollection {
ForEach ($FileName in $Scripts) { ForEach ($FileName in $Scripts) {
$LastAccessUtc = "v$((Get-Item "$FileName").LastWriteTimeUtc | Get-Date -Format "yyyy-MM-dd")" $LastAccessUtc = "v$((Get-Item "$FileName").LastWriteTimeUtc | Get-Date -Format "yyyy-MM-dd")"
$Private:Counter = Write-TitleCounter "$FileName ($LastAccessUtc)" -Counter $Counter -MaxLength $Scripts.Length $Private:Counter = Write-TitleCounter "$FileName ($LastAccessUtc)" -Counter $Counter -MaxLength $Scripts.Length
regedit /s "$FileName" Start-Process -FilePath "regedit" -ArgumentList "/s", "$FileName" -Wait
} }
Pop-Location Pop-Location

@ -41,9 +41,9 @@ function Write-ScriptLogo() {
"@ "@
Write-Style $ASCIIText -Style Blink -Color Green Write-Style $ASCIIText -Style Blink -Color Green -BackColor Black
Write-Style "`n<•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••>" -Color White Write-Style "`n <•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••>" -Color White -BackColor Black
Write-Style " It's Time to Debloat Windows!" -Style Blink -Color Cyan Write-Style " It's Time to Debloat Windows! By LeDragoX & Community" -Style Blink -Color Cyan
} }
function Write-Section() { function Write-Section() {
@ -74,15 +74,15 @@ function Write-Status() {
$TypesDone = "" $TypesDone = ""
ForEach ($Type in $Types) { ForEach ($Type in $Types) {
$TypesDone += "$([char]0x1b)[96m[$([char]0x1b)[97m$Type$([char]0x1b)[96m] " $TypesDone += "$([char]0x1b)[100m$([char]0x1b)[96m[$([char]0x1b)[97m$Type$([char]0x1b)[96m]$([char]0x1b)[m "
} }
Write-Style "$TypesDone".Trim() -Style Bold -BackColor DarkGray -NoNewline Write-Style "$TypesDone".Trim() -Style Bold -NoNewline
If ($Warning) { If ($Warning) {
Write-Style " $Status" -Color Yellow -BackColor DarkBlue Write-Style " $Status" -Color Yellow
} Else { } Else {
Write-Style " $Status" -Color Green -BackColor Black Write-Style " $Status" -Color Green
} }
} }
@ -100,7 +100,7 @@ function Write-Style() {
[String] $ForeColor = 'White', [String] $ForeColor = 'White',
[Parameter(Position = 3)] [Parameter(Position = 3)]
[ValidateSet('Black', 'Blue', 'DarkBlue', 'DarkCyan', 'DarkGray', 'DarkGreen', 'DarkMagenta', 'DarkRed', 'DarkYellow', 'Cyan', 'Gray', 'Green', 'Red', 'Magenta', 'White', 'Yellow')] [ValidateSet('Black', 'Blue', 'DarkBlue', 'DarkCyan', 'DarkGray', 'DarkGreen', 'DarkMagenta', 'DarkRed', 'DarkYellow', 'Cyan', 'Gray', 'Green', 'Red', 'Magenta', 'White', 'Yellow')]
[String] $BackColor = 'Black', [String] $BackColor = 'None',
[Parameter(Position = 4)] [Parameter(Position = 4)]
[Switch] $NoNewline [Switch] $NoNewline
) )
@ -152,11 +152,14 @@ function Write-Style() {
"Underline" = "$([char]0x1b)[4m" "Underline" = "$([char]0x1b)[4m"
} }
$FormattedText = "$($Styles.$Style)$($BackColors.$BackColor)$($ForeColors.$ForeColor)$Object"
If ($NoNewline) { If ($NoNewline) {
return Write-Host "$($Styles.$Style)$($BackColors.$BackColor)$($ForeColors.$ForeColor)$Object" -NoNewline return Write-Host "$FormattedText" -NoNewline
} }
Write-Host "$($Styles.$Style)$($BackColors.$BackColor)$($ForeColors.$ForeColor)$Object" Write-Host "$FormattedText"
Write-Verbose "Reference ^^^ S: $Style, F: $ForeColor, B: $BackColor"
} }
function Write-Title() { function Write-Title() {

@ -1,7 +1,6 @@
Import-Module -DisableNameChecking "$PSScriptRoot\..\Title-Templates.psm1" Import-Module -DisableNameChecking "$PSScriptRoot\..\Title-Templates.psm1"
function Remove-ItemVerified() { function Remove-ItemVerified() {
[CmdletBinding(SupportsShouldProcess)]
param ( param (
[Parameter(Position = 0, Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] [Parameter(Position = 0, Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)]
[String[]] $Path, [String[]] $Path,
@ -16,24 +15,47 @@ function Remove-ItemVerified() {
) )
Begin { Begin {
$ScriptBlock = "Remove-Item"
$Script:TweakType = "Exp/Reg" $Script:TweakType = "Exp/Reg"
} }
Process { Process {
If (Test-Path "$Path") { If (Test-Path "$Path") {
Write-Status -Types "-", $TweakType -Status "Removing: '$Path'" Write-Status -Types "-", $TweakType -Status "Removing: '$Path'"
If ($Recurse -and $Force) {
Remove-Item -Path "$Path" -Include $Include -Exclude $Exclude -Recurse -Force If ($Path) {
Continue $ScriptBlock += " -Path "
ForEach ($PathParam in $Path) {
$ScriptBlock += "`"$PathParam`", "
}
$ScriptBlock = $ScriptBlock.TrimEnd(", ")
}
If ($Include) {
$ScriptBlock += " -Include "
ForEach ($IncludeParam in $Include) {
$ScriptBlock += "`"$IncludeParam`", "
}
$ScriptBlock = $ScriptBlock.TrimEnd(", ")
}
If ($Exclude) {
$ScriptBlock += " -Exclude "
ForEach ($ExcludeParam in $Exclude) {
$ScriptBlock += "`"$ExcludeParam`", "
}
$ScriptBlock = $ScriptBlock.TrimEnd(", ")
} }
If ($Recurse) { If ($Recurse) {
Remove-Item -Path "$Path" -Include $Include -Exclude $Exclude -Recurse $ScriptBlock += " -Recurse"
} ElseIf ($Force) { }
Remove-Item -Path "$Path" -Include $Include -Exclude $Exclude -Force
} Else { If ($Force) {
Remove-Item -Path "$Path" -Include $Include -Exclude $Exclude $ScriptBlock += " -Force"
} }
Invoke-Expression "$ScriptBlock"
} Else { } Else {
Write-Status -Types "?", $TweakType -Status "The path $Path does not exist" -Warning Write-Status -Types "?", $TweakType -Status "The path $Path does not exist" -Warning
} }

@ -13,14 +13,14 @@ function Remove-UWPApp() {
Process { Process {
ForEach ($AppxPackage in $AppxPackages) { ForEach ($AppxPackage in $AppxPackages) {
If (!((Get-AppxPackage -AllUsers -Name "*$AppxPackage*") -or (Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like "*$AppxPackage*"))) { If (!((Get-AppxPackage -AllUsers -Name "$AppxPackage") -or (Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like "$AppxPackage"))) {
Write-Status -Types "?", $TweakType -Status "$AppxPackage was already removed or not found..." -Warning Write-Status -Types "?", $TweakType -Status "$AppxPackage was already removed or not found..." -Warning
Continue Continue
} }
Write-Status -Types "-", $TweakType -Status "Trying to remove $AppxPackage from ALL users..." Write-Status -Types "-", $TweakType -Status "Trying to remove $AppxPackage from ALL users..."
Get-AppxPackage -AllUsers -Name "*$AppxPackage*" | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers -Name "$AppxPackage" | Remove-AppxPackage -AllUsers
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like "*$AppxPackage*" | Remove-AppxProvisionedPackage -Online -AllUsers Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like "$AppxPackage" | Remove-AppxProvisionedPackage -Online -AllUsers
} }
} }
} }

@ -8,7 +8,7 @@ function Set-ItemPropertyVerified() {
[Parameter(Position = 1, Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] [Parameter(Position = 1, Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)]
[String] $Name, [String] $Name,
[Parameter(ValueFromPipeline, ValueFromPipelineByPropertyName)] [Parameter(ValueFromPipeline, ValueFromPipelineByPropertyName)]
[ValidateSet('Binary', 'DWord', 'ExpandString', 'MultiString', 'Qword', 'String', 'Unknown')] [ValidateSet('Binary', 'DWord', 'ExpandString', 'MultiString', 'None', 'Qword', 'String', 'Unknown')]
[String] $Type, [String] $Type,
[Parameter(Position = 2, Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] [Parameter(Position = 2, Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)]
$Value <# Will have dynamic typing #> $Value <# Will have dynamic typing #>

@ -18,7 +18,7 @@ function Set-ScheduledTaskState() {
Process { Process {
ForEach ($ScheduledTask in $ScheduledTasks) { ForEach ($ScheduledTask in $ScheduledTasks) {
If (!(Get-ScheduledTaskInfo -TaskName $ScheduledTask -ErrorAction SilentlyContinue)) { If (!(Get-ScheduledTask -TaskName (Split-Path -Path $ScheduledTask -Leaf) -ErrorAction SilentlyContinue)) {
Write-Status -Types "?", $TweakType -Status "The $ScheduledTask task was not found." -Warning Write-Status -Types "?", $TweakType -Status "The $ScheduledTask task was not found." -Warning
Continue Continue
} }

@ -0,0 +1,35 @@
Import-Module -DisableNameChecking "$PSScriptRoot\..\Title-Templates.psm1"
# Adapted from: https://github.com/ChrisTitusTech/win10script/blob/master/win10debloat.ps1
# Adapted from: https://github.com/W4RH4WK/Debloat-Windows-10/blob/master/utils/install-basic-software.ps1
function Install-PackageManager() {
[CmdletBinding()]
param (
[Parameter(Position = 0, Mandatory)]
[String] $PackageManagerFullName,
[Parameter(Position = 1, Mandatory)]
[ScriptBlock] $CheckExistenceBlock,
[Parameter(Position = 2, Mandatory)]
[ScriptBlock] $InstallCommandBlock,
[ScriptBlock] $PostInstallBlock,
[Switch] $Force
)
Try {
$Err = (Invoke-Expression "$CheckExistenceBlock")
If (($LASTEXITCODE -or $Force)) { throw $Err } # 0 = False, 1 = True
Write-Status -Types "?", $PackageManagerFullName -Status "$PackageManagerFullName is already installed." -Warning
} Catch {
Write-Status -Types "@", $PackageManagerFullName -Status "FORCE INSTALLING $PackageManagerFullName." -Warning
Write-Status -Types "?", $PackageManagerFullName -Status "$PackageManagerFullName was not found." -Warning
Write-Status -Types "+", $PackageManagerFullName -Status "Downloading and Installing $PackageManagerFullName package manager."
Invoke-Expression "$InstallCommandBlock"
If ($PostInstallBlock) {
Write-Status -Types "+", $PackageManagerFullName -Status "Executing post install script: { $("$PostInstallBlock".Trim(' ')) }."
Invoke-Expression "$PostInstallBlock"
}
}
}

@ -0,0 +1,201 @@
Import-Module -DisableNameChecking "$PSScriptRoot\Install-PackageManager.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\Manage-DailyUpgradeJob.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\Title-Templates.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\ui\Show-MessageDialog.psm1"
$Script:DoneTitle = "Information"
$Script:DoneMessage = "Process Completed!"
function Install-Chocolatey() {
[CmdletBinding()]
param (
[Switch] $Force
)
Begin {
$ChocolateyParams = @{
Name = "Chocolatey"
CheckExistenceBlock = { choco --version }
InstallCommandBlock =
{
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
}
PostInstallBlock = { choco install --ignore-dependencies --yes "chocolatey-core.extension" "chocolatey-fastanswers.extension" }
}
}
Process {
If ($Force) {
# Install Chocolatey on Windows
Install-PackageManager -PackageManagerFullName $ChocolateyParams.Name -CheckExistenceBlock $ChocolateyParams.CheckExistenceBlock -InstallCommandBlock $ChocolateyParams.InstallCommandBlock -PostInstallBlock $ChocolateyParams.PostInstallBlock -Force
} Else {
Install-PackageManager -PackageManagerFullName $ChocolateyParams.Name -CheckExistenceBlock $ChocolateyParams.CheckExistenceBlock -InstallCommandBlock $ChocolateyParams.InstallCommandBlock -PostInstallBlock $ChocolateyParams.PostInstallBlock
}
If (!$Force) {
Show-MessageDialog -Title "$DoneTitle" -Message "$DoneMessage"
}
}
}
# Adapted From: https://community.chocolatey.org/courses/installation/uninstalling#script
function Uninstall-Chocolatey() {
Process {
$VerbosePreference = 'Continue'
if (-not $env:ChocolateyInstall) {
$message = @(
"The ChocolateyInstall environment variable was not found."
"Chocolatey is not detected as installed. Nothing to do."
) -join "`n"
Write-Warning $message
return Show-MessageDialog -Title "$DoneTitle" -Message "$DoneMessage"
}
if (-not (Test-Path $env:ChocolateyInstall)) {
$message = @(
"No Chocolatey installation detected at '$env:ChocolateyInstall'."
"Nothing to do."
) -join "`n"
Write-Warning $message
return Show-MessageDialog -Title "$DoneTitle" -Message "$DoneMessage"
}
<#
Using the .NET registry calls is necessary here in order to preserve environment variables embedded in PATH values;
Powershell's registry provider doesn't provide a method of preserving variable references, and we don't want to
accidentally overwrite them with absolute path values. Where the registry allows us to see "%SystemRoot%" in a PATH
entry, PowerShell's registry provider only sees "C:\Windows", for example.
#>
$userKey = [Microsoft.Win32.Registry]::CurrentUser.OpenSubKey('Environment', $true)
$userPath = $userKey.GetValue('PATH', [string]::Empty, 'DoNotExpandEnvironmentNames').ToString()
$machineKey = [Microsoft.Win32.Registry]::LocalMachine.OpenSubKey('SYSTEM\ControlSet001\Control\Session Manager\Environment\', $true)
$machinePath = $machineKey.GetValue('PATH', [string]::Empty, 'DoNotExpandEnvironmentNames').ToString()
$backupPATHs = @(
"User PATH: $userPath"
"Machine PATH: $machinePath"
)
$backupFile = "C:\PATH_backups_ChocolateyUninstall.txt"
$backupPATHs | Set-Content -Path $backupFile -Encoding UTF8 -Force
$warningMessage = @"
This could cause issues after reboot where nothing is found if something goes wrong.
In that case, look at the backup file for the original PATH values in '$backupFile'.
"@
if ($userPath -like "*$env:ChocolateyInstall*") {
Write-Verbose "Chocolatey Install location found in User Path. Removing..."
Write-Warning $warningMessage
$newUserPATH = @(
$userPath -split [System.IO.Path]::PathSeparator |
Where-Object { $_ -and $_ -ne "$env:ChocolateyInstall\bin" }
) -join [System.IO.Path]::PathSeparator
# NEVER use [Environment]::SetEnvironmentVariable() for PATH values; see https://github.com/dotnet/corefx/issues/36449
# This issue exists in ALL released versions of .NET and .NET Core as of 12/19/2019
$userKey.SetValue('PATH', $newUserPATH, 'ExpandString')
}
if ($machinePath -like "*$env:ChocolateyInstall*") {
Write-Verbose "Chocolatey Install location found in Machine Path. Removing..."
Write-Warning $warningMessage
$newMachinePATH = @(
$machinePath -split [System.IO.Path]::PathSeparator |
Where-Object { $_ -and $_ -ne "$env:ChocolateyInstall\bin" }
) -join [System.IO.Path]::PathSeparator
# NEVER use [Environment]::SetEnvironmentVariable() for PATH values; see https://github.com/dotnet/corefx/issues/36449
# This issue exists in ALL released versions of .NET and .NET Core as of 12/19/2019
$machineKey.SetValue('PATH', $newMachinePATH, 'ExpandString')
}
# Adapt for any services running in subfolders of ChocolateyInstall
$agentService = Get-Service -Name chocolatey-agent -ErrorAction SilentlyContinue
if ($agentService -and $agentService.Status -eq 'Running') {
$agentService.Stop()
}
# TODO: add other services here
Remove-Item -Path $env:ChocolateyInstall -Recurse -Force
'ChocolateyInstall', 'ChocolateyLastPathUpdate' | ForEach-Object {
foreach ($scope in 'User', 'Machine') {
[Environment]::SetEnvironmentVariable($_, [string]::Empty, $scope)
}
}
$machineKey.Close()
$userKey.Close()
if ($env:ChocolateyToolsLocation -and (Test-Path $env:ChocolateyToolsLocation)) {
Remove-Item -Path $env:ChocolateyToolsLocation -Recurse -Force
}
foreach ($scope in 'User', 'Machine') {
[Environment]::SetEnvironmentVariable('ChocolateyToolsLocation', [string]::Empty, $scope)
}
Show-MessageDialog -Title "$DoneTitle" -Message "$DoneMessage"
}
}
function Register-ChocolateyDailyUpgrade() {
Begin {
$ChocolateyJobParams = @{
Name = "Chocolatey"
Time = "13:00"
UpdateScriptBlock =
{
Remove-Item -Path "$env:TEMP\Win-Debloat-Tools\logs\*" -Include "ChocolateyDailyUpgrade_*.log"
Start-Transcript -Path "$env:TEMP\Win-Debloat-Tools\logs\ChocolateyDailyUpgrade_$(Get-Date -Format "yyyy-MM-dd_HH-mm-ss").log"
choco upgrade all --ignore-dependencies --yes | Out-Host
Stop-Transcript
}
}
}
Process {
Register-DailyUpgradeJob -PackageManagerFullName $ChocolateyJobParams.Name -Time $ChocolateyJobParams.Time -UpdateScriptBlock $ChocolateyJobParams.UpdateScriptBlock
Show-MessageDialog -Title "$DoneTitle" -Message "$DoneMessage"
}
}
function Unregister-ChocolateyDailyUpgrade() {
Begin {
$JobName = "Chocolatey Daily Upgrade"
}
Process {
Unregister-DailyUpgradeJob -Name $JobName
Show-MessageDialog -Title "$DoneTitle" -Message "$DoneMessage"
}
}
function Remove-AllChocolateyPackage() {
Begin {
Import-Module -DisableNameChecking "$PSScriptRoot\Manage-Software.psm1"
$Ask = "Are you sure you want to remove:`n$((choco list) -match '\w \d.*\d' | ForEach-Object { "`n- $_" })`n`nPress YES to confirm."
$Question = Show-Question -Title "Remove ALL Chocolatey Packages?" -Message $Ask -BoxIcon "Warning"
}
Process {
switch ($Question) {
'Yes' {
Uninstall-Software -Name "All Chocolatey Packages" -Packages @("all") -PackageProvider 'Chocolatey'
}
'No' {
Write-Host "Aborting..."
}
'Cancel' {
Write-Host "Aborting..." # With Yes, No and Cancel, the user can press Esc to exit
}
}
}
}

@ -0,0 +1,67 @@
Import-Module PSScheduledJob
Import-Module -DisableNameChecking "$PSScriptRoot\..\Title-Templates.psm1"
# Adapted from: https://blogs.technet.microsoft.com/heyscriptingguy/2013/11/23/using-scheduled-tasks-and-scheduled-jobs-in-powershell/
function Register-DailyUpgradeJob() {
[CmdletBinding()]
param (
[Parameter(Position = 0, Mandatory)]
[String] $PackageManagerFullName,
[String] $Time,
[ScriptBlock] $UpdateScriptBlock
)
Begin {
$JobName = "$PackageManagerFullName Daily Upgrade"
$ScheduledJob = @{
Name = $JobName
ScriptBlock = $UpdateScriptBlock
Trigger = New-JobTrigger -Daily -At $Time
ScheduledJobOption = New-ScheduledJobOption -RunElevated -MultipleInstancePolicy StopExisting -RequireNetwork
}
$ScheduledJobsPath = "\Microsoft\Windows\PowerShell\ScheduledJobs\"
}
Process {
Write-Status -Types "@", $PackageManagerFullName -Status "Creating a daily task to automatically upgrade $PackageManagerFullName packages at $Time."
If ((Get-ScheduledTask -TaskPath $ScheduledJobsPath -TaskName $JobName -ErrorAction SilentlyContinue) -or (Get-ScheduledJob -Name $JobName -ErrorAction SilentlyContinue)) {
Write-Status -Types "@", $PackageManagerFullName -Status "The ScheduledJob '$JobName' already exists!" -Warning
Write-Status -Types "@", $PackageManagerFullName -Status "Re-Creating with the command:"
Write-Host " { $("$UpdateScriptBlock".Trim(' ')) }`n" -ForegroundColor Cyan
Stop-ScheduledTask -TaskPath $ScheduledJobsPath -TaskName $JobName
Unregister-ScheduledJob -Name $JobName
Register-ScheduledJob @ScheduledJob | Out-Null
} Else {
Write-Status -Types "@", $PackageManagerFullName -Status "Creating Scheduled Job with the command:"
Write-Host " { $("$UpdateScriptBlock".Trim(' ')) }`n" -ForegroundColor Cyan
Register-ScheduledJob @ScheduledJob | Out-Null
}
}
}
function Unregister-DailyUpgradeJob() {
[CmdletBinding()]
param (
[Alias('ScheduledJobName')]
[Parameter(Position = 0, Mandatory)]
[String] $Name
)
Begin {
$ScheduledJobsPath = "\Microsoft\Windows\PowerShell\ScheduledJobs\"
}
Process {
Write-Status -Types "@", "Scripted Job" -Status "Removing the Scheduled Job $Name."
If ((Get-ScheduledTask -TaskPath $ScheduledJobsPath -TaskName $Name -ErrorAction SilentlyContinue) -or (Get-ScheduledJob -Name $Name -ErrorAction SilentlyContinue)) {
Write-Status -Types "@", "Scripted Job" -Status "ScheduledJob: $Name FOUND!"
Stop-ScheduledTask -TaskPath $ScheduledJobsPath -TaskName $Name
Unregister-ScheduledJob -Name $Name
} Else {
Write-Status -Types "@", "Scripted Job" -Status "Scheduled Job $Name was not found." -Warning
}
}
}

@ -1,9 +1,12 @@
Import-Module -DisableNameChecking "$PSScriptRoot\Title-Templates.psm1" Import-Module -DisableNameChecking "$PSScriptRoot\Manage-Chocolatey.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\ui\Show-MessageDialog.psm1" Import-Module -DisableNameChecking "$PSScriptRoot\Manage-Winget.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\Open-File.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\Title-Templates.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\ui\Show-MessageDialog.psm1"
function Install-Software() { function Install-Software() {
[CmdletBinding()] [CmdletBinding()]
[OutputType([String])] [OutputType([ScriptBlock])]
param ( param (
[Parameter(Position = 0, Mandatory)] [Parameter(Position = 0, Mandatory)]
[String] $Name, [String] $Name,
@ -17,18 +20,41 @@ function Install-Software() {
[Switch] $NoDialog [Switch] $NoDialog
) )
$DoneTitle = "Information" [ScriptBlock] $CheckVersionCommand
$DoneMessage = "$Name installed successfully!" [String] $Script:DoneTitle = "Information"
[String] $Script:DoneMessage = "$Name installed successfully!"
If ($PackageProvider -in @('Winget', 'MsStore')) {
$CheckVersionCommand = { winget --version }
}
If ($PackageProvider -eq 'Chocolatey') { If ($PackageProvider -eq 'Chocolatey') {
$CheckVersionCommand = { choco --version }
$InstallBlock = { choco install --ignore-dependencies --yes $Package } $InstallBlock = { choco install --ignore-dependencies --yes $Package }
Write-Status -Types "?" -Status "Chocolatey is configured to ignore dependencies (bloat), you may need to install it before using any program." -Warning Write-Status -Types "?" -Status "Chocolatey is configured to ignore dependencies (bloat), you may need to install it before using any program." -Warning
} }
If ($PackageProvider -eq 'WSL') { If ($PackageProvider -eq 'WSL') {
$CheckVersionCommand = { wsl --version }
$InstallBlock = { wsl --install --distribution $Package } $InstallBlock = { wsl --install --distribution $Package }
} }
Try {
$Err = (Invoke-Expression "$CheckVersionCommand")
If (($LASTEXITCODE)) { throw $Err } # 0 = False, 1 = True
Write-Status -Types "?", $PackageProvider -Status "$PackageProvider is already installed." -Warning
} Catch {
If ($PackageProvider -in @('Winget', 'MsStore')) {
Install-Winget -Force
}
If ($PackageProvider -in @('Chocolatey')) {
Install-Chocolatey -Force
}
If ($PackageProvider -in @('WSL')) {
Open-PowerShellFilesCollection -RelativeLocation "src\scripts\other-scripts" -Scripts @("Install-WSL.ps1") -NoDialog
}
}
Write-Title "Installing $($Name) via $PackageProvider" Write-Title "Installing $($Name) via $PackageProvider"
$DoneMessage += "`n`nInstalled via $PackageProvider`:`n" $DoneMessage += "`n`nInstalled via $PackageProvider`:`n"

@ -0,0 +1,149 @@
Import-Module -DisableNameChecking "$PSScriptRoot\Install-PackageManager.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\Manage-DailyUpgradeJob.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\Get-HardwareInfo.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\Get-TempScriptFolder.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\Request-FileDownload.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\Title-Templates.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\ui\Show-MessageDialog.psm1"
# Adapted from: https://github.com/ChrisTitusTech/win10script/blob/master/win10debloat.ps1
# Adapted from: https://github.com/W4RH4WK/Debloat-Windows-10/blob/master/utils/install-basic-software.ps1
$Script:DoneTitle = "Information"
$Script:DoneMessage = "Process Completed!"
function Install-Winget() {
[CmdletBinding()]
param (
[Switch] $Force
)
Begin {
$WingetParams = @{
Name = "Winget"
CheckExistenceBlock = { winget --version }
InstallCommandBlock =
{
New-Item -Path "$(Get-TempScriptFolder)\downloads\" -Name "winget-install" -ItemType Directory -Force | Out-Null
Push-Location -Path "$(Get-TempScriptFolder)\downloads\winget-install\"
Set-PSRepository -Name 'PSGallery' -InstallationPolicy Trusted
Install-Script -Name winget-install -Force
winget-install.ps1
Pop-Location
Remove-Item -Path "$(Get-TempScriptFolder)\downloads\winget-install\"
}
}
$WingetParams2 = @{
Name = "Winget (Method 2)"
CheckExistenceBlock = { winget --version }
InstallCommandBlock =
{
$WingetDepOutput = Install-WingetDependency
$WingetOutput = Get-APIFile -URI "https://api.github.com/repos/microsoft/winget-cli/releases/latest" -ObjectProperty "assets" -FileNameLike "*.msixbundle" -PropertyValue "browser_download_url" -OutputFile "Microsoft.DesktopAppInstaller.msixbundle"
$AppName = Split-Path -Path $WingetOutput -Leaf
Try {
# Method from: https://github.com/microsoft/winget-cli/blob/master/doc/troubleshooting/README.md#machine-wide-provisioning
If ($WingetDepOutput) {
Write-Status -Types "@" -Status "Trying to install the App (w/ dependency): $AppName" -Warning
$InstallPackageCommand = { Add-AppxProvisionedPackage -Online -PackagePath $WingetOutput -SkipLicense -DependencyPackagePath $WingetDepOutput | Out-Null }
Invoke-Expression "$InstallPackageCommand"
}
Write-Status -Types "@" -Status "Trying to install the App (no dependency): $AppName" -Warning
$InstallPackageCommand = { Add-AppxProvisionedPackage -Online -PackagePath $WingetOutput -SkipLicense | Out-Null }
Invoke-Expression "$InstallPackageCommand"
} Catch {
Write-Status -Types "@" -Status "Couldn't install '$AppName' automatically, trying to install the App manually..." -Warning
Start-Process "ms-windows-store://pdp/?ProductId=9NBLGGH4NNS1" -Wait # GUI App installer can't install itself
}
Remove-Item -Path $WingetOutput
Remove-Item -Path $WingetDepOutput
}
}
}
Process {
If ($Force) {
# Install Winget on Windows (Method 1)
Install-PackageManager -PackageManagerFullName $WingetParams.Name -CheckExistenceBlock $WingetParams.CheckExistenceBlock -InstallCommandBlock $WingetParams.InstallCommandBlock -Force
# Install Winget on Windows (Method 2)
} Else {
# Install Winget on Windows (Method 1)
Install-PackageManager -PackageManagerFullName $WingetParams.Name -CheckExistenceBlock $WingetParams.CheckExistenceBlock -InstallCommandBlock $WingetParams.InstallCommandBlock
# Install Winget on Windows (Method 2)
}
Install-PackageManager -PackageManagerFullName $WingetParams2.Name -CheckExistenceBlock $WingetParams2.CheckExistenceBlock -InstallCommandBlock $WingetParams2.InstallCommandBlock
If (!$Force) {
Show-MessageDialog -Title "$DoneTitle" -Message "$DoneMessage"
}
}
}
function Install-WingetDependency() {
# Dependency for Winget: https://docs.microsoft.com/en-us/troubleshoot/developer/visualstudio/cpp/libraries/c-runtime-packages-desktop-bridge#how-to-install-and-update-desktop-framework-packages
$OSArchList = Get-OSArchitecture
ForEach ($OSArch in $OSArchList) {
If ($OSArch -like "x64" -or "x86" -or "arm64" -or "arm") {
$WingetDepOutput = Request-FileDownload -FileURI "https://aka.ms/Microsoft.VCLibs.$OSArch.14.00.Desktop.appx" -OutputFile "Microsoft.VCLibs.14.00.Desktop.appx"
$AppName = Split-Path -Path $WingetDepOutput -Leaf
Try {
Write-Status -Types "@" -Status "Trying to install the App: $AppName" -Warning
$InstallPackageCommand = { Add-AppxPackage -Path $WingetDepOutput }
Invoke-Expression "$InstallPackageCommand"
If ($LASTEXITCODE) { Throw "Couldn't install automatically" }
} Catch {
Write-Status -Types "@" -Status "Couldn't install '$AppName' automatically, trying to install the App manually..." -Warning
Start-Process -FilePath $WingetDepOutput
$AppInstallerId = (Get-Process AppInstaller).Id
Wait-Process -Id $AppInstallerId
}
Return $WingetDepOutput
} Else {
Write-Status -Types "?" -Status "$OSArch is not supported!" -Warning
}
}
Return $false
}
function Register-WingetDailyUpgrade() {
Begin {
$WingetJobParams = @{
Name = "Winget"
Time = "12:00"
UpdateScriptBlock =
{
Remove-Item -Path "$env:TEMP\Win-Debloat-Tools\logs\*" -Include "WingetDailyUpgrade_*.log"
Start-Transcript -Path "$env:TEMP\Win-Debloat-Tools\logs\WingetDailyUpgrade_$(Get-Date -Format "yyyy-MM-dd_HH-mm-ss").log"
Set-ExecutionPolicy Unrestricted -Scope LocalMachine -Force # Only needed to run Winget
winget source update --disable-interactivity | Out-Host
winget upgrade --all --silent | Out-Host
Stop-Transcript
}
}
}
Process {
Register-DailyUpgradeJob -PackageManagerFullName $WingetJobParams.Name -Time $WingetJobParams.Time -UpdateScriptBlock $WingetJobParams.UpdateScriptBlock
Show-MessageDialog -Title "$DoneTitle" -Message "$DoneMessage"
}
}
function Unregister-WingetDailyUpgrade() {
Begin {
$JobName = "Winget Daily Upgrade"
}
Process {
Unregister-DailyUpgradeJob -Name $JobName
Show-MessageDialog -Title "$DoneTitle" -Message "$DoneMessage"
}
}

@ -1,4 +1,8 @@
Import-Module -DisableNameChecking "$PSScriptRoot\..\..\lib\Title-Templates.psm1" Import-Module -DisableNameChecking "$PSScriptRoot\..\Title-Templates.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\ui\Show-MessageDialog.psm1"
$Script:DoneTitle = "Information"
$Script:DoneMessage = "Process Completed!"
function Update-AllPackage() { function Update-AllPackage() {
Write-Section "Upgrade all Packages" Write-Section "Upgrade all Packages"
@ -22,6 +26,6 @@ function Update-AllPackage() {
} Catch { } Catch {
Write-Status -Types "!" -Status "Failed to upgrade packages through WSL (maybe it's uninstalled?)" -Warning Write-Status -Types "!" -Status "Failed to upgrade packages through WSL (maybe it's uninstalled?)" -Warning
} }
}
Update-AllPackage Show-MessageDialog -Title "$DoneTitle" -Message "$DoneMessage"
}

@ -1,177 +0,0 @@
Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\Get-HardwareInfo.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\Get-TempScriptFolder.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\Request-FileDownload.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\Title-Templates.psm1"
# Adapted from: https://github.com/ChrisTitusTech/win10script/blob/master/win10debloat.ps1
# Adapted from: https://github.com/W4RH4WK/Debloat-Windows-10/blob/master/utils/install-basic-software.ps1
function Install-PackageManager() {
[CmdletBinding()]
param (
[Parameter(Position = 0, Mandatory)]
[String] $PackageManagerFullName,
[Parameter(Position = 1, Mandatory)]
[ScriptBlock] $CheckExistenceBlock,
[Parameter(Position = 2, Mandatory)]
[ScriptBlock] $InstallCommandBlock,
[String] $Time,
[ScriptBlock] $UpdateScriptBlock,
[ScriptBlock] $PostInstallBlock
)
Try {
$Err = (Invoke-Expression "$CheckExistenceBlock")
If (($LASTEXITCODE)) { throw $Err } # 0 = False, 1 = True
Write-Status -Types "?", $PackageManagerFullName -Status "$PackageManagerFullName is already installed." -Warning
} Catch {
Write-Status -Types "?", $PackageManagerFullName -Status "$PackageManagerFullName was not found." -Warning
Write-Status -Types "+", $PackageManagerFullName -Status "Downloading and Installing $PackageManagerFullName package manager."
Invoke-Expression "$InstallCommandBlock"
If ($PostInstallBlock) {
Write-Status -Types "+", $PackageManagerFullName -Status "Executing post install script: { $("$PostInstallBlock".Trim(' ')) }."
Invoke-Expression "$PostInstallBlock"
}
}
# Self-reminder, this part stay out of the Try-Catch block
If ($UpdateScriptBlock) {
# Adapted from: https://blogs.technet.microsoft.com/heyscriptingguy/2013/11/23/using-scheduled-tasks-and-scheduled-jobs-in-powershell/
Write-Status -Types "@", $PackageManagerFullName -Status "Creating a daily task to automatically upgrade $PackageManagerFullName packages at $Time."
$JobName = "$PackageManagerFullName Daily Upgrade"
$ScheduledJob = @{
Name = $JobName
ScriptBlock = $UpdateScriptBlock
Trigger = New-JobTrigger -Daily -At $Time
ScheduledJobOption = New-ScheduledJobOption -RunElevated -MultipleInstancePolicy StopExisting -RequireNetwork
}
If ((Get-ScheduledTask -TaskName $JobName -ErrorAction SilentlyContinue) -or (Get-ScheduledJob -Name $JobName -ErrorAction SilentlyContinue)) {
Write-Status -Types "@", $PackageManagerFullName -Status "ScheduledJob: $JobName FOUND!"
Write-Status -Types "@", $PackageManagerFullName -Status "Re-Creating with the command:"
Write-Host " { $("$UpdateScriptBlock".Trim(' ')) }`n" -ForegroundColor Cyan
Stop-ScheduledTask -TaskPath "\Microsoft\Windows\PowerShell\ScheduledJobs" -TaskName $JobName
Unregister-ScheduledJob -Name $JobName
Register-ScheduledJob @ScheduledJob | Out-Null
} Else {
Write-Status -Types "@", $PackageManagerFullName -Status "Creating Scheduled Job with the command:"
Write-Host " { $("$UpdateScriptBlock".Trim(' ')) }`n" -ForegroundColor Cyan
Register-ScheduledJob @ScheduledJob | Out-Null
}
}
}
function Install-WingetDependency() {
# Dependency for Winget: https://docs.microsoft.com/en-us/troubleshoot/developer/visualstudio/cpp/libraries/c-runtime-packages-desktop-bridge#how-to-install-and-update-desktop-framework-packages
$OSArchList = Get-OSArchitecture
ForEach ($OSArch in $OSArchList) {
If ($OSArch -like "x64" -or "x86" -or "arm64" -or "arm") {
$WingetDepOutput = Request-FileDownload -FileURI "https://aka.ms/Microsoft.VCLibs.$OSArch.14.00.Desktop.appx" -OutputFile "Microsoft.VCLibs.14.00.Desktop.appx"
$AppName = Split-Path -Path $WingetDepOutput -Leaf
Try {
Write-Status -Types "@" -Status "Trying to install the App: $AppName" -Warning
$InstallPackageCommand = { Add-AppxPackage -Path $WingetDepOutput }
Invoke-Expression "$InstallPackageCommand"
If ($LASTEXITCODE) { Throw "Couldn't install automatically" }
} Catch {
Write-Status -Types "@" -Status "Couldn't install '$AppName' automatically, trying to install the App manually..." -Warning
Start-Process -FilePath $WingetDepOutput
$AppInstallerId = (Get-Process AppInstaller).Id
Wait-Process -Id $AppInstallerId
}
Return $WingetDepOutput
} Else {
Write-Status -Types "?" -Status "$OSArch is not supported!" -Warning
}
}
Return $false
}
$WingetParams = @{
Name = "Winget"
CheckExistenceBlock = { winget --version }
InstallCommandBlock =
{
New-Item -Path "$(Get-TempScriptFolder)\downloads\" -Name "winget-install" -ItemType Directory -Force | Out-Null
Push-Location -Path "$(Get-TempScriptFolder)\downloads\winget-install\"
Set-PSRepository -Name 'PSGallery' -InstallationPolicy Trusted
Install-Script -Name winget-install -Force
winget-install.ps1
Pop-Location
Remove-Item -Path "$(Get-TempScriptFolder)\downloads\winget-install\"
}
Time = "12:00"
UpdateScriptBlock =
{
Remove-Item -Path "$env:TEMP\Win-Debloat-Tools\logs\*" -Include "WingetDailyUpgrade_*.log"
Start-Transcript -Path "$env:TEMP\Win-Debloat-Tools\logs\WingetDailyUpgrade_$(Get-Date -Format "yyyy-MM-dd_HH-mm-ss").log"
Set-ExecutionPolicy Unrestricted -Scope LocalMachine -Force # Only needed to run Winget
winget source update --disable-interactivity | Out-Host
winget upgrade --all --silent | Out-Host
Stop-Transcript
}
}
$WingetParams2 = @{
Name = "Winget (Method 2)"
CheckExistenceBlock = { winget --version }
InstallCommandBlock =
{
$WingetDepOutput = Install-WingetDependency
$WingetOutput = Get-APIFile -URI "https://api.github.com/repos/microsoft/winget-cli/releases/latest" -ObjectProperty "assets" -FileNameLike "*.msixbundle" -PropertyValue "browser_download_url" -OutputFile "Microsoft.DesktopAppInstaller.msixbundle"
$AppName = Split-Path -Path $WingetOutput -Leaf
Try {
# Method from: https://github.com/microsoft/winget-cli/blob/master/doc/troubleshooting/README.md#machine-wide-provisioning
If ($WingetDepOutput) {
Write-Status -Types "@" -Status "Trying to install the App (w/ dependency): $AppName" -Warning
$InstallPackageCommand = { Add-AppxProvisionedPackage -Online -PackagePath $WingetOutput -SkipLicense -DependencyPackagePath $WingetDepOutput | Out-Null }
Invoke-Expression "$InstallPackageCommand"
}
Write-Status -Types "@" -Status "Trying to install the App (no dependency): $AppName" -Warning
$InstallPackageCommand = { Add-AppxProvisionedPackage -Online -PackagePath $WingetOutput -SkipLicense | Out-Null }
Invoke-Expression "$InstallPackageCommand"
} Catch {
Write-Status -Types "@" -Status "Couldn't install '$AppName' automatically, trying to install the App manually..." -Warning
Start-Process "ms-windows-store://pdp/?ProductId=9NBLGGH4NNS1" -Wait # GUI App installer can't install itself
}
Remove-Item -Path $WingetOutput
Remove-Item -Path $WingetDepOutput
}
}
$ChocolateyParams = @{
Name = "Chocolatey"
CheckExistenceBlock = { choco --version }
InstallCommandBlock =
{
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
}
Time = "13:00"
UpdateScriptBlock =
{
Remove-Item -Path "$env:TEMP\Win-Debloat-Tools\logs\*" -Include "ChocolateyDailyUpgrade_*.log"
Start-Transcript -Path "$env:TEMP\Win-Debloat-Tools\logs\ChocolateyDailyUpgrade_$(Get-Date -Format "yyyy-MM-dd_HH-mm-ss").log"
choco upgrade all --ignore-dependencies --yes | Out-Host
Stop-Transcript
}
PostInstallBlock = { choco install --ignore-dependencies --yes "chocolatey-core.extension" "chocolatey-fastanswers.extension" "dependency-windows10" }
}
# Install Winget on Windows (Method 1)
Install-PackageManager -PackageManagerFullName $WingetParams.Name -CheckExistenceBlock $WingetParams.CheckExistenceBlock -InstallCommandBlock $WingetParams.InstallCommandBlock -Time $WingetParams.Time -UpdateScriptBlock $WingetParams.UpdateScriptBlock
# Install Winget on Windows (Method 2)
Install-PackageManager -PackageManagerFullName $WingetParams2.Name -CheckExistenceBlock $WingetParams2.CheckExistenceBlock -InstallCommandBlock $WingetParams2.InstallCommandBlock
# Install Chocolatey on Windows
Install-PackageManager -PackageManagerFullName $ChocolateyParams.Name -CheckExistenceBlock $ChocolateyParams.CheckExistenceBlock -InstallCommandBlock $ChocolateyParams.InstallCommandBlock -Time $ChocolateyParams.Time -UpdateScriptBlock $ChocolateyParams.UpdateScriptBlock -PostInstallBlock $ChocolateyParams.PostInstallBlock

@ -1,3 +1,4 @@
Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\Get-HardwareInfo.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\Open-File.psm1" Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\Open-File.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\Title-Templates.psm1" Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\Title-Templates.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\debloat-helper\Remove-ItemVerified.psm1" Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\debloat-helper\Remove-ItemVerified.psm1"
@ -7,6 +8,7 @@ Import-Module -DisableNameChecking "$PSScriptRoot\..\utils\Individual-Tweaks.psm
# Adapted from: https://github.com/ChrisTitusTech/win10script # Adapted from: https://github.com/ChrisTitusTech/win10script
# Adapted from: https://github.com/Sycnex/Windows10Debloater # Adapted from: https://github.com/Sycnex/Windows10Debloater
# Adapted from: https://github.com/kalaspuffar/windows-debloat # Adapted from: https://github.com/kalaspuffar/windows-debloat
# Adapted From: https://learn.microsoft.com/en-us/answers/questions/288732/url-associate-with-internet-browser
function Register-PersonalTweaksList() { function Register-PersonalTweaksList() {
[CmdletBinding()] [CmdletBinding()]
@ -44,17 +46,58 @@ function Register-PersonalTweaksList() {
$PathToLMPoliciesExplorer = "HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" $PathToLMPoliciesExplorer = "HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer"
$PathToLMPoliciesNewsAndInterest = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Feeds" $PathToLMPoliciesNewsAndInterest = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Feeds"
$PathToLMPoliciesWindowsSearch = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" $PathToLMPoliciesWindowsSearch = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search"
$PathToLMRemovableDevices = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\DelegateFolders\{F5FB2C77-0E2F-4A16-A381-3E560C68BC83}"
Write-Title "My Personal Tweaks" Write-Title "My Personal Tweaks"
If (!$Revert) { If (!$Revert) {
$Scripts = @("enable-photo-viewer.reg") $Scripts = @("enable-photo-viewer.reg")
Enable-DarkTheme Enable-DarkTheme
Enable-LegacyContextMenu
} Else { } Else {
$Scripts = @("disable-photo-viewer.reg") $Scripts = @("disable-photo-viewer.reg")
Disable-DarkTheme Disable-DarkTheme
Disable-LegacyContextMenu
} }
Open-RegFilesCollection -RelativeLocation "src\utils" -Scripts $Scripts -NoDialog Open-RegFilesCollection -RelativeLocation "src\utils" -Scripts $Scripts -NoDialog
If ((Get-SystemSpec)[2] -like '*Windows 10*') {
Write-Status -Types "+", $TweakType -Status "Fixing .URL file association with Internet Browser..."
# Changing .url to Internet Browser by enforcing
Set-ItemPropertyVerified -Path "HKLM:\SOFTWARE\Classes\IE.AssocFile.URL\DefaultIcon" -Name "(default)" -Type ExpandString -Value "C:\Windows\System32\url.dll,5"
Set-ItemPropertyVerified -Path "HKLM:\SOFTWARE\Classes\IE.AssocFile.URL\Shell\Open" -Name "CLSID" -Type String -Value "{FBF23B40-E3F0-101B-8488-00AA003E56F8}"
Set-ItemPropertyVerified -Path "HKLM:\SOFTWARE\Classes\IE.AssocFile.URL\Shell\Open" -Name "LegacyDisable" -Type String -Value ""
Set-ItemPropertyVerified -Path "HKLM:\SOFTWARE\Classes\IE.AssocFile.URL\Shell\Open\Command" -Name "(default)" -Type String -Value "`"C:\Windows\System32\rundll32.exe`" `"C:\Windows\System32\ieframe.dll`",OpenURL %l"
New-Item -Path "HKLM:\SOFTWARE\Classes\IE.AssocFile.URL\ShellEx" -Force | Out-Null
Set-ItemPropertyVerified -Path "HKLM:\SOFTWARE\Classes\IE.AssocFile.URL\ShellEx\{000214EE-0000-0000-C000-000000000046}" -Name "(default)" -Type String -Value "{FBF23B40-E3F0-101B-8488-00AA003E56F8}"
Set-ItemPropertyVerified -Path "HKLM:\SOFTWARE\Classes\IE.AssocFile.URL\ShellEx\{000214F9-0000-0000-C000-000000000046}" -Name "(default)" -Type String -Value "{FBF23B40-E3F0-101B-8488-00AA003E56F8}"
Set-ItemPropertyVerified -Path "HKLM:\SOFTWARE\Classes\IE.AssocFile.URL\ShellEx\{00021500-0000-0000-C000-000000000046}" -Name "(default)" -Type String -Value "{FBF23B40-E3F0-101B-8488-00AA003E56F8}"
Set-ItemPropertyVerified -Path "HKLM:\SOFTWARE\Classes\IE.AssocFile.URL\ShellEx\{CABB0DA0-DA57-11CF-9974-0020AFD79762}" -Name "(default)" -Type String -Value "{FBF23B40-E3F0-101B-8488-00AA003E56F8}"
Set-ItemPropertyVerified -Path "HKLM:\SOFTWARE\Classes\IE.AssocFile.URL\ShellEx\{FBF23B80-E3F0-101B-8488-00AA003E56F8}" -Name "(default)" -Type String -Value "{FBF23B40-E3F0-101B-8488-00AA003E56F8}"
# Linking InternetShortcut to url files
Set-ItemPropertyVerified -Path "Registry::HKEY_CLASSES_ROOT\.url" -Name "(default)" -Type String -Value "InternetShortcut"
Set-ItemPropertyVerified -Path "Registry::HKEY_CLASSES_ROOT\.url\OpenWithProgIds" -Name "InternetShortcut" -Type String -Value ""
Set-ItemPropertyVerified -Path "Registry::HKEY_CLASSES_ROOT\.url\PersistentHandler" -Name "(default)" -Type String -Value "{8CD34779-9F10-4f9b-ADFB-B3FAEABDAB5A}"
Set-ItemPropertyVerified -Path "Registry::HKEY_CLASSES_ROOT\.url\ShellEx\{000214EE-0000-0000-C000-000000000046}" -Name "(default)" -Type String -Value "{FBF23B40-E3F0-101B-8488-00AA003E56F8}"
Set-ItemPropertyVerified -Path "Registry::HKEY_CLASSES_ROOT\.url\ShellEx\{000214F9-0000-0000-C000-000000000046}" -Name "(default)" -Type String -Value "{FBF23B40-E3F0-101B-8488-00AA003E56F8}"
Set-ItemPropertyVerified -Path "Registry::HKEY_CLASSES_ROOT\.url\ShellEx\{00021500-0000-0000-C000-000000000046}" -Name "(default)" -Type String -Value "{FBF23B40-E3F0-101B-8488-00AA003E56F8}"
Set-ItemPropertyVerified -Path "Registry::HKEY_CLASSES_ROOT\.url\ShellEx\{CABB0DA0-DA57-11CF-9974-0020AFD79762}" -Name "(default)" -Type String -Value "{FBF23B40-E3F0-101B-8488-00AA003E56F8}"
Set-ItemPropertyVerified -Path "Registry::HKEY_CLASSES_ROOT\.url\ShellEx\{FBF23B80-E3F0-101B-8488-00AA003E56F8}" -Name "(default)" -Type String -Value "{FBF23B40-E3F0-101B-8488-00AA003E56F8}"
Set-ItemPropertyVerified -Path "Registry::HKEY_CLASSES_ROOT\InternetShortcut" -Name "(default)" -Type String -Value "InternetShortcut"
Set-ItemPropertyVerified -Path "Registry::HKEY_CLASSES_ROOT\InternetShortcut\DefaultIcon" -Name "(default)" -Type ExpandString -Value "%SystemRoot%\System32\url.dll,5"
Set-ItemPropertyVerified -Path "Registry::HKEY_CLASSES_ROOT\InternetShortcut\tabsets" -Name "selection" -Type DWord -Value 0x00000705
# Doing changes to Current User
New-Item -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.url\OpenWithList" -Force | Out-Null
Set-ItemPropertyVerified -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.url\OpenWithProgids" -Name "InternetShortcut" -Type None -Value ([byte[]]@())
Open-RegFilesCollection -RelativeLocation "src\utils" -Scripts "fix-url-association.reg" -NoDialog
Set-ItemPropertyVerified -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.url\UserChoice" -Name "Hash" -Type String -Value "wMx4BywX2RI="
Set-ItemPropertyVerified -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.url\UserChoice" -Name "ProgId" -Type String -Value "IE.AssocFile.URL"
Set-ItemPropertyVerified -Path "HKCU:\SOFTWARE\Microsoft\Windows\Roaming\OpenWith\FileExts\.url\UserChoice" -Name "Hash" -Type String -Value "wMx4BywX2RI="
Set-ItemPropertyVerified -Path "HKCU:\SOFTWARE\Microsoft\Windows\Roaming\OpenWith\FileExts\.url\UserChoice" -Name "ProgId" -Type String -Value "IE.AssocFile.URL"
}
# Show Task Manager details - Applicable to 1607 and later - Although this functionality exist even in earlier versions, the Task Manager's behavior is different there and is not compatible with this tweak # Show Task Manager details - Applicable to 1607 and later - Although this functionality exist even in earlier versions, the Task Manager's behavior is different there and is not compatible with this tweak
If ((Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name CurrentBuild).CurrentBuild -lt 22557) { If ((Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name CurrentBuild).CurrentBuild -lt 22557) {
Write-Status -Types "+", $TweakType -Status "Showing task manager details..." Write-Status -Types "+", $TweakType -Status "Showing task manager details..."
@ -90,10 +133,6 @@ function Register-PersonalTweaksList() {
Write-Status -Types $EnableStatus[1].Symbol, $TweakType -Status "$($EnableStatus[1].Status) Show Drives without Media..." Write-Status -Types $EnableStatus[1].Symbol, $TweakType -Status "$($EnableStatus[1].Status) Show Drives without Media..."
Set-ItemPropertyVerified -Path "$PathToCUExplorerAdvanced" -Name "HideDrivesWithNoMedia" -Type DWord -Value $Zero Set-ItemPropertyVerified -Path "$PathToCUExplorerAdvanced" -Name "HideDrivesWithNoMedia" -Type DWord -Value $Zero
Write-Status -Types $EnableStatus[0].Symbol, $TweakType -Status "$($EnableStatus[0].Status) MRU lists (jump lists) of XAML apps in Start Menu..."
Set-ItemPropertyVerified -Path "$PathToCUExplorerAdvanced" -Name "Start_TrackDocs" -Type DWord -Value $Zero
Set-ItemPropertyVerified -Path "$PathToCUExplorerAdvanced" -Name "Start_TrackProgs" -Type DWord -Value $Zero
Write-Status -Types "*", $TweakType -Status "Restoring Aero-Shake Minimize feature..." Write-Status -Types "*", $TweakType -Status "Restoring Aero-Shake Minimize feature..."
Remove-ItemProperty -Path "$PathToCUExplorerAdvanced" -Name "DisallowShaking" -Force -ErrorAction SilentlyContinue Remove-ItemProperty -Path "$PathToCUExplorerAdvanced" -Name "DisallowShaking" -Force -ErrorAction SilentlyContinue
@ -110,10 +149,16 @@ function Register-PersonalTweaksList() {
Write-Status -Types "-", $TweakType -Status "Disabling '- Shortcut' name after creating a shortcut..." Write-Status -Types "-", $TweakType -Status "Disabling '- Shortcut' name after creating a shortcut..."
Set-ItemPropertyVerified -Path "$PathToCUExplorer" -Name "link" -Type Binary -Value ([byte[]](0x00, 0x00, 0x00, 0x00)) Set-ItemPropertyVerified -Path "$PathToCUExplorer" -Name "link" -Type Binary -Value ([byte[]](0x00, 0x00, 0x00, 0x00))
Write-Status -Types "-", $TweakType -Status "Hiding duplicated Removable Devices on Navigation Pane..."
Remove-ItemVerified -Path $PathToLMRemovableDevices -Recurse
Write-Status -Types "*", $TweakType -Status "Disabling expand to folder in Navigation Pane..."
Set-ItemPropertyVerified -Path "$PathToCUExplorerAdvanced" -Name "NavPaneExpandToCurrentFolder" -Type DWord -Value 0
Write-Section "Task Bar Tweaks" Write-Section "Task Bar Tweaks"
Write-Caption "Task Bar - Windows 10 Compatible" Write-Caption "Task Bar - Windows 10 Compatible"
Write-Status -Types $EnableStatus[0].Symbol, $TweakType -Status "$($EnableStatus[0].Status) the 'Search Box' from taskbar..." Write-Status -Types $EnableStatus[0].Symbol, $TweakType -Status "$($EnableStatus[0].Status) the 'Search Box' from taskbar..."
# [@] (0 = Hide completely, 1 = Show icon only, 2 = Show long Search Box) # [@] (0 = Hide completely, 1 = Show icon only, 2 = Show long Search Box, 3 = Search Icon and Label (Windows 11))
Set-ItemPropertyVerified -Path "$PathToCUWindowsSearch" -Name "SearchboxTaskbarMode" -Type DWord -Value $Zero Set-ItemPropertyVerified -Path "$PathToCUWindowsSearch" -Name "SearchboxTaskbarMode" -Type DWord -Value $Zero
Write-Status -Types $EnableStatus[0].Symbol, $TweakType -Status "$($EnableStatus[0].Status) Windows search highlights from taskbar..." Write-Status -Types $EnableStatus[0].Symbol, $TweakType -Status "$($EnableStatus[0].Status) Windows search highlights from taskbar..."
@ -170,6 +215,16 @@ function Register-PersonalTweaksList() {
Write-Status -Types $EnableStatus[1].Symbol, $TweakType -Status "$($EnableStatus[1].Status) driver download over metered connections..." Write-Status -Types $EnableStatus[1].Symbol, $TweakType -Status "$($EnableStatus[1].Status) driver download over metered connections..."
Set-ItemPropertyVerified -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeviceSetup" -Name "CostedNetworkPolicy" -Type DWord -Value $One Set-ItemPropertyVerified -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeviceSetup" -Name "CostedNetworkPolicy" -Type DWord -Value $One
Write-Section "Personalization"
Write-Caption "Start"
Write-Status -Types $EnableStatus[0].Symbol, $TweakType -Status "$($EnableStatus[0].Status) Most Recent Used (MRU) items in Start, Jump Lists and File Explorer..."
Set-ItemPropertyVerified -Path "$PathToCUExplorerAdvanced" -Name "Start_TrackDocs" -Type DWord -Value $Zero
Write-Section "Privacy"
Write-Caption "General"
Write-Status -Types "*", $TweakType -Status "Enabling Let Windows track app launches to improve Start and search results (Run Dialog History)..."
Set-ItemPropertyVerified -Path "$PathToCUExplorerAdvanced" -Name "Start_TrackProgs" -Type DWord -Value 1
Write-Section "Cortana Tweaks" Write-Section "Cortana Tweaks"
Write-Status -Types $EnableStatus[0].Symbol, $TweakType -Status "$($EnableStatus[0].Status) Bing Search in Start Menu..." Write-Status -Types $EnableStatus[0].Symbol, $TweakType -Status "$($EnableStatus[0].Status) Bing Search in Start Menu..."
Set-ItemPropertyVerified -Path "$PathToCUWindowsSearch" -Name "BingSearchEnabled" -Type DWord -Value $Zero Set-ItemPropertyVerified -Path "$PathToCUWindowsSearch" -Name "BingSearchEnabled" -Type DWord -Value $Zero

@ -2,7 +2,7 @@
Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\debloat-helper\Remove-UWPApp.psm1" Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\debloat-helper\Remove-UWPApp.psm1"
function Remove-BloatwareAppsList() { function Remove-BloatwareAppsList() {
$Apps = @( $MSApps = @(
# Default Windows 10+ apps # Default Windows 10+ apps
"Microsoft.3DBuilder" # 3D Builder "Microsoft.3DBuilder" # 3D Builder
"Microsoft.549981C3F5F10" # Cortana "Microsoft.549981C3F5F10" # Cortana
@ -48,64 +48,93 @@ function Remove-BloatwareAppsList() {
"Microsoft.ZuneMusic" # Groove Music / (New) Windows Media Player "Microsoft.ZuneMusic" # Groove Music / (New) Windows Media Player
"Microsoft.ZuneVideo" # Movies & TV "Microsoft.ZuneVideo" # Movies & TV
# Apps which other apps depend on
"Microsoft.Advertising.Xaml"
# Default Windows 11 apps # Default Windows 11 apps
"Clipchamp.Clipchamp" # Clipchamp Video Editor "Clipchamp.Clipchamp" # Clipchamp Video Editor
"MicrosoftWindows.Client.WebExperience" # Taskbar Widgets "MicrosoftWindows.Client.WebExperience" # Taskbar Widgets
"MicrosoftTeams" # Microsoft Teams / Preview "MicrosoftTeams" # Microsoft Teams / Preview
# 3rd party Apps # <==========[ DIY ]==========> (Remove the # to Uninstall)
"ACGMediaPlayer"
"ActiproSoftwareLLC"
"AdobePhotoshopExpress" # Adobe Photoshop Express
"Amazon.com.Amazon" # Amazon Shop
"Asphalt8Airborne" # Asphalt 8 Airbone
"AutodeskSketchBook"
"BubbleWitch3Saga" # Bubble Witch 3 Saga
"CaesarsSlotsFreeCasino"
"CandyCrush" # Candy Crush
"COOKINGFEVER"
"CyberLinkMediaSuiteEssentials"
"DisneyMagicKingdoms"
"Dolby" # Dolby Products (Like Atmos)
"DrawboardPDF"
"Duolingo-LearnLanguagesforFree" # Duolingo
"EclipseManager"
"Facebook" # Facebook
"FarmVille2CountryEscape"
"FitbitCoach"
"Flipboard" # Flipboard
"HiddenCity"
"Hulu"
"iHeartRadio"
"Keeper"
"LinkedInforWindows"
"MarchofEmpires"
"Netflix" # Netflix
"NYTCrossword"
"OneCalendar"
"PandoraMediaInc"
"PhototasticCollage"
"PicsArt-PhotoStudio"
"Plex" # Plex
"PolarrPhotoEditorAcademicEdition"
"RoyalRevolt" # Royal Revolt
"Shazam"
"Sidia.LiveWallpaper" # Live Wallpaper
"SlingTV"
"Speed Test"
"Sway"
"TuneInRadio"
"Twitter" # Twitter
"Viber"
"WinZipUniversal"
"Wunderlist"
"XING"
# Apps which other apps depend on # [DIY] Default apps i'll keep
"Microsoft.Advertising.Xaml" #"Microsoft.FreshPaint" # Paint
#"Microsoft.MicrosoftStickyNotes" # Sticky Notes
#"Microsoft.WindowsCalculator" # Calculator
#"Microsoft.WindowsCamera" # Camera
#"Microsoft.ScreenSketch" # Snip and Sketch (now called Snipping tool, replaces the Win32 version in clean installs)
#"Microsoft.Windows.DevHome" # Dev Home
#"Microsoft.Windows.Photos" # Photos / Video Editor
# [DIY] Can't be reinstalled
#"Microsoft.WindowsStore" # Windows Store
# Apps which cannot be removed using Remove-AppxPackage
#"Microsoft.BioEnrollment"
#"Microsoft.WindowsFeedback" # Feedback Module
#"Windows.ContactSupport"
)
$ThirdPartyApps = @(
"*ACGMediaPlayer*"
"*ActiproSoftwareLLC*"
"*AdobePhotoshopExpress*" # Adobe Photoshop Express
"Amazon.com.Amazon" # Amazon Shop
"*Asphalt8Airborne*" # Asphalt 8 Airbone
"*AutodeskSketchBook*"
"*BubbleWitch3Saga*" # Bubble Witch 3 Saga
"*CaesarsSlotsFreeCasino*"
"*CandyCrush*" # Candy Crush
"*COOKINGFEVER*"
"*CyberLinkMediaSuiteEssentials*"
"*DisneyMagicKingdoms*"
"*Dolby*" # Dolby Products (Like Atmos)
"*DrawboardPDF*"
"*Duolingo-LearnLanguagesforFree*" # Duolingo
"*EclipseManager*"
"*FarmVille2CountryEscape*"
"*FitbitCoach*"
"*Flipboard*" # Flipboard
"*HiddenCity*"
"*Keeper*"
"*LinkedInforWindows*"
"*MarchofEmpires*"
"*NYTCrossword*"
"*OneCalendar*"
"*PandoraMediaInc*"
"*PhototasticCollage*"
"*PicsArt-PhotoStudio*"
"*PolarrPhotoEditorAcademicEdition*"
"*RoyalRevolt*" # Royal Revolt
"*Shazam*"
"*Sidia.LiveWallpaper*" # Live Wallpaper
"*Speed Test*"
"*Sway*"
"*WinZipUniversal*"
"*Wunderlist*"
"*XING*"
)
$ManufacturerApps = @(
# Dell Bloat
"DB6EA5DB.MediaSuiteEssentialsforDell"
"DB6EA5DB.PowerDirectorforDell"
"DB6EA5DB.Power2GoforDell"
"DB6EA5DB.PowerMediaPlayerforDell"
#"DellInc.423703F9C7E0E" # Alienware OC Controls
#"DellInc.6066037A8FCF7" # Alienware Control Center
#"DellInc.AlienwareCommandCenter" # Alienware Command Center
#"DellInc.AlienwareFXAW*" # Alienware FX AWxx versions
#"DellInc.AlienwareFXAW21" # Alienware FX AW21
"DellInc.DellCustomerConnect" # Dell Customer Connect
"DellInc.DellDigitalDelivery" # Dell Digital Delivery
"DellInc.DellHelpSupport"
"DellInc.DellProductRegistration"
"DellInc.MyDell" # My Dell
# SAMSUNG Bloat # SAMSUNG Bloat
#"SAMSUNGELECTRONICSCO.LTD.SamsungSettings1.2" # Allow user to Tweak some hardware settings #"SAMSUNGELECTRONICSCO.LTD.SamsungSettings1.2" # Allow user to Tweak some hardware settings
"SAMSUNGELECTRONICSCO.LTD.1412377A9806A" "SAMSUNGELECTRONICSCO.LTD.1412377A9806A"
"SAMSUNGELECTRONICSCO.LTD.NewVoiceNote" "SAMSUNGELECTRONICSCO.LTD.NewVoiceNote"
"SAMSUNGELECTRONICSCoLtd.SamsungNotes" "SAMSUNGELECTRONICSCoLtd.SamsungNotes"
@ -115,43 +144,47 @@ function Remove-BloatwareAppsList() {
"SAMSUNGELECTRONICSCO.LTD.SamsungUpdate" "SAMSUNGELECTRONICSCO.LTD.SamsungUpdate"
"SAMSUNGELECTRONICSCO.LTD.SamsungSecurity1.2" "SAMSUNGELECTRONICSCO.LTD.SamsungSecurity1.2"
"SAMSUNGELECTRONICSCO.LTD.SamsungScreenRecording" "SAMSUNGELECTRONICSCO.LTD.SamsungScreenRecording"
#"SAMSUNGELECTRONICSCO.LTD.SamsungRecovery" # Used to Factory Reset #"SAMSUNGELECTRONICSCO.LTD.SamsungRecovery" # Used to Factory Reset
"SAMSUNGELECTRONICSCO.LTD.SamsungQuickSearch" "SAMSUNGELECTRONICSCO.LTD.SamsungQuickSearch"
"SAMSUNGELECTRONICSCO.LTD.SamsungPCCleaner" "SAMSUNGELECTRONICSCO.LTD.SamsungPCCleaner"
"SAMSUNGELECTRONICSCO.LTD.SamsungCloudBluetoothSync" "SAMSUNGELECTRONICSCO.LTD.SamsungCloudBluetoothSync"
"SAMSUNGELECTRONICSCO.LTD.PCGallery" "SAMSUNGELECTRONICSCO.LTD.PCGallery"
"SAMSUNGELECTRONICSCO.LTD.OnlineSupportSService" "SAMSUNGELECTRONICSCO.LTD.OnlineSupportSService"
"4AE8B7C2.BOOKING.COMPARTNERAPPSAMSUNGEDITION" "4AE8B7C2.BOOKING.COMPARTNERAPPSAMSUNGEDITION"
)
# <==========[ DIY ]==========> (Remove the # to Uninstall) $SocialMediaApps = @(
"5319275A.WhatsAppDesktop" # WhatsApp
# [DIY] Default apps i'll keep "BytedancePte.Ltd.TikTok" # TikTok
"FACEBOOK.317180B0BB486" # Messenger
#"Microsoft.FreshPaint" # Paint "FACEBOOK.FACEBOOK" # Facebook
#"Microsoft.MicrosoftEdge" # Microsoft Edge "Facebook.Instagram*" # Instagram / Beta
#"Microsoft.MicrosoftStickyNotes" # Sticky Notes "*Twitter*" # Twitter
#"Microsoft.WindowsCalculator" # Calculator "*Viber*"
#"Microsoft.WindowsCamera" # Camera )
#"Microsoft.ScreenSketch" # Snip and Sketch (now called Snipping tool, replaces the Win32 version in clean installs)
#"Microsoft.Windows.Photos" # Photos
# [DIY] Common Streaming services
#"SpotifyMusic" # Spotify
# [DIY] Can't be reinstalled
#"Microsoft.WindowsStore" # Windows Store
# Apps which cannot be removed using Remove-AppxPackage $StreamingServicesApps = @(
#"Microsoft.BioEnrollment" "AmazonVideo.PrimeVideo" # Amazon Prime Video
#"Microsoft.WindowsFeedback" # Feedback Module "*Hulu*"
#"Windows.ContactSupport" "*iHeartRadio*"
"*Netflix*" # Netflix
"*Plex*" # Plex
"*SlingTV*"
"SpotifyAB.SpotifyMusic" # Spotify
"*TuneInRadio*"
) )
Write-Title "Remove Bloatware Apps" Write-Title "Remove Windows unneeded Apps (Bloatware)"
Write-Section "Removing Windows unneeded Apps" Write-Section "Microsoft Apps"
Remove-UWPApp -AppxPackages $Apps Remove-UWPApp -AppxPackages $MSApps
Write-Section "3rd-party Apps"
Remove-UWPApp -AppxPackages $ThirdPartyApps
Write-Section "Manufacturer Apps"
Remove-UWPApp -AppxPackages $ManufacturerApps
Write-Section "Social Media Apps"
Remove-UWPApp -AppxPackages $SocialMediaApps
Write-Section "Streaming Services Apps"
Remove-UWPApp -AppxPackages $StreamingServicesApps
} }
# List all Packages: # List all Packages:
@ -161,4 +194,3 @@ function Remove-BloatwareAppsList() {
#Get-AppxProvisionedPackage -Online | Select-Object -Property DisplayName, Architecture, Version, PublisherId, InstallLocation, Region, ResourceId | Sort-Object PublisherId, DisplayName, Architecture | Format-Table #Get-AppxProvisionedPackage -Online | Select-Object -Property DisplayName, Architecture, Version, PublisherId, InstallLocation, Region, ResourceId | Sort-Object PublisherId, DisplayName, Architecture | Format-Table
Remove-BloatwareAppsList # Remove the main Bloat from Pre-installed Apps Remove-BloatwareAppsList # Remove the main Bloat from Pre-installed Apps

@ -10,13 +10,13 @@ function Remove-MSEdge() {
Write-Status -Types "@" -Status "Stopping all 'msedge' processes before uninstalling..." Write-Status -Types "@" -Status "Stopping all 'msedge' processes before uninstalling..."
Get-Process -Name msedge | Stop-Process -PassThru -Force Get-Process -Name msedge | Stop-Process -PassThru -Force
If ((Test-Path -Path "$env:SystemDrive\Program Files (x86)\Microsoft\Edge\Application") -or (Test-Path -Path "$env:SystemDrive\Program Files (x86)\Microsoft\EdgeWebView\Application")) { If (Test-Path -Path "$env:SystemDrive\Program Files (x86)\Microsoft\Edge\Application") {
ForEach ($FullName in (Get-ChildItem -Path "$env:SystemDrive\Program Files (x86)\Microsoft\Edge*\Application\*\Installer\setup.exe").FullName) { ForEach ($FullName in (Get-ChildItem -Path "$env:SystemDrive\Program Files (x86)\Microsoft\Edge*\Application\*\Installer\setup.exe").FullName) {
Write-Status -Types "@" -Status "Uninstalling MS Edge from $FullName..." Write-Status -Types "@" -Status "Uninstalling MS Edge from $FullName..."
Start-Process -FilePath $FullName -ArgumentList "--uninstall", "--msedgewebview", "--system-level", "--verbose-logging", "--force-uninstall" -Wait Start-Process -FilePath $FullName -ArgumentList "--uninstall", "--system-level", "--verbose-logging", "--force-uninstall" -Wait
} }
} Else { } Else {
Write-Status -Types "?" -Status "Edge/EdgeWebView folder does not exist anymore..." -Warning Write-Status -Types "?" -Status "Edge folder does not exist anymore..." -Warning
} }
If (Test-Path -Path "$env:SystemDrive\Program Files (x86)\Microsoft\EdgeCore") { If (Test-Path -Path "$env:SystemDrive\Program Files (x86)\Microsoft\EdgeCore") {
@ -28,7 +28,9 @@ function Remove-MSEdge() {
Write-Status -Types "?" -Status "EdgeCore folder does not exist anymore..." -Warning Write-Status -Types "?" -Status "EdgeCore folder does not exist anymore..." -Warning
} }
Remove-UWPApp -AppxPackages "Microsoft.MicrosoftEdge" Remove-UWPApp -AppxPackages @("Microsoft.MicrosoftEdge", "Microsoft.MicrosoftEdge.Stable", "Microsoft.MicrosoftEdge.*", "Microsoft.MicrosoftEdgeDevToolsClient")
Set-ScheduledTaskState -State Disabled -ScheduledTasks @("\MicrosoftEdgeUpdateTaskMachineCore", "\MicrosoftEdgeUpdateTaskMachineUA", "\MicrosoftEdgeUpdateTaskUser*")
Set-ServiceStartup -State 'Disabled' -Services @("edgeupdate", "edgeupdatem", "MicrosoftEdgeElevationService")
Write-Status -Types "@" -Status "Preventing Edge from reinstalling..." Write-Status -Types "@" -Status "Preventing Edge from reinstalling..."
Set-ItemPropertyVerified -Path "$PathToLMEdgeUpdate" -Name "DoNotUpdateToEdgeWithChromium" -Type DWord -Value 1 Set-ItemPropertyVerified -Path "$PathToLMEdgeUpdate" -Name "DoNotUpdateToEdgeWithChromium" -Type DWord -Value 1
@ -36,12 +38,15 @@ function Remove-MSEdge() {
Write-Status -Types "@" -Status "Deleting Edge appdata\local folders from current user..." Write-Status -Types "@" -Status "Deleting Edge appdata\local folders from current user..."
Remove-ItemVerified -Path "$env:LOCALAPPDATA\Packages\Microsoft.MicrosoftEdge*_*" -Recurse -Force | Out-Host Remove-ItemVerified -Path "$env:LOCALAPPDATA\Packages\Microsoft.MicrosoftEdge*_*" -Recurse -Force | Out-Host
Write-Status -Types "@" -Status "Deleting Edge from Program Files (x86)..." Write-Status -Types "@" -Status "Deleting Edge from $env:SystemDrive\Program Files (x86)\Microsoft\..."
Remove-ItemVerified -Path "$env:SystemDrive\Program Files (x86)\Microsoft\Edge*" -Recurse -Force | Out-Host Remove-ItemVerified -Path "$env:SystemDrive\Program Files (x86)\Microsoft\Edge" -Recurse -Force | Out-Host
# Remove-ItemVerified -Path "$env:SystemDrive\Program Files (x86)\Microsoft\EdgeCore" -Recurse -Force | Out-Host
Remove-ItemVerified -Path "$env:SystemDrive\Program Files (x86)\Microsoft\EdgeUpdate" -Recurse -Force | Out-Host
# Remove-ItemVerified -Path "$env:SystemDrive\Program Files (x86)\Microsoft\EdgeWebView" -Recurse -Force | Out-Host
Remove-ItemVerified -Path "$env:SystemDrive\Program Files (x86)\Microsoft\Temp" -Recurse -Force | Out-Host Remove-ItemVerified -Path "$env:SystemDrive\Program Files (x86)\Microsoft\Temp" -Recurse -Force | Out-Host
} }
$Ask = "Are you sure you want to remove Microsoft Edge from Windows?`nYou can reinstall it anytime.`nNote: all users logged in will remain." $Ask = "Are you sure you want to remove Microsoft Edge from Windows?`nWill uninstall WebView2 and thus break many PWA (Progressive Web App) applications`n(e.g., Snapchat, Instagram...)`n`nYou can reinstall Edge anytime.`nNote: all users logged in will remain."
switch (Show-Question -Title "Warning" -Message $Ask -BoxIcon "Warning") { switch (Show-Question -Title "Warning" -Message $Ask -BoxIcon "Warning") {
'Yes' { 'Yes' {

@ -17,9 +17,9 @@ function Remove-Xbox() {
) )
$XboxApps = @( $XboxApps = @(
"Microsoft.GamingApp" # Xbox
"Microsoft.GamingServices" # Gaming Services "Microsoft.GamingServices" # Gaming Services
"Microsoft.XboxApp" # Xbox Console Companion (Replaced by new App) "Microsoft.XboxApp" # Xbox Console Companion (Legacy App)
"Microsoft.GamingApp"
"Microsoft.XboxGameCallableUI" "Microsoft.XboxGameCallableUI"
"Microsoft.XboxGameOverlay" "Microsoft.XboxGameOverlay"
"Microsoft.XboxSpeechToTextOverlay" "Microsoft.XboxSpeechToTextOverlay"

@ -1,6 +1,6 @@
Import-Module -DisableNameChecking "$PSScriptRoot\..\..\lib\Manage-Software.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\..\lib\Title-Templates.psm1" Import-Module -DisableNameChecking "$PSScriptRoot\..\..\lib\Title-Templates.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\..\lib\debloat-helper\Remove-ItemVerified.psm1" Import-Module -DisableNameChecking "$PSScriptRoot\..\..\lib\debloat-helper\Remove-ItemVerified.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\..\lib\package-managers\Manage-Software.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\..\lib\ui\Select-Folder.psm1" Import-Module -DisableNameChecking "$PSScriptRoot\..\..\lib\ui\Select-Folder.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\..\lib\ui\Show-MessageDialog.psm1" Import-Module -DisableNameChecking "$PSScriptRoot\..\..\lib\ui\Show-MessageDialog.psm1"
@ -181,7 +181,7 @@ function Set-GPGKey() {
git config --global commit.gpgsign true git config --global commit.gpgsign true
Write-Host "Copy and Paste the lines below on your`nGithub/Gitlab > Settings > SSH and GPG Keys > New GPG Key" Write-Host "Copy and Paste the lines below on your`nGithub/Gitlab > Settings > SSH and GPG Keys > New GPG Key"
Get-Content "$GnuPGPath/$($GnuPGFileName)_public.gpg" Get-Content -Path "$GnuPGPath/$($GnuPGFileName)_public.gpg" -Encoding UTF8
} Else { } Else {
Write-Host "Failed to retrieve your key_id: $key_id" Write-Host "Failed to retrieve your key_id: $key_id"
} }

@ -1,10 +1,10 @@
Import-Module -DisableNameChecking "$PSScriptRoot\..\..\lib\Get-HardwareInfo.psm1" Import-Module -DisableNameChecking "$PSScriptRoot\..\..\lib\Get-HardwareInfo.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\..\lib\Manage-Software.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\..\lib\Request-FileDownload.psm1" Import-Module -DisableNameChecking "$PSScriptRoot\..\..\lib\Request-FileDownload.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\..\lib\Title-Templates.psm1" Import-Module -DisableNameChecking "$PSScriptRoot\..\..\lib\Title-Templates.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\..\lib\debloat-helper\Remove-ItemVerified.psm1" Import-Module -DisableNameChecking "$PSScriptRoot\..\..\lib\debloat-helper\Remove-ItemVerified.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\..\lib\debloat-helper\Set-ItemPropertyVerified.psm1" Import-Module -DisableNameChecking "$PSScriptRoot\..\..\lib\debloat-helper\Set-ItemPropertyVerified.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\..\lib\debloat-helper\Set-OptionalFeatureState.psm1" Import-Module -DisableNameChecking "$PSScriptRoot\..\..\lib\debloat-helper\Set-OptionalFeatureState.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\..\lib\package-managers\Manage-Software.psm1"
function Install-WSL() { function Install-WSL() {
[CmdletBinding()] param() [CmdletBinding()] param()

@ -1,13 +1,20 @@
Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\Get-HardwareInfo.psm1" Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\Get-HardwareInfo.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\Grant-RegistryPermission.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\Manage-Software.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\New-Shortcut.psm1" Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\New-Shortcut.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\Title-Templates.psm1" Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\Title-Templates.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\debloat-helper\Remove-ItemVerified.psm1" Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\debloat-helper\Remove-ItemVerified.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\debloat-helper\Set-CapabilityState.psm1" Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\debloat-helper\Set-CapabilityState.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\debloat-helper\Set-ItemPropertyVerified.psm1" Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\debloat-helper\Set-ItemPropertyVerified.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\debloat-helper\Set-OptionalFeatureState.psm1" Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\debloat-helper\Set-OptionalFeatureState.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\debloat-helper\Set-ScheduledTaskState.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\debloat-helper\Set-ServiceStartup.psm1" Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\debloat-helper\Set-ServiceStartup.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\package-managers\Manage-Software.psm1"
$MouseAccelerationCode = @'
[DllImport("user32.dll", EntryPoint = "SystemParametersInfo")]
public static extern bool SystemParametersInfo(uint uiAction, uint uiParam, int[] pvParam, uint fWinIni);
'@
Add-Type $MouseAccelerationCode -name Win32 -NameSpace System
$DesktopPath = [Environment]::GetFolderPath("Desktop"); $DesktopPath = [Environment]::GetFolderPath("Desktop");
$PathToLMPoliciesCloudContent = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent" $PathToLMPoliciesCloudContent = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent"
@ -20,6 +27,7 @@ $PathToCUClipboard = "HKCU:\Software\Microsoft\Clipboard"
$PathToCUOnlineSpeech = "HKCU:\SOFTWARE\Microsoft\Speech_OneCore\Settings\OnlineSpeechPrivacy" $PathToCUOnlineSpeech = "HKCU:\SOFTWARE\Microsoft\Speech_OneCore\Settings\OnlineSpeechPrivacy"
$PathToCUThemes = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize" $PathToCUThemes = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize"
$PathToCUXboxGameBar = "HKCU:\Software\Microsoft\GameBar" $PathToCUXboxGameBar = "HKCU:\Software\Microsoft\GameBar"
$PathToCUMouse = "HKCU:\Control Panel\Mouse"
function Disable-ActivityHistory() { function Disable-ActivityHistory() {
Write-Status -Types "-", "Privacy" -Status "Disabling Activity History..." Write-Status -Types "-", "Privacy" -Status "Disabling Activity History..."
@ -139,6 +147,22 @@ function Enable-EncryptedDNS() {
Set-DNSClientServerAddress -InterfaceAlias "Wi-Fi*" -ServerAddresses ("1.1.1.1", "8.8.8.8", "2606:4700:4700::1111", "2001:4860:4860::8888") Set-DNSClientServerAddress -InterfaceAlias "Wi-Fi*" -ServerAddresses ("1.1.1.1", "8.8.8.8", "2606:4700:4700::1111", "2001:4860:4860::8888")
} }
function Disable-FamilySafety() {
Set-ScheduledTaskState -State 'Disabled' -ScheduledTask @(
"\Microsoft\Windows\Shell\FamilySafetyMonitor",
"\Microsoft\Windows\Shell\FamilySafetyRefreshTask",
"\Microsoft\Windows\Shell\FamilySafetyUpload"
)
}
function Enable-FamilySafety() {
Set-ScheduledTaskState -State 'Enabled' -ScheduledTask @(
"\Microsoft\Windows\Shell\FamilySafetyMonitor",
"\Microsoft\Windows\Shell\FamilySafetyRefreshTask",
"\Microsoft\Windows\Shell\FamilySafetyUpload"
)
}
function Disable-FastShutdownShortcut() { function Disable-FastShutdownShortcut() {
Write-Status -Types "*" -Status "Removing the shortcut to shutdown the computer on the Desktop..." -Warning Write-Status -Types "*" -Status "Removing the shortcut to shutdown the computer on the Desktop..." -Warning
Remove-ItemVerified -Path "$DesktopPath\Fast Shutdown.lnk" Remove-ItemVerified -Path "$DesktopPath\Fast Shutdown.lnk"
@ -219,6 +243,14 @@ function Enable-Hibernate() {
powercfg -Hibernate -Type $Type | Out-Host powercfg -Hibernate -Type $Type | Out-Host
} }
function Disable-HyperV() {
Set-OptionalFeatureState -State 'Disabled' -OptionalFeatures @("Microsoft-Hyper-V-All")
}
function Enable-HyperV() {
Set-OptionalFeatureState -State 'Enabled' -OptionalFeatures @("Microsoft-Hyper-V-All")
}
function Disable-InternetExplorer() { function Disable-InternetExplorer() {
Set-OptionalFeatureState -State 'Disabled' -OptionalFeatures @("Internet-Explorer-Optional-*") Set-OptionalFeatureState -State 'Disabled' -OptionalFeatures @("Internet-Explorer-Optional-*")
} }
@ -227,17 +259,47 @@ function Enable-InternetExplorer() {
Set-OptionalFeatureState -State 'Enabled' -OptionalFeatures @("Internet-Explorer-Optional-*") Set-OptionalFeatureState -State 'Enabled' -OptionalFeatures @("Internet-Explorer-Optional-*")
} }
function Disable-LegacyContextMenu() {
Write-Status -Types "*", "Personal" -Status "Disabling legacy context menu on Windows 11 (requires reboot!)..."
Remove-Item -Path "HKCU:\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32"
}
function Enable-LegacyContextMenu() {
Write-Status -Types "+", "Personal" -Status "Enabling legacy context menu on Windows 11 (requires reboot!)..."
New-Item -Path "HKCU:\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" -Value "" -Force | Out-Null
}
# Adapted from: https://www.reddit.com/r/gaming/comments/qs0387/i_created_a_powershell_script_to_enabledisable/
function Disable-MouseAcceleration() {
Write-Status -Types "-", "Misc" -Status "Disabling Mouse Acceleration..."
$SysPvParam = @(0, 0, 0)
[System.Win32]::SystemParametersInfo(4, 0, $SysPvParam, 2)
Set-ItemPropertyVerified -Path "$PathToCUMouse" -Name "MouseSpeed" -Type String -Value $SysPvParam[0]
Set-ItemPropertyVerified -Path "$PathToCUMouse" -Name "MouseThreshold1" -Type String -Value $SysPvParam[1]
Set-ItemPropertyVerified -Path "$PathToCUMouse" -Name "MouseThreshold2" -Type String -Value $SysPvParam[2]
}
function Enable-MouseAcceleration() {
Write-Status -Types "*", "Misc" -Status "Enabling Mouse Acceleration..."
$SysPvParam = @(1, 6, 10)
[System.Win32]::SystemParametersInfo(4, 0, $SysPvParam, 2)
Set-ItemPropertyVerified -Path "$PathToCUMouse" -Name "MouseSpeed" -Type String -Value $SysPvParam[0]
Set-ItemPropertyVerified -Path "$PathToCUMouse" -Name "MouseThreshold1" -Type String -Value $SysPvParam[1]
Set-ItemPropertyVerified -Path "$PathToCUMouse" -Name "MouseThreshold2" -Type String -Value $SysPvParam[2]
}
# Code from: https://answers.microsoft.com/en-us/windows/forum/all/set-the-mouse-scroll-direction-to-reverse-natural/ede4ccc4-3846-4184-a86d-a028515040c0 # Code from: https://answers.microsoft.com/en-us/windows/forum/all/set-the-mouse-scroll-direction-to-reverse-natural/ede4ccc4-3846-4184-a86d-a028515040c0
function Disable-MouseNaturalScroll() { function Disable-MouseNaturalScroll() {
Get-PnpDevice -Class Mouse -PresentOnly -Status OK | ForEach-Object { Get-PnpDevice -Class Mouse -PresentOnly -Status OK | ForEach-Object {
Write-Status -Types "*" -Status "Disabling mouse natural mode on $($_.Name): $($_.DeviceID) (requires reboot!)" Write-Status -Types "*", "Misc" -Status "Disabling mouse natural mode on $($_.Name): $($_.DeviceID) (requires reboot!)"
Set-ItemPropertyVerified -Path "HKLM:\SYSTEM\CurrentControlSet\Enum\$($_.DeviceID)\Device Parameters" -Name "FlipFlopWheel" -Type DWord -Value 0 Set-ItemPropertyVerified -Path "HKLM:\SYSTEM\CurrentControlSet\Enum\$($_.DeviceID)\Device Parameters" -Name "FlipFlopWheel" -Type DWord -Value 0
} }
} }
function Enable-MouseNaturalScroll() { function Enable-MouseNaturalScroll() {
Get-PnpDevice -Class Mouse -PresentOnly -Status OK | ForEach-Object { Get-PnpDevice -Class Mouse -PresentOnly -Status OK | ForEach-Object {
Write-Status -Types "+" -Status "Enabling mouse natural mode on $($_.Name): $($_.DeviceID) (requires reboot!)" Write-Status -Types "+", "Misc" -Status "Enabling mouse natural mode on $($_.Name): $($_.DeviceID) (requires reboot!)"
Set-ItemPropertyVerified -Path "HKLM:\SYSTEM\CurrentControlSet\Enum\$($_.DeviceID)\Device Parameters" -Name "FlipFlopWheel" -Type DWord -Value 1 Set-ItemPropertyVerified -Path "HKLM:\SYSTEM\CurrentControlSet\Enum\$($_.DeviceID)\Device Parameters" -Name "FlipFlopWheel" -Type DWord -Value 1
} }
} }
@ -344,15 +406,23 @@ function Enable-WindowsMediaPlayer() {
Set-OptionalFeatureState -State 'Enabled' -OptionalFeatures @("MediaPlayback") Set-OptionalFeatureState -State 'Enabled' -OptionalFeatures @("MediaPlayback")
} }
function Disable-WSearchService() { function Disable-WindowsSandbox() {
Set-OptionalFeatureState -State 'Disabled' -OptionalFeatures @("Containers-DisposableClientVM")
}
function Enable-WindowsSandbox() {
Set-OptionalFeatureState -State 'Enabled' -OptionalFeatures @("Containers-DisposableClientVM")
}
function Disable-WindowsSearch() {
Write-Status -Types "-", "Service" -Status "Disabling Search Indexing (Recommended for HDDs)..." Write-Status -Types "-", "Service" -Status "Disabling Search Indexing (Recommended for HDDs)..."
Get-Service -Name "WSearch" -ErrorAction SilentlyContinue | Set-Service -StartupType Disabled Set-ServiceStartup -State 'Disabled' -Services "WSearch"
Stop-Service "WSearch" -Force -NoWait Stop-Service "WSearch" -Force -NoWait
} }
function Enable-WSearchService() { function Enable-WindowsSearch() {
Write-Status -Types "*", "Service" -Status "Enabling Search Indexing (Recommended for SSDs)..." Write-Status -Types "*", "Service" -Status "Enabling Search Indexing (Recommended for SSDs)..."
Get-Service -Name "WSearch" -ErrorAction SilentlyContinue | Set-Service -StartupType Automatic Set-ServiceStartup -State 'Automatic' -Services "WSearch"
Start-Service "WSearch" Start-Service "WSearch"
} }
@ -363,7 +433,6 @@ function Disable-XboxGameBarDVRandMode() {
Set-ItemPropertyVerified -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\GameDVR" -Name "AppCaptureEnabled" -Type DWord -Value 0 Set-ItemPropertyVerified -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\GameDVR" -Name "AppCaptureEnabled" -Type DWord -Value 0
Set-ItemPropertyVerified -Path "HKCU:\System\GameConfigStore" -Name "GameDVR_Enabled" -Type DWord -Value 0 Set-ItemPropertyVerified -Path "HKCU:\System\GameConfigStore" -Name "GameDVR_Enabled" -Type DWord -Value 0
Set-ItemPropertyVerified -Path "$PathToLMPoliciesGameDVR" -Name "AllowGameDVR" -Type DWord -Value 0 Set-ItemPropertyVerified -Path "$PathToLMPoliciesGameDVR" -Name "AllowGameDVR" -Type DWord -Value 0
Set-ServiceStartup -State 'Disabled' -Services "BcastDVRUserService*"
Write-Status -Types "-", "Performance" -Status "Enabling Game mode..." Write-Status -Types "-", "Performance" -Status "Enabling Game mode..."
Set-ItemPropertyVerified -Path "$PathToCUXboxGameBar" -Name "AutoGameModeEnabled" -Type DWord -Value 0 Set-ItemPropertyVerified -Path "$PathToCUXboxGameBar" -Name "AutoGameModeEnabled" -Type DWord -Value 0
@ -374,7 +443,6 @@ function Disable-XboxGameBarDVRandMode() {
Write-Status -Types "-", "Performance" -Status "Enabling Open Xbox Game Bar using Xbox button on Game Controller..." Write-Status -Types "-", "Performance" -Status "Enabling Open Xbox Game Bar using Xbox button on Game Controller..."
Set-ItemPropertyVerified -Path "$PathToCUXboxGameBar" -Name "UseNexusForGameBarEnabled" -Type DWord -Value 0 Set-ItemPropertyVerified -Path "$PathToCUXboxGameBar" -Name "UseNexusForGameBarEnabled" -Type DWord -Value 0
Grant-RegistryPermission -Key "HKLM:\SOFTWARE\Microsoft\WindowsRuntime\ActivatableClassId\Windows.Gaming.GameBar.PresenceServer.Internal.PresenceWriter"
Write-Status -Types "-", "Performance" -Status "Disabling GameBar Presence Writer..." Write-Status -Types "-", "Performance" -Status "Disabling GameBar Presence Writer..."
Set-ItemPropertyVerified -Path "HKLM:\SOFTWARE\Microsoft\WindowsRuntime\ActivatableClassId\Windows.Gaming.GameBar.PresenceServer.Internal.PresenceWriter" -Name "ActivationType" -Type DWord -Value 0 Set-ItemPropertyVerified -Path "HKLM:\SOFTWARE\Microsoft\WindowsRuntime\ActivatableClassId\Windows.Gaming.GameBar.PresenceServer.Internal.PresenceWriter" -Name "ActivationType" -Type DWord -Value 0
} }
@ -398,7 +466,6 @@ function Enable-XboxGameBarDVRandMode() {
Write-Status -Types "*", "Performance" -Status "Enabling Open Xbox Game Bar using Xbox button on Game Controller..." Write-Status -Types "*", "Performance" -Status "Enabling Open Xbox Game Bar using Xbox button on Game Controller..."
Set-ItemPropertyVerified -Path "$PathToCUXboxGameBar" -Name "UseNexusForGameBarEnabled" -Type DWord -Value 1 Set-ItemPropertyVerified -Path "$PathToCUXboxGameBar" -Name "UseNexusForGameBarEnabled" -Type DWord -Value 1
Grant-RegistryPermission -Key "HKLM:\SOFTWARE\Microsoft\WindowsRuntime\ActivatableClassId\Windows.Gaming.GameBar.PresenceServer.Internal.PresenceWriter"
Write-Status -Types "*", "Performance" -Status "Enabling GameBar Presence Writer..." Write-Status -Types "*", "Performance" -Status "Enabling GameBar Presence Writer..."
Set-ItemPropertyVerified -Path "HKLM:\SOFTWARE\Microsoft\WindowsRuntime\ActivatableClassId\Windows.Gaming.GameBar.PresenceServer.Internal.PresenceWriter" -Name "ActivationType" -Type DWord -Value 1 Set-ItemPropertyVerified -Path "HKLM:\SOFTWARE\Microsoft\WindowsRuntime\ActivatableClassId\Windows.Gaming.GameBar.PresenceServer.Internal.PresenceWriter" -Name "ActivationType" -Type DWord -Value 1
} }

@ -1,15 +1,10 @@
Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\Manage-Software.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\Title-Templates.psm1" Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\Title-Templates.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\debloat-helper\Set-ItemPropertyVerified.psm1" Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\debloat-helper\Set-ItemPropertyVerified.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\lib\package-managers\Manage-Software.psm1"
Import-Module -DisableNameChecking "$PSScriptRoot\..\utils\Individual-Tweaks.psm1" Import-Module -DisableNameChecking "$PSScriptRoot\..\utils\Individual-Tweaks.psm1"
$Script:TweakType = "App" $Script:TweakType = "App"
function Install-Cortana() {
$Apps = @("9NFFX4SZZ23L")
Install-Software -Name "Cortana" -Packages $Apps -PackageProvider 'MsStore'
}
function Install-DolbyAudio() { function Install-DolbyAudio() {
$Apps = @("9NJZD5S7QN99") $Apps = @("9NJZD5S7QN99")
Install-Software -Name "Dolby Audio" -Packages $Apps -PackageProvider 'MsStore' Install-Software -Name "Dolby Audio" -Packages $Apps -PackageProvider 'MsStore'

@ -0,0 +1,3 @@
Windows Registry Editor Version 5.00
[-HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.url\UserChoice]
Loading…
Cancel
Save