├── .gitattributes ├── .github ├── CODEOWNERS ├── CODE_OF_CONDUCT.md ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.yaml │ ├── config.yml │ └── feature_request.yaml ├── PULL_REQUEST_TEMPLATE.md ├── SECURITY.md ├── dependabot.yml ├── mkdocs.yml ├── release-drafter.yml ├── requirements.txt └── workflows │ ├── close-discussion-on-pr.yaml │ ├── close-old-issues.yaml │ ├── compile-check.yaml │ ├── github-pages.yaml │ ├── issue-slash-commands.yaml │ ├── pre-release.yaml │ ├── remove-winutil.yaml │ ├── sponsors.yaml │ └── unittests.yaml ├── .gitignore ├── Compile.ps1 ├── LICENSE ├── README.md ├── Test-WingetInstall.ps1 ├── config ├── applications.json ├── appnavigation.json ├── autounattend.xml ├── dns.json ├── feature.json ├── preset.json ├── themes.json └── tweaks.json ├── docs ├── CONTRIBUTING.md ├── KnownIssues.md ├── assets │ ├── Commit-GHD.png │ ├── Compile.png │ ├── Create-Branch.png │ ├── Discard-GHD.png │ ├── Fork-Button-Dark.png │ ├── Fork-Button-Light.png │ ├── Get-Installed-Dark.png │ ├── Get-Installed-Light.png │ ├── Install-Tab-Dark.png │ ├── Install-Tab-Light.png │ ├── MicroWinScreen.png │ ├── Microwin-Dark.png │ ├── Microwin-Light.png │ ├── Push-Commit.png │ ├── Screen.png │ ├── Settings-Export-Dark.png │ ├── Settings-Export-Light.png │ ├── Title-Screen.png │ ├── Tweaks-Tab-Dark.png │ ├── Tweaks-Tab-Light.png │ └── favicon.png ├── dev │ ├── features │ │ ├── Features │ │ │ ├── DisableLegacyRecovery.md │ │ │ ├── DisableSearchSuggestions.md │ │ │ ├── EnableLegacyRecovery.md │ │ │ ├── EnableSearchSuggestions.md │ │ │ ├── Install.md │ │ │ ├── RegBackup.md │ │ │ ├── Sandbox.md │ │ │ ├── dotnet.md │ │ │ ├── hyperv.md │ │ │ ├── legacymedia.md │ │ │ ├── nfs.md │ │ │ └── wsl.md │ │ ├── Fixes │ │ │ ├── Autologin.md │ │ │ ├── DISM.md │ │ │ ├── Network.md │ │ │ ├── RunAdobeCCCleanerTool.md │ │ │ ├── Update.md │ │ │ └── Winget.md │ │ └── Legacy-Windows-Panels │ │ │ ├── control.md │ │ │ ├── network.md │ │ │ ├── power.md │ │ │ ├── printer.md │ │ │ ├── region.md │ │ │ ├── sound.md │ │ │ ├── system.md │ │ │ └── user.md │ └── tweaks │ │ ├── Customize-Preferences │ │ ├── BingSearch.md │ │ ├── DarkMode.md │ │ ├── DetailedBSoD.md │ │ ├── HiddenFiles.md │ │ ├── MouseAcceleration.md │ │ ├── NumLock.md │ │ ├── ShowExt.md │ │ ├── SnapFlyout.md │ │ ├── SnapSuggestion.md │ │ ├── SnapWindow.md │ │ ├── StickyKeys.md │ │ ├── TaskView.md │ │ ├── TaskbarAlignment.md │ │ ├── TaskbarSearch.md │ │ ├── TaskbarWidgets.md │ │ └── VerboseLogon.md │ │ ├── Essential-Tweaks │ │ ├── AH.md │ │ ├── ConsumerFeatures.md │ │ ├── DVR.md │ │ ├── DeleteTempFiles.md │ │ ├── DisableRecall.md │ │ ├── DiskCleanup.md │ │ ├── EdgeDebloat.md │ │ ├── EndTaskOnTaskbar.md │ │ ├── Hiber.md │ │ ├── Home.md │ │ ├── IPv46.md │ │ ├── LaptopHibernation.md │ │ ├── Loc.md │ │ ├── Powershell7.md │ │ ├── Powershell7Tele.md │ │ ├── RestorePoint.md │ │ ├── Services.md │ │ ├── Storage.md │ │ ├── Tele.md │ │ └── Wifi.md │ │ ├── Performance-Plans │ │ ├── AddUltPerf.md │ │ └── RemoveUltPerf.md │ │ └── z--Advanced-Tweaks---CAUTION │ │ ├── BlockAdobeNet.md │ │ ├── DeBloat.md │ │ ├── DebloatAdobe.md │ │ ├── DisableBGapps.md │ │ ├── DisableFSO.md │ │ ├── DisableLMS1.md │ │ ├── DisableNotifications.md │ │ ├── Disableipsix.md │ │ ├── Display.md │ │ ├── OOSUbutton.md │ │ ├── RemoveCopilot.md │ │ ├── RemoveEdge.md │ │ ├── RemoveHomeGallery.md │ │ ├── RemoveOnedrive.md │ │ ├── RightClickMenu.md │ │ ├── Teredo.md │ │ ├── UTC.md │ │ ├── Undoall.md │ │ ├── button.md │ │ └── changedns.md ├── devdocs.md ├── faq.md ├── index.md ├── stylesheets │ └── extra.css └── userguide.md ├── functions ├── microwin │ ├── Invoke-Microwin.ps1 │ ├── Invoke-MicrowinGetIso.ps1 │ ├── Microwin-Classes.ps1 │ ├── Microwin-CopyToUSB.ps1 │ ├── Microwin-CopyVirtIO.ps1 │ ├── Microwin-GetLangFromCulture.ps1 │ ├── Microwin-GetLocalizedUsers.ps1 │ ├── Microwin-GetOscdimg.ps1 │ ├── Microwin-NewCheckInstall.ps1 │ ├── Microwin-NewFirstRun.ps1 │ ├── Microwin-NewUnattend.ps1 │ ├── Microwin-RemoveFeatures.ps1 │ ├── Microwin-RemoveFileOrDirectory.ps1 │ ├── Microwin-RemovePackages.ps1 │ ├── Microwin-RemoveProvisionedPackages.ps1 │ └── Microwin-TestCompatibleImage.ps1 ├── private │ ├── Add-SelectedAppsMenuItem.ps1 │ ├── Copy-Files.ps1 │ ├── Find-AppsByNameOrDescription.ps1 │ ├── Find-TweaksByNameOrDescription.ps1 │ ├── Get-LocalizedYesNo.ps1 │ ├── Get-WPFObjectName.ps1 │ ├── Get-WinUtilCheckBoxes.ps1 │ ├── Get-WinUtilInstallerProcess.ps1 │ ├── Get-WinUtilSelectedPackages.ps1 │ ├── Get-WinUtilToggleStatus.ps1 │ ├── Get-WinUtilVariables.ps1 │ ├── Initalize-InstallAppEntry.ps1 │ ├── Initialize-InstallAppArea.ps1 │ ├── Initialize-InstallCategoryAppList.ps1 │ ├── Install-WinUtilChoco.ps1 │ ├── Install-WinUtilProgramChoco.ps1 │ ├── Install-WinUtilProgramWinget.ps1 │ ├── Install-WinUtilWinget.ps1 │ ├── Invoke-WinUtilAssets.ps1 │ ├── Invoke-WinUtilCurrentSystem.ps1 │ ├── Invoke-WinUtilExplorerUpdate.ps1 │ ├── Invoke-WinUtilFeatureInstall.ps1 │ ├── Invoke-WinUtilGPU.ps1 │ ├── Invoke-WinUtilInstallPSProfile.ps1 │ ├── Invoke-WinUtilSSHServer.ps1 │ ├── Invoke-WinUtilScript.ps1 │ ├── Invoke-WinUtilSponsors.ps1 │ ├── Invoke-WinUtilTweaks.ps1 │ ├── Invoke-WinUtilUninstallPSProfile.ps1 │ ├── Invoke-WinutilThemeChange.ps1 │ ├── Remove-WinUtilAPPX.ps1 │ ├── Set-PackageManagerPreference.ps1 │ ├── Set-WinUtilDNS.ps1 │ ├── Set-WinUtilProgressbar.ps1 │ ├── Set-WinUtilRegistry.ps1 │ ├── Set-WinUtilScheduledTask.ps1 │ ├── Set-WinUtilService.ps1 │ ├── Set-WinUtilTaskbarItem.ps1 │ ├── Show-CustomDialog.ps1 │ ├── Test-WinUtilPackageManager.ps1 │ ├── Uninstall-WinUtilEdgeBrowser.ps1 │ └── Update-WinUtilProgramWinget.ps1 └── public │ ├── Initialize-WPFUI.ps1 │ ├── Invoke-ScratchDialog.ps1 │ ├── Invoke-WPFButton.ps1 │ ├── Invoke-WPFCloseButton.ps1 │ ├── Invoke-WPFControlPanel.ps1 │ ├── Invoke-WPFFeatureInstall.ps1 │ ├── Invoke-WPFFixesNetwork.ps1 │ ├── Invoke-WPFFixesUpdate.ps1 │ ├── Invoke-WPFFixesWinget.ps1 │ ├── Invoke-WPFGetInstalled.ps1 │ ├── Invoke-WPFImpex.ps1 │ ├── Invoke-WPFInstall.ps1 │ ├── Invoke-WPFInstallUpgrade.ps1 │ ├── Invoke-WPFOOSU.ps1 │ ├── Invoke-WPFPanelAutologin.ps1 │ ├── Invoke-WPFPopup.ps1 │ ├── Invoke-WPFPresets.ps1 │ ├── Invoke-WPFRunAdobeCCCleanerTool.ps1 │ ├── Invoke-WPFRunspace.ps1 │ ├── Invoke-WPFSSHServer.ps1 │ ├── Invoke-WPFSelectedAppsUpdate.ps1 │ ├── Invoke-WPFSystemRepair.ps1 │ ├── Invoke-WPFTab.ps1 │ ├── Invoke-WPFTweakPS7.ps1 │ ├── Invoke-WPFUIElements.ps1 │ ├── Invoke-WPFUltimatePerformance.ps1 │ ├── Invoke-WPFUnInstall.ps1 │ ├── Invoke-WPFUpdatesdefault.ps1 │ ├── Invoke-WPFUpdatesdisable.ps1 │ ├── Invoke-WPFUpdatessecurity.ps1 │ ├── Invoke-WPFtweaksbutton.ps1 │ ├── Invoke-WPFundoall.ps1 │ └── Show-CTTLogo.ps1 ├── lint └── PSScriptAnalyser.ps1 ├── overrides └── main.html ├── pester ├── configs.Tests.ps1 └── functions.Tests.ps1 ├── releases └── oscdimg.exe ├── scripts ├── main.ps1 └── start.ps1 ├── sign.bat ├── tools ├── Invoke-Preprocessing.ps1 └── devdocs-generator.ps1 ├── windev.ps1 └── xaml └── inputXML.xaml /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | 3 | *.ps1 text eol=crlf 4 | *.json text eol=crlf 5 | *.cfg text eol=crlf 6 | 7 | *.png binary 8 | *.jpg binary 9 | 10 | config/* diff 11 | config/applications.json diff 12 | *.json diff 13 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # This is a comment. 2 | # Each line is a file pattern followed by one or more owners. 3 | 4 | # These owners will be the default owners for everything in 5 | # the repo. Unless a later match takes precedence, 6 | # @global-owner1 and @global-owner2 will be requested for 7 | # review when someone opens a pull request. 8 | * @ChrisTitusTech 9 | 10 | # Order is important; the last matching pattern takes the most 11 | # precedence. When someone opens a pull request that only 12 | # modifies JS files, only @js-owner and not the global 13 | # owner(s) will be requested for a review. 14 | # *.js @js-owner #This is an inline comment. 15 | 16 | # You can also use email addresses if you prefer. They'll be 17 | # used to look up users just like we do for commit author 18 | # emails. 19 | # *.go docs@example.com 20 | 21 | # Teams can be specified as code owners as well. Teams should 22 | # be identified in the format @org/team-name. Teams must have 23 | # explicit write access to the repository. In this example, 24 | # the octocats team in the octo-org organization owns all .txt files. 25 | # *.txt @octo-org/octocats 26 | 27 | # In this example, @doctocat owns any files in the build/logs 28 | # directory at the root of the repository and any of its 29 | # subdirectories. 30 | # /build/logs/ @doctocat 31 | 32 | # The `docs/*` pattern will match files like 33 | # `docs/getting-started.md` but not further nested files like 34 | # `docs/build-app/troubleshooting.md`. 35 | # docs/* docs@example.com 36 | 37 | # In this example, @octocat owns any file in an apps directory 38 | # anywhere in your repository. 39 | # apps/ @octocat 40 | 41 | # In this example, @doctocat owns any file in the `/docs` 42 | # directory in the root of your repository and any of its 43 | # subdirectories. 44 | # /docs/ @doctocat 45 | 46 | # In this example, any change inside the `/scripts` directory 47 | # will require approval from @doctocat or @octocat. 48 | # /scripts/ @doctocat @octocat 49 | 50 | # In this example, @octocat owns any file in a `/logs` directory such as 51 | # `/build/logs`, `/scripts/logs`, and `/deeply/nested/logs`. Any changes 52 | # in a `/logs` directory will require approval from @octocat. 53 | # **/logs @octocat 54 | 55 | # In this example, @octocat owns any file in the `/apps` 56 | # directory in the root of your repository except for the `/apps/github` 57 | # subdirectory, as its owners are left empty. 58 | # /apps/ @octocat 59 | # /apps/github -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | custom: https://www.cttstore.com/windows-toolbox 2 | github: christitustech 3 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.yaml: -------------------------------------------------------------------------------- 1 | name: "Bug report" 2 | description: "Report a bug to help us identify and fix issues in the project." 3 | labels: ["bug"] 4 | 5 | body: 6 | - type: markdown 7 | attributes: 8 | value: | 9 | # 🐞 **Issue Report** 10 | Thank you for taking the time to report an issue! Please provide as much detail as possible to help us address the problem efficiently. 11 | 12 | ## ⚠️ **IMPORTANT** 13 | - 🛠️ **Supported environments only:** We only support Windows 11. Custom ISOs that are not made using Microwin are not supported. 14 | - 💡 For general questions, use the [Discussions section](https://github.com/Christitustech/winutil/discussions) or join our Community-driven [Discord Server](https://discord.gg/RUbZUZyByQ). 15 | 16 | - type: checkboxes 17 | attributes: 18 | label: ⚙️ Issue Checklist 19 | options: 20 | - label: I have read the guidelines. 21 | - label: I checked for duplicate issues. 22 | - label: I searched for existing discussions. 23 | - label: I checked for an existing pull request that addresses this issue. 24 | validations: 25 | required: true 26 | 27 | - type: input 28 | id: affected_part 29 | attributes: 30 | label: 📜 What part of Winutil are you having issues with? 31 | placeholder: "e.g., Microwin, Tweaks, etc." 32 | validations: 33 | required: true 34 | 35 | - type: textarea 36 | id: issue_description 37 | attributes: 38 | label: 📝 Provide a clear and concise description of the issue. 39 | validations: 40 | required: true 41 | 42 | - type: textarea 43 | id: steps_to_reproduce 44 | attributes: 45 | label: 🔄 Steps to reproduce the issue. 46 | placeholder: "e.g., Step 1: ..., Step 2: ..." 47 | validations: 48 | required: true 49 | 50 | - type: textarea 51 | id: error_output 52 | attributes: 53 | label: ❌ Paste the full error output (if available). 54 | placeholder: "Include any relevant logs or error messages." 55 | 56 | - type: textarea 57 | id: additional_context 58 | attributes: 59 | label: 🖼️ Additional context. 60 | placeholder: "Include screenshots, code blocks (use triple backticks ```), or any other relevant information." 61 | validations: 62 | required: false 63 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: 💻 Community Discord 4 | url: https://discord.gg/RUbZUZyByQ 5 | about: Join our Community Discord server to chat with other users in the Winutil community. 6 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.yaml: -------------------------------------------------------------------------------- 1 | name: "Feature request" 2 | description: "Suggest a new feature or improvement for the project." 3 | labels: ["enhancement"] 4 | 5 | body: 6 | - type: markdown 7 | attributes: 8 | value: | 9 | # ✨ **Feature request** 10 | Thank you for taking the time to suggest a feature! Please provide as much detail as possible to help us understand and evaluate your request. 11 | 12 | ## ⚠️ **IMPORTANT** 13 | - 🛠️ **Supported environments only:** We only support Windows 11. 14 | - 💡 For general questions, use the [Discussions section](https://github.com/Christitustech/winutil/discussions) or join our Community-driven [Discord Server](https://discord.gg/RUbZUZyByQ). 15 | 16 | - type: checkboxes 17 | attributes: 18 | label: ⚙️ Issue Checklist 19 | options: 20 | - label: I have read the guidelines. 21 | - label: I checked for duplicate issues. 22 | - label: I searched for existing discussions. 23 | - label: I checked for an existing pull request that addresses this request. 24 | validations: 25 | required: true 26 | 27 | - type: textarea 28 | id: problem_statement 29 | attributes: 30 | label: ❓ Is your feature request related to a problem? 31 | placeholder: "Provide a clear and concise description of the issue you're facing. Example: 'I'm always frustrated when [...]'" 32 | validations: 33 | required: false 34 | 35 | - type: textarea 36 | id: proposed_solution 37 | attributes: 38 | label: 💡 Describe the solution you'd like 39 | placeholder: "Provide a clear and concise description of what you want to happen." 40 | validations: 41 | required: true 42 | 43 | - type: textarea 44 | id: alternatives 45 | attributes: 46 | label: 🔄 Describe alternatives you've considered 47 | placeholder: "Provide details on any alternative solutions or features you've thought about." 48 | validations: 49 | required: false 50 | 51 | - type: textarea 52 | id: additional_context 53 | attributes: 54 | label: 🖼️ Additional context 55 | placeholder: "Include screenshots, code blocks (use triple backticks ```), or any other relevant information." 56 | validations: 57 | required: false 58 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## Type of Change 4 | - [ ] New feature 5 | - [ ] Bug fix 6 | - [ ] Documentation update 7 | - [ ] Refactoring 8 | - [ ] Hotfix 9 | - [ ] Security patch 10 | - [ ] UI/UX improvement 11 | 12 | ## Description 13 | 14 | 15 | ## Testing 16 | 17 | 18 | ## Impact 19 | 20 | 21 | ## Issue related to PR 22 | 23 | - Resolves # 24 | 25 | ## Additional Information 26 | 27 | 28 | ## Checklist 29 | - [ ] My code adheres to the coding and style guidelines of the project. 30 | - [ ] I have performed a self-review of my own code. 31 | - [ ] I have commented my code, particularly in hard-to-understand areas. 32 | - [ ] I have made corresponding changes to the documentation. 33 | - [ ] My changes generate no errors/warnings/merge conflicts. 34 | -------------------------------------------------------------------------------- /.github/SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | If you find a security issue please make post it in the issues tab. If you think it should be private you can email me at contact@christitus.com. 4 | 5 | For immediate response check out our discord server @ [![](https://dcbadge.limes.pink/api/server/https://discord.gg/RUbZUZyByQ?theme=default-inverted&style=for-the-badge)](https://discord.gg/RUbZUZyByQ) 6 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "github-actions" 4 | directory: "/" 5 | schedule: 6 | interval: "weekly" 7 | ignore: 8 | - dependency-name: "actions/stale" 9 | versions: '>= 9' 10 | -------------------------------------------------------------------------------- /.github/mkdocs.yml: -------------------------------------------------------------------------------- 1 | site_name: WinUtil Documentation 2 | docs_dir: '../docs' 3 | repo_url: https://github.com/ChrisTitusTech/winutil 4 | 5 | nav: 6 | - Introduction: 'index.md' 7 | - User Guide: 'userguide.md' 8 | - Contributing Guide: 'CONTRIBUTING.md' 9 | - Documentation: 10 | - Dev Docs: 'devdocs.md' 11 | - Known Issues: 'KnownIssues.md' 12 | - FAQ: 'faq.md' 13 | 14 | not_in_nav: | 15 | dev/ 16 | 17 | theme: 18 | name: material 19 | custom_dir: '../overrides' 20 | features: 21 | - navigation.tabs 22 | - navigation.sections 23 | - toc.integrate 24 | - navigation.top 25 | - search.suggest 26 | - search.highlight 27 | - content.tabs.link 28 | - content.code.annotation 29 | - content.code.copy 30 | language: en 31 | logo: assets/favicon.png 32 | favicon: assets/favicon.png 33 | palette: 34 | # Palette toggle for automatic mode 35 | - media: "(prefers-color-scheme)" 36 | toggle: 37 | icon: material/brightness-auto 38 | name: Switch to light mode 39 | 40 | # Palette toggle for light mode 41 | - media: "(prefers-color-scheme: light)" 42 | scheme: default 43 | accent: blue 44 | toggle: 45 | icon: material/brightness-7 46 | name: Switch to dark mode 47 | 48 | # Palette toggle for dark mode 49 | - media: "(prefers-color-scheme: dark)" 50 | scheme: slate 51 | primary: black 52 | accent: blue 53 | toggle: 54 | icon: material/weather-night 55 | name: Switch to light mode 56 | markdown_extensions: 57 | - admonition 58 | - pymdownx.details 59 | - pymdownx.superfences 60 | - pymdownx.superfences: 61 | custom_fences: 62 | - name: mermaid 63 | class: mermaid 64 | format: !!python/name:pymdownx.superfences.fence_code_format 65 | - abbr 66 | - attr_list 67 | - pymdownx.snippets 68 | - md_in_html 69 | - pymdownx.superfences 70 | - pymdownx.tabbed: 71 | alternate_style: true 72 | - pymdownx.highlight: 73 | anchor_linenums: true 74 | line_spans: __span 75 | pygments_lang_class: true 76 | - pymdownx.inlinehilite 77 | - def_list 78 | - pymdownx.tasklist: 79 | custom_checkbox: true 80 | - toc: 81 | permalink: true 82 | 83 | plugins: 84 | - search 85 | - awesome-pages 86 | - git-revision-date-localized 87 | - minify: 88 | minify_html: true 89 | htmlmin_opts: 90 | remove_comments: true 91 | cache_safe: true 92 | -------------------------------------------------------------------------------- /.github/release-drafter.yml: -------------------------------------------------------------------------------- 1 | tag-prefix: '' 2 | categories: 3 | - title: '🚀 Features' 4 | labels: 5 | - 'feature' 6 | - 'enhancement' 7 | - title: '🐛 Bug Fixes' 8 | labels: 9 | - 'fix' 10 | - 'bugfix' 11 | - 'bug' 12 | - title: '📚 Documentation' 13 | label: 'documentation' 14 | - title: '🔒 Security' 15 | label: 'security' 16 | change-template: '- $TITLE @$AUTHOR (#$NUMBER)' 17 | template: | 18 | ## Changes 19 | 20 | $CHANGES 21 | 22 | change-title-escapes: '\<*_&"''' 23 | autolabeler: 24 | - label: 'documentation' 25 | files: 26 | - '*.md' 27 | branch: 28 | - '/docs{0,1}\/.+/' 29 | - label: 'bug' 30 | branch: 31 | - '/fix\/.+/' 32 | title: 33 | - '/fix/i' 34 | - label: 'enhancement' 35 | branch: 36 | - '/feature\/.+/' 37 | body: 38 | - '/[A-Z]+-[0-9]+/' 39 | - label: 'documentation' 40 | files: 41 | - '**/*.md' 42 | - 'docs/**/*' 43 | - label: 'security' 44 | branch: 45 | - '/security\/.+/' 46 | replacers: 47 | - search: /"/g 48 | replace: '' 49 | - search: /'/g 50 | replace: '' 51 | exclude-labels: 52 | - 'skip-changelog' 53 | 54 | filter-by-commitish: true 55 | -------------------------------------------------------------------------------- /.github/requirements.txt: -------------------------------------------------------------------------------- 1 | Babel==2.15.0 2 | bracex==2.5 3 | cairocffi==1.7.1 4 | CairoSVG==2.7.1 5 | certifi==2024.7.4 6 | cffi==1.17.0 7 | charset-normalizer==3.3.2 8 | click==8.1.7 9 | colorama==0.4.6 10 | csscompressor==0.9.5 11 | cssselect2==0.7.0 12 | defusedxml==0.7.1 13 | ghp-import==2.1.0 14 | gitdb==4.0.11 15 | GitPython==3.1.43 16 | htmlmin2==0.1.13 17 | idna==3.7 18 | Jinja2==3.1.5 19 | jsmin==3.0.1 20 | Markdown==3.6 21 | MarkupSafe==2.1.5 22 | mergedeep==1.3.4 23 | mkdocs==1.6.0 24 | mkdocs-awesome-pages-plugin==2.9.3 25 | mkdocs-get-deps==0.2.0 26 | mkdocs-git-revision-date-localized-plugin==1.2.6 27 | mkdocs-material==9.5.31 28 | mkdocs-material-extensions==1.3.1 29 | mkdocs-minify-plugin==0.8.0 30 | natsort==8.4.0 31 | packaging==24.1 32 | paginate==0.5.6 33 | pathspec==0.12.1 34 | pillow==10.4.0 35 | platformdirs==4.2.2 36 | pycparser==2.22 37 | Pygments==2.18.0 38 | pymdown-extensions==10.9 39 | python-dateutil==2.9.0.post0 40 | pytz==2024.1 41 | PyYAML==6.0.2 42 | pyyaml_env_tag==0.1 43 | regex==2024.7.24 44 | requests==2.32.3 45 | six==1.16.0 46 | smmap==5.0.1 47 | tinycss2==1.3.0 48 | urllib3==2.2.2 49 | watchdog==4.0.1 50 | wcmatch==9.0 51 | webencodings==0.5.1 52 | -------------------------------------------------------------------------------- /.github/workflows/close-discussion-on-pr.yaml: -------------------------------------------------------------------------------- 1 | name: Close Discussion on PR Merge 2 | 3 | on: 4 | pull_request: 5 | types: [closed] 6 | 7 | jobs: 8 | closeDiscussion: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - name: Checkout repository 12 | uses: actions/checkout@v4 13 | 14 | - name: Check if PR was merged 15 | if: github.event.pull_request.merged == true 16 | run: echo "PR was merged" 17 | 18 | - name: Extract Discussion Number & Close If any Were Found 19 | env: 20 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 21 | if: github.event.pull_request.merged == true 22 | id: extract-discussion 23 | run: | 24 | pr_body="${{ github.event.pull_request.body }}" 25 | discussion_ids=$(echo "$pr_body" | grep -oP '(?i)(resolve|fix|close)[s|d]? #\K[0-9]+') 26 | 27 | if [ -z "$discussion_ids" ]; then 28 | echo "No discussion IDs found." 29 | exit 0 30 | fi 31 | 32 | for discussion_id in $discussion_ids; do 33 | echo "Attempting to close discussion #$discussion_id" 34 | response=$(curl -s -X PATCH -H "Authorization: token $GITHUB_TOKEN" \ 35 | -H "Accept: application/vnd.github.v3+json" \ 36 | -d '{"state": "closed"}' \ 37 | "https://api.github.com/repos/${{ github.repository }}/discussions/$discussion_id") 38 | 39 | if echo "$response" | jq -e '.id' > /dev/null; then 40 | echo "Successfully closed discussion #$discussion_id" 41 | else 42 | error_message=$(echo "$response" | jq -r '.message // "Unknown error"') 43 | echo "Warning: Failed to close discussion #$discussion_id. Error: $error_message" 44 | echo "Full response: $response" 45 | fi 46 | done 47 | shell: bash 48 | continue-on-error: true 49 | -------------------------------------------------------------------------------- /.github/workflows/close-old-issues.yaml: -------------------------------------------------------------------------------- 1 | name: Close Inactive Issues 2 | 3 | on: 4 | schedule: 5 | - cron: '0 0 * * *' # Run daily 6 | workflow_dispatch: # This line enables manual triggering 7 | 8 | jobs: 9 | close-issues: 10 | runs-on: ubuntu-latest 11 | permissions: 12 | issues: write # Ensure necessary permissions for issues 13 | pull-requests: none 14 | contents: none 15 | steps: 16 | - name: Close inactive issues 17 | uses: actions/stale@v8 18 | with: 19 | # A list of labels to reference when looking through issues, 20 | # and only when one (or even more) of these labels are found.. 21 | # then skip this issue, and never try to stale and/or close it. 22 | exempt-issue-labels: "Keep Issue Open" 23 | # Split it into two weeks, after one week the issue will be marked as stale, 24 | # after another week have pasted without any update.. the issue will then be closed. 25 | days-before-issue-stale: 90 26 | days-before-issue-close: 365 27 | # NEVER mark PRs as Stale or Close + this workflow should never have write permissions on PRs, EVER! 28 | days-before-pr-stale: -1 29 | days-before-pr-close: -1 30 | # Sends a message for both the Stale and Close events of an issue. 31 | stale-issue-message: "This issue was marked as stale due to inactivity." 32 | close-issue-message: "This issue was closed after remaining stale without updates." 33 | # Increase this value if the project receives a lot of 34 | # PRs (yes.. apparently they're processed no matter what) & Issues. 35 | # Default value for it (according to the docs) is 30 36 | operations-per-run: 200 37 | # Make this field equal true if you want to test your configuration if it works correctly or not 38 | debug-only: false 39 | repo-token: ${{ secrets.GITHUB_TOKEN }} 40 | -------------------------------------------------------------------------------- /.github/workflows/compile-check.yaml: -------------------------------------------------------------------------------- 1 | name: Compile & Check 2 | 3 | on: 4 | push: 5 | branches: ["main"] 6 | pull_request: 7 | branches: ["main"] 8 | workflow_dispatch: # Manual trigger added 9 | workflow_call: # Allow other Actions to call this workflow 10 | 11 | jobs: 12 | Compile-and-Check: 13 | runs-on: windows-latest 14 | steps: 15 | - name: Checkout Sources 16 | uses: actions/checkout@v4 17 | 18 | - name: Compile and Syntaxcheck winutil.ps1 19 | shell: pwsh 20 | run: | 21 | Set-ExecutionPolicy Bypass -Scope Process -Force; ./Compile.ps1 22 | continue-on-error: false # Directly fail the job on error, removing the need for a separate check 23 | -------------------------------------------------------------------------------- /.github/workflows/github-pages.yaml: -------------------------------------------------------------------------------- 1 | name: GitHub Pages Deploy 2 | 3 | on: 4 | push: 5 | paths: 6 | - '.github/mkdocs.yml' 7 | - '.github/requirements.txt' 8 | - 'docs/**' 9 | - 'overrides/**' 10 | - '.github/CONTRIBUTING.md' 11 | workflow_dispatch: 12 | 13 | jobs: 14 | build-and-deploy: 15 | runs-on: ubuntu-latest 16 | 17 | steps: 18 | - name: Checkout Repository 19 | uses: actions/checkout@v4 20 | with: 21 | fetch-depth: '0' # Fetch all commit history for all branches as well as tags. 22 | 23 | - name: Setup Python 24 | uses: actions/setup-python@v5 25 | with: 26 | python-version: 3.x # Install latest Stable release of Python 3 27 | cache: 'pip' # Caching pip dependencies 28 | 29 | - name: Install Necessary Dependencies 30 | run: pip install -r .github/requirements.txt 31 | 32 | - name: Build & Deploy using mkdocs 33 | run: mkdocs gh-deploy --force -f .github/mkdocs.yml 34 | -------------------------------------------------------------------------------- /.github/workflows/remove-winutil.yaml: -------------------------------------------------------------------------------- 1 | name: Remove winutil.ps1 if included in a Push 2 | 3 | on: 4 | push: 5 | branches: 6 | - '**' 7 | 8 | jobs: 9 | check-and-delete-file: 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | - name: Checkout code 14 | uses: actions/checkout@v4 15 | 16 | - name: Check if winutil.ps1 exists 17 | id: check_existence 18 | run: | 19 | if [ -f "winutil.ps1" ]; then 20 | echo "winutil_exists=true" >> $GITHUB_OUTPUT 21 | else 22 | echo "winutil_exists=false" >> $GITHUB_OUTPUT 23 | fi 24 | 25 | - name: Delete winutil.ps1 if it exists 26 | if: steps.check_existence.outputs.winutil_exists == 'true' 27 | run: | 28 | git config --global user.email "winutil-action@noreply.github.com" 29 | git config --global user.name "winutil-action" 30 | git rm winutil.ps1 31 | git commit -m "Delete winutil.ps1 as it is not allowed" 32 | git push origin HEAD:${{ github.ref }} 33 | env: 34 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 35 | -------------------------------------------------------------------------------- /.github/workflows/sponsors.yaml: -------------------------------------------------------------------------------- 1 | name: Generate Sponsors README 2 | on: 3 | workflow_dispatch: 4 | schedule: 5 | - cron: 30 15 * * 0-6 6 | permissions: 7 | contents: write 8 | jobs: 9 | deploy: 10 | runs-on: ubuntu-latest 11 | if: (github.event_name == 'schedule' && github.repository == 'ChrisTitusTech/winutil') || (github.event_name != 'schedule') 12 | steps: 13 | - name: Checkout 🛎️ 14 | uses: actions/checkout@v4 15 | 16 | - name: Generate Sponsors 💖 17 | uses: JamesIves/github-sponsors-readme-action@v1 18 | with: 19 | token: ${{ secrets.PAT }} 20 | file: 'README.md' 21 | 22 | - name: Deploy to GitHub Pages 🚀 23 | uses: JamesIves/github-pages-deploy-action@v4 24 | with: 25 | branch: main 26 | folder: '.' 27 | -------------------------------------------------------------------------------- /.github/workflows/unittests.yaml: -------------------------------------------------------------------------------- 1 | name: Unit Tests 2 | 3 | on: 4 | push: 5 | 6 | jobs: 7 | lint: 8 | name: PS Script Analyzer 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@v4 12 | - name: lint 13 | uses: devblackops/github-action-psscriptanalyzer@master 14 | with: 15 | sendComment: false 16 | settingsPath: lint/PSScriptAnalyser.ps1 17 | failOnErrors: false 18 | failOnWarnings: false 19 | failOnInfos: false 20 | test: 21 | runs-on: windows-latest 22 | 23 | steps: 24 | - name: Checkout code 25 | uses: actions/checkout@v4 26 | 27 | - name: Install Pester 28 | run: | 29 | Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process 30 | Install-Module -Name Pester -Force -SkipPublisherCheck -AllowClobber 31 | shell: pwsh 32 | 33 | - name: Run Pester tests 34 | run: | 35 | Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process 36 | Invoke-Pester -Path 'pester/*.Tests.ps1' -Output Detailed 37 | 38 | shell: pwsh 39 | env: 40 | TEMP: ${{ runner.temp }} 41 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ### VSCode ### 2 | 3 | # Configuration folder 4 | .vscode/ 5 | .idea/ 6 | 7 | ### Visual Studio ### 8 | 9 | # Visual Studio user-specific files 10 | .vs/ 11 | 12 | winutil.pdb 13 | 14 | ### Preprocessor Hashes ### 15 | .preprocessor_hashes.json 16 | 17 | ### Windows ### 18 | 19 | # Folder config file 20 | [Dd]esktop.ini 21 | 22 | # Ignore Generated XAML Files 23 | xaml/inputApp.xaml 24 | xaml/inputFeatures.xaml 25 | xaml/inputTweaks.xaml 26 | 27 | # Executables and Configs 28 | winget.msixbundle 29 | pester.ps1 30 | *.psd* 31 | ooshutup10.cfg 32 | winutil.exe.config 33 | Microsoft.UI.Xaml* 34 | license1.xml 35 | winutil.ps1 36 | 37 | # Libraries 38 | System.Management.Automation.dll 39 | Microsoft.PowerShell.ConsoleHost.dll 40 | 41 | # Compressed files 42 | *.zip 43 | 44 | ### MacOS ### 45 | 46 | # General 47 | .DS_Store 48 | microwin.log 49 | True 50 | test.ps1 51 | winutil.ps1 52 | 53 | # temporary excludes for docs 54 | .github/site/ 55 | 56 | binary/ 57 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 CT Tech Group LLC 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Test-WingetInstall.ps1: -------------------------------------------------------------------------------- 1 | # Import the function (adjust the path according to your setup) 2 | . "./functions/private/Install-WinUtilWinget.ps1" 3 | . "./functions/private/Test-WinUtilPackageManager.ps1" 4 | 5 | # Set up Information stream to be visible 6 | $InformationPreference = "Continue" 7 | 8 | Write-Host "Starting Winget installation test..." -ForegroundColor Cyan 9 | 10 | try { 11 | Install-WinUtilWinget 12 | } catch { 13 | Write-Host "Error occurred during testing: $($_.Exception.Message)" -ForegroundColor Red 14 | Write-Host "Stack Trace:" -ForegroundColor Red 15 | $_.ScriptStackTrace 16 | } 17 | -------------------------------------------------------------------------------- /config/appnavigation.json: -------------------------------------------------------------------------------- 1 | { 2 | "WPFInstall": { 3 | "Content": "Install/Upgrade Applications", 4 | "Category": "____Actions", 5 | "Type": "Button", 6 | "Order": "1", 7 | "Description": "Install or upgrade the selected applications" 8 | }, 9 | "WPFUninstall": { 10 | "Content": "Uninstall Applications", 11 | "Category": "____Actions", 12 | "Type": "Button", 13 | "Order": "2", 14 | "Description": "Uninstall the selected applications" 15 | }, 16 | "WPFInstallUpgrade": { 17 | "Content": "Upgrade all Applications", 18 | "Category": "____Actions", 19 | "Type": "Button", 20 | "Order": "3", 21 | "Description": "Upgrade all applications to the latest version" 22 | }, 23 | "WingetRadioButton": { 24 | "Content": "Winget", 25 | "Category": "__Package Manager", 26 | "Type": "RadioButton", 27 | "GroupName": "PackageManagerGroup", 28 | "Checked": true, 29 | "Order": "1", 30 | "Description": "Use Winget for package management" 31 | }, 32 | "ChocoRadioButton": { 33 | "Content": "Chocolatey", 34 | "Category": "__Package Manager", 35 | "Type": "RadioButton", 36 | "GroupName": "PackageManagerGroup", 37 | "Checked": false, 38 | "Order": "2", 39 | "Description": "Use Chocolatey for package management" 40 | }, 41 | "WPFClearInstallSelection": { 42 | "Content": "Clear Selection", 43 | "Category": "__Selection", 44 | "Type": "Button", 45 | "Order": "1", 46 | "Description": "Clear the selection of applications" 47 | }, 48 | "WPFGetInstalled": { 49 | "Content": "Get Installed", 50 | "Category": "__Selection", 51 | "Type": "Button", 52 | "Order": "2", 53 | "Description": "Show installed applications" 54 | }, 55 | "WPFselectedAppsButton": { 56 | "Content": "Selected Apps: 0", 57 | "Category": "__Selection", 58 | "Type": "Button", 59 | "Order": "3", 60 | "Description": "Show the selected applications" 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /config/dns.json: -------------------------------------------------------------------------------- 1 | { 2 | "Google":{ 3 | "Primary": "8.8.8.8", 4 | "Secondary": "8.8.4.4", 5 | "Primary6": "2001:4860:4860::8888", 6 | "Secondary6": "2001:4860:4860::8844" 7 | }, 8 | "Cloudflare":{ 9 | "Primary": "1.1.1.1", 10 | "Secondary": "1.0.0.1", 11 | "Primary6": "2606:4700:4700::1111", 12 | "Secondary6": "2606:4700:4700::1001" 13 | }, 14 | "Cloudflare_Malware":{ 15 | "Primary": "1.1.1.2", 16 | "Secondary": "1.0.0.2", 17 | "Primary6": "2606:4700:4700::1112", 18 | "Secondary6": "2606:4700:4700::1002" 19 | }, 20 | "Cloudflare_Malware_Adult":{ 21 | "Primary": "1.1.1.3", 22 | "Secondary": "1.0.0.3", 23 | "Primary6": "2606:4700:4700::1113", 24 | "Secondary6": "2606:4700:4700::1003" 25 | }, 26 | "Open_DNS":{ 27 | "Primary": "208.67.222.222", 28 | "Secondary": "208.67.220.220", 29 | "Primary6": "2620:119:35::35", 30 | "Secondary6": "2620:119:53::53" 31 | }, 32 | "Quad9":{ 33 | "Primary": "9.9.9.9", 34 | "Secondary": "149.112.112.112", 35 | "Primary6": "2620:fe::fe", 36 | "Secondary6": "2620:fe::9" 37 | }, 38 | "AdGuard_Ads_Trackers":{ 39 | "Primary": "94.140.14.14", 40 | "Secondary": "94.140.15.15", 41 | "Primary6": "2a10:50c0::ad1:ff", 42 | "Secondary6": "2a10:50c0::ad2:ff" 43 | }, 44 | "AdGuard_Ads_Trackers_Malware_Adult":{ 45 | "Primary": "94.140.14.15", 46 | "Secondary": "94.140.15.16", 47 | "Primary6": "2a10:50c0::bad1:ff", 48 | "Secondary6": "2a10:50c0::bad2:ff" 49 | }, 50 | "dns0.eu_Open":{ 51 | "Primary": "193.110.81.254", 52 | "Secondary": "185.253.5.254", 53 | "Primary6": "2a0f:fc80::ffff", 54 | "Secondary6": "2a0f:fc81::ffff" 55 | }, 56 | "dns0.eu_ZERO":{ 57 | "Primary": "193.110.81.9", 58 | "Secondary": "185.253.5.9", 59 | "Primary6": "2a0f:fc80::9", 60 | "Secondary6": "2a0f:fc81::9" 61 | }, 62 | "dns0.eu_KIDS":{ 63 | "Primary": "193.110.81.1", 64 | "Secondary": "185.253.5.1", 65 | "Primary6": "2a0f:fc80::1", 66 | "Secondary6": "2a0f:fc81::1" 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /config/preset.json: -------------------------------------------------------------------------------- 1 | { 2 | "Standard": [ 3 | "WPFTweaksAH", 4 | "WPFTweaksConsumerFeatures", 5 | "WPFTweaksDisableExplorerAutoDiscovery", 6 | "WPFTweaksDVR", 7 | "WPFTweaksHiber", 8 | "WPFTweaksHome", 9 | "WPFTweaksLoc", 10 | "WPFTweaksServices", 11 | "WPFTweaksStorage", 12 | "WPFTweaksTele", 13 | "WPFTweaksWifi", 14 | "WPFTweaksDiskCleanup", 15 | "WPFTweaksDeleteTempFiles", 16 | "WPFTweaksEndTaskOnTaskbar", 17 | "WPFTweaksRestorePoint", 18 | "WPFTweaksPowershell7Tele" 19 | ], 20 | "Minimal": [ 21 | "WPFTweaksConsumerFeatures", 22 | "WPFTweaksDisableExplorerAutoDiscovery", 23 | "WPFTweaksHome", 24 | "WPFTweaksServices", 25 | "WPFTweaksTele" 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /docs/assets/Commit-GHD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisTitusTech/winutil/efb9e5bde6b333dfae15b157aafac5fed1fa1230/docs/assets/Commit-GHD.png -------------------------------------------------------------------------------- /docs/assets/Compile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisTitusTech/winutil/efb9e5bde6b333dfae15b157aafac5fed1fa1230/docs/assets/Compile.png -------------------------------------------------------------------------------- /docs/assets/Create-Branch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisTitusTech/winutil/efb9e5bde6b333dfae15b157aafac5fed1fa1230/docs/assets/Create-Branch.png -------------------------------------------------------------------------------- /docs/assets/Discard-GHD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisTitusTech/winutil/efb9e5bde6b333dfae15b157aafac5fed1fa1230/docs/assets/Discard-GHD.png -------------------------------------------------------------------------------- /docs/assets/Fork-Button-Dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisTitusTech/winutil/efb9e5bde6b333dfae15b157aafac5fed1fa1230/docs/assets/Fork-Button-Dark.png -------------------------------------------------------------------------------- /docs/assets/Fork-Button-Light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisTitusTech/winutil/efb9e5bde6b333dfae15b157aafac5fed1fa1230/docs/assets/Fork-Button-Light.png -------------------------------------------------------------------------------- /docs/assets/Get-Installed-Dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisTitusTech/winutil/efb9e5bde6b333dfae15b157aafac5fed1fa1230/docs/assets/Get-Installed-Dark.png -------------------------------------------------------------------------------- /docs/assets/Get-Installed-Light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisTitusTech/winutil/efb9e5bde6b333dfae15b157aafac5fed1fa1230/docs/assets/Get-Installed-Light.png -------------------------------------------------------------------------------- /docs/assets/Install-Tab-Dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisTitusTech/winutil/efb9e5bde6b333dfae15b157aafac5fed1fa1230/docs/assets/Install-Tab-Dark.png -------------------------------------------------------------------------------- /docs/assets/Install-Tab-Light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisTitusTech/winutil/efb9e5bde6b333dfae15b157aafac5fed1fa1230/docs/assets/Install-Tab-Light.png -------------------------------------------------------------------------------- /docs/assets/MicroWinScreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisTitusTech/winutil/efb9e5bde6b333dfae15b157aafac5fed1fa1230/docs/assets/MicroWinScreen.png -------------------------------------------------------------------------------- /docs/assets/Microwin-Dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisTitusTech/winutil/efb9e5bde6b333dfae15b157aafac5fed1fa1230/docs/assets/Microwin-Dark.png -------------------------------------------------------------------------------- /docs/assets/Microwin-Light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisTitusTech/winutil/efb9e5bde6b333dfae15b157aafac5fed1fa1230/docs/assets/Microwin-Light.png -------------------------------------------------------------------------------- /docs/assets/Push-Commit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisTitusTech/winutil/efb9e5bde6b333dfae15b157aafac5fed1fa1230/docs/assets/Push-Commit.png -------------------------------------------------------------------------------- /docs/assets/Screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisTitusTech/winutil/efb9e5bde6b333dfae15b157aafac5fed1fa1230/docs/assets/Screen.png -------------------------------------------------------------------------------- /docs/assets/Settings-Export-Dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisTitusTech/winutil/efb9e5bde6b333dfae15b157aafac5fed1fa1230/docs/assets/Settings-Export-Dark.png -------------------------------------------------------------------------------- /docs/assets/Settings-Export-Light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisTitusTech/winutil/efb9e5bde6b333dfae15b157aafac5fed1fa1230/docs/assets/Settings-Export-Light.png -------------------------------------------------------------------------------- /docs/assets/Title-Screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisTitusTech/winutil/efb9e5bde6b333dfae15b157aafac5fed1fa1230/docs/assets/Title-Screen.png -------------------------------------------------------------------------------- /docs/assets/Tweaks-Tab-Dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisTitusTech/winutil/efb9e5bde6b333dfae15b157aafac5fed1fa1230/docs/assets/Tweaks-Tab-Dark.png -------------------------------------------------------------------------------- /docs/assets/Tweaks-Tab-Light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisTitusTech/winutil/efb9e5bde6b333dfae15b157aafac5fed1fa1230/docs/assets/Tweaks-Tab-Light.png -------------------------------------------------------------------------------- /docs/assets/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisTitusTech/winutil/efb9e5bde6b333dfae15b157aafac5fed1fa1230/docs/assets/favicon.png -------------------------------------------------------------------------------- /docs/dev/features/Features/DisableLegacyRecovery.md: -------------------------------------------------------------------------------- 1 | # Disable Legacy F8 Boot Recovery 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | Disables Advanced Boot Options screen that lets you start Windows in advanced troubleshooting modes. 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Disable Legacy F8 Boot Recovery", 22 | "Description": "Disables Advanced Boot Options screen that lets you start Windows in advanced troubleshooting modes.", 23 | "category": "Features", 24 | "panel": "1", 25 | "Order": "a019_", 26 | "feature": [], 27 | "InvokeScript": [ 28 | " 29 | If (!(Test-Path 'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager\\LastKnownGood')) { 30 | New-Item -Path 'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager\\LastKnownGood' -Force | Out-Null 31 | } 32 | New-ItemProperty -Path 'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager\\LastKnownGood' -Name 'Enabled' -Type DWord -Value 0 -Force 33 | Start-Process -FilePath cmd.exe -ArgumentList '/c bcdedit /Set {Current} BootMenuPolicy Standard' -Wait 34 | " 35 | ], 36 | "link": "https://christitustech.github.io/winutil/dev/features/Features/DisableLegacyRecovery" 37 | } 38 | ``` 39 | 40 |
41 | 42 | ## Invoke Script 43 | 44 | ```powershell 45 | 46 | If (!(Test-Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Configuration Manager\LastKnownGood')) { 47 | New-Item -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Configuration Manager\LastKnownGood' -Force | Out-Null 48 | } 49 | New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Configuration Manager\LastKnownGood' -Name 'Enabled' -Type DWord -Value 0 -Force 50 | Start-Process -FilePath cmd.exe -ArgumentList '/c bcdedit /Set {Current} BootMenuPolicy Standard' -Wait 51 | 52 | 53 | ``` 54 | 55 | 56 | 57 | 58 | 59 | 60 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json) 61 | 62 | -------------------------------------------------------------------------------- /docs/dev/features/Features/DisableSearchSuggestions.md: -------------------------------------------------------------------------------- 1 | # Disable Search Box Web Suggestions in Registry(explorer restart) 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | Disables web suggestions when searching using Windows Search. 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Disable Search Box Web Suggestions in Registry(explorer restart)", 22 | "Description": "Disables web suggestions when searching using Windows Search.", 23 | "category": "Features", 24 | "panel": "1", 25 | "Order": "a016_", 26 | "feature": [], 27 | "InvokeScript": [ 28 | " 29 | If (!(Test-Path 'HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer')) { 30 | New-Item -Path 'HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer' -Force | Out-Null 31 | } 32 | New-ItemProperty -Path 'HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer' -Name 'DisableSearchBoxSuggestions' -Type DWord -Value 1 -Force 33 | Stop-Process -name explorer -force 34 | " 35 | ], 36 | "link": "https://christitustech.github.io/winutil/dev/features/Features/DisableSearchSuggestions" 37 | } 38 | ``` 39 | 40 |
41 | 42 | ## Invoke Script 43 | 44 | ```powershell 45 | 46 | If (!(Test-Path 'HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer')) { 47 | New-Item -Path 'HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer' -Force | Out-Null 48 | } 49 | New-ItemProperty -Path 'HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer' -Name 'DisableSearchBoxSuggestions' -Type DWord -Value 1 -Force 50 | Stop-Process -name explorer -force 51 | 52 | 53 | ``` 54 | 55 | 56 | 57 | 58 | 59 | 60 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json) 61 | 62 | -------------------------------------------------------------------------------- /docs/dev/features/Features/EnableLegacyRecovery.md: -------------------------------------------------------------------------------- 1 | # Enable Legacy F8 Boot Recovery 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | Enables Advanced Boot Options screen that lets you start Windows in advanced troubleshooting modes. 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Enable Legacy F8 Boot Recovery", 22 | "Description": "Enables Advanced Boot Options screen that lets you start Windows in advanced troubleshooting modes.", 23 | "category": "Features", 24 | "panel": "1", 25 | "Order": "a018_", 26 | "feature": [], 27 | "InvokeScript": [ 28 | " 29 | If (!(Test-Path 'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager\\LastKnownGood')) { 30 | New-Item -Path 'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager\\LastKnownGood' -Force | Out-Null 31 | } 32 | New-ItemProperty -Path 'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager\\LastKnownGood' -Name 'Enabled' -Type DWord -Value 1 -Force 33 | Start-Process -FilePath cmd.exe -ArgumentList '/c bcdedit /Set {Current} BootMenuPolicy Legacy' -Wait 34 | " 35 | ], 36 | "link": "https://christitustech.github.io/winutil/dev/features/Features/EnableLegacyRecovery" 37 | } 38 | ``` 39 | 40 |
41 | 42 | ## Invoke Script 43 | 44 | ```powershell 45 | 46 | If (!(Test-Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Configuration Manager\LastKnownGood')) { 47 | New-Item -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Configuration Manager\LastKnownGood' -Force | Out-Null 48 | } 49 | New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Configuration Manager\LastKnownGood' -Name 'Enabled' -Type DWord -Value 1 -Force 50 | Start-Process -FilePath cmd.exe -ArgumentList '/c bcdedit /Set {Current} BootMenuPolicy Legacy' -Wait 51 | 52 | 53 | ``` 54 | 55 | 56 | 57 | 58 | 59 | 60 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json) 61 | 62 | -------------------------------------------------------------------------------- /docs/dev/features/Features/EnableSearchSuggestions.md: -------------------------------------------------------------------------------- 1 | # Enable Search Box Web Suggestions in Registry(explorer restart) 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | Enables web suggestions when searching using Windows Search. 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Enable Search Box Web Suggestions in Registry(explorer restart)", 22 | "Description": "Enables web suggestions when searching using Windows Search.", 23 | "category": "Features", 24 | "panel": "1", 25 | "Order": "a015_", 26 | "feature": [], 27 | "InvokeScript": [ 28 | " 29 | If (!(Test-Path 'HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer')) { 30 | New-Item -Path 'HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer' -Force | Out-Null 31 | } 32 | New-ItemProperty -Path 'HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer' -Name 'DisableSearchBoxSuggestions' -Type DWord -Value 0 -Force 33 | Stop-Process -name explorer -force 34 | " 35 | ], 36 | "link": "https://christitustech.github.io/winutil/dev/features/Features/EnableSearchSuggestions" 37 | } 38 | ``` 39 | 40 |
41 | 42 | ## Invoke Script 43 | 44 | ```powershell 45 | 46 | If (!(Test-Path 'HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer')) { 47 | New-Item -Path 'HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer' -Force | Out-Null 48 | } 49 | New-ItemProperty -Path 'HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer' -Name 'DisableSearchBoxSuggestions' -Type DWord -Value 0 -Force 50 | Stop-Process -name explorer -force 51 | 52 | 53 | ``` 54 | 55 | 56 | 57 | 58 | 59 | 60 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json) 61 | 62 | -------------------------------------------------------------------------------- /docs/dev/features/Features/Install.md: -------------------------------------------------------------------------------- 1 | # Install Features 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | Preview Code 16 | 17 | ```json 18 | { 19 | "Content": "Install Features", 20 | "category": "Features", 21 | "panel": "1", 22 | "Order": "a060_", 23 | "Type": "Button", 24 | "ButtonWidth": "300", 25 | "link": "https://christitustech.github.io/winutil/dev/features/Features/Install" 26 | } 27 | ``` 28 | 29 |
30 | 31 | ## Function: Invoke-WPFFeatureInstall 32 | 33 | ```powershell 34 | function Invoke-WPFFeatureInstall { 35 | <# 36 | 37 | .SYNOPSIS 38 | Installs selected Windows Features 39 | 40 | #> 41 | 42 | if($sync.ProcessRunning) { 43 | $msg = "[Invoke-WPFFeatureInstall] Install process is currently running." 44 | [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) 45 | return 46 | } 47 | 48 | $Features = (Get-WinUtilCheckBoxes)["WPFFeature"] 49 | 50 | Invoke-WPFRunspace -ArgumentList $Features -DebugPreference $DebugPreference -ScriptBlock { 51 | param($Features, $DebugPreference) 52 | $sync.ProcessRunning = $true 53 | if ($Features.count -eq 1) { 54 | $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" }) 55 | } else { 56 | $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" }) 57 | } 58 | 59 | Invoke-WinUtilFeatureInstall $Features 60 | 61 | $sync.ProcessRunning = $false 62 | $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" }) 63 | 64 | Write-Host "===================================" 65 | Write-Host "--- Features are Installed ---" 66 | Write-Host "--- A Reboot may be required ---" 67 | Write-Host "===================================" 68 | } 69 | } 70 | 71 | ``` 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json) 80 | 81 | -------------------------------------------------------------------------------- /docs/dev/features/Features/Sandbox.md: -------------------------------------------------------------------------------- 1 | # Windows Sandbox 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | Windows Sandbox is a lightweight virtual machine that provides a temporary desktop environment to safely run applications and programs in isolation. 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Windows Sandbox", 22 | "category": "Features", 23 | "panel": "1", 24 | "Order": "a021_", 25 | "Description": "Windows Sandbox is a lightweight virtual machine that provides a temporary desktop environment to safely run applications and programs in isolation.", 26 | "link": "https://christitustech.github.io/winutil/dev/features/Features/Sandbox" 27 | } 28 | ``` 29 | 30 |
31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json) 39 | 40 | -------------------------------------------------------------------------------- /docs/dev/features/Features/dotnet.md: -------------------------------------------------------------------------------- 1 | # All .Net Framework (2,3,4) 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | .NET and .NET Framework is a developer platform made up of tools, programming languages, and libraries for building many different types of applications. 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "All .Net Framework (2,3,4)", 22 | "Description": ".NET and .NET Framework is a developer platform made up of tools, programming languages, and libraries for building many different types of applications.", 23 | "category": "Features", 24 | "panel": "1", 25 | "Order": "a010_", 26 | "feature": [ 27 | "NetFx4-AdvSrvs", 28 | "NetFx3" 29 | ], 30 | "InvokeScript": [], 31 | "link": "https://christitustech.github.io/winutil/dev/features/Features/dotnet" 32 | } 33 | ``` 34 | 35 |
36 | 37 | ## Features 38 | 39 | 40 | Optional Windows Features are additional functionalities or components in the Windows operating system that users can choose to enable or disable based on their specific needs and preferences. 41 | 42 | 43 | You can find information about Optional Windows Features on [Microsoft's Website for Optional Features](https://learn.microsoft.com/en-us/windows/client-management/client-tools/add-remove-hide-features?pivots=windows-11). 44 | 45 | ### Features to install 46 | - NetFx4-AdvSrvs 47 | - NetFx3 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json) 56 | 57 | -------------------------------------------------------------------------------- /docs/dev/features/Features/legacymedia.md: -------------------------------------------------------------------------------- 1 | # Legacy Media (WMP, DirectPlay) 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | Enables legacy programs from previous versions of windows 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Legacy Media (WMP, DirectPlay)", 22 | "Description": "Enables legacy programs from previous versions of windows", 23 | "category": "Features", 24 | "panel": "1", 25 | "Order": "a012_", 26 | "feature": [ 27 | "WindowsMediaPlayer", 28 | "MediaPlayback", 29 | "DirectPlay", 30 | "LegacyComponents" 31 | ], 32 | "InvokeScript": [], 33 | "link": "https://christitustech.github.io/winutil/dev/features/Features/legacymedia" 34 | } 35 | ``` 36 | 37 |
38 | 39 | ## Features 40 | 41 | 42 | Optional Windows Features are additional functionalities or components in the Windows operating system that users can choose to enable or disable based on their specific needs and preferences. 43 | 44 | 45 | You can find information about Optional Windows Features on [Microsoft's Website for Optional Features](https://learn.microsoft.com/en-us/windows/client-management/client-tools/add-remove-hide-features?pivots=windows-11). 46 | 47 | ### Features to install 48 | - WindowsMediaPlayer 49 | - MediaPlayback 50 | - DirectPlay 51 | - LegacyComponents 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json) 60 | 61 | -------------------------------------------------------------------------------- /docs/dev/features/Features/wsl.md: -------------------------------------------------------------------------------- 1 | # Windows Subsystem for Linux 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | Windows Subsystem for Linux is an optional feature of Windows that allows Linux programs to run natively on Windows without the need for a separate virtual machine or dual booting. 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Windows Subsystem for Linux", 22 | "Description": "Windows Subsystem for Linux is an optional feature of Windows that allows Linux programs to run natively on Windows without the need for a separate virtual machine or dual booting.", 23 | "category": "Features", 24 | "panel": "1", 25 | "Order": "a020_", 26 | "feature": [ 27 | "VirtualMachinePlatform", 28 | "Microsoft-Windows-Subsystem-Linux" 29 | ], 30 | "InvokeScript": [], 31 | "link": "https://christitustech.github.io/winutil/dev/features/Features/wsl" 32 | } 33 | ``` 34 | 35 |
36 | 37 | ## Features 38 | 39 | 40 | Optional Windows Features are additional functionalities or components in the Windows operating system that users can choose to enable or disable based on their specific needs and preferences. 41 | 42 | 43 | You can find information about Optional Windows Features on [Microsoft's Website for Optional Features](https://learn.microsoft.com/en-us/windows/client-management/client-tools/add-remove-hide-features?pivots=windows-11). 44 | 45 | ### Features to install 46 | - VirtualMachinePlatform 47 | - Microsoft-Windows-Subsystem-Linux 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json) 56 | 57 | -------------------------------------------------------------------------------- /docs/dev/features/Fixes/Autologin.md: -------------------------------------------------------------------------------- 1 | # Set Up Autologin 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | Preview Code 16 | 17 | ```json 18 | { 19 | "Content": "Set Up Autologin", 20 | "category": "Fixes", 21 | "Order": "a040_", 22 | "panel": "1", 23 | "Type": "Button", 24 | "ButtonWidth": "300", 25 | "link": "https://christitustech.github.io/winutil/dev/features/Fixes/Autologin" 26 | } 27 | ``` 28 | 29 |
30 | 31 | ## Function: Invoke-WPFPanelAutologin 32 | 33 | ```powershell 34 | function Invoke-WPFPanelAutologin { 35 | <# 36 | 37 | .SYNOPSIS 38 | Enables autologin using Sysinternals Autologon.exe 39 | 40 | #> 41 | 42 | # Official Microsoft recommendation: https://learn.microsoft.com/en-us/sysinternals/downloads/autologon 43 | Invoke-WebRequest -Uri "https://live.sysinternals.com/Autologon.exe" -OutFile "$env:temp\autologin.exe" 44 | cmd /c "$env:temp\autologin.exe" /accepteula 45 | } 46 | 47 | ``` 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json) 56 | 57 | -------------------------------------------------------------------------------- /docs/dev/features/Fixes/Network.md: -------------------------------------------------------------------------------- 1 | # Reset Network 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | Preview Code 16 | 17 | ```json 18 | { 19 | "Content": "Reset Network", 20 | "category": "Fixes", 21 | "Order": "a042_", 22 | "panel": "1", 23 | "Type": "Button", 24 | "ButtonWidth": "300", 25 | "link": "https://christitustech.github.io/winutil/dev/features/Fixes/Network" 26 | } 27 | ``` 28 | 29 |
30 | 31 | ## Function: Invoke-WPFFixesNetwork 32 | 33 | ```powershell 34 | function Invoke-WPFFixesNetwork { 35 | <# 36 | 37 | .SYNOPSIS 38 | Resets various network configurations 39 | 40 | #> 41 | 42 | Write-Host "Resetting Network with netsh" 43 | 44 | # Reset WinSock catalog to a clean state 45 | Start-Process -NoNewWindow -FilePath "netsh" -ArgumentList "winsock", "reset" 46 | # Resets WinHTTP proxy setting to DIRECT 47 | Start-Process -NoNewWindow -FilePath "netsh" -ArgumentList "winhttp", "reset", "proxy" 48 | # Removes all user configured IP settings 49 | Start-Process -NoNewWindow -FilePath "netsh" -ArgumentList "int", "ip", "reset" 50 | 51 | Write-Host "Process complete. Please reboot your computer." 52 | 53 | $ButtonType = [System.Windows.MessageBoxButton]::OK 54 | $MessageboxTitle = "Network Reset " 55 | $Messageboxbody = ("Stock settings loaded.`n Please reboot your computer") 56 | $MessageIcon = [System.Windows.MessageBoxImage]::Information 57 | 58 | [System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon) 59 | Write-Host "==========================================" 60 | Write-Host "-- Network Configuration has been Reset --" 61 | Write-Host "==========================================" 62 | } 63 | 64 | ``` 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json) 73 | 74 | -------------------------------------------------------------------------------- /docs/dev/features/Fixes/RunAdobeCCCleanerTool.md: -------------------------------------------------------------------------------- 1 | # Remove Adobe Creative Cloud 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | Preview Code 16 | 17 | ```json 18 | { 19 | "Content": "Remove Adobe Creative Cloud", 20 | "category": "Fixes", 21 | "panel": "1", 22 | "Order": "a045_", 23 | "Type": "Button", 24 | "ButtonWidth": "300", 25 | "link": "https://christitustech.github.io/winutil/dev/features/Fixes/RunAdobeCCCleanerTool" 26 | } 27 | ``` 28 | 29 |
30 | 31 | ## Function: Invoke-WPFRunAdobeCCCleanerTool 32 | 33 | ```powershell 34 | function Invoke-WPFRunAdobeCCCleanerTool { 35 | <# 36 | .SYNOPSIS 37 | It removes or fixes problem files and resolves permission issues in registry keys. 38 | .DESCRIPTION 39 | The Creative Cloud Cleaner tool is a utility for experienced users to clean up corrupted installations. 40 | #> 41 | 42 | [string]$url="https://swupmf.adobe.com/webfeed/CleanerTool/win/AdobeCreativeCloudCleanerTool.exe" 43 | 44 | Write-Host "The Adobe Creative Cloud Cleaner tool is hosted at" 45 | Write-Host "$url" 46 | 47 | try { 48 | # Don't show the progress because it will slow down the download speed 49 | $ProgressPreference='SilentlyContinue' 50 | 51 | Invoke-WebRequest -Uri $url -OutFile "$env:TEMP\AdobeCreativeCloudCleanerTool.exe" -UseBasicParsing -ErrorAction SilentlyContinue -Verbose 52 | 53 | # Revert back the ProgressPreference variable to the default value since we got the file desired 54 | $ProgressPreference='Continue' 55 | 56 | Start-Process -FilePath "$env:TEMP\AdobeCreativeCloudCleanerTool.exe" -Wait -ErrorAction SilentlyContinue -Verbose 57 | } catch { 58 | Write-Error $_.Exception.Message 59 | } finally { 60 | if (Test-Path -Path "$env:TEMP\AdobeCreativeCloudCleanerTool.exe") { 61 | Write-Host "Cleaning up..." 62 | Remove-Item -Path "$env:TEMP\AdobeCreativeCloudCleanerTool.exe" -Verbose 63 | } 64 | } 65 | } 66 | 67 | ``` 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json) 76 | 77 | -------------------------------------------------------------------------------- /docs/dev/features/Fixes/Winget.md: -------------------------------------------------------------------------------- 1 | # WinGet Reinstall 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | Preview Code 16 | 17 | ```json 18 | { 19 | "Content": "WinGet Reinstall", 20 | "category": "Fixes", 21 | "panel": "1", 22 | "Order": "a044_", 23 | "Type": "Button", 24 | "ButtonWidth": "300", 25 | "link": "https://christitustech.github.io/winutil/dev/features/Fixes/Winget" 26 | } 27 | ``` 28 | 29 |
30 | 31 | ## Function: Invoke-WPFFixesWinget 32 | 33 | ```powershell 34 | function Invoke-WPFFixesWinget { 35 | 36 | <# 37 | 38 | .SYNOPSIS 39 | Fixes Winget by running choco install winget 40 | .DESCRIPTION 41 | BravoNorris for the fantastic idea of a button to reinstall winget 42 | #> 43 | # Install Choco if not already present 44 | Install-WinUtilChoco 45 | Start-Process -FilePath "choco" -ArgumentList "install winget -y --force" -NoNewWindow -Wait 46 | 47 | } 48 | 49 | ``` 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json) 58 | 59 | -------------------------------------------------------------------------------- /docs/dev/features/Legacy-Windows-Panels/control.md: -------------------------------------------------------------------------------- 1 | # Control Panel 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | Preview Code 16 | 17 | ```json 18 | { 19 | "Content": "Control Panel", 20 | "category": "Legacy Windows Panels", 21 | "panel": "2", 22 | "Type": "Button", 23 | "ButtonWidth": "300", 24 | "link": "https://christitustech.github.io/winutil/dev/features/Legacy-Windows-Panels/control" 25 | } 26 | ``` 27 | 28 |
29 | 30 | ## Function: Invoke-WPFControlPanel 31 | 32 | ```powershell 33 | function Invoke-WPFControlPanel { 34 | <# 35 | 36 | .SYNOPSIS 37 | Opens the requested legacy panel 38 | 39 | .PARAMETER Panel 40 | The panel to open 41 | 42 | #> 43 | param($Panel) 44 | 45 | switch ($Panel) { 46 | "WPFPanelcontrol" {cmd /c control} 47 | "WPFPanelnetwork" {cmd /c ncpa.cpl} 48 | "WPFPanelpower" {cmd /c powercfg.cpl} 49 | "WPFPanelregion" {cmd /c intl.cpl} 50 | "WPFPanelsound" {cmd /c mmsys.cpl} 51 | "WPFPanelsystem" {cmd /c sysdm.cpl} 52 | "WPFPaneluser" {cmd /c "control userpasswords2"} 53 | } 54 | } 55 | 56 | ``` 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json) 65 | 66 | -------------------------------------------------------------------------------- /docs/dev/features/Legacy-Windows-Panels/network.md: -------------------------------------------------------------------------------- 1 | # Network Connections 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | Preview Code 16 | 17 | ```json 18 | { 19 | "Content": "Network Connections", 20 | "category": "Legacy Windows Panels", 21 | "panel": "2", 22 | "Type": "Button", 23 | "ButtonWidth": "300", 24 | "link": "https://christitustech.github.io/winutil/dev/features/Legacy-Windows-Panels/network" 25 | } 26 | ``` 27 | 28 |
29 | 30 | ## Function: Invoke-WPFControlPanel 31 | 32 | ```powershell 33 | function Invoke-WPFControlPanel { 34 | <# 35 | 36 | .SYNOPSIS 37 | Opens the requested legacy panel 38 | 39 | .PARAMETER Panel 40 | The panel to open 41 | 42 | #> 43 | param($Panel) 44 | 45 | switch ($Panel) { 46 | "WPFPanelcontrol" {cmd /c control} 47 | "WPFPanelnetwork" {cmd /c ncpa.cpl} 48 | "WPFPanelpower" {cmd /c powercfg.cpl} 49 | "WPFPanelregion" {cmd /c intl.cpl} 50 | "WPFPanelsound" {cmd /c mmsys.cpl} 51 | "WPFPanelsystem" {cmd /c sysdm.cpl} 52 | "WPFPaneluser" {cmd /c "control userpasswords2"} 53 | } 54 | } 55 | 56 | ``` 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json) 65 | 66 | -------------------------------------------------------------------------------- /docs/dev/features/Legacy-Windows-Panels/power.md: -------------------------------------------------------------------------------- 1 | # Power Panel 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | Preview Code 16 | 17 | ```json 18 | { 19 | "Content": "Power Panel", 20 | "category": "Legacy Windows Panels", 21 | "panel": "2", 22 | "Type": "Button", 23 | "ButtonWidth": "300", 24 | "link": "https://christitustech.github.io/winutil/dev/features/Legacy-Windows-Panels/power" 25 | } 26 | ``` 27 | 28 |
29 | 30 | ## Function: Invoke-WPFControlPanel 31 | 32 | ```powershell 33 | function Invoke-WPFControlPanel { 34 | <# 35 | 36 | .SYNOPSIS 37 | Opens the requested legacy panel 38 | 39 | .PARAMETER Panel 40 | The panel to open 41 | 42 | #> 43 | param($Panel) 44 | 45 | switch ($Panel) { 46 | "WPFPanelcontrol" {cmd /c control} 47 | "WPFPanelnetwork" {cmd /c ncpa.cpl} 48 | "WPFPanelpower" {cmd /c powercfg.cpl} 49 | "WPFPanelregion" {cmd /c intl.cpl} 50 | "WPFPanelsound" {cmd /c mmsys.cpl} 51 | "WPFPanelsystem" {cmd /c sysdm.cpl} 52 | "WPFPaneluser" {cmd /c "control userpasswords2"} 53 | } 54 | } 55 | 56 | ``` 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json) 65 | 66 | -------------------------------------------------------------------------------- /docs/dev/features/Legacy-Windows-Panels/printer.md: -------------------------------------------------------------------------------- 1 | # Printer Settings 2 | 3 | Last Updated: 2024-08-31 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | Preview Code 16 | 17 | ```json 18 | { 19 | "Content": "Printer Settings", 20 | "category": "Legacy Windows Panels", 21 | "panel": "2", 22 | "Type": "Button", 23 | "ButtonWidth": "300" 24 | } 25 | ``` 26 | 27 |
28 | 29 | ## Function: Invoke-WPFControlPanel 30 | 31 | ```powershell 32 | function Invoke-WPFControlPanel { 33 | <# 34 | 35 | .SYNOPSIS 36 | Opens the requested legacy panel 37 | 38 | .PARAMETER Panel 39 | The panel to open 40 | 41 | #> 42 | param($Panel) 43 | 44 | switch ($Panel) { 45 | "WPFPanelcontrol" {cmd /c control} 46 | "WPFPanelnetwork" {cmd /c ncpa.cpl} 47 | "WPFPanelpower" {cmd /c powercfg.cpl} 48 | "WPFPanelregion" {cmd /c intl.cpl} 49 | "WPFPanelsound" {cmd /c mmsys.cpl} 50 | "WPFPanelprinter" {Start-Process "shell:::{A8A91A66-3A7D-4424-8D24-04E180695C7A}"} 51 | "WPFPanelsystem" {cmd /c sysdm.cpl} 52 | "WPFPaneluser" {cmd /c "control userpasswords2"} 53 | } 54 | } 55 | 56 | ``` 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/../config/feature.json) 65 | 66 | -------------------------------------------------------------------------------- /docs/dev/features/Legacy-Windows-Panels/region.md: -------------------------------------------------------------------------------- 1 | # Region 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | Preview Code 16 | 17 | ```json 18 | { 19 | "Content": "Region", 20 | "category": "Legacy Windows Panels", 21 | "panel": "2", 22 | "Type": "Button", 23 | "ButtonWidth": "300", 24 | "link": "https://christitustech.github.io/winutil/dev/features/Legacy-Windows-Panels/region" 25 | } 26 | ``` 27 | 28 |
29 | 30 | ## Function: Invoke-WPFControlPanel 31 | 32 | ```powershell 33 | function Invoke-WPFControlPanel { 34 | <# 35 | 36 | .SYNOPSIS 37 | Opens the requested legacy panel 38 | 39 | .PARAMETER Panel 40 | The panel to open 41 | 42 | #> 43 | param($Panel) 44 | 45 | switch ($Panel) { 46 | "WPFPanelcontrol" {cmd /c control} 47 | "WPFPanelnetwork" {cmd /c ncpa.cpl} 48 | "WPFPanelpower" {cmd /c powercfg.cpl} 49 | "WPFPanelregion" {cmd /c intl.cpl} 50 | "WPFPanelsound" {cmd /c mmsys.cpl} 51 | "WPFPanelsystem" {cmd /c sysdm.cpl} 52 | "WPFPaneluser" {cmd /c "control userpasswords2"} 53 | } 54 | } 55 | 56 | ``` 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json) 65 | 66 | -------------------------------------------------------------------------------- /docs/dev/features/Legacy-Windows-Panels/sound.md: -------------------------------------------------------------------------------- 1 | # Sound Settings 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | Preview Code 16 | 17 | ```json 18 | { 19 | "Content": "Sound Settings", 20 | "category": "Legacy Windows Panels", 21 | "panel": "2", 22 | "Type": "Button", 23 | "ButtonWidth": "300", 24 | "link": "https://christitustech.github.io/winutil/dev/features/Legacy-Windows-Panels/sound" 25 | } 26 | ``` 27 | 28 |
29 | 30 | ## Function: Invoke-WPFControlPanel 31 | 32 | ```powershell 33 | function Invoke-WPFControlPanel { 34 | <# 35 | 36 | .SYNOPSIS 37 | Opens the requested legacy panel 38 | 39 | .PARAMETER Panel 40 | The panel to open 41 | 42 | #> 43 | param($Panel) 44 | 45 | switch ($Panel) { 46 | "WPFPanelcontrol" {cmd /c control} 47 | "WPFPanelnetwork" {cmd /c ncpa.cpl} 48 | "WPFPanelpower" {cmd /c powercfg.cpl} 49 | "WPFPanelregion" {cmd /c intl.cpl} 50 | "WPFPanelsound" {cmd /c mmsys.cpl} 51 | "WPFPanelsystem" {cmd /c sysdm.cpl} 52 | "WPFPaneluser" {cmd /c "control userpasswords2"} 53 | } 54 | } 55 | 56 | ``` 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json) 65 | 66 | -------------------------------------------------------------------------------- /docs/dev/features/Legacy-Windows-Panels/system.md: -------------------------------------------------------------------------------- 1 | # System Properties 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | Preview Code 16 | 17 | ```json 18 | { 19 | "Content": "System Properties", 20 | "category": "Legacy Windows Panels", 21 | "panel": "2", 22 | "Type": "Button", 23 | "ButtonWidth": "300", 24 | "link": "https://christitustech.github.io/winutil/dev/features/Legacy-Windows-Panels/system" 25 | } 26 | ``` 27 | 28 |
29 | 30 | ## Function: Invoke-WPFControlPanel 31 | 32 | ```powershell 33 | function Invoke-WPFControlPanel { 34 | <# 35 | 36 | .SYNOPSIS 37 | Opens the requested legacy panel 38 | 39 | .PARAMETER Panel 40 | The panel to open 41 | 42 | #> 43 | param($Panel) 44 | 45 | switch ($Panel) { 46 | "WPFPanelcontrol" {cmd /c control} 47 | "WPFPanelnetwork" {cmd /c ncpa.cpl} 48 | "WPFPanelpower" {cmd /c powercfg.cpl} 49 | "WPFPanelregion" {cmd /c intl.cpl} 50 | "WPFPanelsound" {cmd /c mmsys.cpl} 51 | "WPFPanelsystem" {cmd /c sysdm.cpl} 52 | "WPFPaneluser" {cmd /c "control userpasswords2"} 53 | } 54 | } 55 | 56 | ``` 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json) 65 | 66 | -------------------------------------------------------------------------------- /docs/dev/features/Legacy-Windows-Panels/user.md: -------------------------------------------------------------------------------- 1 | # User Accounts 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | Preview Code 16 | 17 | ```json 18 | { 19 | "Content": "User Accounts", 20 | "category": "Legacy Windows Panels", 21 | "panel": "2", 22 | "Type": "Button", 23 | "ButtonWidth": "300", 24 | "link": "https://christitustech.github.io/winutil/dev/features/Legacy-Windows-Panels/user" 25 | } 26 | ``` 27 | 28 |
29 | 30 | ## Function: Invoke-WPFControlPanel 31 | 32 | ```powershell 33 | function Invoke-WPFControlPanel { 34 | <# 35 | 36 | .SYNOPSIS 37 | Opens the requested legacy panel 38 | 39 | .PARAMETER Panel 40 | The panel to open 41 | 42 | #> 43 | param($Panel) 44 | 45 | switch ($Panel) { 46 | "WPFPanelcontrol" {cmd /c control} 47 | "WPFPanelnetwork" {cmd /c ncpa.cpl} 48 | "WPFPanelpower" {cmd /c powercfg.cpl} 49 | "WPFPanelregion" {cmd /c intl.cpl} 50 | "WPFPanelsound" {cmd /c mmsys.cpl} 51 | "WPFPanelsystem" {cmd /c sysdm.cpl} 52 | "WPFPaneluser" {cmd /c "control userpasswords2"} 53 | } 54 | } 55 | 56 | ``` 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json) 65 | 66 | -------------------------------------------------------------------------------- /docs/dev/tweaks/Customize-Preferences/BingSearch.md: -------------------------------------------------------------------------------- 1 | # Bing Search in Start Menu 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | If enable then includes web search results from Bing in your Start Menu search. 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Bing Search in Start Menu", 22 | "Description": "If enable then includes web search results from Bing in your Start Menu search.", 23 | "category": "Customize Preferences", 24 | "panel": "2", 25 | "Order": "a101_", 26 | "Type": "Toggle", 27 | "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/BingSearch" 28 | } 29 | ``` 30 | 31 |
32 | 33 | ## Function: Invoke-WinUtilBingSearch 34 | 35 | ```powershell 36 | function Invoke-WinUtilBingSearch { 37 | <# 38 | 39 | .SYNOPSIS 40 | Disables/Enables Bing Search 41 | 42 | .PARAMETER Enabled 43 | Indicates whether to enable or disable Bing Search 44 | 45 | #> 46 | Param($Enabled) 47 | try { 48 | if ($Enabled -eq $false) { 49 | Write-Host "Enabling Bing Search" 50 | $value = 1 51 | } else { 52 | Write-Host "Disabling Bing Search" 53 | $value = 0 54 | } 55 | $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Search" 56 | Set-ItemProperty -Path $Path -Name BingSearchEnabled -Value $value 57 | } catch [System.Security.SecurityException] { 58 | Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" 59 | } catch [System.Management.Automation.ItemNotFoundException] { 60 | Write-Warning $psitem.Exception.ErrorRecord 61 | } catch { 62 | Write-Warning "Unable to set $Name due to unhandled exception" 63 | Write-Warning $psitem.Exception.StackTrace 64 | } 65 | } 66 | 67 | ``` 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json) 76 | 77 | -------------------------------------------------------------------------------- /docs/dev/tweaks/Customize-Preferences/DarkMode.md: -------------------------------------------------------------------------------- 1 | # Dark Theme for Windows 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | Enable/Disable Dark Mode. 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Dark Theme for Windows", 22 | "Description": "Enable/Disable Dark Mode.", 23 | "category": "Customize Preferences", 24 | "panel": "2", 25 | "Order": "a100_", 26 | "Type": "Toggle", 27 | "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/DarkMode" 28 | } 29 | ``` 30 | 31 |
32 | 33 | ## Function: Invoke-WinUtilDarkMode 34 | 35 | ```powershell 36 | Function Invoke-WinUtilDarkMode { 37 | <# 38 | 39 | .SYNOPSIS 40 | Enables/Disables Dark Mode 41 | 42 | .PARAMETER DarkMoveEnabled 43 | Indicates the current dark mode state 44 | 45 | #> 46 | Param($DarkMoveEnabled) 47 | try { 48 | if ($DarkMoveEnabled -eq $false) { 49 | Write-Host "Enabling Dark Mode" 50 | $DarkMoveValue = 0 51 | } else { 52 | Write-Host "Disabling Dark Mode" 53 | $DarkMoveValue = 1 54 | } 55 | 56 | $Path = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize" 57 | Set-ItemProperty -Path $Path -Name AppsUseLightTheme -Value $DarkMoveValue 58 | Set-ItemProperty -Path $Path -Name SystemUsesLightTheme -Value $DarkMoveValue 59 | } catch [System.Security.SecurityException] { 60 | Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" 61 | } catch [System.Management.Automation.ItemNotFoundException] { 62 | Write-Warning $psitem.Exception.ErrorRecord 63 | } catch { 64 | Write-Warning "Unable to set $Name due to unhandled exception" 65 | Write-Warning $psitem.Exception.StackTrace 66 | } 67 | } 68 | 69 | ``` 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json) 78 | 79 | -------------------------------------------------------------------------------- /docs/dev/tweaks/Customize-Preferences/DetailedBSoD.md: -------------------------------------------------------------------------------- 1 | # Detailed BSoD 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | If Enabled then you will see a detailed Blue Screen of Death (BSOD) with more information. 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Detailed BSoD", 22 | "Description": "If Enabled then you will see a detailed Blue Screen of Death (BSOD) with more information.", 23 | "category": "Customize Preferences", 24 | "panel": "2", 25 | "Order": "a205_", 26 | "Type": "Toggle", 27 | "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/DetailedBSoD" 28 | } 29 | ``` 30 | 31 |
32 | 33 | ## Function: Invoke-WinUtilDetailedBSoD 34 | 35 | ```powershell 36 | Function Invoke-WinUtilDetailedBSoD { 37 | <# 38 | 39 | .SYNOPSIS 40 | Enables/Disables Detailed BSoD 41 | (Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl' -Name 'DisplayParameters').DisplayParameters 42 | 43 | 44 | #> 45 | Param($Enabled) 46 | try { 47 | if ($Enabled -eq $false) { 48 | Write-Host "Enabling Detailed BSoD" 49 | $value = 1 50 | } else { 51 | Write-Host "Disabling Detailed BSoD" 52 | $value =0 53 | } 54 | 55 | $Path = "HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl" 56 | Set-ItemProperty -Path $Path -Name DisplayParameters -Value $value 57 | } catch [System.Security.SecurityException] { 58 | Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" 59 | } catch [System.Management.Automation.ItemNotFoundException] { 60 | Write-Warning $psitem.Exception.ErrorRecord 61 | } catch { 62 | Write-Warning "Unable to set $Name due to unhandled exception" 63 | Write-Warning $psitem.Exception.StackTrace 64 | } 65 | } 66 | 67 | ``` 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json) 76 | 77 | -------------------------------------------------------------------------------- /docs/dev/tweaks/Customize-Preferences/HiddenFiles.md: -------------------------------------------------------------------------------- 1 | # Show Hidden Files 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | If Enabled then Hidden Files will be shown. 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Show Hidden Files", 22 | "Description": "If Enabled then Hidden Files will be shown.", 23 | "category": "Customize Preferences", 24 | "panel": "2", 25 | "Order": "a200_", 26 | "Type": "Toggle", 27 | "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/HiddenFiles" 28 | } 29 | ``` 30 | 31 |
32 | 33 | ## Function: Invoke-WinUtilHiddenFiles 34 | 35 | ```powershell 36 | function Invoke-WinUtilHiddenFiles { 37 | <# 38 | 39 | .SYNOPSIS 40 | Enable/Disable Hidden Files 41 | 42 | .PARAMETER Enabled 43 | Indicates whether to enable or disable Hidden Files 44 | 45 | #> 46 | Param($Enabled) 47 | try { 48 | if ($Enabled -eq $false) { 49 | Write-Host "Enabling Hidden Files" 50 | $value = 1 51 | } else { 52 | Write-Host "Disabling Hidden Files" 53 | $value = 0 54 | } 55 | $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" 56 | Set-ItemProperty -Path $Path -Name Hidden -Value $value 57 | } catch [System.Security.SecurityException] { 58 | Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" 59 | } catch [System.Management.Automation.ItemNotFoundException] { 60 | Write-Warning $psitem.Exception.ErrorRecord 61 | } catch { 62 | Write-Warning "Unable to set $Name due to unhandled exception" 63 | Write-Warning $psitem.Exception.StackTrace 64 | } 65 | } 66 | 67 | ``` 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json) 76 | 77 | -------------------------------------------------------------------------------- /docs/dev/tweaks/Customize-Preferences/NumLock.md: -------------------------------------------------------------------------------- 1 | # NumLock on Startup 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | Toggle the Num Lock key state when your computer starts. 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "NumLock on Startup", 22 | "Description": "Toggle the Num Lock key state when your computer starts.", 23 | "category": "Customize Preferences", 24 | "panel": "2", 25 | "Order": "a102_", 26 | "Type": "Toggle", 27 | "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/NumLock" 28 | } 29 | ``` 30 | 31 |
32 | 33 | ## Function: Invoke-WinUtilNumLock 34 | 35 | ```powershell 36 | function Invoke-WinUtilNumLock { 37 | <# 38 | .SYNOPSIS 39 | Disables/Enables NumLock on startup 40 | .PARAMETER Enabled 41 | Indicates whether to enable or disable Numlock on startup 42 | #> 43 | Param($Enabled) 44 | try { 45 | if ($Enabled -eq $false) { 46 | Write-Host "Enabling Numlock on startup" 47 | $value = 2 48 | } else { 49 | Write-Host "Disabling Numlock on startup" 50 | $value = 0 51 | } 52 | New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS 53 | $HKUPath = "HKU:\.Default\Control Panel\Keyboard" 54 | $HKCUPath = "HKCU:\Control Panel\Keyboard" 55 | Set-ItemProperty -Path $HKUPath -Name InitialKeyboardIndicators -Value $value 56 | Set-ItemProperty -Path $HKCUPath -Name InitialKeyboardIndicators -Value $value 57 | } 58 | Catch [System.Security.SecurityException] { 59 | Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" 60 | } catch [System.Management.Automation.ItemNotFoundException] { 61 | Write-Warning $psitem.Exception.ErrorRecord 62 | } catch { 63 | Write-Warning "Unable to set $Name due to unhandled exception" 64 | Write-Warning $psitem.Exception.StackTrace 65 | } 66 | } 67 | 68 | ``` 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json) 77 | 78 | -------------------------------------------------------------------------------- /docs/dev/tweaks/Customize-Preferences/ShowExt.md: -------------------------------------------------------------------------------- 1 | # Show File Extensions 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | If enabled then File extensions (e.g., .txt, .jpg) are visible. 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Show File Extensions", 22 | "Description": "If enabled then File extensions (e.g., .txt, .jpg) are visible.", 23 | "category": "Customize Preferences", 24 | "panel": "2", 25 | "Order": "a201_", 26 | "Type": "Toggle", 27 | "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/ShowExt" 28 | } 29 | ``` 30 | 31 |
32 | 33 | ## Function: Invoke-WinUtilShowExt 34 | 35 | ```powershell 36 | function Invoke-WinUtilShowExt { 37 | <# 38 | .SYNOPSIS 39 | Disables/Enables Show file Extentions 40 | .PARAMETER Enabled 41 | Indicates whether to enable or disable Show file extentions 42 | #> 43 | Param($Enabled) 44 | try { 45 | if ($Enabled -eq $false) { 46 | Write-Host "Showing file extentions" 47 | $value = 0 48 | } else { 49 | Write-Host "hiding file extensions" 50 | $value = 1 51 | } 52 | $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" 53 | Set-ItemProperty -Path $Path -Name HideFileExt -Value $value 54 | } catch [System.Security.SecurityException] { 55 | Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" 56 | } catch [System.Management.Automation.ItemNotFoundException] { 57 | Write-Warning $psitem.Exception.ErrorRecord 58 | } catch { 59 | Write-Warning "Unable to set $Name due to unhandled exception" 60 | Write-Warning $psitem.Exception.StackTrace 61 | } 62 | } 63 | 64 | ``` 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json) 73 | 74 | -------------------------------------------------------------------------------- /docs/dev/tweaks/Customize-Preferences/SnapFlyout.md: -------------------------------------------------------------------------------- 1 | # Snap Assist Flyout 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | If enabled then Snap preview is disabled when maximize button is hovered. 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Snap Assist Flyout", 22 | "Description": "If enabled then Snap preview is disabled when maximize button is hovered.", 23 | "category": "Customize Preferences", 24 | "panel": "2", 25 | "Order": "a105_", 26 | "Type": "Toggle", 27 | "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/SnapFlyout" 28 | } 29 | ``` 30 | 31 |
32 | 33 | ## Function: Invoke-WinUtilSnapFlyout 34 | 35 | ```powershell 36 | function Invoke-WinUtilSnapFlyout { 37 | <# 38 | .SYNOPSIS 39 | Disables/Enables Snap Assist Flyout on startup 40 | .PARAMETER Enabled 41 | Indicates whether to enable or disable Snap Assist Flyout on startup 42 | #> 43 | Param($Enabled) 44 | try { 45 | if ($Enabled -eq $false) { 46 | Write-Host "Enabling Snap Assist Flyout On startup" 47 | $value = 1 48 | } else { 49 | Write-Host "Disabling Snap Assist Flyout On startup" 50 | $value = 0 51 | } 52 | # taskkill.exe /F /IM "explorer.exe" 53 | $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" 54 | taskkill.exe /F /IM "explorer.exe" 55 | Set-ItemProperty -Path $Path -Name EnableSnapAssistFlyout -Value $value 56 | Start-Process "explorer.exe" 57 | } catch [System.Security.SecurityException] { 58 | Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" 59 | } catch [System.Management.Automation.ItemNotFoundException] { 60 | Write-Warning $psitem.Exception.ErrorRecord 61 | } catch { 62 | Write-Warning "Unable to set $Name due to unhandled exception" 63 | Write-Warning $psitem.Exception.StackTrace 64 | } 65 | } 66 | 67 | ``` 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json) 76 | 77 | -------------------------------------------------------------------------------- /docs/dev/tweaks/Customize-Preferences/SnapWindow.md: -------------------------------------------------------------------------------- 1 | # Snap Window 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | If enabled you can align windows by dragging them. | Relogin Required 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Snap Window", 22 | "Description": "If enabled you can align windows by dragging them. | Relogin Required", 23 | "category": "Customize Preferences", 24 | "panel": "2", 25 | "Order": "a104_", 26 | "Type": "Toggle", 27 | "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/SnapWindow" 28 | } 29 | ``` 30 | 31 |
32 | 33 | ## Function: Invoke-WinUtilSnapWindow 34 | 35 | ```powershell 36 | function Invoke-WinUtilSnapWindow { 37 | <# 38 | .SYNOPSIS 39 | Disables/Enables Snapping Windows on startup 40 | .PARAMETER Enabled 41 | Indicates whether to enable or disable Snapping Windows on startup 42 | #> 43 | Param($Enabled) 44 | try { 45 | if ($Enabled -eq $false) { 46 | Write-Host "Enabling Snap Windows On startup | Relogin Required" 47 | $value = 1 48 | } else { 49 | Write-Host "Disabling Snap Windows On startup | Relogin Required" 50 | $value = 0 51 | } 52 | $Path = "HKCU:\Control Panel\Desktop" 53 | Set-ItemProperty -Path $Path -Name WindowArrangementActive -Value $value 54 | } catch [System.Security.SecurityException] { 55 | Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" 56 | } catch [System.Management.Automation.ItemNotFoundException] { 57 | Write-Warning $psitem.Exception.ErrorRecord 58 | } catch { 59 | Write-Warning "Unable to set $Name due to unhandled exception" 60 | Write-Warning $psitem.Exception.StackTrace 61 | } 62 | } 63 | 64 | ``` 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json) 73 | 74 | -------------------------------------------------------------------------------- /docs/dev/tweaks/Customize-Preferences/TaskView.md: -------------------------------------------------------------------------------- 1 | # Task View Button in Taskbar 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | If Enabled then Task View Button in Taskbar will be shown. 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Task View Button in Taskbar", 22 | "Description": "If Enabled then Task View Button in Taskbar will be shown.", 23 | "category": "Customize Preferences", 24 | "panel": "2", 25 | "Order": "a203_", 26 | "Type": "Toggle", 27 | "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/TaskView" 28 | } 29 | ``` 30 | 31 |
32 | 33 | ## Function: Invoke-WinUtilTaskView 34 | 35 | ```powershell 36 | function Invoke-WinUtilTaskView { 37 | <# 38 | 39 | .SYNOPSIS 40 | Enable/Disable Task View 41 | 42 | .PARAMETER Enabled 43 | Indicates whether to enable or disable Task View 44 | 45 | #> 46 | Param($Enabled) 47 | try { 48 | if ($Enabled -eq $false) { 49 | Write-Host "Enabling Task View" 50 | $value = 1 51 | } else { 52 | Write-Host "Disabling Task View" 53 | $value = 0 54 | } 55 | $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" 56 | Set-ItemProperty -Path $Path -Name ShowTaskViewButton -Value $value 57 | } catch [System.Security.SecurityException] { 58 | Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" 59 | } catch [System.Management.Automation.ItemNotFoundException] { 60 | Write-Warning $psitem.Exception.ErrorRecord 61 | } catch { 62 | Write-Warning "Unable to set $Name due to unhandled exception" 63 | Write-Warning $psitem.Exception.StackTrace 64 | } 65 | } 66 | 67 | ``` 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json) 76 | 77 | -------------------------------------------------------------------------------- /docs/dev/tweaks/Customize-Preferences/TaskbarAlignment.md: -------------------------------------------------------------------------------- 1 | # Center Taskbar Items 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | [Windows 11] If Enabled then the Taskbar Items will be shown on the Center, otherwise the Taskbar Items will be shown on the Left. 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Center Taskbar Items", 22 | "Description": "[Windows 11] If Enabled then the Taskbar Items will be shown on the Center, otherwise the Taskbar Items will be shown on the Left.", 23 | "category": "Customize Preferences", 24 | "panel": "2", 25 | "Order": "a204_", 26 | "Type": "Toggle", 27 | "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/TaskbarAlignment" 28 | } 29 | ``` 30 | 31 |
32 | 33 | ## Function: Invoke-WinUtilTaskbarAlignment 34 | 35 | ```powershell 36 | function Invoke-WinUtilTaskbarAlignment { 37 | <# 38 | 39 | .SYNOPSIS 40 | Switches between Center & Left Taskbar Alignment 41 | 42 | .PARAMETER Enabled 43 | Indicates whether to make Taskbar Alignment Center or Left 44 | 45 | #> 46 | Param($Enabled) 47 | try { 48 | if ($Enabled -eq $false) { 49 | Write-Host "Making Taskbar Alignment to the Center" 50 | $value = 1 51 | } else { 52 | Write-Host "Making Taskbar Alignment to the Left" 53 | $value = 0 54 | } 55 | $Path = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" 56 | Set-ItemProperty -Path $Path -Name "TaskbarAl" -Value $value 57 | } catch [System.Security.SecurityException] { 58 | Write-Warning "Unable to set $Path\$Name to $value due to a Security Exception" 59 | } catch [System.Management.Automation.ItemNotFoundException] { 60 | Write-Warning $psitem.Exception.ErrorRecord 61 | } catch { 62 | Write-Warning "Unable to set $Name due to unhandled exception" 63 | Write-Warning $psitem.Exception.StackTrace 64 | } 65 | } 66 | 67 | ``` 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json) 76 | 77 | -------------------------------------------------------------------------------- /docs/dev/tweaks/Customize-Preferences/TaskbarSearch.md: -------------------------------------------------------------------------------- 1 | # Search Button in Taskbar 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | If Enabled Search Button will be on the taskbar. 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Search Button in Taskbar", 22 | "Description": "If Enabled Search Button will be on the taskbar.", 23 | "category": "Customize Preferences", 24 | "panel": "2", 25 | "Order": "a202_", 26 | "Type": "Toggle", 27 | "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/TaskbarSearch" 28 | } 29 | ``` 30 | 31 |
32 | 33 | ## Function: Invoke-WinUtilTaskbarSearch 34 | 35 | ```powershell 36 | function Invoke-WinUtilTaskbarSearch { 37 | <# 38 | 39 | .SYNOPSIS 40 | Enable/Disable Taskbar Search Button. 41 | 42 | .PARAMETER Enabled 43 | Indicates whether to enable or disable Taskbar Search Button. 44 | 45 | #> 46 | Param($Enabled) 47 | try { 48 | if ($Enabled -eq $false) { 49 | Write-Host "Enabling Search Button" 50 | $value = 1 51 | } else { 52 | Write-Host "Disabling Search Button" 53 | $value = 0 54 | } 55 | $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Search\" 56 | Set-ItemProperty -Path $Path -Name SearchboxTaskbarMode -Value $value 57 | } catch [System.Security.SecurityException] { 58 | Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" 59 | } catch [System.Management.Automation.ItemNotFoundException] { 60 | Write-Warning $psitem.Exception.ErrorRecord 61 | } catch { 62 | Write-Warning "Unable to set $Name due to unhandled exception" 63 | Write-Warning $psitem.Exception.StackTrace 64 | } 65 | } 66 | 67 | ``` 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json) 76 | 77 | -------------------------------------------------------------------------------- /docs/dev/tweaks/Customize-Preferences/TaskbarWidgets.md: -------------------------------------------------------------------------------- 1 | # Widgets Button in Taskbar 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | If Enabled then Widgets Button in Taskbar will be shown. 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Widgets Button in Taskbar", 22 | "Description": "If Enabled then Widgets Button in Taskbar will be shown.", 23 | "category": "Customize Preferences", 24 | "panel": "2", 25 | "Order": "a204_", 26 | "Type": "Toggle", 27 | "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/TaskbarWidgets" 28 | } 29 | ``` 30 | 31 |
32 | 33 | ## Function: Invoke-WinUtilTaskbarWidgets 34 | 35 | ```powershell 36 | function Invoke-WinUtilTaskbarWidgets { 37 | <# 38 | 39 | .SYNOPSIS 40 | Enable/Disable Taskbar Widgets 41 | 42 | .PARAMETER Enabled 43 | Indicates whether to enable or disable Taskbar Widgets 44 | 45 | #> 46 | Param($Enabled) 47 | try { 48 | if ($Enabled -eq $false) { 49 | Write-Host "Enabling Taskbar Widgets" 50 | $value = 1 51 | } else { 52 | Write-Host "Disabling Taskbar Widgets" 53 | $value = 0 54 | } 55 | $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" 56 | Set-ItemProperty -Path $Path -Name TaskbarDa -Value $value 57 | } catch [System.Security.SecurityException] { 58 | Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" 59 | } catch [System.Management.Automation.ItemNotFoundException] { 60 | Write-Warning $psitem.Exception.ErrorRecord 61 | } catch { 62 | Write-Warning "Unable to set $Name due to unhandled exception" 63 | Write-Warning $psitem.Exception.StackTrace 64 | } 65 | } 66 | 67 | ``` 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json) 76 | 77 | -------------------------------------------------------------------------------- /docs/dev/tweaks/Customize-Preferences/VerboseLogon.md: -------------------------------------------------------------------------------- 1 | # Verbose Messages During Logon 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | Show detailed messages during the login process for troubleshooting and diagnostics. 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Verbose Messages During Logon", 22 | "Description": "Show detailed messages during the login process for troubleshooting and diagnostics.", 23 | "category": "Customize Preferences", 24 | "panel": "2", 25 | "Order": "a103_", 26 | "Type": "Toggle", 27 | "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/VerboseLogon" 28 | } 29 | ``` 30 | 31 |
32 | 33 | ## Function: Invoke-WinUtilVerboseLogon 34 | 35 | ```powershell 36 | function Invoke-WinUtilVerboseLogon { 37 | <# 38 | .SYNOPSIS 39 | Disables/Enables VerboseLogon Messages 40 | .PARAMETER Enabled 41 | Indicates whether to enable or disable VerboseLogon messages 42 | #> 43 | Param($Enabled) 44 | try { 45 | if ($Enabled -eq $false) { 46 | Write-Host "Enabling Verbose Logon Messages" 47 | $value = 1 48 | } else { 49 | Write-Host "Disabling Verbose Logon Messages" 50 | $value = 0 51 | } 52 | $Path = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" 53 | Set-ItemProperty -Path $Path -Name VerboseStatus -Value $value 54 | } catch [System.Security.SecurityException] { 55 | Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" 56 | } catch [System.Management.Automation.ItemNotFoundException] { 57 | Write-Warning $psitem.Exception.ErrorRecord 58 | } catch { 59 | Write-Warning "Unable to set $Name due to unhandled exception" 60 | Write-Warning $psitem.Exception.StackTrace 61 | } 62 | } 63 | 64 | ``` 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json) 73 | 74 | -------------------------------------------------------------------------------- /docs/dev/tweaks/Essential-Tweaks/ConsumerFeatures.md: -------------------------------------------------------------------------------- 1 | # Disable ConsumerFeatures 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | Windows 10 will not automatically install any games, third-party apps, or application links from the Windows Store for the signed-in user. Some default Apps will be inaccessible (eg. Phone Link) 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Disable ConsumerFeatures", 22 | "Description": "Windows 10 will not automatically install any games, third-party apps, or application links from the Windows Store for the signed-in user. Some default Apps will be inaccessible (eg. Phone Link)", 23 | "category": "Essential Tweaks", 24 | "panel": "1", 25 | "Order": "a003_", 26 | "registry": [ 27 | { 28 | "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\CloudContent", 29 | "OriginalValue": "0", 30 | "Name": "DisableWindowsConsumerFeatures", 31 | "Value": "1", 32 | "Type": "DWord" 33 | } 34 | ], 35 | "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/ConsumerFeatures" 36 | } 37 | ``` 38 | 39 |
40 | 41 | ## Registry Changes 42 | Applications and System Components store and retrieve configuration data to modify windows settings, so we can use the registry to change many settings in one place. 43 | 44 | 45 | You can find information about the registry on [Wikipedia](https://www.wikiwand.com/en/Windows_Registry) and [Microsoft's Website](https://learn.microsoft.com/en-us/windows/win32/sysinfo/registry). 46 | 47 | ### Registry Key: DisableWindowsConsumerFeatures 48 | 49 | **Type:** DWord 50 | 51 | **Original Value:** 0 52 | 53 | **New Value:** 1 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json) 63 | 64 | -------------------------------------------------------------------------------- /docs/dev/tweaks/Essential-Tweaks/DeleteTempFiles.md: -------------------------------------------------------------------------------- 1 | # Delete Temporary Files 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | Erases TEMP Folders 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Delete Temporary Files", 22 | "Description": "Erases TEMP Folders", 23 | "category": "Essential Tweaks", 24 | "panel": "1", 25 | "Order": "a002_", 26 | "InvokeScript": [ 27 | "Get-ChildItem -Path \"C:\\Windows\\Temp\" *.* -Recurse | Remove-Item -Force -Recurse 28 | Get-ChildItem -Path $env:TEMP *.* -Recurse | Remove-Item -Force -Recurse" 29 | ], 30 | "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/DeleteTempFiles" 31 | } 32 | ``` 33 | 34 |
35 | 36 | ## Invoke Script 37 | 38 | ```powershell 39 | Get-ChildItem -Path "C:\Windows\Temp" *.* -Recurse | Remove-Item -Force -Recurse 40 | Get-ChildItem -Path $env:TEMP *.* -Recurse | Remove-Item -Force -Recurse 41 | 42 | ``` 43 | 44 | 45 | 46 | 47 | 48 | 49 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json) 50 | 51 | -------------------------------------------------------------------------------- /docs/dev/tweaks/Essential-Tweaks/DisableRecall.md: -------------------------------------------------------------------------------- 1 | # Disable Microsoft Recall 2 | 3 | Last Updated: 2024-10-24 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | Disables MS Recall built into Windows since 24H2. 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | "WPFTweaksRecallOff": { 21 | "Content": "Disable Recall", 22 | "Description": "Turn Recall off", 23 | "category": "Essential Tweaks", 24 | "panel": "1", 25 | "Order": "a011_", 26 | "registry": [ 27 | { 28 | 29 | "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsAI", 30 | "Name": "DisableAIDataAnalysis", 31 | "Type": "DWord", 32 | "Value": "1", 33 | "OriginalValue": "0" 34 | } 35 | ], 36 | "InvokeScript": [ 37 | " 38 | Write-Host \"Disable Recall\" 39 | DISM /Online /Disable-Feature /FeatureName:Recall 40 | " 41 | ], 42 | "UndoScript": [ 43 | " 44 | Write-Host \"Enable Recall\" 45 | DISM /Online /Enable-Feature /FeatureName:Recall 46 | " 47 | ], 48 | "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/DisableRecall" 49 | }, 50 | ``` 51 | 52 |
53 | 54 | ## Invoke Script 55 | 56 | ```powershell 57 | 58 | Write-Host "Disable Recall" 59 | DISM /Online /Disable-Feature /FeatureName:Recall 60 | 61 | 62 | ``` 63 | ## Undo Script 64 | 65 | ```powershell 66 | 67 | Write-Host "Enable Recall" 68 | DISM /Online /Enable-Feature /FeatureName:Recall 69 | 70 | 71 | ``` 72 | ## Registry Changes 73 | Applications and System Components store and retrieve configuration data to modify windows settings, so we can use the registry to change many settings in one place. 74 | 75 | 76 | You can find information about the registry on [Wikipedia](https://www.wikiwand.com/en/Windows_Registry) and [Microsoft's Website](https://learn.microsoft.com/en-us/windows/win32/sysinfo/registry). 77 | 78 | ### Registry Key: DisableAIDataAnalysis 79 | 80 | **Type:** DWord 81 | 82 | **Original Value:** 0 83 | 84 | **New Value:** 1 85 | 86 | 87 | 88 | 89 | 90 | 91 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json) 92 | -------------------------------------------------------------------------------- /docs/dev/tweaks/Essential-Tweaks/DiskCleanup.md: -------------------------------------------------------------------------------- 1 | # Run Disk Cleanup 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | Runs Disk Cleanup on Drive C: and removes old Windows Updates. 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Run Disk Cleanup", 22 | "Description": "Runs Disk Cleanup on Drive C: and removes old Windows Updates.", 23 | "category": "Essential Tweaks", 24 | "panel": "1", 25 | "Order": "a009_", 26 | "InvokeScript": [ 27 | " 28 | cleanmgr.exe /d C: /VERYLOWDISK 29 | Dism.exe /online /Cleanup-Image /StartComponentCleanup /ResetBase 30 | " 31 | ], 32 | "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/DiskCleanup" 33 | } 34 | ``` 35 | 36 |
37 | 38 | ## Invoke Script 39 | 40 | ```powershell 41 | 42 | cleanmgr.exe /d C: /VERYLOWDISK 43 | Dism.exe /online /Cleanup-Image /StartComponentCleanup /ResetBase 44 | 45 | 46 | ``` 47 | 48 | 49 | 50 | 51 | 52 | 53 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json) 54 | 55 | -------------------------------------------------------------------------------- /docs/dev/tweaks/Essential-Tweaks/Home.md: -------------------------------------------------------------------------------- 1 | # Disable Homegroup 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | Disables HomeGroup - HomeGroup is a password-protected home networking service that lets you share your stuff with other PCs that are currently running and connected to your network. 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Disable Homegroup", 22 | "Description": "Disables HomeGroup - HomeGroup is a password-protected home networking service that lets you share your stuff with other PCs that are currently running and connected to your network.", 23 | "category": "Essential Tweaks", 24 | "panel": "1", 25 | "Order": "a005_", 26 | "service": [ 27 | { 28 | "Name": "HomeGroupListener", 29 | "StartupType": "Manual", 30 | "OriginalType": "Automatic" 31 | }, 32 | { 33 | "Name": "HomeGroupProvider", 34 | "StartupType": "Manual", 35 | "OriginalType": "Automatic" 36 | } 37 | ], 38 | "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Home" 39 | } 40 | ``` 41 | 42 |
43 | 44 | ## Service Changes 45 | 46 | Windows services are background processes for system functions or applications. Setting some to manual optimizes performance by starting them only when needed. 47 | 48 | You can find information about services on [Wikipedia](https://www.wikiwand.com/en/Windows_service) and [Microsoft's Website](https://learn.microsoft.com/en-us/dotnet/framework/windows-services/introduction-to-windows-service-applications). 49 | 50 | ### Service Name: HomeGroupListener 51 | 52 | **Startup Type:** Manual 53 | 54 | **Original Type:** Automatic 55 | 56 | ### Service Name: HomeGroupProvider 57 | 58 | **Startup Type:** Manual 59 | 60 | **Original Type:** Automatic 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json) 70 | 71 | -------------------------------------------------------------------------------- /docs/dev/tweaks/Essential-Tweaks/IPv46.md: -------------------------------------------------------------------------------- 1 | # Prefer IPv4 over IPv6 2 | 3 | Last Updated: 2024-08-27 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | To set the IPv4 preference can have latency and security benefits on private networks where IPv6 is not configured. 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Prefer IPv4 over IPv6", 22 | "Description": "To set the IPv4 preference can have latency and security benefits on private networks where IPv6 is not configured.", 23 | "category": "Essential Tweaks", 24 | "panel": "1", 25 | "Order": "a005_", 26 | "registry": [ 27 | { 28 | "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters", 29 | "Name": "DisabledComponents", 30 | "Value": "32", 31 | "OriginalValue": "0", 32 | "Type": "DWord" 33 | } 34 | ], 35 | "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/IPv46" 36 | } 37 | ``` 38 | 39 |
40 | 41 | ## Registry Changes 42 | Applications and System Components store and retrieve configuration data to modify windows settings, so we can use the registry to change many settings in one place. 43 | 44 | 45 | You can find information about the registry on [Wikipedia](https://www.wikiwand.com/en/Windows_Registry) and [Microsoft's Website](https://learn.microsoft.com/en-us/windows/win32/sysinfo/registry). 46 | 47 | ### Registry Key: DisabledComponents 48 | 49 | **Type:** DWord 50 | 51 | **Original Value:** 0 52 | 53 | **New Value:** 32 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json) 63 | 64 | -------------------------------------------------------------------------------- /docs/dev/tweaks/Essential-Tweaks/Powershell7Tele.md: -------------------------------------------------------------------------------- 1 | # Disable Powershell 7 Telemetry 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | This will create an Environment Variable called 'POWERSHELL_TELEMETRY_OPTOUT' with a value of '1' which will tell Powershell 7 to not send Telemetry Data. 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Disable Powershell 7 Telemetry", 22 | "Description": "This will create an Environment Variable called 'POWERSHELL_TELEMETRY_OPTOUT' with a value of '1' which will tell Powershell 7 to not send Telemetry Data.", 23 | "category": "Essential Tweaks", 24 | "panel": "1", 25 | "Order": "a009_", 26 | "InvokeScript": [ 27 | "[Environment]::SetEnvironmentVariable('POWERSHELL_TELEMETRY_OPTOUT', '1', 'Machine')" 28 | ], 29 | "UndoScript": [ 30 | "[Environment]::SetEnvironmentVariable('POWERSHELL_TELEMETRY_OPTOUT', '', 'Machine')" 31 | ], 32 | "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Powershell7Tele" 33 | } 34 | ``` 35 | 36 |
37 | 38 | ## Invoke Script 39 | 40 | ```powershell 41 | [Environment]::SetEnvironmentVariable('POWERSHELL_TELEMETRY_OPTOUT', '1', 'Machine') 42 | 43 | ``` 44 | ## Undo Script 45 | 46 | ```powershell 47 | [Environment]::SetEnvironmentVariable('POWERSHELL_TELEMETRY_OPTOUT', '', 'Machine') 48 | 49 | ``` 50 | 51 | 52 | 53 | 54 | 55 | 56 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json) 57 | 58 | -------------------------------------------------------------------------------- /docs/dev/tweaks/Essential-Tweaks/Storage.md: -------------------------------------------------------------------------------- 1 | # Disable Storage Sense 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | Storage Sense deletes temp files automatically. 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Disable Storage Sense", 22 | "Description": "Storage Sense deletes temp files automatically.", 23 | "category": "Essential Tweaks", 24 | "panel": "1", 25 | "Order": "a005_", 26 | "InvokeScript": [ 27 | "Set-ItemProperty -Path \"HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\StorageSense\\Parameters\\StoragePolicy\" -Name \"01\" -Value 0 -Type Dword -Force" 28 | ], 29 | "UndoScript": [ 30 | "Set-ItemProperty -Path \"HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\StorageSense\\Parameters\\StoragePolicy\" -Name \"01\" -Value 1 -Type Dword -Force" 31 | ], 32 | "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Storage" 33 | } 34 | ``` 35 | 36 |
37 | 38 | ## Invoke Script 39 | 40 | ```powershell 41 | Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy" -Name "01" -Value 0 -Type Dword -Force 42 | 43 | ``` 44 | ## Undo Script 45 | 46 | ```powershell 47 | Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy" -Name "01" -Value 1 -Type Dword -Force 48 | 49 | ``` 50 | 51 | 52 | 53 | 54 | 55 | 56 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json) 57 | 58 | -------------------------------------------------------------------------------- /docs/dev/tweaks/Essential-Tweaks/Wifi.md: -------------------------------------------------------------------------------- 1 | # Disable Wifi-Sense 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | Wifi Sense is a spying service that phones home all nearby scanned wifi networks and your current geo location. 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Disable Wifi-Sense", 22 | "Description": "Wifi Sense is a spying service that phones home all nearby scanned wifi networks and your current geo location.", 23 | "category": "Essential Tweaks", 24 | "panel": "1", 25 | "Order": "a005_", 26 | "registry": [ 27 | { 28 | "Path": "HKLM:\\Software\\Microsoft\\PolicyManager\\default\\WiFi\\AllowWiFiHotSpotReporting", 29 | "Name": "Value", 30 | "Type": "DWord", 31 | "Value": "0", 32 | "OriginalValue": "1" 33 | }, 34 | { 35 | "Path": "HKLM:\\Software\\Microsoft\\PolicyManager\\default\\WiFi\\AllowAutoConnectToWiFiSenseHotspots", 36 | "Name": "Value", 37 | "Type": "DWord", 38 | "Value": "0", 39 | "OriginalValue": "1" 40 | } 41 | ], 42 | "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Wifi" 43 | } 44 | ``` 45 | 46 |
47 | 48 | ## Registry Changes 49 | Applications and System Components store and retrieve configuration data to modify windows settings, so we can use the registry to change many settings in one place. 50 | 51 | 52 | You can find information about the registry on [Wikipedia](https://www.wikiwand.com/en/Windows_Registry) and [Microsoft's Website](https://learn.microsoft.com/en-us/windows/win32/sysinfo/registry). 53 | 54 | ### Registry Key: Value 55 | 56 | **Type:** DWord 57 | 58 | **Original Value:** 1 59 | 60 | **New Value:** 0 61 | 62 | ### Registry Key: Value 63 | 64 | **Type:** DWord 65 | 66 | **Original Value:** 1 67 | 68 | **New Value:** 0 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json) 78 | 79 | -------------------------------------------------------------------------------- /docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableBGapps.md: -------------------------------------------------------------------------------- 1 | # Disable Background Apps 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | Disables all Microsoft Store apps from running in the background, which has to be done individually since Win11 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Disable Background Apps", 22 | "Description": "Disables all Microsoft Store apps from running in the background, which has to be done individually since Win11", 23 | "category": "z__Advanced Tweaks - CAUTION", 24 | "panel": "1", 25 | "Order": "a024_", 26 | "registry": [ 27 | { 28 | "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\BackgroundAccessApplications", 29 | "Name": "GlobalUserDisabled", 30 | "Value": "1", 31 | "OriginalValue": "0", 32 | "Type": "DWord" 33 | } 34 | ], 35 | "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableBGapps" 36 | } 37 | ``` 38 | 39 |
40 | 41 | ## Registry Changes 42 | Applications and System Components store and retrieve configuration data to modify windows settings, so we can use the registry to change many settings in one place. 43 | 44 | 45 | You can find information about the registry on [Wikipedia](https://www.wikiwand.com/en/Windows_Registry) and [Microsoft's Website](https://learn.microsoft.com/en-us/windows/win32/sysinfo/registry). 46 | 47 | ### Registry Key: GlobalUserDisabled 48 | 49 | **Type:** DWord 50 | 51 | **Original Value:** 0 52 | 53 | **New Value:** 1 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json) 63 | 64 | -------------------------------------------------------------------------------- /docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableFSO.md: -------------------------------------------------------------------------------- 1 | # Disable Fullscreen Optimizations 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | Disables FSO in all applications. NOTE: This will disable Color Management in Exclusive Fullscreen 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Disable Fullscreen Optimizations", 22 | "Description": "Disables FSO in all applications. NOTE: This will disable Color Management in Exclusive Fullscreen", 23 | "category": "z__Advanced Tweaks - CAUTION", 24 | "panel": "1", 25 | "Order": "a024_", 26 | "registry": [ 27 | { 28 | "Path": "HKCU:\\System\\GameConfigStore", 29 | "Name": "GameDVR_DXGIHonorFSEWindowsCompatible", 30 | "Value": "1", 31 | "OriginalValue": "0", 32 | "Type": "DWord" 33 | } 34 | ], 35 | "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableFSO" 36 | } 37 | ``` 38 | 39 |
40 | 41 | ## Registry Changes 42 | Applications and System Components store and retrieve configuration data to modify windows settings, so we can use the registry to change many settings in one place. 43 | 44 | 45 | You can find information about the registry on [Wikipedia](https://www.wikiwand.com/en/Windows_Registry) and [Microsoft's Website](https://learn.microsoft.com/en-us/windows/win32/sysinfo/registry). 46 | 47 | ### Registry Key: GameDVR_DXGIHonorFSEWindowsCompatible 48 | 49 | **Type:** DWord 50 | 51 | **Original Value:** 0 52 | 53 | **New Value:** 1 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json) 63 | 64 | -------------------------------------------------------------------------------- /docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableNotifications.md: -------------------------------------------------------------------------------- 1 | # Disable Notification Tray/Calendar 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | Disables all Notifications INCLUDING Calendar 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Disable Notification Tray/Calendar", 22 | "Description": "Disables all Notifications INCLUDING Calendar", 23 | "category": "z__Advanced Tweaks - CAUTION", 24 | "panel": "1", 25 | "Order": "a026_", 26 | "registry": [ 27 | { 28 | "Path": "HKCU:\\Software\\Policies\\Microsoft\\Windows\\Explorer", 29 | "Name": "DisableNotificationCenter", 30 | "Type": "DWord", 31 | "Value": "1", 32 | "OriginalValue": "0" 33 | }, 34 | { 35 | "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\PushNotifications", 36 | "Name": "ToastEnabled", 37 | "Type": "DWord", 38 | "Value": "0", 39 | "OriginalValue": "1" 40 | } 41 | ], 42 | "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableNotifications" 43 | } 44 | ``` 45 | 46 |
47 | 48 | ## Registry Changes 49 | Applications and System Components store and retrieve configuration data to modify windows settings, so we can use the registry to change many settings in one place. 50 | 51 | 52 | You can find information about the registry on [Wikipedia](https://www.wikiwand.com/en/Windows_Registry) and [Microsoft's Website](https://learn.microsoft.com/en-us/windows/win32/sysinfo/registry). 53 | 54 | ### Registry Key: DisableNotificationCenter 55 | 56 | **Type:** DWord 57 | 58 | **Original Value:** 0 59 | 60 | **New Value:** 1 61 | 62 | ### Registry Key: ToastEnabled 63 | 64 | **Type:** DWord 65 | 66 | **Original Value:** 1 67 | 68 | **New Value:** 0 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json) 78 | 79 | -------------------------------------------------------------------------------- /docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/Disableipsix.md: -------------------------------------------------------------------------------- 1 | # Disable IPv6 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | Disables IPv6. 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Disable IPv6", 22 | "Description": "Disables IPv6.", 23 | "category": "z__Advanced Tweaks - CAUTION", 24 | "panel": "1", 25 | "Order": "a023_", 26 | "registry": [ 27 | { 28 | "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters", 29 | "Name": "DisabledComponents", 30 | "Value": "255", 31 | "OriginalValue": "0", 32 | "Type": "DWord" 33 | } 34 | ], 35 | "InvokeScript": [ 36 | "Disable-NetAdapterBinding -Name \"*\" -ComponentID ms_tcpip6" 37 | ], 38 | "UndoScript": [ 39 | "Enable-NetAdapterBinding -Name \"*\" -ComponentID ms_tcpip6" 40 | ], 41 | "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/Disableipsix" 42 | } 43 | ``` 44 | 45 |
46 | 47 | ## Invoke Script 48 | 49 | ```powershell 50 | Disable-NetAdapterBinding -Name "*" -ComponentID ms_tcpip6 51 | 52 | ``` 53 | ## Undo Script 54 | 55 | ```powershell 56 | Enable-NetAdapterBinding -Name "*" -ComponentID ms_tcpip6 57 | 58 | ``` 59 | ## Registry Changes 60 | Applications and System Components store and retrieve configuration data to modify windows settings, so we can use the registry to change many settings in one place. 61 | 62 | 63 | You can find information about the registry on [Wikipedia](https://www.wikiwand.com/en/Windows_Registry) and [Microsoft's Website](https://learn.microsoft.com/en-us/windows/win32/sysinfo/registry). 64 | 65 | ### Registry Key: DisabledComponents 66 | 67 | **Type:** DWord 68 | 69 | **Original Value:** 0 70 | 71 | **New Value:** 255 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json) 81 | 82 | -------------------------------------------------------------------------------- /docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/OOSUbutton.md: -------------------------------------------------------------------------------- 1 | # Run OO Shutup 10 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | Preview Code 16 | 17 | ```json 18 | { 19 | "Content": "Run OO Shutup 10", 20 | "category": "z__Advanced Tweaks - CAUTION", 21 | "panel": "1", 22 | "Order": "a039_", 23 | "Type": "Button", 24 | "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/OOSUbutton" 25 | } 26 | ``` 27 | 28 |
29 | 30 | ## Function: Invoke-WPFOOSU 31 | 32 | ```powershell 33 | function Invoke-WPFOOSU { 34 | <# 35 | .SYNOPSIS 36 | Downloads and runs OO Shutup 10 37 | #> 38 | try { 39 | $OOSU_filepath = "$ENV:temp\OOSU10.exe" 40 | $Initial_ProgressPreference = $ProgressPreference 41 | $ProgressPreference = "SilentlyContinue" # Disables the Progress Bar to drasticly speed up Invoke-WebRequest 42 | Invoke-WebRequest -Uri "https://dl5.oo-software.com/files/ooshutup10/OOSU10.exe" -OutFile $OOSU_filepath 43 | Write-Host "Starting OO Shutup 10 ..." 44 | Start-Process $OOSU_filepath 45 | } catch { 46 | Write-Host "Error Downloading and Running OO Shutup 10" -ForegroundColor Red 47 | } 48 | finally { 49 | $ProgressPreference = $Initial_ProgressPreference 50 | } 51 | } 52 | 53 | ``` 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json) 62 | 63 | -------------------------------------------------------------------------------- /docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/Teredo.md: -------------------------------------------------------------------------------- 1 | # Disable Teredo 2 | 3 | Last Updated: 2024-08-27 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | Teredo network tunneling is a ipv6 feature that can cause additional latency, but may cause problems with some games 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Disable Teredo", 22 | "Description": "Teredo network tunneling is a ipv6 feature that can cause additional latency, but may cause problems with some games", 23 | "category": "z__Advanced Tweaks - CAUTION", 24 | "panel": "1", 25 | "Order": "a023_", 26 | "registry": [ 27 | { 28 | "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters", 29 | "Name": "DisabledComponents", 30 | "Value": "1", 31 | "OriginalValue": "0", 32 | "Type": "DWord" 33 | } 34 | ], 35 | "InvokeScript": [ 36 | "netsh interface teredo set state disabled" 37 | ], 38 | "UndoScript": [ 39 | "netsh interface teredo set state default" 40 | ], 41 | "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/Teredo" 42 | } 43 | ``` 44 | 45 |
46 | 47 | ## Invoke Script 48 | 49 | ```powershell 50 | netsh interface teredo set state disabled 51 | 52 | ``` 53 | ## Undo Script 54 | 55 | ```powershell 56 | netsh interface teredo set state default 57 | 58 | ``` 59 | ## Registry Changes 60 | Applications and System Components store and retrieve configuration data to modify windows settings, so we can use the registry to change many settings in one place. 61 | 62 | 63 | You can find information about the registry on [Wikipedia](https://www.wikiwand.com/en/Windows_Registry) and [Microsoft's Website](https://learn.microsoft.com/en-us/windows/win32/sysinfo/registry). 64 | 65 | ### Registry Key: DisabledComponents 66 | 67 | **Type:** DWord 68 | 69 | **Original Value:** 0 70 | 71 | **New Value:** 1 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json) 81 | 82 | -------------------------------------------------------------------------------- /docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/UTC.md: -------------------------------------------------------------------------------- 1 | # Set Time to UTC (Dual Boot) 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | ## Description 9 | 10 | Essential for computers that are dual booting. Fixes the time sync with Linux Systems. 11 | 12 | 13 | 14 | 15 | 16 |
17 | Preview Code 18 | 19 | ```json 20 | { 21 | "Content": "Set Time to UTC (Dual Boot)", 22 | "Description": "Essential for computers that are dual booting. Fixes the time sync with Linux Systems.", 23 | "category": "z__Advanced Tweaks - CAUTION", 24 | "panel": "1", 25 | "Order": "a027_", 26 | "registry": [ 27 | { 28 | "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\TimeZoneInformation", 29 | "Name": "RealTimeIsUniversal", 30 | "Type": "DWord", 31 | "Value": "1", 32 | "OriginalValue": "0" 33 | } 34 | ], 35 | "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/UTC" 36 | } 37 | ``` 38 | 39 |
40 | 41 | ## Registry Changes 42 | Applications and System Components store and retrieve configuration data to modify windows settings, so we can use the registry to change many settings in one place. 43 | 44 | 45 | You can find information about the registry on [Wikipedia](https://www.wikiwand.com/en/Windows_Registry) and [Microsoft's Website](https://learn.microsoft.com/en-us/windows/win32/sysinfo/registry). 46 | 47 | ### Registry Key: RealTimeIsUniversal 48 | 49 | **Type:** DWord 50 | 51 | **Original Value:** 0 52 | 53 | **New Value:** 1 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json) 63 | 64 | -------------------------------------------------------------------------------- /docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/changedns.md: -------------------------------------------------------------------------------- 1 | # DNS 2 | 3 | Last Updated: 2024-08-07 4 | 5 | 6 | !!! info 7 | The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.** 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | Preview Code 16 | 17 | ```json 18 | { 19 | "Content": "DNS", 20 | "category": "z__Advanced Tweaks - CAUTION", 21 | "panel": "1", 22 | "Order": "a040_", 23 | "Type": "Combobox", 24 | "ComboItems": "Default DHCP Google Cloudflare Cloudflare_Malware Cloudflare_Malware_Adult Open_DNS Quad9 AdGuard_Ads_Trackers AdGuard_Ads_Trackers_Malware_Adult", 25 | "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/changedns" 26 | } 27 | ``` 28 | 29 |
30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | [View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json) 38 | 39 | -------------------------------------------------------------------------------- /docs/faq.md: -------------------------------------------------------------------------------- 1 | # FAQ's 2 | 3 | ## How do I uninstall WinUtil? 4 | * You do not have to uninstall WinUtil. As it is a script you run from Powershell it only loads into your RAM. This means as soon as you close WinUtil it will be deleted off your system. 5 | 6 | ## I applied a tweak and now something doesn't work, what do I do? 7 | * If you applied a tweak and it breaks something, you can always revert the tweak by selecting the tweak and clicking "Undo Selected Tweaks". 8 | -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | # Welcome to the WinUtil Documentation! 2 | 3 | [![Version](https://img.shields.io/github/v/release/ChrisTitusTech/winutil?color=%230567ff&label=Latest%20Release&style=for-the-badge)](https://github.com/ChrisTitusTech/winutil/releases/latest) 4 | ![GitHub Downloads (specific asset, all releases)](https://img.shields.io/github/downloads/ChrisTitusTech/winutil/winutil.ps1?label=Total%20Downloads&style=for-the-badge) 5 | [![Discord Community Server](https://dcbadge.limes.pink/api/server/https://discord.gg/RUbZUZyByQ)](https://discord.gg/RUbZUZyByQ) 6 | 7 | Welcome to the official documentation for WinUtil, your go-to utility for optimizing and managing your Windows environment. Whether you’re an IT professional, power user, or regular user, WinUtil provides a comprehensive set of tools to enhance your Windows experience. 8 | 9 | ## Running the latest release of WinUtil 10 | 11 | * You will first need to start a Powershell terminal **as Admin**. 12 | * Now you can run the following command: 13 | ```ps1 14 | irm https://christitus.com/win | iex 15 | ``` 16 | 17 | !!! info 18 | 19 | WinUtil is updated weekly as of the time of writing. Consequently, features and functionalities may evolve, and the documentation may not always reflect the most current images or information. 20 | -------------------------------------------------------------------------------- /docs/stylesheets/extra.css: -------------------------------------------------------------------------------- 1 | /* Custom styles for MkDocs Material */ 2 | body { 3 | background-color: #c22525; 4 | } 5 | 6 | .md-nav__link { 7 | color: #ff5722; 8 | } 9 | 10 | .md-typeset h1 { 11 | font-size: 2.5em; 12 | color: #3f51b5; 13 | } 14 | -------------------------------------------------------------------------------- /functions/microwin/Microwin-Classes.ps1: -------------------------------------------------------------------------------- 1 | class ErroredPackage { 2 | [string]$PackageName 3 | [string]$ErrorMessage 4 | ErroredPackage() { $this.Init(@{} )} 5 | # Constructor for packages that have errored out 6 | ErroredPackage([string]$pkgName, [string]$reason) { 7 | $this.PackageName = $pkgName 8 | $this.ErrorMessage = $reason 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /functions/microwin/Microwin-GetLangFromCulture.ps1: -------------------------------------------------------------------------------- 1 | function Microwin-GetLangFromCulture { 2 | 3 | param ( 4 | [Parameter(Mandatory, Position = 0)] [string]$langName 5 | ) 6 | 7 | switch -Wildcard ($langName) 8 | { 9 | "ar*" { return "Arabic" } 10 | "pt-BR" { return "Brazilian Portuguese" } 11 | "bg*" { return "Bulgarian" } 12 | {($_ -eq "zh-CH") -or ($_ -like "zh-Hans*") -or ($_ -eq "zh-SG") -or ($_ -eq "zh-CHS")} { return "Chinese (Simplified)" } 13 | {($_ -eq "zh") -or ($_ -eq "zh-Hant") -or ($_ -eq "zh-HK") -or ($_ -eq "zh-MO") -or ($_ -eq "zh-TW") -or ($_ -eq "zh-CHT")} { return "Chinese (Traditional)" } 14 | "hr*" { return "Croatian" } 15 | "cs*" { return "Czech" } 16 | "da*" { return "Danish" } 17 | "nl*" { return "Dutch" } 18 | "en-US" { return "English" } 19 | {($_ -like "en*") -and ($_ -ne "en-US")} { return "English International" } 20 | "et*" { return "Estonian" } 21 | "fi*" { return "Finnish" } 22 | {($_ -like "fr*") -and ($_ -ne "fr-CA")} { return "French" } 23 | "fr-CA" { return "French Canadian" } 24 | "de*" { return "German" } 25 | "el*" { return "Greek" } 26 | "he*" { return "Hebrew" } 27 | "hu*" { return "Hungarian" } 28 | "it*" { return "Italian" } 29 | "ja*" { return "Japanese" } 30 | "ko*" { return "Korean" } 31 | "lv*" { return "Latvian" } 32 | "lt*" { return "Lituanian" } 33 | "nb*" { return "Norwegian" } 34 | "pl*" { return "Polish" } 35 | {($_ -like "pt*") -and ($_ -ne "pt-BR")} { return "Portuguese" } 36 | "ro*" { return "Romanian" } 37 | "ru*" { return "Russian" } 38 | "sr-Latn*" { return "Serbian Latin" } 39 | "sk*" { return "Slovak" } 40 | "sl*" { return "Slovenian" } 41 | {($_ -like "es*") -and ($_ -ne "es-MX")} { return "Spanish" } 42 | "es-MX" { return "Spanish (Mexico)" } 43 | "sv*" { return "Swedish" } 44 | "th*" { return "Thai" } 45 | "tr*" { return "Turkish" } 46 | "uk*" { return "Ukrainian" } 47 | default { return "English" } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /functions/microwin/Microwin-GetLocalizedUsers.ps1: -------------------------------------------------------------------------------- 1 | function Microwin-GetLocalizedUsers 2 | { 3 | <# 4 | .SYNOPSIS 5 | Gets a localized user group representation for ICACLS commands (Port from DISMTools PE Helper) 6 | .PARAMETER admins 7 | Determines whether to get a localized user group representation for the Administrators user group 8 | .OUTPUTS 9 | A string containing the localized user group 10 | .EXAMPLE 11 | Microwin-GetLocalizedUsers -admins $true 12 | #> 13 | param ( 14 | [Parameter(Mandatory = $true, Position = 0)] [bool]$admins 15 | ) 16 | if ($admins) { 17 | return (Get-LocalGroup | Where-Object { $_.SID.Value -like "S-1-5-32-544" }).Name 18 | } else { 19 | return (Get-LocalGroup | Where-Object { $_.SID.Value -like "S-1-5-32-545" }).Name 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /functions/microwin/Microwin-GetOscdimg.ps1: -------------------------------------------------------------------------------- 1 | function Microwin-GetOscdimg { 2 | <# 3 | .DESCRIPTION 4 | This function will download oscdimg file from github Release folders and put it into env:temp folder 5 | 6 | .EXAMPLE 7 | Microwin-GetOscdimg 8 | #> 9 | 10 | param( 11 | [Parameter(Mandatory, position=0)] 12 | [string]$oscdimgPath 13 | ) 14 | 15 | $oscdimgPath = "$env:TEMP\oscdimg.exe" 16 | $downloadUrl = "https://github.com/ChrisTitusTech/winutil/raw/main/releases/oscdimg.exe" 17 | Invoke-RestMethod -Uri $downloadUrl -OutFile $oscdimgPath 18 | $hashResult = Get-FileHash -Path $oscdimgPath -Algorithm SHA256 19 | $sha256Hash = $hashResult.Hash 20 | 21 | Write-Host "[INFO] oscdimg.exe SHA-256 Hash: $sha256Hash" 22 | 23 | $expectedHash = "AB9E161049D293B544961BFDF2D61244ADE79376D6423DF4F60BF9B147D3C78D" # Replace with the actual expected hash 24 | if ($sha256Hash -eq $expectedHash) { 25 | Write-Host "Hashes match. File is verified." 26 | } else { 27 | Write-Host "Hashes do not match. File may be corrupted or tampered with." 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /functions/microwin/Microwin-RemoveFileOrDirectory.ps1: -------------------------------------------------------------------------------- 1 | function Microwin-RemoveFileOrDirectory([string]$pathToDelete, [string]$mask = "", [switch]$Directory = $false) { 2 | if(([string]::IsNullOrEmpty($pathToDelete))) { return } 3 | if (-not (Test-Path -Path "$($pathToDelete)")) { return } 4 | 5 | $yesNo = Get-LocalizedYesNo 6 | Write-Host "[INFO] In Your local takeown expects '$($yesNo[0])' as a Yes answer." 7 | 8 | $itemsToDelete = [System.Collections.ArrayList]::new() 9 | 10 | if ($mask -eq "") { 11 | Write-Debug "Adding $($pathToDelete) to array." 12 | [void]$itemsToDelete.Add($pathToDelete) 13 | } else { 14 | Write-Debug "Adding $($pathToDelete) to array and mask is $($mask)" 15 | if ($Directory) { 16 | $itemsToDelete = Get-ChildItem $pathToDelete -Include $mask -Recurse -Directory 17 | } else { 18 | $itemsToDelete = Get-ChildItem $pathToDelete -Include $mask -Recurse 19 | } 20 | } 21 | 22 | foreach($itemToDelete in $itemsToDelete) { 23 | $status = "Deleting $($itemToDelete)" 24 | Write-Progress -Activity "Removing Items" -Status $status -PercentComplete ($counter++/$itemsToDelete.Count*100) 25 | 26 | if (Test-Path -Path "$($itemToDelete)" -PathType Container) { 27 | $status = "Deleting directory: $($itemToDelete)" 28 | 29 | takeown /r /d $yesNo[0] /a /f "$($itemToDelete)" 30 | icacls "$($itemToDelete)" /q /c /t /reset 31 | icacls $itemToDelete /setowner "*S-1-5-32-544" 32 | icacls $itemToDelete /grant "*S-1-5-32-544:(OI)(CI)F" /t /c /q 33 | Remove-Item -Force -Recurse "$($itemToDelete)" 34 | } 35 | elseif (Test-Path -Path "$($itemToDelete)" -PathType Leaf) { 36 | $status = "Deleting file: $($itemToDelete)" 37 | 38 | takeown /a /f "$($itemToDelete)" 39 | icacls "$($itemToDelete)" /q /c /t /reset 40 | icacls "$($itemToDelete)" /setowner "*S-1-5-32-544" 41 | icacls "$($itemToDelete)" /grant "*S-1-5-32-544:(OI)(CI)F" /t /c /q 42 | Remove-Item -Force "$($itemToDelete)" 43 | } 44 | } 45 | Write-Progress -Activity "Removing Items" -Status "Ready" -Completed 46 | } 47 | -------------------------------------------------------------------------------- /functions/microwin/Microwin-TestCompatibleImage.ps1: -------------------------------------------------------------------------------- 1 | function Microwin-TestCompatibleImage() { 2 | <# 3 | .SYNOPSIS 4 | Checks the version of a Windows image and determines whether or not it is compatible with a specific feature depending on a desired version 5 | 6 | .PARAMETER Name 7 | imgVersion - The version of the Windows image 8 | desiredVersion - The version to compare the image version with 9 | #> 10 | 11 | param 12 | ( 13 | [Parameter(Mandatory, position=0)] 14 | [string]$imgVersion, 15 | 16 | [Parameter(Mandatory, position=1)] 17 | [Version]$desiredVersion 18 | ) 19 | 20 | try { 21 | $version = [Version]$imgVersion 22 | return $version -ge $desiredVersion 23 | } catch { 24 | return $False 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /functions/private/Copy-Files.ps1: -------------------------------------------------------------------------------- 1 | function Copy-Files { 2 | <# 3 | 4 | .DESCRIPTION 5 | Copies the contents of a given ISO file to a given destination 6 | .PARAMETER Path 7 | The source of the files to copy 8 | .PARAMETER Destination 9 | The destination to copy the files to 10 | .PARAMETER Recurse 11 | Determines whether or not to copy all files of the ISO file, including those in subdirectories 12 | .PARAMETER Force 13 | Determines whether or not to overwrite existing files 14 | .EXAMPLE 15 | Copy-Files "D:" "C:\ISOFile" -Recurse -Force 16 | 17 | #> 18 | param ( 19 | [string]$Path, 20 | [string]$Destination, 21 | [switch]$Recurse = $false, 22 | [switch]$Force = $false 23 | ) 24 | 25 | try { 26 | 27 | $files = Get-ChildItem -Path $path -Recurse:$recurse 28 | Write-Host "Copy $($files.Count) file(s) from $path to $destination" 29 | 30 | foreach ($file in $files) { 31 | $status = "Copying file {0} of {1}: {2}" -f $counter, $files.Count, $file.Name 32 | Write-Progress -Activity "Copy disc image files" -Status $status -PercentComplete ($counter++/$files.count*100) 33 | $restpath = $file.FullName -Replace $path, '' 34 | 35 | if ($file.PSIsContainer -eq $true) { 36 | Write-Debug "Creating $($destination + $restpath)" 37 | New-Item ($destination+$restpath) -Force:$force -Type Directory -ErrorAction SilentlyContinue 38 | } else { 39 | Write-Debug "Copy from $($file.FullName) to $($destination+$restpath)" 40 | Copy-Item $file.FullName ($destination+$restpath) -ErrorAction SilentlyContinue -Force:$force 41 | Set-ItemProperty -Path ($destination+$restpath) -Name IsReadOnly -Value $false 42 | } 43 | } 44 | Write-Progress -Activity "Copy disc image files" -Status "Ready" -Completed 45 | } catch { 46 | Write-Host "Unable to Copy all the files due to an unhandled exception" -ForegroundColor Yellow 47 | Write-Host "Error information: $($_.Exception.Message)`n" -ForegroundColor Yellow 48 | Write-Host "Additional information:" -ForegroundColor Yellow 49 | Write-Host $PSItem.Exception.StackTrace 50 | # Write possible suggestions 51 | Write-Host "`nIf you are using an antivirus, try configuring exclusions" 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /functions/private/Find-AppsByNameOrDescription.ps1: -------------------------------------------------------------------------------- 1 | function Find-AppsByNameOrDescription { 2 | <# 3 | .SYNOPSIS 4 | Searches through the Apps on the Install Tab and hides all entries that do not match the string 5 | 6 | .PARAMETER SearchString 7 | The string to be searched for 8 | #> 9 | param( 10 | [Parameter(Mandatory=$false)] 11 | [string]$SearchString = "" 12 | ) 13 | # Reset the visibility if the search string is empty or the search is cleared 14 | if ([string]::IsNullOrWhiteSpace($SearchString)) { 15 | $sync.ItemsControl.Items | ForEach-Object { 16 | $_.Visibility = [Windows.Visibility]::Visible 17 | $_.Children | ForEach-Object { 18 | if ($null -ne $_) { 19 | $_.Visibility = [Windows.Visibility]::Visible 20 | } 21 | 22 | } 23 | } 24 | return 25 | } 26 | $sync.ItemsControl.Items | ForEach-Object { 27 | # Ensure ToggleButtons remain visible 28 | if ($_.Tag -like "CategoryToggleButton") { 29 | $_.Visibility = [Windows.Visibility]::Visible 30 | return 31 | } 32 | # Hide all CategoryWrapPanel and ToggleButton 33 | $_.Visibility = [Windows.Visibility]::Collapsed 34 | if ($_.Tag -like "CategoryWrapPanel_*") { 35 | # Search for Apps that match the search string 36 | $_.Children | Foreach-Object { 37 | $appEntry = $sync.configs.applicationsHashtable.$($_.Tag) 38 | if ($appEntry.Content -like "*$SearchString*" -or $appEntry.Description -like "*$SearchString*") { 39 | # Show the App and the parent CategoryWrapPanel if the string is found 40 | $_.Visibility = [Windows.Visibility]::Visible 41 | $_.parent.Visibility = [Windows.Visibility]::Visible 42 | } 43 | else { 44 | $_.Visibility = [Windows.Visibility]::Collapsed 45 | } 46 | } 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /functions/private/Get-LocalizedYesNo.ps1: -------------------------------------------------------------------------------- 1 | function Get-LocalizedYesNo { 2 | <# 3 | .SYNOPSIS 4 | This function runs choice.exe and captures its output to extract yes no in a localized Windows 5 | 6 | .DESCRIPTION 7 | The function retrieves the output of the command 'cmd /c "choice nul"' and converts the default output for Yes and No 8 | in the localized format, such as "Yes=, No=". 9 | 10 | .EXAMPLE 11 | $yesNoArray = Get-LocalizedYesNo 12 | Write-Host "Yes=$($yesNoArray[0]), No=$($yesNoArray[1])" 13 | #> 14 | 15 | # Run choice and capture its options as output 16 | # The output shows the options for Yes and No as "[Y,N]?" in the (partitially) localized format. 17 | # eg. English: [Y,N]? 18 | # Dutch: [Y,N]? 19 | # German: [J,N]? 20 | # French: [O,N]? 21 | # Spanish: [S,N]? 22 | # Italian: [S,N]? 23 | # Russian: [Y,N]? 24 | 25 | $line = cmd /c "choice nul" 26 | $charactersArray = @() 27 | $regexPattern = '([a-zA-Z])' 28 | $charactersArray = [regex]::Matches($line, $regexPattern) | ForEach-Object { $_.Groups[1].Value } 29 | 30 | Write-Debug "According to takeown.exe local Yes is $charactersArray[0]" 31 | # Return the array of characters 32 | return $charactersArray 33 | 34 | } 35 | -------------------------------------------------------------------------------- /functions/private/Get-WPFObjectName.ps1: -------------------------------------------------------------------------------- 1 | function Get-WPFObjectName { 2 | <# 3 | .SYNOPSIS 4 | This is a helper function that generates an objectname with the prefix WPF that can be used as a Powershell Variable after compilation. 5 | To achieve this, all characters that are not a-z, A-Z or 0-9 are simply removed from the name. 6 | 7 | .PARAMETER type 8 | The type of object for which the name should be generated. (e.g. Label, Button, CheckBox...) 9 | 10 | .PARAMETER name 11 | The name or description to be used for the object. (invalid characters are removed) 12 | 13 | .OUTPUTS 14 | A string that can be used as a object/variable name in powershell. 15 | For example: WPFLabelMicrosoftTools 16 | 17 | .EXAMPLE 18 | Get-WPFObjectName -type Label -name "Microsoft Tools" 19 | #> 20 | 21 | param( 22 | [Parameter(Mandatory, position=0)] 23 | [string]$type, 24 | 25 | [Parameter(position=1)] 26 | [string]$name 27 | ) 28 | 29 | $Output = $("WPF"+$type+$name) -replace '[^a-zA-Z0-9]', '' 30 | return $Output 31 | } 32 | -------------------------------------------------------------------------------- /functions/private/Get-WinUtilInstallerProcess.ps1: -------------------------------------------------------------------------------- 1 | function Get-WinUtilInstallerProcess { 2 | <# 3 | 4 | .SYNOPSIS 5 | Checks if the given process is running 6 | 7 | .PARAMETER Process 8 | The process to check 9 | 10 | .OUTPUTS 11 | Boolean - True if the process is running 12 | 13 | #> 14 | 15 | param($Process) 16 | 17 | if ($Null -eq $Process) { 18 | return $false 19 | } 20 | if (Get-Process -Id $Process.Id -ErrorAction SilentlyContinue) { 21 | return $true 22 | } 23 | return $false 24 | } 25 | -------------------------------------------------------------------------------- /functions/private/Get-WinUtilSelectedPackages.ps1: -------------------------------------------------------------------------------- 1 | function Get-WinUtilSelectedPackages 2 | { 3 | <# 4 | .SYNOPSIS 5 | Sorts given packages based on installer preference and availability. 6 | 7 | .OUTPUTS 8 | Hashtable. Key = Package Manager, Value = ArrayList of packages to install 9 | #> 10 | param ( 11 | [Parameter(Mandatory=$true)] 12 | $PackageList, 13 | [Parameter(Mandatory=$true)] 14 | [PackageManagers]$Preference 15 | ) 16 | 17 | if ($PackageList.count -eq 1) { 18 | $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" }) 19 | } else { 20 | $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" }) 21 | } 22 | 23 | $packages = [System.Collections.Hashtable]::new() 24 | $packagesWinget = [System.Collections.ArrayList]::new() 25 | $packagesChoco = [System.Collections.ArrayList]::new() 26 | $packages[[PackageManagers]::Winget] = $packagesWinget 27 | $packages[[PackageManagers]::Choco] = $packagesChoco 28 | 29 | Write-Debug "Checking packages using Preference '$($Preference)'" 30 | 31 | foreach ($package in $PackageList) { 32 | switch ($Preference) { 33 | "Choco" { 34 | if ($package.choco -eq "na") { 35 | Write-Debug "$($package.content) has no Choco value." 36 | $packagesWinget.add($package.winget) 37 | Write-Host "Queueing $($package.winget) for Winget" 38 | } else { 39 | $null = $packagesChoco.add($package.choco) 40 | Write-Host "Queueing $($package.choco) for Chocolatey" 41 | } 42 | break 43 | } 44 | "Winget" { 45 | if ($package.winget -eq "na") { 46 | Write-Debug "$($package.content) has no Winget value." 47 | $packagesChoco.add($package.choco) 48 | Write-Host "Queueing $($package.choco) for Chocolatey" 49 | } else { 50 | $null = $packagesWinget.add($($package.winget)) 51 | Write-Host "Queueing $($package.winget) for Winget" 52 | } 53 | break 54 | } 55 | } 56 | } 57 | 58 | return $packages 59 | } 60 | -------------------------------------------------------------------------------- /functions/private/Get-WinUtilVariables.ps1: -------------------------------------------------------------------------------- 1 | function Get-WinUtilVariables { 2 | 3 | <# 4 | .SYNOPSIS 5 | Gets every form object of the provided type 6 | 7 | .OUTPUTS 8 | List containing every object that matches the provided type 9 | #> 10 | param ( 11 | [Parameter()] 12 | [string[]]$Type 13 | ) 14 | $keys = ($sync.keys).where{ $_ -like "WPF*" } 15 | if ($Type) { 16 | $output = $keys | ForEach-Object { 17 | try { 18 | $objType = $sync["$psitem"].GetType().Name 19 | if ($Type -contains $objType) { 20 | Write-Output $psitem 21 | } 22 | } catch { 23 | <#I am here so errors don't get outputted for a couple variables that don't have the .GetType() attribute#> 24 | } 25 | } 26 | return $output 27 | } 28 | return $keys 29 | } 30 | -------------------------------------------------------------------------------- /functions/private/Install-WinUtilChoco.ps1: -------------------------------------------------------------------------------- 1 | function Install-WinUtilChoco { 2 | 3 | <# 4 | 5 | .SYNOPSIS 6 | Installs Chocolatey if it is not already installed 7 | 8 | #> 9 | 10 | try { 11 | Write-Host "Checking if Chocolatey is Installed..." 12 | 13 | if((Test-WinUtilPackageManager -choco) -eq "installed") { 14 | return 15 | } 16 | # Install logic taken from https://chocolatey.org/install#individual 17 | Write-Host "Seems Chocolatey is not installed, installing now." 18 | Set-ExecutionPolicy Bypass -Scope Process -Force; 19 | [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; 20 | Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) 21 | 22 | } catch { 23 | Write-Host "===========================================" -Foregroundcolor Red 24 | Write-Host "-- Chocolatey failed to install ---" -Foregroundcolor Red 25 | Write-Host "===========================================" -Foregroundcolor Red 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /functions/private/Invoke-WinUtilExplorerUpdate.ps1: -------------------------------------------------------------------------------- 1 | function Invoke-WinUtilExplorerUpdate { 2 | <# 3 | .SYNOPSIS 4 | Refreshes the Windows Explorer 5 | #> 6 | 7 | param ( 8 | [string]$action = "refresh" 9 | ) 10 | 11 | if ($action -eq "refresh") { 12 | Invoke-WPFRunspace -DebugPreference $DebugPreference -ScriptBlock { 13 | # Send the WM_SETTINGCHANGE message to all windows 14 | Add-Type -TypeDefinition @" 15 | using System; 16 | using System.Runtime.InteropServices; 17 | public class Win32 { 18 | [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)] 19 | public static extern IntPtr SendMessageTimeout( 20 | IntPtr hWnd, 21 | uint Msg, 22 | IntPtr wParam, 23 | string lParam, 24 | uint fuFlags, 25 | uint uTimeout, 26 | out IntPtr lpdwResult); 27 | } 28 | "@ 29 | 30 | $HWND_BROADCAST = [IntPtr]0xffff 31 | $WM_SETTINGCHANGE = 0x1A 32 | $SMTO_ABORTIFHUNG = 0x2 33 | $timeout = 100 34 | 35 | # Send the broadcast message to all windows 36 | [Win32]::SendMessageTimeout($HWND_BROADCAST, $WM_SETTINGCHANGE, [IntPtr]::Zero, "ImmersiveColorSet", $SMTO_ABORTIFHUNG, $timeout, [ref]([IntPtr]::Zero)) 37 | } 38 | } elseif ($action -eq "restart") { 39 | # Restart the Windows Explorer 40 | taskkill.exe /F /IM "explorer.exe" 41 | Start-Process "explorer.exe" 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /functions/private/Invoke-WinUtilFeatureInstall.ps1: -------------------------------------------------------------------------------- 1 | function Invoke-WinUtilFeatureInstall { 2 | <# 3 | 4 | .SYNOPSIS 5 | Converts all the values from the tweaks.json and routes them to the appropriate function 6 | 7 | #> 8 | 9 | param( 10 | $CheckBox 11 | ) 12 | 13 | $x = 0 14 | 15 | $CheckBox | ForEach-Object { 16 | if($sync.configs.feature.$psitem.feature) { 17 | Foreach( $feature in $sync.configs.feature.$psitem.feature ) { 18 | try { 19 | Write-Host "Installing $feature" 20 | Enable-WindowsOptionalFeature -Online -FeatureName $feature -All -NoRestart 21 | } catch { 22 | if ($psitem.Exception.Message -like "*requires elevation*") { 23 | Write-Warning "Unable to Install $feature due to permissions. Are you running as admin?" 24 | $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Error" }) 25 | } else { 26 | 27 | Write-Warning "Unable to Install $feature due to unhandled exception" 28 | Write-Warning $psitem.Exception.StackTrace 29 | } 30 | } 31 | } 32 | } 33 | if($sync.configs.feature.$psitem.InvokeScript) { 34 | Foreach( $script in $sync.configs.feature.$psitem.InvokeScript ) { 35 | try { 36 | $Scriptblock = [scriptblock]::Create($script) 37 | 38 | Write-Host "Running Script for $psitem" 39 | Invoke-Command $scriptblock -ErrorAction stop 40 | } catch { 41 | if ($psitem.Exception.Message -like "*requires elevation*") { 42 | Write-Warning "Unable to Install $feature due to permissions. Are you running as admin?" 43 | $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Error" }) 44 | } else { 45 | $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Error" }) 46 | Write-Warning "Unable to Install $feature due to unhandled exception" 47 | Write-Warning $psitem.Exception.StackTrace 48 | } 49 | } 50 | } 51 | } 52 | $X++ 53 | $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -value ($x/$CheckBox.Count) }) 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /functions/private/Invoke-WinUtilGPU.ps1: -------------------------------------------------------------------------------- 1 | function Invoke-WinUtilGPU { 2 | $gpuInfo = Get-CimInstance Win32_VideoController 3 | 4 | # GPUs to blacklist from using Demanding Theming 5 | $lowPowerGPUs = ( 6 | "*NVIDIA GeForce*M*", 7 | "*NVIDIA GeForce*Laptop*", 8 | "*NVIDIA GeForce*GT*", 9 | "*AMD Radeon(TM)*", 10 | "*Intel(R) HD Graphics*", 11 | "*UHD*" 12 | 13 | ) 14 | 15 | foreach ($gpu in $gpuInfo) { 16 | foreach ($gpuPattern in $lowPowerGPUs) { 17 | if ($gpu.Name -like $gpuPattern) { 18 | return $false 19 | } 20 | } 21 | } 22 | return $true 23 | } 24 | -------------------------------------------------------------------------------- /functions/private/Invoke-WinUtilScript.ps1: -------------------------------------------------------------------------------- 1 | function Invoke-WinUtilScript { 2 | <# 3 | 4 | .SYNOPSIS 5 | Invokes the provided scriptblock. Intended for things that can't be handled with the other functions. 6 | 7 | .PARAMETER Name 8 | The name of the scriptblock being invoked 9 | 10 | .PARAMETER scriptblock 11 | The scriptblock to be invoked 12 | 13 | .EXAMPLE 14 | $Scriptblock = [scriptblock]::Create({"Write-output 'Hello World'"}) 15 | Invoke-WinUtilScript -ScriptBlock $scriptblock -Name "Hello World" 16 | 17 | #> 18 | param ( 19 | $Name, 20 | [scriptblock]$scriptblock 21 | ) 22 | 23 | try { 24 | Write-Host "Running Script for $name" 25 | Invoke-Command $scriptblock -ErrorAction Stop 26 | } catch [System.Management.Automation.CommandNotFoundException] { 27 | Write-Warning "The specified command was not found." 28 | Write-Warning $PSItem.Exception.message 29 | } catch [System.Management.Automation.RuntimeException] { 30 | Write-Warning "A runtime exception occurred." 31 | Write-Warning $PSItem.Exception.message 32 | } catch [System.Security.SecurityException] { 33 | Write-Warning "A security exception occurred." 34 | Write-Warning $PSItem.Exception.message 35 | } catch [System.UnauthorizedAccessException] { 36 | Write-Warning "Access denied. You do not have permission to perform this operation." 37 | Write-Warning $PSItem.Exception.message 38 | } catch { 39 | # Generic catch block to handle any other type of exception 40 | Write-Warning "Unable to run script for $name due to unhandled exception" 41 | Write-Warning $psitem.Exception.StackTrace 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /functions/private/Invoke-WinUtilSponsors.ps1: -------------------------------------------------------------------------------- 1 | Function Invoke-WinUtilSponsors { 2 | <# 3 | .SYNOPSIS 4 | Lists Sponsors from ChrisTitusTech 5 | .DESCRIPTION 6 | Lists Sponsors from ChrisTitusTech 7 | .EXAMPLE 8 | Invoke-WinUtilSponsors 9 | .NOTES 10 | This function is used to list sponsors from ChrisTitusTech 11 | #> 12 | try { 13 | # Define the URL and headers 14 | $url = "https://github.com/sponsors/ChrisTitusTech" 15 | $headers = @{ 16 | "User-Agent" = "Chrome/58.0.3029.110" 17 | } 18 | 19 | # Fetch the webpage content 20 | try { 21 | $html = Invoke-RestMethod -Uri $url -Headers $headers 22 | } catch { 23 | Write-Output $_.Exception.Message 24 | exit 25 | } 26 | 27 | # Use regex to extract the content between "Current sponsors" and "Past sponsors" 28 | $currentSponsorsPattern = '(?s)(?<=Current sponsors).*?(?=Past sponsors)' 29 | $currentSponsorsHtml = [regex]::Match($html, $currentSponsorsPattern).Value 30 | 31 | # Use regex to extract the sponsor usernames from the alt attributes in the "Current Sponsors" section 32 | $sponsorPattern = '(?<=alt="@)[^"]+' 33 | $sponsors = [regex]::Matches($currentSponsorsHtml, $sponsorPattern) | ForEach-Object { $_.Value } 34 | 35 | # Exclude "ChrisTitusTech" from the sponsors 36 | $sponsors = $sponsors | Where-Object { $_ -ne "ChrisTitusTech" } 37 | 38 | # Return the sponsors 39 | return $sponsors 40 | } catch { 41 | Write-Error "An error occurred while fetching or processing the sponsors: $_" 42 | return $null 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /functions/private/Remove-WinUtilAPPX.ps1: -------------------------------------------------------------------------------- 1 | function Remove-WinUtilAPPX { 2 | <# 3 | 4 | .SYNOPSIS 5 | Removes all APPX packages that match the given name 6 | 7 | .PARAMETER Name 8 | The name of the APPX package to remove 9 | 10 | .EXAMPLE 11 | Remove-WinUtilAPPX -Name "Microsoft.Microsoft3DViewer" 12 | 13 | #> 14 | param ( 15 | $Name 16 | ) 17 | 18 | try { 19 | Write-Host "Removing $Name" 20 | Get-AppxPackage "*$Name*" | Remove-AppxPackage -ErrorAction SilentlyContinue 21 | Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like "*$Name*" | Remove-AppxProvisionedPackage -Online -ErrorAction SilentlyContinue 22 | } catch [System.Exception] { 23 | if ($psitem.Exception.Message -like "*The requested operation requires elevation*") { 24 | Write-Warning "Unable to uninstall $name due to a Security Exception" 25 | } else { 26 | Write-Warning "Unable to uninstall $name due to unhandled exception" 27 | Write-Warning $psitem.Exception.StackTrace 28 | } 29 | } catch { 30 | Write-Warning "Unable to uninstall $name due to unhandled exception" 31 | Write-Warning $psitem.Exception.StackTrace 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /functions/private/Set-PackageManagerPreference.ps1: -------------------------------------------------------------------------------- 1 | function Set-PackageManagerPreference { 2 | <# 3 | .SYNOPSIS 4 | Sets the currently selected package manager to global "ManagerPreference" in sync. 5 | Also persists preference across Winutil restarts via preference.ini. 6 | 7 | Reads from preference.ini if no argument sent. 8 | 9 | .PARAMETER preferedPackageManager 10 | The PackageManager that was selected. 11 | #> 12 | param( 13 | [Parameter(Position=0, Mandatory=$false)] 14 | [PackageManagers]$preferedPackageManager 15 | ) 16 | 17 | $preferencePath = "$env:LOCALAPPDATA\winutil\preferences.ini" 18 | $oldChocoPath = "$env:LOCALAPPDATA\winutil\preferChocolatey.ini" 19 | 20 | #Try loading from file if no argument given. 21 | if ($null -eq $preferedPackageManager) { 22 | # Backwards compat for preferChocolatey.ini 23 | if (Test-Path -Path $oldChocoPath) { 24 | $preferedPackageManager = [PackageManagers]::Choco 25 | Remove-Item -Path $oldChocoPath 26 | } 27 | elseif (Test-Path -Path $preferencePath) { 28 | $potential = Get-Content -Path $preferencePath -TotalCount 1 29 | $preferedPackageManager = [PackageManagers]$potential 30 | } 31 | else { 32 | Write-Debug "Creating new preference file, defaulting to winget." 33 | $preferedPackageManager = [PackageManagers]::Winget 34 | } 35 | } 36 | 37 | $sync["ManagerPreference"] = [PackageManagers]::$preferedPackageManager 38 | Write-Debug "Manager Preference changed to '$($sync["ManagerPreference"])'" 39 | 40 | 41 | # Write preference to file to persist across restarts. 42 | Out-File -FilePath $preferencePath -InputObject $sync["ManagerPreference"] 43 | } 44 | -------------------------------------------------------------------------------- /functions/private/Set-WinUtilDNS.ps1: -------------------------------------------------------------------------------- 1 | function Set-WinUtilDNS { 2 | <# 3 | 4 | .SYNOPSIS 5 | Sets the DNS of all interfaces that are in the "Up" state. It will lookup the values from the DNS.Json file 6 | 7 | .PARAMETER DNSProvider 8 | The DNS provider to set the DNS server to 9 | 10 | .EXAMPLE 11 | Set-WinUtilDNS -DNSProvider "google" 12 | 13 | #> 14 | param($DNSProvider) 15 | if($DNSProvider -eq "Default") {return} 16 | try { 17 | $Adapters = Get-NetAdapter | Where-Object {$_.Status -eq "Up"} 18 | Write-Host "Ensuring DNS is set to $DNSProvider on the following interfaces" 19 | Write-Host $($Adapters | Out-String) 20 | 21 | Foreach ($Adapter in $Adapters) { 22 | if($DNSProvider -eq "DHCP") { 23 | Set-DnsClientServerAddress -InterfaceIndex $Adapter.ifIndex -ResetServerAddresses 24 | } else { 25 | Set-DnsClientServerAddress -InterfaceIndex $Adapter.ifIndex -ServerAddresses ("$($sync.configs.dns.$DNSProvider.Primary)", "$($sync.configs.dns.$DNSProvider.Secondary)") 26 | Set-DnsClientServerAddress -InterfaceIndex $Adapter.ifIndex -ServerAddresses ("$($sync.configs.dns.$DNSProvider.Primary6)", "$($sync.configs.dns.$DNSProvider.Secondary6)") 27 | } 28 | } 29 | } catch { 30 | Write-Warning "Unable to set DNS Provider due to an unhandled exception" 31 | Write-Warning $psitem.Exception.StackTrace 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /functions/private/Set-WinUtilProgressbar.ps1: -------------------------------------------------------------------------------- 1 | function Set-WinUtilProgressbar{ 2 | <# 3 | .SYNOPSIS 4 | This function is used to Update the Progress Bar displayed in the winutil GUI. 5 | It will be automatically hidden if the user clicks something and no process is running 6 | .PARAMETER Label 7 | The Text to be overlayed onto the Progress Bar 8 | .PARAMETER PERCENT 9 | The percentage of the Progress Bar that should be filled (0-100) 10 | .PARAMETER Hide 11 | If provided, the Progress Bar and the label will be hidden 12 | #> 13 | param( 14 | [string]$Label, 15 | [ValidateRange(0,100)] 16 | [int]$Percent, 17 | $Hide 18 | ) 19 | if ($hide) { 20 | $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBarLabel.Visibility = "Collapsed"}) 21 | $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBar.Visibility = "Collapsed"}) 22 | } else { 23 | $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBarLabel.Visibility = "Visible"}) 24 | $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBar.Visibility = "Visible"}) 25 | } 26 | $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBarLabel.Content.Text = $label}) 27 | $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBarLabel.Content.ToolTip = $label}) 28 | $sync.form.Dispatcher.Invoke([action]{ $sync.ProgressBar.Value = $percent}) 29 | 30 | } 31 | -------------------------------------------------------------------------------- /functions/private/Set-WinUtilRegistry.ps1: -------------------------------------------------------------------------------- 1 | function Set-WinUtilRegistry { 2 | <# 3 | 4 | .SYNOPSIS 5 | Modifies the registry based on the given inputs 6 | 7 | .PARAMETER Name 8 | The name of the key to modify 9 | 10 | .PARAMETER Path 11 | The path to the key 12 | 13 | .PARAMETER Type 14 | The type of value to set the key to 15 | 16 | .PARAMETER Value 17 | The value to set the key to 18 | 19 | .EXAMPLE 20 | Set-WinUtilRegistry -Name "PublishUserActivities" -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Type "DWord" -Value "0" 21 | 22 | #> 23 | param ( 24 | $Name, 25 | $Path, 26 | $Type, 27 | $Value 28 | ) 29 | 30 | try { 31 | if(!(Test-Path 'HKU:\')) {New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS} 32 | 33 | If (!(Test-Path $Path)) { 34 | Write-Host "$Path was not found, Creating..." 35 | New-Item -Path $Path -Force -ErrorAction Stop | Out-Null 36 | } 37 | 38 | if ($Value -ne "") { 39 | Write-Host "Set $Path\$Name to $Value" 40 | Set-ItemProperty -Path $Path -Name $Name -Type $Type -Value $Value -Force -ErrorAction Stop | Out-Null 41 | } 42 | else{ 43 | Write-Host "Remove $Path\$Name" 44 | Remove-ItemProperty -Path $Path -Name $Name -Force -ErrorAction Stop | Out-Null 45 | } 46 | } catch [System.Security.SecurityException] { 47 | Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" 48 | } catch [System.Management.Automation.ItemNotFoundException] { 49 | Write-Warning $psitem.Exception.ErrorRecord 50 | } catch [System.UnauthorizedAccessException] { 51 | Write-Warning $psitem.Exception.Message 52 | } catch { 53 | Write-Warning "Unable to set $Name due to unhandled exception" 54 | Write-Warning $psitem.Exception.StackTrace 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /functions/private/Set-WinUtilScheduledTask.ps1: -------------------------------------------------------------------------------- 1 | function Set-WinUtilScheduledTask { 2 | <# 3 | 4 | .SYNOPSIS 5 | Enables/Disables the provided Scheduled Task 6 | 7 | .PARAMETER Name 8 | The path to the Scheduled Task 9 | 10 | .PARAMETER State 11 | The State to set the Task to 12 | 13 | .EXAMPLE 14 | Set-WinUtilScheduledTask -Name "Microsoft\Windows\Application Experience\Microsoft Compatibility Appraiser" -State "Disabled" 15 | 16 | #> 17 | param ( 18 | $Name, 19 | $State 20 | ) 21 | 22 | try { 23 | if($State -eq "Disabled") { 24 | Write-Host "Disabling Scheduled Task $Name" 25 | Disable-ScheduledTask -TaskName $Name -ErrorAction Stop 26 | } 27 | if($State -eq "Enabled") { 28 | Write-Host "Enabling Scheduled Task $Name" 29 | Enable-ScheduledTask -TaskName $Name -ErrorAction Stop 30 | } 31 | } catch [System.Exception] { 32 | if($psitem.Exception.Message -like "*The system cannot find the file specified*") { 33 | Write-Warning "Scheduled Task $name was not Found" 34 | } else { 35 | Write-Warning "Unable to set $Name due to unhandled exception" 36 | Write-Warning $psitem.Exception.Message 37 | } 38 | } catch { 39 | Write-Warning "Unable to run script for $name due to unhandled exception" 40 | Write-Warning $psitem.Exception.StackTrace 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /functions/private/Set-WinUtilService.ps1: -------------------------------------------------------------------------------- 1 | Function Set-WinUtilService { 2 | <# 3 | 4 | .SYNOPSIS 5 | Changes the startup type of the given service 6 | 7 | .PARAMETER Name 8 | The name of the service to modify 9 | 10 | .PARAMETER StartupType 11 | The startup type to set the service to 12 | 13 | .EXAMPLE 14 | Set-WinUtilService -Name "HomeGroupListener" -StartupType "Manual" 15 | 16 | #> 17 | param ( 18 | $Name, 19 | $StartupType 20 | ) 21 | try { 22 | Write-Host "Setting Service $Name to $StartupType" 23 | 24 | # Check if the service exists 25 | $service = Get-Service -Name $Name -ErrorAction Stop 26 | 27 | # Service exists, proceed with changing properties 28 | $service | Set-Service -StartupType $StartupType -ErrorAction Stop 29 | } catch [System.ServiceProcess.ServiceNotFoundException] { 30 | Write-Warning "Service $Name was not found" 31 | } catch { 32 | Write-Warning "Unable to set $Name due to unhandled exception" 33 | Write-Warning $_.Exception.Message 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /functions/private/Update-WinUtilProgramWinget.ps1: -------------------------------------------------------------------------------- 1 | Function Update-WinUtilProgramWinget { 2 | 3 | <# 4 | 5 | .SYNOPSIS 6 | This will update all programs using Winget 7 | 8 | #> 9 | 10 | [ScriptBlock]$wingetinstall = { 11 | 12 | $host.ui.RawUI.WindowTitle = """Winget Install""" 13 | 14 | Start-Transcript "$logdir\winget-update_$dateTime.log" -Append 15 | winget upgrade --all --accept-source-agreements --accept-package-agreements --scope=machine --silent 16 | 17 | } 18 | 19 | $global:WinGetInstall = Start-Process -Verb runas powershell -ArgumentList "-command invoke-command -scriptblock {$wingetinstall} -argumentlist '$($ProgramsToInstall -join ",")'" -PassThru 20 | 21 | } 22 | -------------------------------------------------------------------------------- /functions/public/Invoke-ScratchDialog.ps1: -------------------------------------------------------------------------------- 1 | 2 | function Invoke-ScratchDialog { 3 | 4 | <# 5 | 6 | .SYNOPSIS 7 | Enable Editable Text box Alternate Scartch path 8 | 9 | .PARAMETER Button 10 | #> 11 | $sync.WPFMicrowinISOScratchDir.IsChecked 12 | 13 | 14 | [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null 15 | $Dialog = New-Object System.Windows.Forms.FolderBrowserDialog 16 | $Dialog.SelectedPath = $sync.MicrowinScratchDirBox.Text 17 | $Dialog.ShowDialog() 18 | $filePath = $Dialog.SelectedPath 19 | Write-Host "No ISO is chosen+ $filePath" 20 | 21 | if ([string]::IsNullOrEmpty($filePath)) { 22 | Write-Host "No Folder had chosen" 23 | return 24 | } 25 | 26 | $sync.MicrowinScratchDirBox.Text = Join-Path $filePath "\" 27 | 28 | } 29 | -------------------------------------------------------------------------------- /functions/public/Invoke-WPFCloseButton.ps1: -------------------------------------------------------------------------------- 1 | function Invoke-WPFCloseButton { 2 | 3 | <# 4 | 5 | .SYNOPSIS 6 | Close application 7 | 8 | .PARAMETER Button 9 | #> 10 | $sync["Form"].Close() 11 | Write-Host "Bye bye!" 12 | } 13 | -------------------------------------------------------------------------------- /functions/public/Invoke-WPFControlPanel.ps1: -------------------------------------------------------------------------------- 1 | function Invoke-WPFControlPanel { 2 | <# 3 | 4 | .SYNOPSIS 5 | Opens the requested legacy panel 6 | 7 | .PARAMETER Panel 8 | The panel to open 9 | 10 | #> 11 | param($Panel) 12 | 13 | switch ($Panel) { 14 | "WPFPanelcontrol" {cmd /c control} 15 | "WPFPanelnetwork" {cmd /c ncpa.cpl} 16 | "WPFPanelpower" {cmd /c powercfg.cpl} 17 | "WPFPanelregion" {cmd /c intl.cpl} 18 | "WPFPanelsound" {cmd /c mmsys.cpl} 19 | "WPFPanelprinter" {Start-Process "shell:::{A8A91A66-3A7D-4424-8D24-04E180695C7A}"} 20 | "WPFPanelsystem" {cmd /c sysdm.cpl} 21 | "WPFPaneluser" {cmd /c "control userpasswords2"} 22 | "WPFPanelGodMode" {Start-Process "shell:::{ED7BA470-8E54-465E-825C-99712043E01C}"} 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /functions/public/Invoke-WPFFeatureInstall.ps1: -------------------------------------------------------------------------------- 1 | function Invoke-WPFFeatureInstall { 2 | <# 3 | 4 | .SYNOPSIS 5 | Installs selected Windows Features 6 | 7 | #> 8 | 9 | if($sync.ProcessRunning) { 10 | $msg = "[Invoke-WPFFeatureInstall] Install process is currently running." 11 | [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) 12 | return 13 | } 14 | 15 | $Features = (Get-WinUtilCheckBoxes)["WPFFeature"] 16 | 17 | Invoke-WPFRunspace -ArgumentList $Features -DebugPreference $DebugPreference -ScriptBlock { 18 | param($Features, $DebugPreference) 19 | $sync.ProcessRunning = $true 20 | if ($Features.count -eq 1) { 21 | $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" }) 22 | } else { 23 | $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" }) 24 | } 25 | 26 | Invoke-WinUtilFeatureInstall $Features 27 | 28 | $sync.ProcessRunning = $false 29 | $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" }) 30 | 31 | Write-Host "===================================" 32 | Write-Host "--- Features are Installed ---" 33 | Write-Host "--- A Reboot may be required ---" 34 | Write-Host "===================================" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /functions/public/Invoke-WPFFixesNetwork.ps1: -------------------------------------------------------------------------------- 1 | function Invoke-WPFFixesNetwork { 2 | <# 3 | 4 | .SYNOPSIS 5 | Resets various network configurations 6 | 7 | #> 8 | 9 | Write-Host "Resetting Network with netsh" 10 | 11 | # Reset WinSock catalog to a clean state 12 | Start-Process -NoNewWindow -FilePath "netsh" -ArgumentList "winsock", "reset" 13 | # Resets WinHTTP proxy setting to DIRECT 14 | Start-Process -NoNewWindow -FilePath "netsh" -ArgumentList "winhttp", "reset", "proxy" 15 | # Removes all user configured IP settings 16 | Start-Process -NoNewWindow -FilePath "netsh" -ArgumentList "int", "ip", "reset" 17 | 18 | Write-Host "Process complete. Please reboot your computer." 19 | 20 | $ButtonType = [System.Windows.MessageBoxButton]::OK 21 | $MessageboxTitle = "Network Reset " 22 | $Messageboxbody = ("Stock settings loaded.`n Please reboot your computer") 23 | $MessageIcon = [System.Windows.MessageBoxImage]::Information 24 | 25 | [System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon) 26 | Write-Host "==========================================" 27 | Write-Host "-- Network Configuration has been Reset --" 28 | Write-Host "==========================================" 29 | } 30 | -------------------------------------------------------------------------------- /functions/public/Invoke-WPFFixesWinget.ps1: -------------------------------------------------------------------------------- 1 | function Invoke-WPFFixesWinget { 2 | 3 | <# 4 | 5 | .SYNOPSIS 6 | Fixes Winget by running choco install winget 7 | .DESCRIPTION 8 | BravoNorris for the fantastic idea of a button to reinstall winget 9 | #> 10 | # Install Choco if not already present 11 | Install-WinUtilChoco 12 | Start-Process -FilePath "choco" -ArgumentList "install winget -y --force" -NoNewWindow -Wait 13 | 14 | } 15 | -------------------------------------------------------------------------------- /functions/public/Invoke-WPFGetInstalled.ps1: -------------------------------------------------------------------------------- 1 | function Invoke-WPFGetInstalled { 2 | <# 3 | TODO: Add the Option to use Chocolatey as Engine 4 | .SYNOPSIS 5 | Invokes the function that gets the checkboxes to check in a new runspace 6 | 7 | .PARAMETER checkbox 8 | Indicates whether to check for installed 'winget' programs or applied 'tweaks' 9 | 10 | #> 11 | param($checkbox) 12 | if ($sync.ProcessRunning) { 13 | $msg = "[Invoke-WPFGetInstalled] Install process is currently running." 14 | [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) 15 | return 16 | } 17 | 18 | if (($sync.ChocoRadioButton.IsChecked -eq $false) -and ((Test-WinUtilPackageManager -winget) -eq "not-installed") -and $checkbox -eq "winget") { 19 | return 20 | } 21 | $managerPreference = $sync["ManagerPreference"] 22 | 23 | Invoke-WPFRunspace -ParameterList @(("managerPreference", $managerPreference),("checkbox", $checkbox)) -DebugPreference $DebugPreference -ScriptBlock { 24 | param ( 25 | [string]$checkbox, 26 | [PackageManagers]$managerPreference 27 | ) 28 | $sync.ProcessRunning = $true 29 | $sync.form.Dispatcher.Invoke([action] { Set-WinUtilTaskbaritem -state "Indeterminate" }) 30 | 31 | if ($checkbox -eq "winget") { 32 | Write-Host "Getting Installed Programs..." 33 | switch ($managerPreference) { 34 | "Choco"{$Checkboxes = Invoke-WinUtilCurrentSystem -CheckBox "choco"; break} 35 | "Winget"{$Checkboxes = Invoke-WinUtilCurrentSystem -CheckBox $checkbox; break} 36 | } 37 | } 38 | elseif ($checkbox -eq "tweaks") { 39 | Write-Host "Getting Installed Tweaks..." 40 | $Checkboxes = Invoke-WinUtilCurrentSystem -CheckBox $checkbox 41 | } 42 | 43 | $sync.form.Dispatcher.invoke({ 44 | foreach ($checkbox in $Checkboxes) { 45 | $sync.$checkbox.ischecked = $True 46 | } 47 | }) 48 | 49 | Write-Host "Done..." 50 | $sync.ProcessRunning = $false 51 | $sync.form.Dispatcher.Invoke([action] { Set-WinUtilTaskbaritem -state "None" }) 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /functions/public/Invoke-WPFInstallUpgrade.ps1: -------------------------------------------------------------------------------- 1 | function Invoke-WPFInstallUpgrade { 2 | <# 3 | 4 | .SYNOPSIS 5 | Invokes the function that upgrades all installed programs 6 | 7 | #> 8 | if ($sync.ChocoRadioButton.IsChecked) { 9 | Install-WinUtilChoco 10 | $chocoUpgradeStatus = (Start-Process "choco" -ArgumentList "upgrade all -y" -Wait -PassThru -NoNewWindow).ExitCode 11 | if ($chocoUpgradeStatus -eq 0) { 12 | Write-Host "Upgrade Successful" 13 | } 14 | else{ 15 | Write-Host "Error Occured. Return Code: $chocoUpgradeStatus" 16 | } 17 | } 18 | else{ 19 | if((Test-WinUtilPackageManager -winget) -eq "not-installed") { 20 | return 21 | } 22 | 23 | if(Get-WinUtilInstallerProcess -Process $global:WinGetInstall) { 24 | $msg = "[Invoke-WPFInstallUpgrade] Install process is currently running. Please check for a powershell window labeled 'Winget Install'" 25 | [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) 26 | return 27 | } 28 | 29 | Update-WinUtilProgramWinget 30 | 31 | Write-Host "===========================================" 32 | Write-Host "-- Updates started ---" 33 | Write-Host "-- You can close this window if desired ---" 34 | Write-Host "===========================================" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /functions/public/Invoke-WPFOOSU.ps1: -------------------------------------------------------------------------------- 1 | function Invoke-WPFOOSU { 2 | <# 3 | .SYNOPSIS 4 | Downloads and runs OO Shutup 10 5 | #> 6 | try { 7 | $OOSU_filepath = "$ENV:temp\OOSU10.exe" 8 | $Initial_ProgressPreference = $ProgressPreference 9 | $ProgressPreference = "SilentlyContinue" # Disables the Progress Bar to drasticly speed up Invoke-WebRequest 10 | Invoke-WebRequest -Uri "https://dl5.oo-software.com/files/ooshutup10/OOSU10.exe" -OutFile $OOSU_filepath 11 | Write-Host "Starting OO Shutup 10 ..." 12 | Start-Process $OOSU_filepath 13 | } catch { 14 | Write-Host "Error Downloading and Running OO Shutup 10" -ForegroundColor Red 15 | } 16 | finally { 17 | $ProgressPreference = $Initial_ProgressPreference 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /functions/public/Invoke-WPFPanelAutologin.ps1: -------------------------------------------------------------------------------- 1 | function Invoke-WPFPanelAutologin { 2 | <# 3 | 4 | .SYNOPSIS 5 | Enables autologin using Sysinternals Autologon.exe 6 | 7 | #> 8 | 9 | # Official Microsoft recommendation: https://learn.microsoft.com/en-us/sysinternals/downloads/autologon 10 | Invoke-WebRequest -Uri "https://live.sysinternals.com/Autologon.exe" -OutFile "$env:temp\autologin.exe" 11 | cmd /c "$env:temp\autologin.exe" /accepteula 12 | } 13 | -------------------------------------------------------------------------------- /functions/public/Invoke-WPFPopup.ps1: -------------------------------------------------------------------------------- 1 | function Invoke-WPFPopup { 2 | param ( 3 | [ValidateSet("Show", "Hide", "Toggle")] 4 | [string]$Action = "", 5 | 6 | [string[]]$Popups = @(), 7 | 8 | [ValidateScript({ 9 | $invalid = $_.GetEnumerator() | Where-Object { $_.Value -notin @("Show", "Hide", "Toggle") } 10 | if ($invalid) { 11 | throw "Found invalid Popup-Action pair(s): " + ($invalid | ForEach-Object { "$($_.Key) = $($_.Value)" } -join "; ") 12 | } 13 | $true 14 | })] 15 | [hashtable]$PopupActionTable = @{} 16 | ) 17 | 18 | if (-not $PopupActionTable.Count -and (-not $Action -or -not $Popups.Count)) { 19 | throw "Provide either 'PopupActionTable' or both 'Action' and 'Popups'." 20 | } 21 | 22 | if ($PopupActionTable.Count -and ($Action -or $Popups.Count)) { 23 | throw "Use 'PopupActionTable' on its own, or 'Action' with 'Popups'." 24 | } 25 | 26 | # Collect popups and actions 27 | $PopupsToProcess = if ($PopupActionTable.Count) { 28 | $PopupActionTable.GetEnumerator() | ForEach-Object { [PSCustomObject]@{ Name = "$($_.Key)Popup"; Action = $_.Value } } 29 | } else { 30 | $Popups | ForEach-Object { [PSCustomObject]@{ Name = "$_`Popup"; Action = $Action } } 31 | } 32 | 33 | $PopupsNotFound = @() 34 | 35 | # Apply actions 36 | foreach ($popupEntry in $PopupsToProcess) { 37 | $popupName = $popupEntry.Name 38 | 39 | if (-not $sync.$popupName) { 40 | $PopupsNotFound += $popupName 41 | continue 42 | } 43 | 44 | $sync.$popupName.IsOpen = switch ($popupEntry.Action) { 45 | "Show" { $true } 46 | "Hide" { $false } 47 | "Toggle" { -not $sync.$popupName.IsOpen } 48 | } 49 | } 50 | 51 | if ($PopupsNotFound.Count -gt 0) { 52 | throw "Could not find the following popups: $($PopupsNotFound -join ', ')" 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /functions/public/Invoke-WPFPresets.ps1: -------------------------------------------------------------------------------- 1 | function Invoke-WPFPresets { 2 | <# 3 | 4 | .SYNOPSIS 5 | Sets the options in the tweaks panel to the given preset 6 | 7 | .PARAMETER preset 8 | The preset to set the options to 9 | 10 | .PARAMETER imported 11 | If the preset is imported from a file, defaults to false 12 | 13 | .PARAMETER checkboxfilterpattern 14 | The Pattern to use when filtering through CheckBoxes, defaults to "**" 15 | 16 | #> 17 | 18 | param ( 19 | [Parameter(position=0)] 20 | [Array]$preset = "", 21 | 22 | [Parameter(position=1)] 23 | [bool]$imported = $false, 24 | 25 | [Parameter(position=2)] 26 | [string]$checkboxfilterpattern = "**" 27 | ) 28 | 29 | if ($imported -eq $true) { 30 | $CheckBoxesToCheck = $preset 31 | } else { 32 | $CheckBoxesToCheck = $sync.configs.preset.$preset 33 | } 34 | 35 | $CheckBoxes = ($sync.GetEnumerator()).where{ $_.Value -is [System.Windows.Controls.CheckBox] -and $_.Name -notlike "WPFToggle*" -and $_.Name -like "$checkboxfilterpattern"} 36 | Write-Debug "Getting checkboxes to set, number of checkboxes: $($CheckBoxes.Count)" 37 | 38 | if ($CheckBoxesToCheck -ne "") { 39 | $debugMsg = "CheckBoxes to Check are: " 40 | $CheckBoxesToCheck | ForEach-Object { $debugMsg += "$_, " } 41 | $debugMsg = $debugMsg -replace (',\s*$', '') 42 | Write-Debug "$debugMsg" 43 | } 44 | 45 | foreach ($CheckBox in $CheckBoxes) { 46 | $checkboxName = $CheckBox.Key 47 | 48 | if (-not $CheckBoxesToCheck) { 49 | $sync.$checkboxName.IsChecked = $false 50 | continue 51 | } 52 | 53 | # Check if the checkbox name exists in the flattened JSON hashtable 54 | if ($CheckBoxesToCheck -contains $checkboxName) { 55 | # If it exists, set IsChecked to true 56 | $sync.$checkboxName.IsChecked = $true 57 | Write-Debug "$checkboxName is checked" 58 | } else { 59 | # If it doesn't exist, set IsChecked to false 60 | $sync.$checkboxName.IsChecked = $false 61 | Write-Debug "$checkboxName is not checked" 62 | } 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /functions/public/Invoke-WPFRunAdobeCCCleanerTool.ps1: -------------------------------------------------------------------------------- 1 | function Invoke-WPFRunAdobeCCCleanerTool { 2 | <# 3 | .SYNOPSIS 4 | It removes or fixes problem files and resolves permission issues in registry keys. 5 | .DESCRIPTION 6 | The Creative Cloud Cleaner tool is a utility for experienced users to clean up corrupted installations. 7 | #> 8 | 9 | [string]$url="https://swupmf.adobe.com/webfeed/CleanerTool/win/AdobeCreativeCloudCleanerTool.exe" 10 | 11 | Write-Host "The Adobe Creative Cloud Cleaner tool is hosted at" 12 | Write-Host "$url" 13 | 14 | try { 15 | # Don't show the progress because it will slow down the download speed 16 | $ProgressPreference='SilentlyContinue' 17 | 18 | Invoke-WebRequest -Uri $url -OutFile "$env:TEMP\AdobeCreativeCloudCleanerTool.exe" -UseBasicParsing -ErrorAction SilentlyContinue -Verbose 19 | 20 | # Revert back the ProgressPreference variable to the default value since we got the file desired 21 | $ProgressPreference='Continue' 22 | 23 | Start-Process -FilePath "$env:TEMP\AdobeCreativeCloudCleanerTool.exe" -Wait -ErrorAction SilentlyContinue -Verbose 24 | } catch { 25 | Write-Error $_.Exception.Message 26 | } finally { 27 | if (Test-Path -Path "$env:TEMP\AdobeCreativeCloudCleanerTool.exe") { 28 | Write-Host "Cleaning up..." 29 | Remove-Item -Path "$env:TEMP\AdobeCreativeCloudCleanerTool.exe" -Verbose 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /functions/public/Invoke-WPFRunspace.ps1: -------------------------------------------------------------------------------- 1 | function Invoke-WPFRunspace { 2 | 3 | <# 4 | 5 | .SYNOPSIS 6 | Creates and invokes a runspace using the given scriptblock and argumentlist 7 | 8 | .PARAMETER ScriptBlock 9 | The scriptblock to invoke in the runspace 10 | 11 | .PARAMETER ArgumentList 12 | A list of arguments to pass to the runspace 13 | 14 | .PARAMETER ParameterList 15 | A list of named parameters that should be provided. 16 | .EXAMPLE 17 | Invoke-WPFRunspace ` 18 | -ScriptBlock $sync.ScriptsInstallPrograms ` 19 | -ArgumentList "Installadvancedip,Installbitwarden" ` 20 | 21 | Invoke-WPFRunspace` 22 | -ScriptBlock $sync.ScriptsInstallPrograms ` 23 | -ParameterList @(("PackagesToInstall", @("Installadvancedip,Installbitwarden")),("ChocoPreference", $true)) 24 | #> 25 | 26 | [CmdletBinding()] 27 | Param ( 28 | $ScriptBlock, 29 | $ArgumentList, 30 | $ParameterList, 31 | $DebugPreference 32 | ) 33 | 34 | # Create a PowerShell instance 35 | $script:powershell = [powershell]::Create() 36 | 37 | # Add Scriptblock and Arguments to runspace 38 | $script:powershell.AddScript($ScriptBlock) 39 | $script:powershell.AddArgument($ArgumentList) 40 | 41 | foreach ($parameter in $ParameterList) { 42 | $script:powershell.AddParameter($parameter[0], $parameter[1]) 43 | } 44 | $script:powershell.AddArgument($DebugPreference) # Pass DebugPreference to the script block 45 | $script:powershell.RunspacePool = $sync.runspace 46 | 47 | # Execute the RunspacePool 48 | $script:handle = $script:powershell.BeginInvoke() 49 | 50 | # Clean up the RunspacePool threads when they are complete, and invoke the garbage collector to clean up the memory 51 | if ($script:handle.IsCompleted) { 52 | $script:powershell.EndInvoke($script:handle) 53 | $script:powershell.Dispose() 54 | $sync.runspace.Dispose() 55 | $sync.runspace.Close() 56 | [System.GC]::Collect() 57 | } 58 | # Return the handle 59 | return $handle 60 | } 61 | -------------------------------------------------------------------------------- /functions/public/Invoke-WPFSSHServer.ps1: -------------------------------------------------------------------------------- 1 | function Invoke-WPFSSHServer { 2 | <# 3 | 4 | .SYNOPSIS 5 | Invokes the OpenSSH Server install in a runspace 6 | 7 | #> 8 | 9 | Invoke-WPFRunspace -DebugPreference $DebugPreference -ScriptBlock { 10 | 11 | Invoke-WinUtilSSHServer 12 | 13 | Write-Host "=======================================" 14 | Write-Host "-- OpenSSH Server installed! ---" 15 | Write-Host "=======================================" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /functions/public/Invoke-WPFSelectedAppsUpdate.ps1: -------------------------------------------------------------------------------- 1 | function Invoke-WPFSelectedAppsUpdate { 2 | <# 3 | .SYNOPSIS 4 | This is a helper function that is called by the Checked and Unchecked events of the Checkboxes on the install tab. 5 | It Updates the "Selected Apps" selectedAppLabel on the Install Tab to represent the current collection 6 | .PARAMETER type 7 | Eigther: Add | Remove 8 | .PARAMETER checkbox 9 | should contain the current instance of the checkbox that triggered the Event. 10 | Most of the time will be the automatic variable $this 11 | .EXAMPLE 12 | $checkbox.Add_Unchecked({Invoke-WPFSelectedAppsUpdate -type "Remove" -checkbox $this}) 13 | OR 14 | Invoke-WPFSelectedAppsUpdate -type "Add" -checkbox $specificCheckbox 15 | #> 16 | param ( 17 | $type, 18 | $checkbox 19 | ) 20 | 21 | $selectedAppsButton = $sync.WPFselectedAppsButton 22 | # Get the actual Name from the selectedAppLabel inside the Checkbox 23 | $appKey = $checkbox.Parent.Tag 24 | if ($type -eq "Add") { 25 | $sync.selectedApps.Add($appKey) 26 | # The List type needs to be specified again, because otherwise Sort-Object will convert the list to a string if there is only a single entry 27 | [System.Collections.Generic.List[pscustomobject]]$sync.selectedApps = $sync.SelectedApps | Sort-Object 28 | 29 | } 30 | elseif ($type -eq "Remove") { 31 | $sync.SelectedApps.Remove($appKey) 32 | } 33 | else{ 34 | Write-Error "Type: $type not implemented" 35 | } 36 | 37 | $count = $sync.SelectedApps.Count 38 | $selectedAppsButton.Content = "Selected Apps: $count" 39 | # On every change, remove all entries inside the Popup Menu. This is done, so we can keep the alphabetical order even if elements are selected in a random way 40 | $sync.selectedAppsstackPanel.Children.Clear() 41 | $sync.SelectedApps | Foreach-Object { Add-SelectedAppsMenuItem -name $($sync.configs.applicationsHashtable.$_.Content) -key $_ } 42 | 43 | } 44 | -------------------------------------------------------------------------------- /functions/public/Invoke-WPFTab.ps1: -------------------------------------------------------------------------------- 1 | function Invoke-WPFTab { 2 | 3 | <# 4 | 5 | .SYNOPSIS 6 | Sets the selected tab to the tab that was clicked 7 | 8 | .PARAMETER ClickedTab 9 | The name of the tab that was clicked 10 | 11 | #> 12 | 13 | Param ( 14 | [Parameter(Mandatory,position=0)] 15 | [string]$ClickedTab 16 | ) 17 | 18 | $tabNav = Get-WinUtilVariables | Where-Object {$psitem -like "WPFTabNav"} 19 | $tabNumber = [int]($ClickedTab -replace "WPFTab","" -replace "BT","") - 1 20 | 21 | $filter = Get-WinUtilVariables -Type ToggleButton | Where-Object {$psitem -like "WPFTab?BT"} 22 | ($sync.GetEnumerator()).where{$psitem.Key -in $filter} | ForEach-Object { 23 | if ($ClickedTab -ne $PSItem.name) { 24 | $sync[$PSItem.Name].IsChecked = $false 25 | } else { 26 | $sync["$ClickedTab"].IsChecked = $true 27 | $tabNumber = [int]($ClickedTab-replace "WPFTab","" -replace "BT","") - 1 28 | $sync.$tabNav.Items[$tabNumber].IsSelected = $true 29 | } 30 | } 31 | $sync.currentTab = $sync.$tabNav.Items[$tabNumber].Header 32 | 33 | # Always reset the filter for the current tab 34 | if ($sync.currentTab -eq "Install") { 35 | # Reset Install tab filter 36 | Find-AppsByNameOrDescription -SearchString "" 37 | } elseif ($sync.currentTab -eq "Tweaks") { 38 | # Reset Tweaks tab filter 39 | Find-TweaksByNameOrDescription -SearchString "" 40 | } 41 | 42 | # Show search bar in Install and Tweaks tabs 43 | if ($tabNumber -eq 0 -or $tabNumber -eq 1) { 44 | $sync.SearchBar.Visibility = "Visible" 45 | $searchIcon = ($sync.Form.FindName("SearchBar").Parent.Children | Where-Object { $_ -is [System.Windows.Controls.TextBlock] -and $_.Text -eq [char]0xE721 })[0] 46 | if ($searchIcon) { 47 | $searchIcon.Visibility = "Visible" 48 | } 49 | } else { 50 | $sync.SearchBar.Visibility = "Collapsed" 51 | $searchIcon = ($sync.Form.FindName("SearchBar").Parent.Children | Where-Object { $_ -is [System.Windows.Controls.TextBlock] -and $_.Text -eq [char]0xE721 })[0] 52 | if ($searchIcon) { 53 | $searchIcon.Visibility = "Collapsed" 54 | } 55 | # Hide the clear button if it's visible 56 | $sync.SearchBarClearButton.Visibility = "Collapsed" 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /functions/public/Invoke-WPFUpdatesdisable.ps1: -------------------------------------------------------------------------------- 1 | function Invoke-WPFUpdatesdisable { 2 | <# 3 | 4 | .SYNOPSIS 5 | Disables Windows Update 6 | 7 | .NOTES 8 | Disabling Windows Update is not recommended. This is only for advanced users who know what they are doing. 9 | 10 | #> 11 | If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU")) { 12 | New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Force | Out-Null 13 | } 14 | Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "NoAutoUpdate" -Type DWord -Value 1 15 | Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "AUOptions" -Type DWord -Value 1 16 | If (!(Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config")) { 17 | New-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config" -Force | Out-Null 18 | } 19 | Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config" -Name "DODownloadMode" -Type DWord -Value 0 20 | 21 | $services = @( 22 | "BITS" 23 | "wuauserv" 24 | ) 25 | 26 | foreach ($service in $services) { 27 | # -ErrorAction SilentlyContinue is so it doesn't write an error to stdout if a service doesn't exist 28 | 29 | Write-Host "Setting $service StartupType to Disabled" 30 | Get-Service -Name $service -ErrorAction SilentlyContinue | Set-Service -StartupType Disabled 31 | } 32 | Write-Host "=================================" 33 | Write-Host "--- Updates ARE DISABLED ---" 34 | Write-Host "=================================" 35 | } 36 | -------------------------------------------------------------------------------- /functions/public/Invoke-WPFundoall.ps1: -------------------------------------------------------------------------------- 1 | function Invoke-WPFundoall { 2 | <# 3 | 4 | .SYNOPSIS 5 | Undoes every selected tweak 6 | 7 | #> 8 | 9 | if($sync.ProcessRunning) { 10 | $msg = "[Invoke-WPFundoall] Install process is currently running." 11 | [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) 12 | return 13 | } 14 | 15 | $tweaks = (Get-WinUtilCheckBoxes)["WPFtweaks"] 16 | 17 | if ($tweaks.count -eq 0) { 18 | $msg = "Please check the tweaks you wish to undo." 19 | [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) 20 | return 21 | } 22 | 23 | Invoke-WPFRunspace -ArgumentList $tweaks -DebugPreference $DebugPreference -ScriptBlock { 24 | param($tweaks, $DebugPreference) 25 | 26 | $sync.ProcessRunning = $true 27 | if ($tweaks.count -eq 1) { 28 | $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" }) 29 | } else { 30 | $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" }) 31 | } 32 | 33 | 34 | for ($i = 0; $i -lt $tweaks.Count; $i++) { 35 | Set-WinUtilProgressBar -Label "Undoing $($tweaks[$i])" -Percent ($i / $tweaks.Count * 100) 36 | Invoke-WinUtiltweaks $tweaks[$i] -undo $true 37 | $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -value ($i/$tweaks.Count) }) 38 | } 39 | 40 | Set-WinUtilProgressBar -Label "Undo Tweaks Finished" -Percent 100 41 | $sync.ProcessRunning = $false 42 | $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" }) 43 | Write-Host "==================================" 44 | Write-Host "--- Undo Tweaks are Finished ---" 45 | Write-Host "==================================" 46 | 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /functions/public/Show-CTTLogo.ps1: -------------------------------------------------------------------------------- 1 | Function Show-CTTLogo { 2 | <# 3 | .SYNOPSIS 4 | Displays the CTT logo in ASCII art. 5 | .DESCRIPTION 6 | This function displays the CTT logo in ASCII art format. 7 | .PARAMETER None 8 | No parameters are required for this function. 9 | .EXAMPLE 10 | Show-CTTLogo 11 | Prints the CTT logo in ASCII art format to the console. 12 | #> 13 | 14 | $asciiArt = @" 15 | CCCCCCCCCCCCCTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT 16 | CCC::::::::::::CT:::::::::::::::::::::TT:::::::::::::::::::::T 17 | CC:::::::::::::::CT:::::::::::::::::::::TT:::::::::::::::::::::T 18 | C:::::CCCCCCCC::::CT:::::TT:::::::TT:::::TT:::::TT:::::::TT:::::T 19 | C:::::C CCCCCCTTTTTT T:::::T TTTTTTTTTTTT T:::::T TTTTTT 20 | C:::::C T:::::T T:::::T 21 | C:::::C T:::::T T:::::T 22 | C:::::C T:::::T T:::::T 23 | C:::::C T:::::T T:::::T 24 | C:::::C T:::::T T:::::T 25 | C:::::C T:::::T T:::::T 26 | C:::::C CCCCCC T:::::T T:::::T 27 | C:::::CCCCCCCC::::C TT:::::::TT TT:::::::TT 28 | CC:::::::::::::::C T:::::::::T T:::::::::T 29 | CCC::::::::::::C T:::::::::T T:::::::::T 30 | CCCCCCCCCCCCC TTTTTTTTTTT TTTTTTTTTTT 31 | 32 | ====Chris Titus Tech===== 33 | =====Windows Toolbox===== 34 | "@ 35 | 36 | Write-Host $asciiArt 37 | } 38 | 39 | -------------------------------------------------------------------------------- /lint/PSScriptAnalyser.ps1: -------------------------------------------------------------------------------- 1 | @{ 2 | # Only diagnostic records of the specified severity will be generated. 3 | # Uncomment the following line if you only want Errors and Warnings but 4 | # not Information diagnostic records. 5 | # Severity = @('Error','Warning') 6 | 7 | # Analyze **only** the following rules. Use IncludeRules when you want 8 | # to invoke only a small subset of the default rules. 9 | <# 10 | IncludeRules = @('PSAvoidDefaultValueSwitchParameter', 11 | 'PSMisleadingBacktick', 12 | 'PSMissingModuleManifestField', 13 | 'PSReservedCmdletChar', 14 | 'PSReservedParams', 15 | 'PSShouldProcess', 16 | 'PSUseApprovedVerbs', 17 | 'PSUseDeclaredVarsMoreThanAssignments') 18 | #> 19 | # Do not analyze the following rules. Use ExcludeRules when you have 20 | # commented out the IncludeRules settings above and want to include all 21 | # the default rules except for those you exclude below. 22 | # Note: if a rule is in both IncludeRules and ExcludeRules, the rule 23 | # will be excluded. 24 | ExcludeRules = @('PSAvoidUsingWriteHost') 25 | } 26 | -------------------------------------------------------------------------------- /overrides/main.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block header %} 4 | {{ super() }} 5 |
6 | Announcement: We are currently reworking the docs to use Hugo rather then mkdocs. 7 |
8 | {% endblock %} 9 | 10 | {% block footer %} 11 | {# Empty block to override the footer #} 12 | {% endblock %} 13 | -------------------------------------------------------------------------------- /releases/oscdimg.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisTitusTech/winutil/efb9e5bde6b333dfae15b157aafac5fed1fa1230/releases/oscdimg.exe -------------------------------------------------------------------------------- /sign.bat: -------------------------------------------------------------------------------- 1 | signtool.exe sign /td sha256 /tr http://timestamp.digicert.com /fd sha256 /n "CT Tech Group LLC" .\winutil.ps1 2 | --------------------------------------------------------------------------------