diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
new file mode 100644
index 00000000..59d7d805
--- /dev/null
+++ b/.github/CONTRIBUTING.md
@@ -0,0 +1,117 @@
+# How to Contribute?
+
+## Testing
+
+* Test the latest changes to WinUtil by running the pre-release and reporting issues you are encountering to help us continually improve WinUtil!
+
+#### **Run the latest pre-release**
+ ```ps1
+ irm christitus.com/windev | iex
+ ```
+
+!!! bug "Keep in mind"
+
+ This is a pre-release and should be treated as such. It exists for developers to test the utility and report or fix bugs before they get added to the stable release. Don't use it in production!
+
+## Issues
+
+* If you encounter any challenges or problems with the script, I kindly request that you submit them via the "Issues" tab on the GitHub repository. By filling out the provided template, you can provide specific details about the issue, allowing me (and others in the community) to promptly address any bugs or consider feature requests.
+
+## Contribute Code
+
+* Pull requests are now handled directly on the **MAIN branch**. This was done since we can now select specific releases to launch via releases in GitHub.
+
+* If you're doing code changes, then you can submit a PR to `main` branch, but I am very selective about these.
+
+!!! warning "Important"
+
+ Do not use a code formatter, make massive amounts of line changes, or make multiple feature changes. EACH FEATURE CHANGE SHOULD BE IT'S OWN PULL REQUEST!
+
+* When creating pull requests, it is essential to thoroughly document all changes made. This includes, but is not limited to, documenting any additions made to the `tweaks` section and corresponding `undo tweak`, so users are able to remove the newly added tweaks if necessary, and comprehensive documentation is required for all code changes. Document your changes and briefly explain why you made your changes in your Pull Request Description. Failure to adhere to this format may result in the denial of the pull request. Additionally, any code lacking sufficient documentation may also be denied.
+
+* By following these guidelines, we can maintain a high standard of quality and ensure that the codebase remains organized and well-documented.
+
+!!! note
+
+ When creating a function, please include "WPF" or "WinUtil" in the file name so it can be loaded into the runspace.
+
+## Walk through
+
+* This is a guide for beginners. If you are still having issues, look at the following official GitHub documentation:
+ * [Commit through WEB](https://docs.github.com/en/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/about-commits)
+ * [Commit through GitHub Desktop](https://docs.github.com/en/desktop/making-changes-in-a-branch/committing-and-reviewing-changes-to-your-project-in-github-desktop#about-commits)
+ * [Create a Pull Request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request)
+
+
+### Overview
+
+``` mermaid
+%%{init: {"flowchart": {"curve": "cardinal"}} }%%
+graph TD
+ A[Fork Project] --> B[Clone Repository];
+ B --> C[Create New Branch];
+ C --> D[Make Changes];
+ D --> G[Test Changes];
+ G --> H{Tests Passed?};
+ H -->|Yes| E[Commit Changes];
+ H -->|No| J[Fix Issues];
+ J --> G;
+ E --> F[Push Branch];
+ F --> K[Create Pull Request];
+ K --> L[Fill out PR template];
+ classDef default stroke:#333,stroke-width:4px,font-size:12pt;
+```
+!!! info
+
+ This is a diagram to guide you through the process. It may vary depending on the type of change you're making.
+
+### Fork the Repo
+* Fork the WinUtil Repository [here](https://github.com/ChrisTitusTech/winutil) to create a copy that will be available in your repository list.
+
+![Fork Image](assets/Fork-Button-Dark.png#only-dark)
+
+![Fork Image](assets/Fork-Button-Light.png#only-light)
+
+### Clone the Fork
+!!! tip
+
+ While you can make your changes directly through the Web, we recommend cloning the repo to your device using the application GitHub Desktop (available in WinUtil) to test your fork easily.
+
+* Install GitHub Desktop if it is not already installed.
+* Log in using the same GitHub account you used to fork WinUtil.
+* Choose the fork under "Your Repositories" and press "clone {repo name}"
+* Create a new branch and name it something relatable to your changes.
+
+* Now you can modify WinUtil to your liking using your preferred text editor.
+
+
+### Testing your changes
+
+* To test to see if your changes work as intended run following commands in a powershell teminal as admin:
+
+* Change the directory where you are running the commands to the forked project.
+* `cd {path to the folder with the compile.ps1}`
+* Run the following command to compile and run WinUtil:
+* `.\Compile.ps1 -run`
+
+![Compile](assets/Compile.png)
+
+* After seeing that your changes work properly, feel free to commit the changes to the repository and make a PR. For help on that, follow the documentation below.
+
+### Committing the changes
+* Before committing your changes, please discard changes made to the `winutil.ps1` file, like the following:
+
+![Push Commit Image](assets/Discard-GHD.png)
+
+* Now, commit your changes once you are happy with the result.
+
+![Commit Image](assets/Commit-GHD.png)
+
+* Push the changes to upload them to your fork on github.com.
+
+![Push Commit Image](assets/Push-Commit.png)
+
+### Making a PR
+* To make a PR on your repo under a new branch linking to the main branch, a button will show and say Preview and Create pull request. Click that button and fill in all the information that is provided on the template. Once all the information is filled in correctly, check your PR to make sure there is not a WinUtil.ps1 file attached to the PR. Once everything is good, make the PR and wait for Chris (the maintainer) to accept or deny your PR. Once it is accepted by Chris, you will be able to see your changes in the "/windev" build.
+* If you do not see your feature in the main "/win" build, that is fine. All new changes go into the /windev build to make sure everything is working OK before going fully public.
+* Congratulations! You just submitted your first PR. Thank you so much for contributing to WinUtil.
diff --git a/LICENSE b/.github/LICENSE
similarity index 100%
rename from LICENSE
rename to .github/LICENSE
diff --git a/.github/SECURITY.md b/.github/SECURITY.md
new file mode 100644
index 00000000..6b437033
--- /dev/null
+++ b/.github/SECURITY.md
@@ -0,0 +1,5 @@
+# Security Policy
+
+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.
+
+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)
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 2ae7ad6e..b097d7b4 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -7,5 +7,3 @@ updates:
ignore:
- dependency-name: "actions/stale"
versions: '>= 9'
- - dependency-name: "actions/setup-python"
- versions: '> 4'
diff --git a/mkdocs.yml b/.github/mkdocs.yml
similarity index 73%
rename from mkdocs.yml
rename to .github/mkdocs.yml
index 85ca4367..a4c7dfe2 100644
--- a/mkdocs.yml
+++ b/.github/mkdocs.yml
@@ -1,17 +1,19 @@
-site_name: Chris Titus WinUtil Official Documentation
+site_name: WinUtil Documentation
+docs_dir: '../docs'
repo_url: https://github.com/ChrisTitusTech/winutil
nav:
- Introduction: 'index.md'
- User Guide: 'userguide.md'
- - Contribute: 'contribute.md'
- - Changelog: 'changelog.md'
- - Known Issues: 'KnownIssues.md'
+ - Contributing Guide: 'contribute.md'
+ - Documentation:
+ - Dev Docs: 'devdocs.md'
+ - Known Issues: 'KnownIssues.md'
- FAQ: 'faq.md'
theme:
name: material
- custom_dir: 'overrides'
+ custom_dir: '../overrides'
features:
- navigation.tabs
- navigation.sections
@@ -34,9 +36,8 @@ theme:
# Palette toggle for light mode
- media: "(prefers-color-scheme: light)"
- scheme: default
-
-
+ scheme: default
+ accent: blue
toggle:
icon: material/brightness-7
name: Switch to dark mode
@@ -44,11 +45,11 @@ theme:
# Palette toggle for dark mode
- media: "(prefers-color-scheme: dark)"
scheme: slate
+ primary: black
+ accent: blue
toggle:
- icon: material/toggle-switch
+ icon: material/weather-night
name: Switch to light mode
- primary: teal
- accent: lime
markdown_extensions:
- admonition
- pymdownx.details
@@ -73,3 +74,15 @@ markdown_extensions:
- def_list
- pymdownx.tasklist:
custom_checkbox: true
+ - toc:
+ permalink: true
+
+plugins:
+ - search
+ - awesome-pages
+ - git-revision-date-localized
+ - minify:
+ minify_html: true
+ htmlmin_opts:
+ remove_comments: true
+ cache_safe: true
diff --git a/.github/requirements.txt b/.github/requirements.txt
new file mode 100644
index 00000000..295ed680
--- /dev/null
+++ b/.github/requirements.txt
@@ -0,0 +1,51 @@
+Babel==2.15.0
+bracex==2.5
+cairocffi==1.7.1
+CairoSVG==2.7.1
+certifi==2024.7.4
+cffi==1.17.0
+charset-normalizer==3.3.2
+click==8.1.7
+colorama==0.4.6
+csscompressor==0.9.5
+cssselect2==0.7.0
+defusedxml==0.7.1
+ghp-import==2.1.0
+gitdb==4.0.11
+GitPython==3.1.43
+htmlmin2==0.1.13
+idna==3.7
+Jinja2==3.1.4
+jsmin==3.0.1
+Markdown==3.6
+MarkupSafe==2.1.5
+mergedeep==1.3.4
+mkdocs==1.6.0
+mkdocs-awesome-pages-plugin==2.9.3
+mkdocs-get-deps==0.2.0
+mkdocs-git-revision-date-localized-plugin==1.2.6
+mkdocs-material==9.5.31
+mkdocs-material-extensions==1.3.1
+mkdocs-minify-plugin==0.8.0
+natsort==8.4.0
+packaging==24.1
+paginate==0.5.6
+pathspec==0.12.1
+pillow==10.4.0
+platformdirs==4.2.2
+pycparser==2.22
+Pygments==2.18.0
+pymdown-extensions==10.9
+python-dateutil==2.9.0.post0
+pytz==2024.1
+PyYAML==6.0.2
+pyyaml_env_tag==0.1
+regex==2024.7.24
+requests==2.32.3
+six==1.16.0
+smmap==5.0.1
+tinycss2==1.3.0
+urllib3==2.2.2
+watchdog==4.0.1
+wcmatch==9.0
+webencodings==0.5.1
diff --git a/.github/workflows/close-discussion.yml b/.github/workflows/close-discussion-on-pr.yaml
similarity index 60%
rename from .github/workflows/close-discussion.yml
rename to .github/workflows/close-discussion-on-pr.yaml
index 6dc7c557..5ffeec42 100644
--- a/.github/workflows/close-discussion.yml
+++ b/.github/workflows/close-discussion-on-pr.yaml
@@ -9,12 +9,12 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
- uses: actions/checkout@v2
+ uses: actions/checkout@v4
- name: Check if PR was merged
if: github.event.pull_request.merged == true
run: echo "PR was merged"
-
+
- name: Extract Discussion Number & Close If any Were Found
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -23,21 +23,26 @@ jobs:
run: |
pr_body="${{ github.event.pull_request.body }}"
discussion_ids=$(echo "$pr_body" | grep -oP '(?i)(resolve|fix|close)[s|d]? #\K[0-9]+')
-
+
if [ -z "$discussion_ids" ]; then
echo "No discussion IDs found."
exit 0
fi
for discussion_id in $discussion_ids; do
- echo "Closing discussion #$discussion_id"
- response=$(curl -s -o /dev/null -w "%{http_code}" -X PATCH -H "Authorization: token $GITHUB_TOKEN" \
+ echo "Attempting to close discussion #$discussion_id"
+ response=$(curl -s -X PATCH -H "Authorization: token $GITHUB_TOKEN" \
+ -H "Accept: application/vnd.github.v3+json" \
-d '{"state": "closed"}' \
"https://api.github.com/repos/${{ github.repository }}/discussions/$discussion_id")
-
- if [ "$response" -ne 200 ]; then
- echo "Failed to close discussion #$discussion_id. HTTP status code: $response"
- exit 1
+
+ if echo "$response" | jq -e '.id' > /dev/null; then
+ echo "Successfully closed discussion #$discussion_id"
+ else
+ error_message=$(echo "$response" | jq -r '.message // "Unknown error"')
+ echo "Warning: Failed to close discussion #$discussion_id. Error: $error_message"
+ echo "Full response: $response"
fi
done
- shell: bash
\ No newline at end of file
+ shell: bash
+ continue-on-error: true
diff --git a/.github/workflows/issue-slash-commands.yaml b/.github/workflows/close-issue-command.yaml
similarity index 99%
rename from .github/workflows/issue-slash-commands.yaml
rename to .github/workflows/close-issue-command.yaml
index a83b432c..ff23c3ab 100644
--- a/.github/workflows/issue-slash-commands.yaml
+++ b/.github/workflows/close-issue-command.yaml
@@ -42,4 +42,4 @@ jobs:
ISSUE_NUMBER: ${{ github.event.issue.number }}
run: |
echo Closing the issue...
- gh issue close $ISSUE_NUMBER --repo ${{ github.repository }}
\ No newline at end of file
+ gh issue close $ISSUE_NUMBER --repo ${{ github.repository }}
diff --git a/.github/workflows/compile.yaml b/.github/workflows/compile-check.yaml
similarity index 50%
rename from .github/workflows/compile.yaml
rename to .github/workflows/compile-check.yaml
index d835423b..394e558e 100644
--- a/.github/workflows/compile.yaml
+++ b/.github/workflows/compile-check.yaml
@@ -1,25 +1,22 @@
-name: Compile
+name: Compile & Check
on:
push:
- branches:
- - main
- - test*
+ branches: ["main"]
+ pull_request:
+ branches: ["main"]
workflow_dispatch: # Manual trigger added
+ workflow_call: # Allow other Actions to call this workflow
jobs:
- build-runspace:
+ Compile-and-Check:
runs-on: windows-latest
steps:
- - uses: actions/checkout@v4
- with:
- ref: ${{ github.head_ref }}
- - name: Compile project
+ - name: Checkout Sources
+ uses: actions/checkout@v4
+
+ - name: Compile and Syntaxcheck winutil.ps1
shell: pwsh
run: |
Set-ExecutionPolicy Bypass -Scope Process -Force; ./Compile.ps1
continue-on-error: false # Directly fail the job on error, removing the need for a separate check
- - uses: stefanzweifel/git-auto-commit-action@v5
- with:
- commit_message: Compile Winutil
- if: success()
diff --git a/.github/workflows/createchangelog.yml b/.github/workflows/createchangelog.yml
deleted file mode 100644
index 6251f9a5..00000000
--- a/.github/workflows/createchangelog.yml
+++ /dev/null
@@ -1,113 +0,0 @@
-name: Update changelog.md on Release
-
-on:
- release:
- types: [published, created, edited, deleted]
- workflow_dispatch: # Add this line to enable manual triggering
-
-jobs:
- update-file:
- runs-on: ubuntu-latest
-
- steps:
- - name: Checkout Repository
- uses: actions/checkout@v4
-
- - name: Get all releases and update changelog.md file
- run: |
- # Initialize some values
- changelog_path="docs/changelog.md"
- gh release list --exclude-drafts --json tagName,name,isLatest,isPrerelease --limit 1000000 > releases.txt
- declare -rA number_of_releases=$(cat releases.txt | grep -Po '"tagName"' | wc --lines)
-
- # Clear the contents of changelog file
- echo "" > $changelog_path
-
- # Write some Initial Content to changelog file
- echo "# Changelog" >> $changelog_path
- echo "" >> $changelog_path
- echo "WinUtil change log received from GitHub Releases, it's autogenerated using GitHub Actions." >> $changelog_path
- echo "" >> $changelog_path
- echo "> [!WARNING]" >> $changelog_path
- echo "> This file **SHOULD NOT** be edited directly, any PRs that tries changing it directly will either be requested on not changing it, or it'll get rejected." >> $changelog_path
- echo "" >> $changelog_path
-
- # Make array for git tag names
- tag_arr=()
- cat releases.txt | grep -Po '"tagName":\s*.*?[^\\]"' | awk -F ':' '{print $2}' | sed s/\"//g > tags_list.txt
- while read -r line; do
- tag_arr+=("$line")
- done < tags_list.txt
-
- # Make array for releases names
- name_arr=()
- cat releases.txt | grep -Po '"name":\s*.*?[^\\]"' | awk -F ':' '{print $2}' | sed s/\"//g > releases_names_list.txt
- while read -r line; do
- name_arr+=("$line")
- done < releases_names_list.txt
-
- # Make array for isPrerelease
- isprerelease_arr=()
- cat releases.txt | grep -Po '"isPrerelease":\s*(false|true)' | awk -F ':' '{print $2}' | sed s/\"//g > isprerelease_list.txt
- while read -r line; do
- isprerelease_arr+=("$line")
- done < isprerelease_list.txt
-
- # Make array for isLatest
- islatest_arr=()
- cat releases.txt | grep -Po '"isLatest":\s*(false|true)' | awk -F ':' '{print $2}' | sed s/\"//g > islatest_list.txt
- while read -r line; do
- islatest_arr+=("$line")
- done < islatest_list.txt
-
- # Debug Output
- echo "Tag Array: " ${tag_arr[@]}
- echo "Array Length: " ${#tag_arr[@]}
- echo ""
-
- echo "Release Name Array: " ${name_arr[@]}
- echo "Array Length: " ${#name_arr[@]}
- echo ""
-
- echo "IsPrerelease Array: " ${isprerelease_arr[@]}
- echo "Array Length: " ${#isprerelease_arr[@]}
- echo ""
-
- echo "IsLatest Array: " ${islatest_arr[@]}
- echo "Array Length: " ${#islatest_arr[@]}
- echo ""
-
- # Exit when this impossible condition is met (just to be safe)
- if [[ ! (${#tag_arr[@]}==${#name_arr[@]} && ${#tag_arr[@]}==${#isprerelease_arr[@]} && ${#tag_arr[@]}==${#islatest_arr[@]} ) ]] ; then
- echo "Impossible Condition has been met, the Name Array Length Does Not match Tag Array Length, exiting..."
- exit 1
- fi
-
- # Main loop that does the heavy lifting (Content Generation)
- for (( i=0; i<${number_of_releases}; i++ ));
- do
- # The Variables to use on each iteration
- tag=${tag_arr[$i]}
- name=${name_arr[$i]}
- isprerelease=${isprerelease_arr[$i]}
- islatest=${islatest_arr[$i]}
- body=$(gh release view "$tag" --json body --jq .body)
-
- # The generation of changelog file contents
- echo "# $name" >> $changelog_path
- echo "" >> $changelog_path
- echo "$body" >> $changelog_path
- echo "" >> $changelog_path
- done
- env:
- GH_TOKEN: ${{ github.token }}
-
- - name: Commit and Push Changes
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- run: |
- git config --global user.name 'github-actions[bot]'
- git config --global user.email 'github-actions[bot]@users.noreply.github.com'
- git add docs/changelog.md
- git commit -m "Update changelog.md with all releases"
- git push
diff --git a/.github/workflows/github-pages.yaml b/.github/workflows/github-pages.yaml
new file mode 100644
index 00000000..f4d0ebb3
--- /dev/null
+++ b/.github/workflows/github-pages.yaml
@@ -0,0 +1,32 @@
+name: GitHub Pages Deploy
+
+on:
+ push:
+ paths:
+ - '.github/mkdocs.yml'
+ - '.github/requirements.txt'
+ - 'docs/**'
+ - 'overrides/**'
+ workflow_dispatch:
+
+jobs:
+ build-and-deploy:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout Repository
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: '0' # Fetch all commit history for all branches as well as tags.
+
+ - name: Setup Python
+ uses: actions/setup-python@v5
+ with:
+ python-version: 3.x # Install latest Stable release of Python 3
+ cache: 'pip' # Caching pip dependencies
+
+ - name: Install Necessary Dependencies
+ run: pip install -r .github/requirements.txt
+
+ - name: Build & Deploy using mkdocs
+ run: mkdocs gh-deploy --force -f .github/mkdocs.yml
diff --git a/.github/workflows/github-pages.yml b/.github/workflows/github-pages.yml
deleted file mode 100644
index 486d1ed9..00000000
--- a/.github/workflows/github-pages.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-name: GitHub Pages Deploy
-on:
- release:
- types: [published, prereleased]
- workflow_dispatch:
-permissions:
- contents: write
-jobs:
- deploy:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v4
- - uses: actions/setup-python@v4
- with:
- python-version: 3.x
- - uses: actions/cache@v4
- with:
- key: ${{ github.ref }}
- path: .cache
- - run: pip install mkdocs-material
- - run: pip install pillow cairosvg
- - run: mkdocs gh-deploy --force
diff --git a/.github/workflows/pre-release.yaml b/.github/workflows/pre-release.yaml
index 34e04d32..d6bf6912 100644
--- a/.github/workflows/pre-release.yaml
+++ b/.github/workflows/pre-release.yaml
@@ -10,15 +10,23 @@ on:
jobs:
build-runspace:
runs-on: windows-latest
+ env:
+ CERTIFICATE_BASE64: ${{ secrets.CERTIFICATE_BASE64 }}
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- - name: Extract Version from winutil.ps1
+ - name: Compile project
+ shell: pwsh
+ run: |
+ Set-ExecutionPolicy Bypass -Scope Process -Force; ./Compile.ps1
+ continue-on-error: false # Directly fail the job on error, removing the need for a separate check
+
+ - name: Set Version to Todays Date
id: extract_version
run: |
$version = (Get-Date -Format "yy.MM.dd")
- echo "version=$version" >> $env:GITHUB_ENV
+ echo "VERSION=$version" >> $env:GITHUB_ENV
shell: pwsh
- name: Create Tag
@@ -27,12 +35,45 @@ jobs:
$tagExists = git tag -l $env:VERSION
if ($tagExists -eq "") {
git tag $env:VERSION
+ if ($LASTEXITCODE -ne 0) {
+ Write-Error "Failed to create tag $env:VERSION"
+ exit 1
+ }
git push origin $env:VERSION
+ if ($LASTEXITCODE -ne 0) {
+ Write-Error "Failed to push tag $env:VERSION"
+ exit 1
+ }
} else {
Write-Host "Tag $env:VERSION already exists, skipping tag creation"
}
shell: pwsh
+ - name: Create and import code signing certificate
+ shell: pwsh
+ run: |
+ [System.IO.File]::WriteAllBytes("$env:USERPROFILE\code-signing-cert.pfx", [System.Convert]::FromBase64String("$env:CERTIFICATE_BASE64"))
+ Import-PfxCertificate -FilePath "$env:USERPROFILE\code-signing-cert.pfx" -CertStoreLocation Cert:\CurrentUser\My
+
+ - name: Code sign winutil.ps1
+ shell: pwsh
+ run: |
+ $cert = Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert | Select-Object -First 1
+ if ($null -eq $cert) { throw "Code signing certificate not found" }
+ Set-AuthenticodeSignature -FilePath ./winutil.ps1 -Certificate $cert
+
+ - name: Verify code signature
+ shell: pwsh
+ run: |
+ $signature = Get-AuthenticodeSignature -FilePath ./winutil.ps1
+ if ($signature.Status -ne 'Valid') { throw "Code signing failed" }
+
+ - name: Upload winutil.ps1 as artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: winutil
+ path: ./winutil.ps1
+
- name: Create and Upload Release
id: create_release
uses: softprops/action-gh-release@v2
diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml
deleted file mode 100644
index df5f3d5d..00000000
--- a/.github/workflows/release.yaml
+++ /dev/null
@@ -1,44 +0,0 @@
-name: Release WinUtil
-
-on:
- workflow_dispatch: # Manual trigger added
-
-jobs:
- build-runspace:
- runs-on: windows-latest
- outputs:
- version: ${{ steps.extract_version.outputs.version }}
- steps:
- - name: Checkout Repository
- uses: actions/checkout@v4
-
- - name: Extract Version from winutil.ps1
- id: extract_version
- run: |
- $version = ''
- Get-Content ./winutil.ps1 -TotalCount 30 | ForEach-Object {
- if ($_ -match 'Version\s*:\s*(\d{2}\.\d{2}\.\d{2})') {
- $version = $matches[1]
- echo "version=$version" >> $GITHUB_OUTPUT
- break
- }
- }
- if (-not $version) {
- Write-Error "Version not found in winutil.ps1"
- exit 1
- }
- shell: pwsh
-
- - name: Create and Upload Release
- id: create_release
- uses: softprops/action-gh-release@v2
- with:
- tag_name: ${{ steps.extract_version.outputs.version }}
- name: Release ${{ steps.extract_version.outputs.version }}
- body: "![GitHub Downloads (specific asset, specific tag)](https://img.shields.io/github/downloads/ChrisTitusTech/winutil/${{ steps.extract_version.outputs.version }}/winutil.ps1)"
- append_body: true
- files: ./winutil.ps1
- prerelease: false
- make_latest: "true"
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/remove-winutil.yaml b/.github/workflows/remove-winutil.yaml
new file mode 100644
index 00000000..5dedbe93
--- /dev/null
+++ b/.github/workflows/remove-winutil.yaml
@@ -0,0 +1,34 @@
+name: Remove winutil.ps1 if included in a Push
+
+on:
+ push:
+ branches:
+ - '**'
+
+jobs:
+ check-and-delete-file:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+
+ - name: Check if winutil.ps1 exists
+ id: check_existence
+ run: |
+ if [ -f "winutil.ps1" ]; then
+ echo "winutil_exists=true" >> $GITHUB_OUTPUT
+ else
+ echo "winutil_exists=false" >> $GITHUB_OUTPUT
+ fi
+
+ - name: Delete winutil.ps1 if it exists
+ if: steps.check_existence.outputs.winutil_exists == 'true'
+ run: |
+ git config --global user.email "winutil-action@noreply.github.com"
+ git config --global user.name "winutil-action"
+ git rm winutil.ps1
+ git commit -m "Delete winutil.ps1 as it is not allowed"
+ git push origin HEAD:${{ github.ref }}
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/sponsors.yml b/.github/workflows/sponsors.yaml
similarity index 96%
rename from .github/workflows/sponsors.yml
rename to .github/workflows/sponsors.yaml
index d7668b4a..b6b21d18 100644
--- a/.github/workflows/sponsors.yml
+++ b/.github/workflows/sponsors.yaml
@@ -23,4 +23,4 @@ jobs:
uses: JamesIves/github-pages-deploy-action@v4
with:
branch: main
- folder: '.'
\ No newline at end of file
+ folder: '.'
diff --git a/.github/workflows/unittests.yaml b/.github/workflows/unittests.yaml
index 02879545..5e1f2b0f 100644
--- a/.github/workflows/unittests.yaml
+++ b/.github/workflows/unittests.yaml
@@ -37,4 +37,4 @@ jobs:
shell: pwsh
env:
- TEMP: ${{ runner.temp }}
\ No newline at end of file
+ TEMP: ${{ runner.temp }}
diff --git a/.gitignore b/.gitignore
index 4d77e17c..08184875 100644
--- a/.gitignore
+++ b/.gitignore
@@ -45,3 +45,5 @@ microwin.log
True
test.ps1
winutil.ps1
+
+binary/
\ No newline at end of file
diff --git a/Compile.ps1 b/Compile.ps1
index e5399475..f86fbce6 100644
--- a/Compile.ps1
+++ b/Compile.ps1
@@ -1,13 +1,15 @@
param (
[switch]$Debug,
- [switch]$Run
+ [switch]$Run,
+ [switch]$SkipPreprocessing
)
$OFS = "`r`n"
$scriptname = "winutil.ps1"
+$workingdir = $PSScriptRoot
# Variable to sync between runspaces
$sync = [Hashtable]::Synchronized(@{})
-$sync.PSScriptRoot = $PSScriptRoot
+$sync.PSScriptRoot = $workingdir
$sync.configs = @{}
function Update-Progress {
@@ -15,12 +17,12 @@ function Update-Progress {
[Parameter(Mandatory, position=0)]
[string]$StatusMessage,
- [Parameter(Mandatory, position=1)]
- [ValidateRange(0,100)]
+ [Parameter(Mandatory, position=1)]
+ [ValidateRange(0,100)]
[int]$Percent,
- [Parameter(position=2)]
- [string]$Activity = "Compiling"
+ [Parameter(position=2)]
+ [string]$Activity = "Compiling"
)
Write-Progress -Activity $Activity -Status $StatusMessage -PercentComplete $Percent
@@ -34,6 +36,17 @@ $header = @"
################################################################################################################
"@
+if (-NOT $SkipPreprocessing) {
+ Update-Progress "Pre-req: Running Preprocessor..." 0
+
+ # Dot source the 'Invoke-Preprocessing' Function from 'tools/Invoke-Preprocessing.ps1' Script
+ $preprocessingFilePath = ".\tools\Invoke-Preprocessing.ps1"
+ . "$(($workingdir -replace ('\\$', '')) + '\' + ($preprocessingFilePath -replace ('\.\\', '')))"
+
+ $excludedFiles = @('.\.git\', '.\.gitignore', '.\.gitattributes', '.\.github\CODEOWNERS', '.\LICENSE', "$preprocessingFilePath", '*.png', '*.exe')
+ $msg = "Pre-req: Code Formatting"
+ Invoke-Preprocessing -WorkingDir "$workingdir" -ExcludedFiles $excludedFiles -ProgressStatusMessage $msg
+}
# Create the script in memory.
Update-Progress "Pre-req: Allocating Memory" 0
@@ -43,14 +56,14 @@ Update-Progress "Adding: Header" 5
$script_content.Add($header)
Update-Progress "Adding: Version" 10
-$script_content.Add($(Get-Content .\scripts\start.ps1).replace('#{replaceme}',"$(Get-Date -Format yy.MM.dd)"))
+$script_content.Add($(Get-Content "$workingdir\scripts\start.ps1").replace('#{replaceme}',"$(Get-Date -Format yy.MM.dd)"))
Update-Progress "Adding: Functions" 20
-Get-ChildItem .\functions -Recurse -File | ForEach-Object {
+Get-ChildItem "$workingdir\functions" -Recurse -File | ForEach-Object {
$script_content.Add($(Get-Content $psitem.FullName))
}
Update-Progress "Adding: Config *.json" 40
-Get-ChildItem .\config | Where-Object {$psitem.extension -eq ".json"} | ForEach-Object {
+Get-ChildItem "$workingdir\config" | Where-Object {$psitem.extension -eq ".json"} | ForEach-Object {
$json = (Get-Content $psitem.FullName).replace("'","''")
@@ -65,15 +78,15 @@ Get-ChildItem .\config | Where-Object {$psitem.extension -eq ".json"} | ForEach-
# Use **HTML decimal/hex codes instead**, as using HTML Entity Codes will result in XML parse Error when running the compiled script.
for ($i = 0; $i -lt $firstLevelJsonList.Count; $i += 1) {
$firstLevelName = $firstLevelJsonList[$i]
- if ($jsonAsObject.$firstLevelName.content -ne $null) {
+ if ($jsonAsObject.$firstLevelName.content -ne $null) {
$jsonAsObject.$firstLevelName.content = $jsonAsObject.$firstLevelName.content.replace('&','&').replace('“','“').replace('”','”').replace("'",''').replace('<','<').replace('>','>').replace('—','—')
$jsonAsObject.$firstLevelName.content = $jsonAsObject.$firstLevelName.content.replace('''',"'") # resolves the Double Apostrophe caused by the first replace function in the main loop
}
if ($jsonAsObject.$firstLevelName.description -ne $null) {
$jsonAsObject.$firstLevelName.description = $jsonAsObject.$firstLevelName.description.replace('&','&').replace('“','“').replace('”','”').replace("'",''').replace('<','<').replace('>','>').replace('—','—')
$jsonAsObject.$firstLevelName.description = $jsonAsObject.$firstLevelName.description.replace('''',"'") # resolves the Double Apostrophe caused by the first replace function in the main loop
- }
- }
+ }
+ }
# Add 'WPFInstall' as a prefix to every entry-name in 'applications.json' file
if ($psitem.Name -eq "applications.json") {
@@ -95,10 +108,10 @@ Get-ChildItem .\config | Where-Object {$psitem.extension -eq ".json"} | ForEach-
$script_content.Add($(Write-output "`$sync.configs.$($psitem.BaseName) = '$json' `| convertfrom-json" ))
}
-$xaml = (Get-Content .\xaml\inputXML.xaml).replace("'","''")
+$xaml = (Get-Content "$workingdir\xaml\inputXML.xaml").replace("'","''")
# Dot-source the Get-TabXaml function
-. .\functions\private\Get-TabXaml.ps1
+. "$workingdir\functions\private\Get-TabXaml.ps1"
Update-Progress "Building: Xaml " 75
$appXamlContent = Get-TabXaml "applications" 5
@@ -114,30 +127,38 @@ $xaml = $xaml -replace "{{InstallPanel_features}}", $featuresXamlContent
$script_content.Add($(Write-output "`$inputXML = '$xaml'"))
-$script_content.Add($(Get-Content .\scripts\main.ps1))
+$script_content.Add($(Get-Content "$workingdir\scripts\main.ps1"))
-if ($Debug){
+if ($Debug) {
Update-Progress "Writing debug files" 95
- $appXamlContent | Out-File -FilePath ".\xaml\inputApp.xaml" -Encoding ascii
- $tweaksXamlContent | Out-File -FilePath ".\xaml\inputTweaks.xaml" -Encoding ascii
- $featuresXamlContent | Out-File -FilePath ".\xaml\inputFeatures.xaml" -Encoding ascii
-}
-else {
+ $appXamlContent | Out-File -FilePath "$workingdir\xaml\inputApp.xaml" -Encoding ascii
+ $tweaksXamlContent | Out-File -FilePath "$workingdir\xaml\inputTweaks.xaml" -Encoding ascii
+ $featuresXamlContent | Out-File -FilePath "$workingdir\xaml\inputFeatures.xaml" -Encoding ascii
+} else {
Update-Progress "Removing temporary files" 99
- Remove-Item ".\xaml\inputApp.xaml" -ErrorAction SilentlyContinue
- Remove-Item ".\xaml\inputTweaks.xaml" -ErrorAction SilentlyContinue
- Remove-Item ".\xaml\inputFeatures.xaml" -ErrorAction SilentlyContinue
+ Remove-Item "$workingdir\xaml\inputApp.xaml" -ErrorAction SilentlyContinue
+ Remove-Item "$workingdir\xaml\inputTweaks.xaml" -ErrorAction SilentlyContinue
+ Remove-Item "$workingdir\xaml\inputFeatures.xaml" -ErrorAction SilentlyContinue
}
-Set-Content -Path $scriptname -Value ($script_content -join "`r`n") -Encoding ascii
+Set-Content -Path "$workingdir\$scriptname" -Value ($script_content -join "`r`n") -Encoding ascii
Write-Progress -Activity "Compiling" -Completed
-if ($run){
+Update-Progress -Activity "Validating" -StatusMessage "Checking winutil.ps1 Syntax" -Percent 0
+try {
+ $null = Get-Command -Syntax .\winutil.ps1
+}
+catch {
+ Write-Warning "Syntax Validation for 'winutil.ps1' has failed"
+ Write-Host "$($Error[0])" -ForegroundColor Red
+}
+Write-Progress -Activity "Validating" -Completed
+
+if ($run) {
try {
- Start-Process -FilePath "pwsh" -ArgumentList ".\$scriptname"
- }
- catch {
- Start-Process -FilePath "powershell" -ArgumentList ".\$scriptname"
+ Start-Process -FilePath "pwsh" -ArgumentList "$workingdir\$scriptname"
+ } catch {
+ Start-Process -FilePath "powershell" -ArgumentList "$workingdir\$scriptname"
}
}
diff --git a/README.md b/README.md
index e43bf521..fb2ecd2b 100644
--- a/README.md
+++ b/README.md
@@ -52,7 +52,7 @@ If you have Issues, refer to [Known Issues](https://christitustech.github.io/win
These are the sponsors that help keep this project alive with monthly contributions.
-
+
## 🏅 Thanks to all Contributors
Thanks a lot for spending your time helping Winutil grow. Thanks a lot! Keep rocking 🍻.
diff --git a/config/applications.json b/config/applications.json
index a275ac47..c7ad5a7e 100644
--- a/config/applications.json
+++ b/config/applications.json
@@ -1,2954 +1,2954 @@
{
- "1password": {
- "category": "Utilities",
- "choco": "1password",
- "content": "1Password",
- "description": "1Password is a password manager that allows you to store and manage your passwords securely.",
- "link": "https://1password.com/",
- "winget": "AgileBits.1Password"
- },
- "7zip": {
- "category": "Utilities",
- "choco": "7zip",
- "content": "7-Zip",
- "description": "7-Zip is a free and open-source file archiver utility. It supports several compression formats and provides a high compression ratio, making it a popular choice for file compression.",
- "link": "https://www.7-zip.org/",
- "winget": "7zip.7zip"
- },
- "adobe": {
- "category": "Document",
- "choco": "adobereader",
- "content": "Adobe Acrobat Reader",
- "description": "Adobe Acrobat Reader is a free PDF viewer with essential features for viewing, printing, and annotating PDF documents.",
- "link": "https://www.adobe.com/acrobat/pdf-reader.html",
- "winget": "Adobe.Acrobat.Reader.64-bit"
- },
- "advancedip": {
- "category": "Pro Tools",
- "choco": "advanced-ip-scanner",
- "content": "Advanced IP Scanner",
- "description": "Advanced IP Scanner is a fast and easy-to-use network scanner. It is designed to analyze LAN networks and provides information about connected devices.",
- "link": "https://www.advanced-ip-scanner.com/",
- "winget": "Famatech.AdvancedIPScanner"
- },
- "affine": {
- "category": "Document",
- "choco": "na",
- "content": "AFFiNE",
- "description": "AFFiNE is an open source alternative to Notion. Write, draw, plan all at once. Selfhost it to sync across devices.",
- "link": "https://affine.pro/",
- "winget": "ToEverything.AFFiNE"
- },
- "aimp": {
- "category": "Multimedia Tools",
- "choco": "aimp",
- "content": "AIMP (Music Player)",
- "description": "AIMP is a feature-rich music player with support for various audio formats, playlists, and customizable user interface.",
- "link": "https://www.aimp.ru/",
- "winget": "AIMP.AIMP"
- },
- "alacritty": {
- "category": "Utilities",
- "choco": "alacritty",
- "content": "Alacritty Terminal",
- "description": "Alacritty is a fast, cross-platform, and GPU-accelerated terminal emulator. It is designed for performance and aims to be the fastest terminal emulator available.",
- "link": "https://alacritty.org/",
- "winget": "Alacritty.Alacritty"
- },
- "anaconda3": {
- "category": "Development",
- "choco": "anaconda3",
- "content": "Anaconda",
- "description": "Anaconda is a distribution of the Python and R programming languages for scientific computing.",
- "link": "https://www.anaconda.com/products/distribution",
- "winget": "Anaconda.Anaconda3"
- },
- "angryipscanner": {
- "category": "Pro Tools",
- "choco": "angryip",
- "content": "Angry IP Scanner",
- "description": "Angry IP Scanner is an open-source and cross-platform network scanner. It is used to scan IP addresses and ports, providing information about network connectivity.",
- "link": "https://angryip.org/",
- "winget": "angryziber.AngryIPScanner"
- },
- "anki": {
- "category": "Document",
- "choco": "anki",
- "content": "Anki",
- "description": "Anki is a flashcard application that helps you memorize information with intelligent spaced repetition.",
- "link": "https://apps.ankiweb.net/",
- "winget": "Anki.Anki"
- },
- "anydesk": {
- "category": "Utilities",
- "choco": "anydesk",
- "content": "AnyDesk",
- "description": "AnyDesk is a remote desktop software that enables users to access and control computers remotely. It is known for its fast connection and low latency.",
- "link": "https://anydesk.com/",
- "winget": "AnyDeskSoftwareGmbH.AnyDesk"
- },
- "ATLauncher": {
- "category": "Games",
- "choco": "na",
- "content": "ATLauncher",
- "description": "ATLauncher is a Launcher for Minecraft which integrates multiple different ModPacks to allow you to download and install ModPacks easily and quickly.",
- "link": "https://github.com/ATLauncher/ATLauncher",
- "winget": "ATLauncher.ATLauncher"
- },
- "audacity": {
- "category": "Multimedia Tools",
- "choco": "audacity",
- "content": "Audacity",
- "description": "Audacity is a free and open-source audio editing software known for its powerful recording and editing capabilities.",
- "link": "https://www.audacityteam.org/",
- "winget": "Audacity.Audacity"
- },
- "autoruns": {
- "category": "Microsoft Tools",
- "choco": "autoruns",
- "content": "Autoruns",
- "description": "This utility shows you what programs are configured to run during system bootup or login",
- "link": "https://learn.microsoft.com/en-us/sysinternals/downloads/autoruns",
- "winget": "Microsoft.Sysinternals.Autoruns"
- },
- "rdcman": {
- "category": "Microsoft Tools",
- "choco": "rdcman",
- "content": "RDCMan",
- "description": "RDCMan manages multiple remote desktop connections. It is useful for managing server labs where you need regular access to each machine such as automated checkin systems and data centers.",
- "link": "https://learn.microsoft.com/en-us/sysinternals/downloads/rdcman",
- "winget": "Microsoft.Sysinternals.RDCMan"
- },
- "autohotkey": {
- "category": "Utilities",
- "choco": "autohotkey",
- "content": "AutoHotkey",
- "description": "AutoHotkey is a scripting language for Windows that allows users to create custom automation scripts and macros. It is often used for automating repetitive tasks and customizing keyboard shortcuts.",
- "link": "https://www.autohotkey.com/",
- "winget": "AutoHotkey.AutoHotkey"
- },
- "azuredatastudio": {
- "category": "Microsoft Tools",
- "choco": "azure-data-studio",
- "content": "Microsoft Azure Data Studio",
- "description": "Azure Data Studio is a data management tool that enables you to work with SQL Server, Azure SQL DB and SQL DW from Windows, macOS and Linux.",
- "link": "https://docs.microsoft.com/sql/azure-data-studio/what-is-azure-data-studio",
- "winget": "Microsoft.AzureDataStudio"
- },
- "barrier": {
- "category": "Utilities",
- "choco": "barrier",
- "content": "Barrier",
- "description": "Barrier is an open-source software KVM (keyboard, video, and mouseswitch). It allows users to control multiple computers with a single keyboard and mouse, even if they have different operating systems.",
- "link": "https://github.com/debauchee/barrier",
- "winget": "DebaucheeOpenSourceGroup.Barrier"
- },
- "bat": {
- "category": "Utilities",
- "choco": "bat",
- "content": "Bat (Cat)",
- "description": "Bat is a cat command clone with syntax highlighting. It provides a user-friendly and feature-rich alternative to the traditional cat command for viewing and concatenating files.",
- "link": "https://github.com/sharkdp/bat",
- "winget": "sharkdp.bat"
- },
- "bitwarden": {
- "category": "Utilities",
- "choco": "bitwarden",
- "content": "Bitwarden",
- "description": "Bitwarden is an open-source password management solution. It allows users to store and manage their passwords in a secure and encrypted vault, accessible across multiple devices.",
- "link": "https://bitwarden.com/",
- "winget": "Bitwarden.Bitwarden"
- },
- "bleachbit": {
- "category": "Utilities",
- "choco": "bleachbit",
- "content": "BleachBit",
- "description": "Clean Your System and Free Disk Space",
- "link": "https://www.bleachbit.org/",
- "winget": "BleachBit.BleachBit"
- },
- "blender": {
- "category": "Multimedia Tools",
- "choco": "blender",
- "content": "Blender (3D Graphics)",
- "description": "Blender is a powerful open-source 3D creation suite, offering modeling, sculpting, animation, and rendering tools.",
- "link": "https://www.blender.org/",
- "winget": "BlenderFoundation.Blender"
- },
- "brave": {
- "category": "Browsers",
- "choco": "brave",
- "content": "Brave",
- "description": "Brave is a privacy-focused web browser that blocks ads and trackers, offering a faster and safer browsing experience.",
- "link": "https://www.brave.com",
- "winget": "Brave.Brave"
- },
- "bulkcrapuninstaller": {
- "category": "Utilities",
- "choco": "bulk-crap-uninstaller",
- "content": "Bulk Crap Uninstaller",
- "description": "Bulk Crap Uninstaller is a free and open-source uninstaller utility for Windows. It helps users remove unwanted programs and clean up their system by uninstalling multiple applications at once.",
- "link": "https://www.bcuninstaller.com/",
- "winget": "Klocman.BulkCrapUninstaller"
- },
- "bulkrenameutility": {
- "category": "Utilities",
- "choco": "bulkrenameutility",
- "content": "Bulk Rename Utility",
- "description": "Bulk Rename Utility allows you to easily rename files and folders recursively based upon find-replace, character place, fields, sequences, regular expressions, EXIF data, and more.",
- "link": "https://www.bulkrenameutility.co.uk",
- "winget": "TGRMNSoftware.BulkRenameUtility"
- },
- "AdvancedRenamer": {
- "category": "Utilities",
- "choco": "advanced-renamer",
- "content": "Advanced Renamer",
- "description": "Advanced Renamer is a program for renaming multiple files and folders at once. By configuring renaming methods the names can be manipulated in various ways.",
- "link": "https://www.advancedrenamer.com/",
- "winget": "HulubuluSoftware.AdvancedRenamer"
- },
- "calibre": {
- "category": "Document",
- "choco": "calibre",
- "content": "Calibre",
- "description": "Calibre is a powerful and easy-to-use e-book manager, viewer, and converter.",
- "link": "https://calibre-ebook.com/",
- "winget": "calibre.calibre"
- },
- "carnac": {
- "category": "Utilities",
- "choco": "carnac",
- "content": "Carnac",
- "description": "Carnac is a keystroke visualizer for Windows. It displays keystrokes in an overlay, making it useful for presentations, tutorials, and live demonstrations.",
- "link": "https://carnackeys.com/",
- "winget": "code52.Carnac"
- },
- "cemu": {
- "category": "Games",
- "choco": "cemu",
- "content": "Cemu",
- "description": "Cemu is a highly experimental software to emulate Wii U applications on PC.",
- "link": "https://cemu.info/",
- "winget": "Cemu.Cemu"
- },
- "chatterino": {
- "category": "Communications",
- "choco": "chatterino",
- "content": "Chatterino",
- "description": "Chatterino is a chat client for Twitch chat that offers a clean and customizable interface for a better streaming experience.",
- "link": "https://www.chatterino.com/",
- "winget": "ChatterinoTeam.Chatterino"
- },
- "chrome": {
- "category": "Browsers",
- "choco": "googlechrome",
- "content": "Chrome",
- "description": "Google Chrome is a widely used web browser known for its speed, simplicity, and seamless integration with Google services.",
- "link": "https://www.google.com/chrome/",
- "winget": "Google.Chrome"
- },
- "chromium": {
- "category": "Browsers",
- "choco": "chromium",
- "content": "Chromium",
- "description": "Chromium is the open-source project that serves as the foundation for various web browsers, including Chrome.",
- "link": "https://github.com/Hibbiki/chromium-win64",
- "winget": "Hibbiki.Chromium"
- },
- "arc": {
- "category": "Browsers",
- "choco": "na",
- "content": "Arc",
- "description": "Arc is a Chromium based browser, known for it's clean and modern design.",
- "link": "https://arc.net/",
- "winget": "TheBrowserCompany.Arc"
- },
- "clementine": {
- "category": "Multimedia Tools",
- "choco": "clementine",
- "content": "Clementine",
- "description": "Clementine is a modern music player and library organizer, supporting various audio formats and online radio services.",
- "link": "https://www.clementine-player.org/",
- "winget": "Clementine.Clementine"
- },
- "clink": {
- "category": "Development",
- "choco": "clink",
- "content": "Clink",
- "description": "Clink is a powerful Bash-compatible command-line interface (CLIenhancement for Windows, adding features like syntax highlighting and improved history).",
- "link": "https://mridgers.github.io/clink/",
- "winget": "chrisant996.Clink"
- },
- "clonehero": {
- "category": "Games",
- "choco": "na",
- "content": "Clone Hero",
- "description": "Clone Hero is a free rhythm game, which can be played with any 5 or 6 button guitar controller.",
- "link": "https://clonehero.net/",
- "winget": "CloneHeroTeam.CloneHero"
- },
- "cmake": {
- "category": "Development",
- "choco": "cmake",
- "content": "CMake",
- "description": "CMake is an open-source, cross-platform family of tools designed to build, test and package software.",
- "link": "https://cmake.org/",
- "winget": "Kitware.CMake"
- },
- "copyq": {
- "category": "Utilities",
- "choco": "copyq",
- "content": "CopyQ (Clipboard Manager)",
- "description": "CopyQ is a clipboard manager with advanced features, allowing you to store, edit, and retrieve clipboard history.",
- "link": "https://copyq.readthedocs.io/",
- "winget": "hluk.CopyQ"
- },
- "cpuz": {
- "category": "Utilities",
- "choco": "cpu-z",
- "content": "CPU-Z",
- "description": "CPU-Z is a system monitoring and diagnostic tool for Windows. It provides detailed information about the computer's hardware components, including the CPU, memory, and motherboard.",
- "link": "https://www.cpuid.com/softwares/cpu-z.html",
- "winget": "CPUID.CPU-Z"
- },
- "crystaldiskinfo": {
- "category": "Utilities",
- "choco": "crystaldiskinfo",
- "content": "Crystal Disk Info",
- "description": "Crystal Disk Info is a disk health monitoring tool that provides information about the status and performance of hard drives. It helps users anticipate potential issues and monitor drive health.",
- "link": "https://crystalmark.info/en/software/crystaldiskinfo/",
- "winget": "CrystalDewWorld.CrystalDiskInfo"
- },
- "capframex": {
- "category": "Utilities",
- "choco": "na",
- "content": "CapFrameX",
- "description": "Frametimes capture and analysis tool based on Intel's PresentMon. Overlay provided by Rivatuner Statistics Server.",
- "link": "https://www.capframex.com/",
- "winget": "CXWorld.CapFrameX"
- },
- "crystaldiskmark": {
- "category": "Utilities",
- "choco": "crystaldiskmark",
- "content": "Crystal Disk Mark",
- "description": "Crystal Disk Mark is a disk benchmarking tool that measures the read and write speeds of storage devices. It helps users assess the performance of their hard drives and SSDs.",
- "link": "https://crystalmark.info/en/software/crystaldiskmark/",
- "winget": "CrystalDewWorld.CrystalDiskMark"
- },
- "darktable": {
- "category": "Multimedia Tools",
- "choco": "darktable",
- "content": "darktable",
- "description": "Open-source photo editing tool, offering an intuitive interface, advanced editing capabilities, and a non-destructive workflow for seamless image enhancement.",
- "link": "https://www.darktable.org/install/",
- "winget": "darktable.darktable"
- },
- "DaxStudio": {
- "category": "Development",
- "choco": "daxstudio",
- "content": "DaxStudio",
- "description": "DAX (Data Analysis eXpressions) Studio is the ultimate tool for executing and analyzing DAX queries against Microsoft Tabular models.",
- "link": "https://daxstudio.org/",
- "winget": "DaxStudio.DaxStudio"
- },
- "ddu": {
- "category": "Utilities",
- "choco": "ddu",
- "content": "Display Driver Uninstaller",
- "description": "Display Driver Uninstaller (DDU) is a tool for completely uninstalling graphics drivers from NVIDIA, AMD, and Intel. It is useful for troubleshooting graphics driver-related issues.",
- "link": "https://www.wagnardsoft.com/display-driver-uninstaller-DDU-",
- "winget": "ddu"
- },
- "deluge": {
- "category": "Utilities",
- "choco": "deluge",
- "content": "Deluge",
- "description": "Deluge is a free and open-source BitTorrent client. It features a user-friendly interface, support for plugins, and the ability to manage torrents remotely.",
- "link": "https://deluge-torrent.org/",
- "winget": "DelugeTeam.Deluge"
- },
- "devtoys": {
- "category": "Utilities",
- "choco": "devtoys",
- "content": "DevToys",
- "description": "DevToys is a collection of development-related utilities and tools for Windows. It includes tools for file management, code formatting, and productivity enhancements for developers.",
- "link": "https://devtoys.app/",
- "winget": "DevToys-app.DevToys"
- },
- "digikam": {
- "category": "Multimedia Tools",
- "choco": "digikam",
- "content": "digiKam",
- "description": "digiKam is an advanced open-source photo management software with features for organizing, editing, and sharing photos.",
- "link": "https://www.digikam.org/",
- "winget": "KDE.digikam"
- },
- "discord": {
- "category": "Communications",
- "choco": "discord",
- "content": "Discord",
- "description": "Discord is a popular communication platform with voice, video, and text chat, designed for gamers but used by a wide range of communities.",
- "link": "https://discord.com/",
- "winget": "Discord.Discord"
- },
- "ditto": {
- "category": "Utilities",
- "choco": "ditto",
- "content": "Ditto",
- "description": "Ditto is an extension to the standard windows clipboard.",
- "link": "https://github.com/sabrogden/Ditto",
- "winget": "Ditto.Ditto"
- },
- "dockerdesktop": {
- "category": "Development",
- "choco": "docker-desktop",
- "content": "Docker Desktop",
- "description": "Docker Desktop is a powerful tool for containerized application development and deployment.",
- "link": "https://www.docker.com/products/docker-desktop",
- "winget": "Docker.DockerDesktop"
- },
- "dotnet3": {
- "category": "Microsoft Tools",
- "choco": "dotnetcore3-desktop-runtime",
- "content": ".NET Desktop Runtime 3.1",
- "description": ".NET Desktop Runtime 3.1 is a runtime environment required for running applications developed with .NET Core 3.1.",
- "link": "https://dotnet.microsoft.com/download/dotnet/3.1",
- "winget": "Microsoft.DotNet.DesktopRuntime.3_1"
- },
- "dotnet5": {
- "category": "Microsoft Tools",
- "choco": "dotnet-5.0-runtime",
- "content": ".NET Desktop Runtime 5",
- "description": ".NET Desktop Runtime 5 is a runtime environment required for running applications developed with .NET 5.",
- "link": "https://dotnet.microsoft.com/download/dotnet/5.0",
- "winget": "Microsoft.DotNet.DesktopRuntime.5"
- },
- "dotnet6": {
- "category": "Microsoft Tools",
- "choco": "dotnet-6.0-runtime",
- "content": ".NET Desktop Runtime 6",
- "description": ".NET Desktop Runtime 6 is a runtime environment required for running applications developed with .NET 6.",
- "link": "https://dotnet.microsoft.com/download/dotnet/6.0",
- "winget": "Microsoft.DotNet.DesktopRuntime.6"
- },
- "dotnet7": {
- "category": "Microsoft Tools",
- "choco": "dotnet-7.0-runtime",
- "content": ".NET Desktop Runtime 7",
- "description": ".NET Desktop Runtime 7 is a runtime environment required for running applications developed with .NET 7.",
- "link": "https://dotnet.microsoft.com/download/dotnet/7.0",
- "winget": "Microsoft.DotNet.DesktopRuntime.7"
- },
- "dotnet8": {
- "category": "Microsoft Tools",
- "choco": "dotnet-8.0-runtime",
- "content": ".NET Desktop Runtime 8",
- "description": ".NET Desktop Runtime 8 is a runtime environment required for running applications developed with .NET 8.",
- "link": "https://dotnet.microsoft.com/download/dotnet/8.0",
- "winget": "Microsoft.DotNet.DesktopRuntime.8"
- },
- "dmt": {
- "winget": "GNE.DualMonitorTools",
- "choco": "dual-monitor-tools",
- "category": "Utilities",
- "content": "Dual Monitor Tools",
- "link": "https://dualmonitortool.sourceforge.net/",
- "description": "Dual Monitor Tools (DMT) is a FOSS app that customize handling multiple monitors and even lock the mouse on specific monitor. Useful for full screen games and apps that does not handle well a second monitor or helps the workflow."
- },
- "duplicati": {
- "category": "Utilities",
- "choco": "duplicati",
- "content": "Duplicati",
- "description": "Duplicati is an open-source backup solution that supports encrypted, compressed, and incremental backups. It is designed to securely store data on cloud storage services.",
- "link": "https://www.duplicati.com/",
- "winget": "Duplicati.Duplicati"
- },
- "eaapp": {
- "category": "Games",
- "choco": "ea-app",
- "content": "EA App",
- "description": "EA App is a platform for accessing and playing Electronic Arts games.",
- "link": "https://www.ea.com/ea-app",
- "winget": "ElectronicArts.EADesktop"
- },
- "eartrumpet": {
- "category": "Multimedia Tools",
- "choco": "eartrumpet",
- "content": "EarTrumpet (Audio)",
- "description": "EarTrumpet is an audio control app for Windows, providing a simple and intuitive interface for managing sound settings.",
- "link": "https://eartrumpet.app/",
- "winget": "File-New-Project.EarTrumpet"
- },
- "edge": {
- "category": "Browsers",
- "choco": "microsoft-edge",
- "content": "Edge",
- "description": "Microsoft Edge is a modern web browser built on Chromium, offering performance, security, and integration with Microsoft services.",
- "link": "https://www.microsoft.com/edge",
- "winget": "Microsoft.Edge"
- },
- "efibooteditor": {
- "category": "Pro Tools",
- "choco": "na",
- "content": "EFI Boot Editor",
- "description": "EFI Boot Editor is a tool for managing the EFI/UEFI boot entries on your system. It allows you to customize the boot configuration of your computer.",
- "link": "https://www.easyuefi.com/",
- "winget": "EFIBootEditor.EFIBootEditor"
- },
- "emulationstation": {
- "category": "Games",
- "choco": "emulationstation",
- "content": "Emulation Station",
- "description": "Emulation Station is a graphical and themeable emulator front-end that allows you to access all your favorite games in one place.",
- "link": "https://emulationstation.org/",
- "winget": "Emulationstation.Emulationstation"
- },
- "epicgames": {
- "category": "Games",
- "choco": "epicgameslauncher",
- "content": "Epic Games Launcher",
- "description": "Epic Games Launcher is the client for accessing and playing games from the Epic Games Store.",
- "link": "https://www.epicgames.com/store/en-US/",
- "winget": "EpicGames.EpicGamesLauncher"
- },
- "errorlookup": {
- "category": "Utilities",
- "choco": "na",
- "content": "Windows Error Code Lookup",
- "description": "ErrorLookup is a tool for looking up Windows error codes and their descriptions.",
- "link": "https://github.com/HenryPP/ErrorLookup",
- "winget": "Henry++.ErrorLookup"
- },
- "esearch": {
- "category": "Utilities",
- "choco": "everything",
- "content": "Everything Search",
- "description": "Everything Search is a fast and efficient file search utility for Windows.",
- "link": "https://www.voidtools.com/",
- "winget": "voidtools.Everything"
- },
- "espanso": {
- "category": "Utilities",
- "choco": "espanso",
- "content": "Espanso",
- "description": "Cross-platform and open-source Text Expander written in Rust",
- "link": "https://espanso.org/",
- "winget": "Espanso.Espanso"
- },
- "etcher": {
- "category": "Utilities",
- "choco": "etcher",
- "content": "Etcher USB Creator",
- "description": "Etcher is a powerful tool for creating bootable USB drives with ease.",
- "link": "https://www.balena.io/etcher/",
- "winget": "Balena.Etcher"
- },
- "falkon": {
- "category": "Browsers",
- "choco": "falkon",
- "content": "Falkon",
- "description": "Falkon is a lightweight and fast web browser with a focus on user privacy and efficiency.",
- "link": "https://www.falkon.org/",
- "winget": "KDE.Falkon"
- },
- "fastfetch": {
- "category": "Utilities",
- "choco": "na",
- "content": "Fastfetch",
- "description": "Fastfetch is a neofetch-like tool for fetching system information and displaying them in a pretty way",
- "link": "https://github.com/fastfetch-cli/fastfetch/",
- "winget": "Fastfetch-cli.Fastfetch"
- },
- "ferdium": {
- "category": "Communications",
- "choco": "ferdium",
- "content": "Ferdium",
- "description": "Ferdium is a messaging application that combines multiple messaging services into a single app for easy management.",
- "link": "https://ferdium.org/",
- "winget": "Ferdium.Ferdium"
- },
- "ffmpeg": {
- "category": "Multimedia Tools",
- "choco": "ffmpeg-full",
- "content": "FFmpeg (full)",
- "description": "FFmpeg is a powerful multimedia processing tool that enables users to convert, edit, and stream audio and video files with a vast range of codecs and formats.",
- "link": "https://ffmpeg.org/",
- "winget": "Gyan.FFmpeg"
- },
- "fileconverter": {
- "category": "Utilities",
- "choco": "file-converter",
- "content": "File-Converter",
- "description": "File Converter is a very simple tool which allows you to convert and compress one or several file(s) using the context menu in windows explorer.",
- "link": "https://file-converter.io/",
- "winget": "AdrienAllard.FileConverter"
- },
- "files": {
- "category": "Utilities",
- "choco": "files",
- "content": "Files",
- "description": "Alternative file explorer.",
- "link": "https://github.com/files-community/Files",
- "winget": "na"
- },
- "firealpaca": {
- "category": "Multimedia Tools",
- "choco": "firealpaca",
- "content": "Fire Alpaca",
- "description": "Fire Alpaca is a free digital painting software that provides a wide range of drawing tools and a user-friendly interface.",
- "link": "https://firealpaca.com/",
- "winget": "FireAlpaca.FireAlpaca"
- },
- "firefox": {
- "category": "Browsers",
- "choco": "firefox",
- "content": "Firefox",
- "description": "Mozilla Firefox is an open-source web browser known for its customization options, privacy features, and extensions.",
- "link": "https://www.mozilla.org/en-US/firefox/new/",
- "winget": "Mozilla.Firefox"
- },
- "firefoxesr": {
- "category": "Browsers",
- "choco": "FirefoxESR",
- "content": "Firefox ESR",
- "description": "Mozilla Firefox is an open-source web browser known for its customization options, privacy features, and extensions. Firefox ESR (Extended Support Release) receives major updates every 42 weeks with minor updates such as crash fixes, security fixes and policy updates as needed, but at least every four weeks.",
- "link": "https://www.mozilla.org/en-US/firefox/enterprise/",
- "winget": "Mozilla.Firefox.ESR"
- },
- "flameshot": {
- "category": "Multimedia Tools",
- "choco": "flameshot",
- "content": "Flameshot (Screenshots)",
- "description": "Flameshot is a powerful yet simple to use screenshot software, offering annotation and editing features.",
- "link": "https://flameshot.org/",
- "winget": "Flameshot.Flameshot"
- },
- "lightshot": {
- "category": "Multimedia Tools",
- "choco": "lightshot",
- "content": "Lightshot (Screenshots)",
- "description": "Ligthshot is an Easy-to-use, light-weight screenshot software tool, where you can optionally edit your screenshots using different tools, share them via Internet and/or save to disk, and customize the available options.",
- "link": "https://app.prntscr.com/",
- "winget": "Skillbrains.Lightshot"
- },
- "floorp": {
- "category": "Browsers",
- "choco": "na",
- "content": "Floorp",
- "description": "Floorp is an open-source web browser project that aims to provide a simple and fast browsing experience.",
- "link": "https://floorp.app/",
- "winget": "Ablaze.Floorp"
- },
- "flow": {
- "category": "Utilities",
- "choco": "flow-launcher",
- "content": "Flow launcher",
- "description": "Keystroke launcher for Windows to search, manage and launch files, folders bookmarks, websites and more.",
- "link": "https://www.flowlauncher.com/",
- "winget": "Flow-Launcher.Flow-Launcher"
- },
- "flux": {
- "category": "Utilities",
- "choco": "flux",
- "content": "F.lux",
- "description": "f.lux adjusts the color temperature of your screen to reduce eye strain during nighttime use.",
- "link": "https://justgetflux.com/",
- "winget": "flux.flux"
- },
- "foobar": {
- "category": "Multimedia Tools",
- "choco": "foobar2000",
- "content": "foobar2000 (Music Player)",
- "description": "foobar2000 is a highly customizable and extensible music player for Windows, known for its modular design and advanced features.",
- "link": "https://www.foobar2000.org/",
- "winget": "PeterPawlowski.foobar2000"
- },
- "foxpdfeditor": {
- "category": "Document",
- "choco": "na",
- "content": "Foxit PDF Editor",
- "description": "Foxit PDF Editor is a feature-rich PDF editor and viewer with a familiar ribbon-style interface.",
- "link": "https://www.foxit.com/pdf-editor/",
- "winget": "Foxit.PhantomPDF"
- },
- "foxpdfreader": {
- "category": "Document",
- "choco": "foxitreader",
- "content": "Foxit PDF Reader",
- "description": "Foxit PDF Reader is a free PDF viewer with a familiar ribbon-style interface.",
- "link": "https://www.foxit.com/pdf-reader/",
- "winget": "Foxit.FoxitReader"
- },
- "freecad": {
- "category": "Multimedia Tools",
- "choco": "freecad",
- "content": "FreeCAD",
- "description": "FreeCAD is a parametric 3D CAD modeler, designed for product design and engineering tasks, with a focus on flexibility and extensibility.",
- "link": "https://www.freecadweb.org/",
- "winget": "FreeCAD.FreeCAD"
- },
- "fxsound": {
- "category": "Multimedia Tools",
- "choco": "fxsound",
- "content": "FxSound",
- "description": "FxSound is a cutting-edge audio enhancement software that elevates your listening experience across all media.",
- "link": "https://www.fxsound.com/",
- "winget": "FxSoundLLC.FxSound"
- },
- "fzf": {
- "category": "Utilities",
- "choco": "fzf",
- "content": "Fzf",
- "description": "A command-line fuzzy finder",
- "link": "https://github.com/junegunn/fzf/",
- "winget": "junegunn.fzf"
- },
- "geforcenow": {
- "category": "Games",
- "choco": "nvidia-geforce-now",
- "content": "GeForce NOW",
- "description": "GeForce NOW is a cloud gaming service that allows you to play high-quality PC games on your device.",
- "link": "https://www.nvidia.com/en-us/geforce-now/",
- "winget": "Nvidia.GeForceNow"
- },
- "gimp": {
- "category": "Multimedia Tools",
- "choco": "gimp",
- "content": "GIMP (Image Editor)",
- "description": "GIMP is a versatile open-source raster graphics editor used for tasks such as photo retouching, image editing, and image composition.",
- "link": "https://www.gimp.org/",
- "winget": "GIMP.GIMP"
- },
- "git": {
- "category": "Development",
- "choco": "git",
- "content": "Git",
- "description": "Git is a distributed version control system widely used for tracking changes in source code during software development.",
- "link": "https://git-scm.com/",
- "winget": "Git.Git"
- },
- "gitbutler": {
- "category": "Development",
- "choco": "na",
- "content": "Git Butler",
- "description": "A Git client for simultaneous branches on top of your existing workflow.",
- "link": "https://gitbutler.com/",
- "winget": "GitButler.GitButler"
- },
- "gitextensions": {
- "category": "Development",
- "choco": "git;gitextensions",
- "content": "Git Extensions",
- "description": "Git Extensions is a graphical user interface for Git, providing additional features for easier source code management.",
- "link": "https://gitextensions.github.io/",
- "winget": "GitExtensionsTeam.GitExtensions"
- },
- "githubcli": {
- "category": "Development",
- "choco": "git;gh",
- "content": "GitHub CLI",
- "description": "GitHub CLI is a command-line tool that simplifies working with GitHub directly from the terminal.",
- "link": "https://cli.github.com/",
- "winget": "GitHub.cli"
- },
- "githubdesktop": {
- "category": "Development",
- "choco": "git;github-desktop",
- "content": "GitHub Desktop",
- "description": "GitHub Desktop is a visual Git client that simplifies collaboration on GitHub repositories with an easy-to-use interface.",
- "link": "https://desktop.github.com/",
- "winget": "GitHub.GitHubDesktop"
- },
- "gitkrakenclient": {
- "category": "Development",
- "choco": "gitkraken",
- "content": "GitKraken Client",
- "description": "GitKraken Client is a powerful visual Git client from Axosoft that works with ALL git repositories on any hosting environment.",
- "link": "https://www.gitkraken.com/git-client",
- "winget": "Axosoft.GitKraken"
- },
- "glaryutilities": {
- "category": "Utilities",
- "choco": "glaryutilities-free",
- "content": "Glary Utilities",
- "description": "Glary Utilities is a comprehensive system optimization and maintenance tool for Windows.",
- "link": "https://www.glarysoft.com/glary-utilities/",
- "winget": "Glarysoft.GlaryUtilities"
- },
- "godotengine": {
- "category": "Development",
- "choco": "godot",
- "content": "Godot Engine",
- "description": "Godot Engine is a free, open-source 2D and 3D game engine with a focus on usability and flexibility.",
- "link": "https://godotengine.org/",
- "winget": "GodotEngine.GodotEngine"
- },
- "gog": {
- "category": "Games",
- "choco": "goggalaxy",
- "content": "GOG Galaxy",
- "description": "GOG Galaxy is a gaming client that offers DRM-free games, additional content, and more.",
- "link": "https://www.gog.com/galaxy",
- "winget": "GOG.Galaxy"
- },
- "gitify": {
- "category": "Development",
- "choco": "na",
- "content": "Gitify",
- "description": "GitHub notifications on your menu bar.",
- "link": "https://www.gitify.io/",
- "winget": "Gitify.Gitify"
- },
- "golang": {
- "category": "Development",
- "choco": "golang",
- "content": "Go",
- "description": "Go (or Golang) is a statically typed, compiled programming language designed for simplicity, reliability, and efficiency.",
- "link": "https://go.dev/",
- "winget": "GoLang.Go"
- },
- "googledrive": {
- "category": "Utilities",
- "choco": "googledrive",
- "content": "Google Drive",
- "description": "File syncing across devices all tied to your google account",
- "link": "https://www.google.com/drive/",
- "winget": "Google.Drive"
- },
- "gpuz": {
- "category": "Utilities",
- "choco": "gpu-z",
- "content": "GPU-Z",
- "description": "GPU-Z provides detailed information about your graphics card and GPU.",
- "link": "https://www.techpowerup.com/gpuz/",
- "winget": "TechPowerUp.GPU-Z"
- },
- "greenshot": {
- "category": "Multimedia Tools",
- "choco": "greenshot",
- "content": "Greenshot (Screenshots)",
- "description": "Greenshot is a light-weight screenshot software tool with built-in image editor and customizable capture options.",
- "link": "https://getgreenshot.org/",
- "winget": "Greenshot.Greenshot"
- },
- "gsudo": {
- "category": "Utilities",
- "choco": "gsudo",
- "content": "Gsudo",
- "description": "Gsudo is a sudo implementation for Windows, allowing elevated privilege execution.",
- "link": "https://gerardog.github.io/gsudo/",
- "winget": "gerardog.gsudo"
- },
- "guilded": {
- "category": "Communications",
- "choco": "na",
- "content": "Guilded",
- "description": "Guilded is a communication and productivity platform that includes chat, scheduling, and collaborative tools for gaming and communities.",
- "link": "https://www.guilded.gg/",
- "winget": "Guilded.Guilded"
- },
- "handbrake": {
- "category": "Multimedia Tools",
- "choco": "handbrake",
- "content": "HandBrake",
- "description": "HandBrake is an open-source video transcoder, allowing you to convert video from nearly any format to a selection of widely supported codecs.",
- "link": "https://handbrake.fr/",
- "winget": "HandBrake.HandBrake"
- },
- "harmonoid": {
- "category": "Multimedia Tools",
- "choco": "na",
- "content": "Harmonoid",
- "description": "Plays and manages your music library. Looks beautiful and juicy. Playlists, visuals, synced lyrics, pitch shift, volume boost and more.",
- "link": "https://harmonoid.com/",
- "winget": "Harmonoid.Harmonoid"
- },
- "heidisql": {
- "category": "Pro Tools",
- "choco": "heidisql",
- "content": "HeidiSQL",
- "description": "HeidiSQL is a powerful and easy-to-use client for MySQL, MariaDB, Microsoft SQL Server, and PostgreSQL databases. It provides tools for database management and development.",
- "link": "https://www.heidisql.com/",
- "winget": "HeidiSQL.HeidiSQL"
- },
- "helix": {
- "category": "Development",
- "choco": "helix",
- "content": "Helix",
- "description": "Helix is a neovim alternative built in rust.",
- "link": "https://helix-editor.com/",
- "winget": "Helix.Helix"
- },
- "heroiclauncher": {
- "category": "Games",
- "choco": "na",
- "content": "Heroic Games Launcher",
- "description": "Heroic Games Launcher is an open-source alternative game launcher for Epic Games Store.",
- "link": "https://heroicgameslauncher.com/",
- "winget": "HeroicGamesLauncher.HeroicGamesLauncher"
- },
- "hexchat": {
- "category": "Communications",
- "choco": "hexchat",
- "content": "Hexchat",
- "description": "HexChat is a free, open-source IRC (Internet Relay Chat) client with a graphical interface for easy communication.",
- "link": "https://hexchat.github.io/",
- "winget": "HexChat.HexChat"
- },
- "hwinfo": {
- "category": "Utilities",
- "choco": "hwinfo",
- "content": "HWiNFO",
- "description": "HWiNFO provides comprehensive hardware information and diagnostics for Windows.",
- "link": "https://www.hwinfo.com/",
- "winget": "REALiX.HWiNFO"
- },
- "hwmonitor": {
- "category": "Utilities",
- "choco": "hwmonitor",
- "content": "HWMonitor",
- "description": "HWMonitor is a hardware monitoring program that reads PC systems main health sensors.",
- "link": "https://www.cpuid.com/softwares/hwmonitor.html",
- "winget": "CPUID.HWMonitor"
- },
- "imageglass": {
- "category": "Multimedia Tools",
- "choco": "imageglass",
- "content": "ImageGlass (Image Viewer)",
- "description": "ImageGlass is a versatile image viewer with support for various image formats and a focus on simplicity and speed.",
- "link": "https://imageglass.org/",
- "winget": "DuongDieuPhap.ImageGlass"
- },
- "imgburn": {
- "category": "Multimedia Tools",
- "choco": "imgburn",
- "content": "ImgBurn",
- "description": "ImgBurn is a lightweight CD, DVD, HD-DVD, and Blu-ray burning application with advanced features for creating and burning disc images.",
- "link": "http://www.imgburn.com/",
- "winget": "LIGHTNINGUK.ImgBurn"
- },
- "inkscape": {
- "category": "Multimedia Tools",
- "choco": "inkscape",
- "content": "Inkscape",
- "description": "Inkscape is a powerful open-source vector graphics editor, suitable for tasks such as illustrations, icons, logos, and more.",
- "link": "https://inkscape.org/",
- "winget": "Inkscape.Inkscape"
- },
- "itch": {
- "category": "Games",
- "choco": "itch",
- "content": "Itch.io",
- "description": "Itch.io is a digital distribution platform for indie games and creative projects.",
- "link": "https://itch.io/",
- "winget": "ItchIo.Itch"
- },
- "itunes": {
- "category": "Multimedia Tools",
- "choco": "itunes",
- "content": "iTunes",
- "description": "iTunes is a media player, media library, and online radio broadcaster application developed by Apple Inc.",
- "link": "https://www.apple.com/itunes/",
- "winget": "Apple.iTunes"
- },
- "jami": {
- "category": "Communications",
- "choco": "jami",
- "content": "Jami",
- "description": "Jami is a secure and privacy-focused communication platform that offers audio and video calls, messaging, and file sharing.",
- "link": "https://jami.net/",
- "winget": "SFLinux.Jami"
- },
- "java8": {
- "category": "Development",
- "choco": "corretto8jdk",
- "content": "Amazon Corretto 8 (LTS)",
- "description": "Amazon Corretto is a no-cost, multiplatform, production-ready distribution of the Open Java Development Kit (OpenJDK).",
- "link": "https://aws.amazon.com/corretto",
- "winget": "Amazon.Corretto.8.JDK"
- },
- "java11": {
- "category": "Development",
- "choco": "corretto11jdk",
- "content": "Amazon Corretto 11 (LTS)",
- "description": "Amazon Corretto is a no-cost, multiplatform, production-ready distribution of the Open Java Development Kit (OpenJDK).",
- "link": "https://aws.amazon.com/corretto",
- "winget": "Amazon.Corretto.11.JDK"
- },
- "java17": {
- "category": "Development",
- "choco": "corretto17jdk",
- "content": "Amazon Corretto 17 (LTS)",
- "description": "Amazon Corretto is a no-cost, multiplatform, production-ready distribution of the Open Java Development Kit (OpenJDK).",
- "link": "https://aws.amazon.com/corretto",
- "winget": "Amazon.Corretto.17.JDK"
- },
- "java21": {
- "category": "Development",
- "choco": "corretto21jdk",
- "content": "Amazon Corretto 21 (LTS)",
- "description": "Amazon Corretto is a no-cost, multiplatform, production-ready distribution of the Open Java Development Kit (OpenJDK).",
- "link": "https://aws.amazon.com/corretto",
- "winget": "Amazon.Corretto.21.JDK"
- },
- "jdownloader": {
- "category": "Utilities",
- "choco": "jdownloader",
- "content": "JDownloader",
- "description": "JDownloader is a feature-rich download manager with support for various file hosting services.",
- "link": "http://jdownloader.org/",
- "winget": "AppWork.JDownloader"
- },
- "jellyfinmediaplayer": {
- "category": "Multimedia Tools",
- "choco": "jellyfin-media-player",
- "content": "Jellyfin Media Player",
- "description": "Jellyfin Media Player is a client application for the Jellyfin media server, providing access to your media library.",
- "link": "https://github.com/jellyfin/jellyfin-media-player",
- "winget": "Jellyfin.JellyfinMediaPlayer"
- },
- "jellyfinserver": {
- "category": "Multimedia Tools",
- "choco": "jellyfin",
- "content": "Jellyfin Server",
- "description": "Jellyfin Server is an open-source media server software, allowing you to organize and stream your media library.",
- "link": "https://jellyfin.org/",
- "winget": "Jellyfin.Server"
- },
- "jetbrains": {
- "category": "Development",
- "choco": "jetbrainstoolbox",
- "content": "Jetbrains Toolbox",
- "description": "Jetbrains Toolbox is a platform for easy installation and management of JetBrains developer tools.",
- "link": "https://www.jetbrains.com/toolbox/",
- "winget": "JetBrains.Toolbox"
- },
- "joplin": {
- "category": "Document",
- "choco": "joplin",
- "content": "Joplin (FOSS Notes)",
- "description": "Joplin is an open-source note-taking and to-do application with synchronization capabilities.",
- "link": "https://joplinapp.org/",
- "winget": "Joplin.Joplin"
- },
- "jpegview": {
- "category": "Utilities",
- "choco": "jpegview",
- "content": "JPEG View",
- "description": "JPEGView is a lean, fast and highly configurable viewer/editor for JPEG, BMP, PNG, WEBP, TGA, GIF, JXL, HEIC, HEIF, AVIF and TIFF images with a minimal GUI",
- "link": "https://github.com/sylikc/jpegview",
- "winget": "sylikc.JPEGView"
- },
- "kdeconnect": {
- "category": "Utilities",
- "choco": "kdeconnect-kde",
- "content": "KDE Connect",
- "description": "KDE Connect allows seamless integration between your KDE desktop and mobile devices.",
- "link": "https://community.kde.org/KDEConnect",
- "winget": "KDE.KDEConnect"
- },
- "kdenlive": {
- "category": "Multimedia Tools",
- "choco": "kdenlive",
- "content": "Kdenlive (Video Editor)",
- "description": "Kdenlive is an open-source video editing software with powerful features for creating and editing professional-quality videos.",
- "link": "https://kdenlive.org/",
- "winget": "KDE.Kdenlive"
- },
- "keepass": {
- "category": "Utilities",
- "choco": "keepassxc",
- "content": "KeePassXC",
- "description": "KeePassXC is a cross-platform, open-source password manager with strong encryption features.",
- "link": "https://keepassxc.org/",
- "winget": "KeePassXCTeam.KeePassXC"
- },
- "klite": {
- "category": "Multimedia Tools",
- "choco": "k-litecodecpack-standard",
- "content": "K-Lite Codec Standard",
- "description": "K-Lite Codec Pack Standard is a collection of audio and video codecs and related tools, providing essential components for media playback.",
- "link": "https://www.codecguide.com/",
- "winget": "CodecGuide.K-LiteCodecPack.Standard"
- },
- "kodi": {
- "category": "Multimedia Tools",
- "choco": "kodi",
- "content": "Kodi Media Center",
- "description": "Kodi is an open-source media center application that allows you to play and view most videos, music, podcasts, and other digital media files.",
- "link": "https://kodi.tv/",
- "winget": "XBMCFoundation.Kodi"
- },
- "krita": {
- "category": "Multimedia Tools",
- "choco": "krita",
- "content": "Krita (Image Editor)",
- "description": "Krita is a powerful open-source painting application. It is designed for concept artists, illustrators, matte and texture artists, and the VFX industry.",
- "link": "https://krita.org/en/features/",
- "winget": "KDE.Krita"
- },
- "lazygit": {
- "category": "Development",
- "choco": "lazygit",
- "content": "Lazygit",
- "description": "Simple terminal UI for git commands",
- "link": "https://github.com/jesseduffield/lazygit/",
- "winget": "JesseDuffield.lazygit"
- },
- "libreoffice": {
- "category": "Document",
- "choco": "libreoffice-fresh",
- "content": "LibreOffice",
- "description": "LibreOffice is a powerful and free office suite, compatible with other major office suites.",
- "link": "https://www.libreoffice.org/",
- "winget": "TheDocumentFoundation.LibreOffice"
- },
- "librewolf": {
- "category": "Browsers",
- "choco": "librewolf",
- "content": "LibreWolf",
- "description": "LibreWolf is a privacy-focused web browser based on Firefox, with additional privacy and security enhancements.",
- "link": "https://librewolf-community.gitlab.io/",
- "winget": "LibreWolf.LibreWolf"
- },
- "linkshellextension": {
- "category": "Utilities",
- "choco": "linkshellextension",
- "content": "Link Shell extension",
- "description": "Link Shell Extension (LSE) provides for the creation of Hardlinks, Junctions, Volume Mountpoints, Symbolic Links, a folder cloning process that utilises Hardlinks or Symbolic Links and a copy process taking care of Junctions, Symbolic Links, and Hardlinks. LSE, as its name implies is implemented as a Shell extension and is accessed from Windows Explorer, or similar file/folder managers.",
- "link": "https://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html",
- "winget": "HermannSchinagl.LinkShellExtension"
- },
- "linphone": {
- "category": "Communications",
- "choco": "linphone",
- "content": "Linphone",
- "description": "Linphone is an open-source voice over IP (VoIPservice that allows for audio and video calls, messaging, and more.",
- "link": "https://www.linphone.org/",
- "winget": "BelledonneCommunications.Linphone"
- },
- "livelywallpaper": {
- "category": "Utilities",
- "choco": "lively",
- "content": "Lively Wallpaper",
- "description": "Free and open-source software that allows users to set animated desktop wallpapers and screensavers.",
- "link": "https://www.rocksdanister.com/lively/",
- "winget": "rocksdanister.LivelyWallpaper"
- },
- "localsend": {
- "category": "Utilities",
- "choco": "localsend.install",
- "content": "LocalSend",
- "description": "An open source cross-platform alternative to AirDrop.",
- "link": "https://localsend.org/",
- "winget": "LocalSend.LocalSend"
- },
- "lockhunter": {
- "category": "Utilities",
- "choco": "lockhunter",
- "content": "LockHunter",
- "description": "LockHunter is a free tool to delete files blocked by something you do not know.",
- "link": "https://lockhunter.com/",
- "winget": "CrystalRich.LockHunter"
- },
- "logseq": {
- "category": "Document",
- "choco": "logseq",
- "content": "Logseq",
- "description": "Logseq is a versatile knowledge management and note-taking application designed for the digital thinker. With a focus on the interconnectedness of ideas, Logseq allows users to seamlessly organize their thoughts through a combination of hierarchical outlines and bi-directional linking. It supports both structured and unstructured content, enabling users to create a personalized knowledge graph that adapts to their evolving ideas and insights.",
- "link": "https://logseq.com/",
- "winget": "Logseq.Logseq"
- },
- "malwarebytes": {
- "category": "Utilities",
- "choco": "malwarebytes",
- "content": "Malwarebytes",
- "description": "Malwarebytes is an anti-malware software that provides real-time protection against threats.",
- "link": "https://www.malwarebytes.com/",
- "winget": "Malwarebytes.Malwarebytes"
- },
- "masscode": {
- "category": "Document",
- "choco": "na",
- "content": "massCode (Snippet Manager)",
- "description": "massCode is a fast and efficient open-source code snippet manager for developers.",
- "link": "https://masscode.io/",
- "winget": "antonreshetov.massCode"
- },
- "matrix": {
- "category": "Communications",
- "choco": "element-desktop",
- "content": "Element",
- "description": "Element is a client for Matrix—an open network for secure, decentralized communication.",
- "link": "https://element.io/",
- "winget": "Element.Element"
- },
- "meld": {
- "category": "Utilities",
- "choco": "meld",
- "content": "Meld",
- "description": "Meld is a visual diff and merge tool for files and directories.",
- "link": "https://meldmerge.org/",
- "winget": "Meld.Meld"
- },
- "ModernFlyouts": {
- "category": "Multimedia Tools",
- "choco": "na",
- "content": "Modern Flyouts",
- "description": "An open source, modern, Fluent Design-based set of flyouts for Windows.",
- "link": "https://github.com/ModernFlyouts-Community/ModernFlyouts/",
- "winget": "ModernFlyouts.ModernFlyouts"
- },
- "monitorian": {
- "category": "Utilities",
- "choco": "monitorian",
- "content": "Monitorian",
- "description": "Monitorian is a utility for adjusting monitor brightness and contrast on Windows.",
- "link": "https://github.com/emoacht/Monitorian",
- "winget": "emoacht.Monitorian"
- },
- "moonlight": {
- "category": "Games",
- "choco": "moonlight-qt",
- "content": "Moonlight/GameStream Client",
- "description": "Moonlight/GameStream Client allows you to stream PC games to other devices over your local network.",
- "link": "https://moonlight-stream.org/",
- "winget": "MoonlightGameStreamingProject.Moonlight"
- },
- "Motrix": {
- "category": "Utilities",
- "choco": "motrix",
- "content": "Motrix Download Manager",
- "description": "A full-featured download manager.",
- "link": "https://motrix.app/",
- "winget": "agalwood.Motrix"
- },
- "mpchc": {
- "category": "Multimedia Tools",
- "choco": "mpc-hc-clsid2",
- "content": "Media Player Classic - Home Cinema",
- "description": "Media Player Classic - Home Cinema (MPC-HC) is a free and open-source video and audio player for Windows. MPC-HC is based on the original Guliverkli project and contains many additional features and bug fixes.",
- "link": "https://github.com/clsid2/mpc-hc/",
- "winget": "clsid2.mpc-hc"
- },
- "mremoteng": {
- "category": "Pro Tools",
- "choco": "mremoteng",
- "content": "mRemoteNG",
- "description": "mRemoteNG is a free and open-source remote connections manager. It allows you to view and manage multiple remote sessions in a single interface.",
- "link": "https://mremoteng.org/",
- "winget": "mRemoteNG.mRemoteNG"
- },
- "msedgeredirect": {
- "category": "Utilities",
- "choco": "msedgeredirect",
- "content": "MSEdgeRedirect",
- "description": "A Tool to Redirect News, Search, Widgets, Weather, and More to Your Default Browser.",
- "link": "https://github.com/rcmaehl/MSEdgeRedirect",
- "winget": "rcmaehl.MSEdgeRedirect"
- },
- "msiafterburner": {
- "category": "Utilities",
- "choco": "msiafterburner",
- "content": "MSI Afterburner",
- "description": "MSI Afterburner is a graphics card overclocking utility with advanced features.",
- "link": "https://www.msi.com/Landing/afterburner",
- "winget": "Guru3D.Afterburner"
- },
- "mullvadvpn": {
- "category": "Pro Tools",
- "choco": "mullvad-app",
- "content": "Mullvad VPN",
- "description": "This is the VPN client software for the Mullvad VPN service.",
- "link": "https://github.com/mullvad/mullvadvpn-app",
- "winget": "MullvadVPN.MullvadVPN"
- },
- "BorderlessGaming": {
- "category": "Utilities",
- "choco": "borderlessgaming",
- "content": "Borderless Gaming",
- "description": "Play your favorite games in a borderless window; no more time consuming alt-tabs.",
- "link": "https://github.com/Codeusa/Borderless-Gaming",
- "winget": "Codeusa.BorderlessGaming"
- },
- "EqualizerAPO": {
- "category": "Multimedia Tools",
- "choco": "equalizerapo",
- "content": "Equalizer APO",
- "description": "Equalizer APO is a parametric / graphic equalizer for Windows.",
- "link": "https://sourceforge.net/projects/equalizerapo",
- "winget": "na"
- },
- "CompactGUI": {
- "category": "Utilities",
- "choco": "compactgui",
- "content": "Compact GUI",
- "description": "Transparently compress active games and programs using Windows 10/11 APIs",
- "link": "https://github.com/IridiumIO/CompactGUI",
- "winget": "IridiumIO.CompactGUI"
- },
- "ExifCleaner": {
- "category": "Utilities",
- "choco": "na",
- "content": "ExifCleaner",
- "description": "Desktop app to clean metadata from images, videos, PDFs, and other files.",
- "link": "https://github.com/szTheory/exifcleaner",
- "winget": "szTheory.exifcleaner"
- },
- "mullvadbrowser": {
- "category": "Browsers",
- "choco": "na",
- "content": "Mullvad Browser",
- "description": "Mullvad Browser is a privacy-focused web browser, developed in partnership with the Tor Project.",
- "link": "https://mullvad.net/browser",
- "winget": "MullvadVPN.MullvadBrowser"
- },
- "musescore": {
- "category": "Multimedia Tools",
- "choco": "musescore",
- "content": "MuseScore",
- "description": "Create, play back and print beautiful sheet music with free and easy to use music notation software MuseScore.",
- "link": "https://musescore.org/en",
- "winget": "Musescore.Musescore"
- },
- "musicbee": {
- "category": "Multimedia Tools",
- "choco": "musicbee",
- "content": "MusicBee (Music Player)",
- "description": "MusicBee is a customizable music player with support for various audio formats. It includes features like an integrated search function, tag editing, and more.",
- "link": "https://getmusicbee.com/",
- "winget": "MusicBee.MusicBee"
- },
- "mp3tag": {
- "category": "Multimedia Tools",
- "choco": "mp3tag",
- "content": "Mp3tag (Metadata Audio Editor)",
- "description": "Mp3tag is a powerful and yet easy-to-use tool to edit metadata of common audio formats.",
- "link": "https://www.mp3tag.de/en/",
- "winget": "Mp3tag.Mp3tag"
- },
- "tagscanner": {
- "category": "Multimedia Tools",
- "choco": "tagscanner",
- "content": "TagScanner (Tag Scanner)",
- "description": "TagScanner is a powerful tool for organizing and managing your music collection",
- "link": "https://www.xdlab.ru/en/",
- "winget": "SergeySerkov.TagScanner"
- },
- "nanazip": {
- "category": "Utilities",
- "choco": "nanazip",
- "content": "NanaZip",
- "description": "NanaZip is a fast and efficient file compression and decompression tool.",
- "link": "https://github.com/M2Team/NanaZip",
- "winget": "M2Team.NanaZip"
- },
- "netbird": {
- "category": "Pro Tools",
- "choco": "netbird",
- "content": "NetBird",
- "description": "NetBird is a Open Source alternative comparable to TailScale that can be connected to a selfhosted Server.",
- "link": "https://netbird.io/",
- "winget": "netbird"
- },
- "naps2": {
- "category": "Document",
- "choco": "naps2",
- "content": "NAPS2 (Document Scanner)",
- "description": "NAPS2 is a document scanning application that simplifies the process of creating electronic documents.",
- "link": "https://www.naps2.com/",
- "winget": "Cyanfish.NAPS2"
- },
- "neofetchwin": {
- "category": "Utilities",
- "choco": "na",
- "content": "Neofetch",
- "description": "Neofetch is a command-line utility for displaying system information in a visually appealing way.",
- "link": "https://github.com/nepnep39/neofetch-win",
- "winget": "nepnep.neofetch-win"
- },
- "neovim": {
- "category": "Development",
- "choco": "neovim",
- "content": "Neovim",
- "description": "Neovim is a highly extensible text editor and an improvement over the original Vim editor.",
- "link": "https://neovim.io/",
- "winget": "Neovim.Neovim"
- },
- "nextclouddesktop": {
- "category": "Utilities",
- "choco": "nextcloud-client",
- "content": "Nextcloud Desktop",
- "description": "Nextcloud Desktop is the official desktop client for the Nextcloud file synchronization and sharing platform.",
- "link": "https://nextcloud.com/install/#install-clients",
- "winget": "Nextcloud.NextcloudDesktop"
- },
- "nglide": {
- "category": "Multimedia Tools",
- "choco": "na",
- "content": "nGlide (3dfx compatibility)",
- "description": "nGlide is a 3Dfx Voodoo Glide wrapper. It allows you to play games that use Glide API on modern graphics cards without the need for a 3Dfx Voodoo graphics card.",
- "link": "http://www.zeus-software.com/downloads/nglide",
- "winget": "ZeusSoftware.nGlide"
- },
- "nmap": {
- "category": "Pro Tools",
- "choco": "nmap",
- "content": "Nmap",
- "description": "Nmap (Network Mapper) is an open-source tool for network exploration and security auditing. It discovers devices on a network and provides information about their ports and services.",
- "link": "https://nmap.org/",
- "winget": "Insecure.Nmap"
- },
- "nodejs": {
- "category": "Development",
- "choco": "nodejs",
- "content": "NodeJS",
- "description": "NodeJS is a JavaScript runtime built on Chrome's V8 JavaScript engine for building server-side and networking applications.",
- "link": "https://nodejs.org/",
- "winget": "OpenJS.NodeJS"
- },
- "nodejslts": {
- "category": "Development",
- "choco": "nodejs-lts",
- "content": "NodeJS LTS",
- "description": "NodeJS LTS provides Long-Term Support releases for stable and reliable server-side JavaScript development.",
- "link": "https://nodejs.org/",
- "winget": "OpenJS.NodeJS.LTS"
- },
- "nomacs": {
- "category": "Multimedia Tools",
- "choco": "nomacs",
- "content": "Nomacs (Image viewer)",
- "description": "Nomacs is a free, open-source image viewer that supports multiple platforms. It features basic image editing capabilities and supports a variety of image formats.",
- "link": "https://nomacs.org/",
- "winget": "nomacs.nomacs"
- },
- "notepadplus": {
- "category": "Document",
- "choco": "notepadplusplus",
- "content": "Notepad++",
- "description": "Notepad++ is a free, open-source code editor and Notepad replacement with support for multiple languages.",
- "link": "https://notepad-plus-plus.org/",
- "winget": "Notepad++.Notepad++"
- },
- "nuget": {
- "category": "Microsoft Tools",
- "choco": "nuget.commandline",
- "content": "NuGet",
- "description": "NuGet is a package manager for the .NET framework, enabling developers to manage and share libraries in their .NET applications.",
- "link": "https://www.nuget.org/",
- "winget": "Microsoft.NuGet"
- },
- "nushell": {
- "category": "Utilities",
- "choco": "nushell",
- "content": "Nushell",
- "description": "Nushell is a new shell that takes advantage of modern hardware and systems to provide a powerful, expressive, and fast experience.",
- "link": "https://www.nushell.sh/",
- "winget": "Nushell.Nushell"
- },
- "nvclean": {
- "category": "Utilities",
- "choco": "na",
- "content": "NVCleanstall",
- "description": "NVCleanstall is a tool designed to customize NVIDIA driver installations, allowing advanced users to control more aspects of the installation process.",
- "link": "https://www.techpowerup.com/nvcleanstall/",
- "winget": "TechPowerUp.NVCleanstall"
- },
- "nvm": {
- "category": "Development",
- "choco": "nvm",
- "content": "Node Version Manager",
- "description": "Node Version Manager (NVM) for Windows allows you to easily switch between multiple Node.js versions.",
- "link": "https://github.com/coreybutler/nvm-windows",
- "winget": "CoreyButler.NVMforWindows"
- },
- "obs": {
- "category": "Multimedia Tools",
- "choco": "obs-studio",
- "content": "OBS Studio",
- "description": "OBS Studio is a free and open-source software for video recording and live streaming. It supports real-time video/audio capturing and mixing, making it popular among content creators.",
- "link": "https://obsproject.com/",
- "winget": "OBSProject.OBSStudio"
- },
- "obsidian": {
- "category": "Document",
- "choco": "obsidian",
- "content": "Obsidian",
- "description": "Obsidian is a powerful note-taking and knowledge management application.",
- "link": "https://obsidian.md/",
- "winget": "Obsidian.Obsidian"
- },
- "okular": {
- "category": "Document",
- "choco": "okular",
- "content": "Okular",
- "description": "Okular is a versatile document viewer with advanced features.",
- "link": "https://okular.kde.org/",
- "winget": "KDE.Okular"
- },
- "onedrive": {
- "category": "Microsoft Tools",
- "choco": "onedrive",
- "content": "OneDrive",
- "description": "OneDrive is a cloud storage service provided by Microsoft, allowing users to store and share files securely across devices.",
- "link": "https://onedrive.live.com/",
- "winget": "Microsoft.OneDrive"
- },
- "onlyoffice": {
- "category": "Document",
- "choco": "onlyoffice",
- "content": "ONLYOffice Desktop",
- "description": "ONLYOffice Desktop is a comprehensive office suite for document editing and collaboration.",
- "link": "https://www.onlyoffice.com/desktop.aspx",
- "winget": "ONLYOFFICE.DesktopEditors"
- },
- "OPAutoClicker": {
- "category": "Utilities",
- "choco": "autoclicker",
- "content": "OPAutoClicker",
- "description": "A full-fledged autoclicker with two modes of autoclicking, at your dynamic cursor location or at a prespecified location.",
- "link": "https://www.opautoclicker.com",
- "winget": "OPAutoClicker.OPAutoClicker"
- },
- "openhashtab": {
- "category": "Utilities",
- "choco": "openhashtab",
- "content": "OpenHashTab",
- "description": "OpenHashTab is a shell extension for conveniently calculating and checking file hashes from file properties.",
- "link": "https://github.com/namazso/OpenHashTab/",
- "winget": "namazso.OpenHashTab"
- },
- "openoffice": {
- "category": "Document",
- "choco": "openoffice",
- "content": "Apache OpenOffice",
- "description": "Apache OpenOffice is an open-source office software suite for word processing, spreadsheets, presentations, and more.",
- "link": "https://www.openoffice.org/",
- "winget": "Apache.OpenOffice"
- },
- "openrgb": {
- "category": "Utilities",
- "choco": "openrgb",
- "content": "OpenRGB",
- "description": "OpenRGB is an open-source RGB lighting control software designed to manage and control RGB lighting for various components and peripherals.",
- "link": "https://openrgb.org/",
- "winget": "CalcProgrammer1.OpenRGB"
- },
- "openscad": {
- "category": "Multimedia Tools",
- "choco": "openscad",
- "content": "OpenSCAD",
- "description": "OpenSCAD is a free and open-source script-based 3D CAD modeler. It is especially useful for creating parametric designs for 3D printing.",
- "link": "https://www.openscad.org/",
- "winget": "OpenSCAD.OpenSCAD"
- },
- "openshell": {
- "category": "Utilities",
- "choco": "open-shell",
- "content": "Open Shell (Start Menu)",
- "description": "Open Shell is a Windows Start Menu replacement with enhanced functionality and customization options.",
- "link": "https://github.com/Open-Shell/Open-Shell-Menu",
- "winget": "Open-Shell.Open-Shell-Menu"
- },
- "OpenVPN": {
- "category": "Pro Tools",
- "choco": "openvpn-connect",
- "content": "OpenVPN Connect",
- "description": "OpenVPN Connect is an open-source VPN client that allows you to connect securely to a VPN server. It provides a secure and encrypted connection for protecting your online privacy.",
- "link": "https://openvpn.net/",
- "winget": "OpenVPNTechnologies.OpenVPNConnect"
- },
- "OVirtualBox": {
- "category": "Utilities",
- "choco": "virtualbox",
- "content": "Oracle VirtualBox",
- "description": "Oracle VirtualBox is a powerful and free open-source virtualization tool for x86 and AMD64/Intel64 architectures.",
- "link": "https://www.virtualbox.org/",
- "winget": "Oracle.VirtualBox"
- },
- "ownclouddesktop": {
- "category": "Utilities",
- "choco": "owncloud-client",
- "content": "ownCloud Desktop",
- "description": "ownCloud Desktop is the official desktop client for the ownCloud file synchronization and sharing platform.",
- "link": "https://owncloud.com/desktop-app/",
- "winget": "ownCloud.ownCloudDesktop"
- },
- "Paintdotnet": {
- "category": "Multimedia Tools",
- "choco": "paint.net",
- "content": "Paint.NET",
- "description": "Paint.NET is a free image and photo editing software for Windows. It features an intuitive user interface and supports a wide range of powerful editing tools.",
- "link": "https://www.getpaint.net/",
- "winget": "dotPDN.PaintDotNet"
- },
- "parsec": {
- "category": "Utilities",
- "choco": "parsec",
- "content": "Parsec",
- "description": "Parsec is a low-latency, high-quality remote desktop sharing application for collaborating and gaming across devices.",
- "link": "https://parsec.app/",
- "winget": "Parsec.Parsec"
- },
- "pdf24creator": {
- "category": "Document",
- "choco": "pdf24",
- "content": "PDF24 creator",
- "description": "Free and easy-to-use online/desktop PDF tools that make you more productive",
- "link": "https://tools.pdf24.org/en/",
- "winget": "geeksoftwareGmbH.PDF24Creator"
- },
- "pdfsam": {
- "category": "Document",
- "choco": "pdfsam",
- "content": "PDFsam Basic",
- "description": "PDFsam Basic is a free and open-source tool for splitting, merging, and rotating PDF files.",
- "link": "https://pdfsam.org/",
- "winget": "PDFsam.PDFsam"
- },
- "peazip": {
- "category": "Utilities",
- "choco": "peazip",
- "content": "PeaZip",
- "description": "PeaZip is a free, open-source file archiver utility that supports multiple archive formats and provides encryption features.",
- "link": "https://peazip.github.io/",
- "winget": "Giorgiotani.Peazip"
- },
- "piimager": {
- "category": "Utilities",
- "choco": "rpi-imager",
- "content": "Raspberry Pi Imager",
- "description": "Raspberry Pi Imager is a utility for writing operating system images to SD cards for Raspberry Pi devices.",
- "link": "https://www.raspberrypi.com/software/",
- "winget": "RaspberryPiFoundation.RaspberryPiImager"
- },
- "playnite": {
- "category": "Games",
- "choco": "playnite",
- "content": "Playnite",
- "description": "Playnite is an open-source video game library manager with one simple goal: To provide a unified interface for all of your games.",
- "link": "https://playnite.link/",
- "winget": "Playnite.Playnite"
- },
- "plex": {
- "category": "Multimedia Tools",
- "choco": "plexmediaserver",
- "content": "Plex Media Server",
- "description": "Plex Media Server is a media server software that allows you to organize and stream your media library. It supports various media formats and offers a wide range of features.",
- "link": "https://www.plex.tv/your-media/",
- "winget": "Plex.PlexMediaServer"
- },
- "plexdesktop": {
- "category": "Multimedia Tools",
- "choco": "plex",
- "content": "Plex Desktop",
- "description": "Plex Desktop for Windows is the front end for Plex Media Server.",
- "link": "https://www.plex.tv",
- "winget": "Plex.Plex"
- },
- "Portmaster": {
- "category": "Pro Tools",
- "choco": "portmaster",
- "content": "Portmaster",
- "description": "Portmaster is a free and open-source application that puts you back in charge over all your computers network connections.",
- "link": "https://safing.io/",
- "winget": "Safing.Portmaster"
- },
- "posh": {
- "category": "Development",
- "choco": "oh-my-posh",
- "content": "Oh My Posh (Prompt)",
- "description": "Oh My Posh is a cross-platform prompt theme engine for any shell.",
- "link": "https://ohmyposh.dev/",
- "winget": "JanDeDobbeleer.OhMyPosh"
- },
- "postman": {
- "category": "Development",
- "choco": "postman",
- "content": "Postman",
- "description": "Postman is a collaboration platform for API development that simplifies the process of developing APIs.",
- "link": "https://www.postman.com/",
- "winget": "Postman.Postman"
- },
- "powerautomate": {
- "category": "Microsoft Tools",
- "choco": "powerautomatedesktop",
- "content": "Power Automate",
- "description": "Using Power Automate Desktop you can automate tasks on the desktop as well as the Web.",
- "link": "https://www.microsoft.com/en-us/power-platform/products/power-automate",
- "winget": "Microsoft.PowerAutomateDesktop"
- },
- "powerbi": {
- "category": "Microsoft Tools",
- "choco": "powerbi",
- "content": "Power BI",
- "description": "Create stunning reports and visualizations with Power BI Desktop. It puts visual analytics at your fingertips with intuitive report authoring. Drag-and-drop to place content exactly where you want it on the flexible and fluid canvas. Quickly discover patterns as you explore a single unified view of linked, interactive visualizations.",
- "link": "https://www.microsoft.com/en-us/power-platform/products/power-bi/",
- "winget": "Microsoft.PowerBI"
- },
- "powershell": {
- "category": "Microsoft Tools",
- "choco": "powershell-core",
- "content": "PowerShell",
- "description": "PowerShell is a task automation framework and scripting language designed for system administrators, offering powerful command-line capabilities.",
- "link": "https://github.com/PowerShell/PowerShell",
- "winget": "Microsoft.PowerShell"
- },
- "powertoys": {
- "category": "Microsoft Tools",
- "choco": "powertoys",
- "content": "PowerToys",
- "description": "PowerToys is a set of utilities for power users to enhance productivity, featuring tools like FancyZones, PowerRename, and more.",
- "link": "https://github.com/microsoft/PowerToys",
- "winget": "Microsoft.PowerToys"
- },
- "prismlauncher": {
- "category": "Games",
- "choco": "prismlauncher",
- "content": "Prism Launcher",
- "description": "Prism Launcher is a game launcher and manager designed to provide a clean and intuitive interface for organizing and launching your games.",
- "link": "https://prismlauncher.org/",
- "winget": "PrismLauncher.PrismLauncher"
- },
- "processlasso": {
- "category": "Utilities",
- "choco": "plasso",
- "content": "Process Lasso",
- "description": "Process Lasso is a system optimization and automation tool that improves system responsiveness and stability by adjusting process priorities and CPU affinities.",
- "link": "https://bitsum.com/",
- "winget": "BitSum.ProcessLasso"
- },
- "spotify": {
- "category": "Multimedia Tools",
- "choco": "spotify",
- "content": "Spotify",
- "description": "Spotify is a digital music service that gives you access to millions of songs, podcasts, and videos from artists all over the world.",
- "link": "https://www.spotify.com/",
- "winget": "Spotify.Spotify"
- },
- "processmonitor": {
- "category": "Microsoft Tools",
- "choco": "procexp",
- "content": "SysInternals Process Monitor",
- "description": "SysInternals Process Monitor is an advanced monitoring tool that shows real-time file system, registry, and process/thread activity.",
- "link": "https://docs.microsoft.com/en-us/sysinternals/downloads/procmon",
- "winget": "Microsoft.Sysinternals.ProcessMonitor"
- },
- "orcaslicer": {
- "category": "Utilities",
- "choco": "orcaslicer",
- "content": "OrcaSlicer",
- "description": "G-code generator for 3D printers (Bambu, Prusa, Voron, VzBot, RatRig, Creality, etc.)",
- "link": "https://github.com/SoftFever/OrcaSlicer",
- "winget": "SoftFever.OrcaSlicer"
- },
- "prucaslicer": {
- "category": "Utilities",
- "choco": "prusaslicer",
- "content": "PrusaSlicer",
- "description": "PrusaSlicer is a powerful and easy-to-use slicing software for 3D printing with Prusa 3D printers.",
- "link": "https://www.prusa3d.com/prusaslicer/",
- "winget": "Prusa3d.PrusaSlicer"
- },
- "psremoteplay": {
- "category": "Games",
- "choco": "ps-remote-play",
- "content": "PS Remote Play",
- "description": "PS Remote Play is a free application that allows you to stream games from your PlayStation console to a PC or mobile device.",
- "link": "https://remoteplay.dl.playstation.net/remoteplay/lang/gb/",
- "winget": "PlayStation.PSRemotePlay"
- },
- "putty": {
- "category": "Pro Tools",
- "choco": "putty",
- "content": "PuTTY",
- "description": "PuTTY is a free and open-source terminal emulator, serial console, and network file transfer application. It supports various network protocols such as SSH, Telnet, and SCP.",
- "link": "https://www.chiark.greenend.org.uk/~sgtatham/putty/",
- "winget": "PuTTY.PuTTY"
- },
- "python3": {
- "category": "Development",
- "choco": "python",
- "content": "Python3",
- "description": "Python is a versatile programming language used for web development, data analysis, artificial intelligence, and more.",
- "link": "https://www.python.org/",
- "winget": "Python.Python.3.12"
- },
- "qbittorrent": {
- "category": "Utilities",
- "choco": "qbittorrent",
- "content": "qBittorrent",
- "description": "qBittorrent is a free and open-source BitTorrent client that aims to provide a feature-rich and lightweight alternative to other torrent clients.",
- "link": "https://www.qbittorrent.org/",
- "winget": "qBittorrent.qBittorrent"
- },
- "transmission": {
- "category": "Utilities",
- "choco": "transmission",
- "content": "Transmission",
- "description": "Transmission is a cross-platform BitTorrent client that is open source, easy, powerful, and lean.",
- "link": "https://transmissionbt.com/",
- "winget": "Transmission.Transmission"
- },
- "tixati": {
- "category": "Utilities",
- "choco": "tixati.portable",
- "content": "Tixati",
- "description": "Tixati is a cross-platform BitTorrent client written in C++ that has been designed to be light on system resources.",
- "link": "https://www.tixati.com/",
- "winget": "Tixati.Tixati.Portable"
- },
- "qtox": {
- "category": "Communications",
- "choco": "qtox",
- "content": "QTox",
- "description": "QTox is a free and open-source messaging app that prioritizes user privacy and security in its design.",
- "link": "https://qtox.github.io/",
- "winget": "Tox.qTox"
- },
- "quicklook": {
- "category": "Utilities",
- "choco": "quicklook",
- "content": "Quicklook",
- "description": "Bring macOS “Quick Look” feature to Windows",
- "link": "https://github.com/QL-Win/QuickLook",
- "winget": "QL-Win.QuickLook"
- },
- "rainmeter": {
- "category": "Utilities",
- "choco": "na",
- "content": "Rainmeter",
- "description": "Rainmeter is a desktop customization tool that allows you to create and share customizable skins for your desktop.",
- "link": "https://www.rainmeter.net/",
- "winget": "Rainmeter.Rainmeter"
- },
- "revo": {
- "category": "Utilities",
- "choco": "revo-uninstaller",
- "content": "Revo Uninstaller",
- "description": "Revo Uninstaller is an advanced uninstaller tool that helps you remove unwanted software and clean up your system.",
- "link": "https://www.revouninstaller.com/",
- "winget": "RevoUninstaller.RevoUninstaller"
- },
- "WiseProgramUninstaller": {
- "category": "Utilities",
- "choco": "na",
- "content": "Wise Program Uninstaller (WiseCleaner)",
- "description": "Wise Program Uninstaller is the perfect solution for uninstalling Windows programs, allowing you to uninstall applications quickly and completely using its simple and user-friendly interface.",
- "link": "https://www.wisecleaner.com/wise-program-uninstaller.html",
- "winget": "WiseCleaner.WiseProgramUninstaller"
- },
- "revolt": {
- "category": "Communications",
- "choco": "na",
- "content": "Revolt",
- "description": "Find your community, connect with the world. Revolt is one of the best ways to stay connected with your friends and community without sacrificing any usability.",
- "link": "https://revolt.chat/",
- "winget": "Revolt.RevoltDesktop"
- },
- "ripgrep": {
- "category": "Utilities",
- "choco": "ripgrep",
- "content": "Ripgrep",
- "description": "Fast and powerful commandline search tool",
- "link": "https://github.com/BurntSushi/ripgrep/",
- "winget": "BurntSushi.ripgrep.MSVC"
- },
- "rufus": {
- "category": "Utilities",
- "choco": "rufus",
- "content": "Rufus Imager",
- "description": "Rufus is a utility that helps format and create bootable USB drives, such as USB keys or pen drives.",
- "link": "https://rufus.ie/",
- "winget": "Rufus.Rufus"
- },
- "rustdesk": {
- "category": "Pro Tools",
- "choco": "rustdesk.portable",
- "content": "RustDesk",
- "description": "RustDesk is a free and open-source remote desktop application. It provides a secure way to connect to remote machines and access desktop environments.",
- "link": "https://rustdesk.com/",
- "winget": "RustDesk.RustDesk"
- },
- "rustlang": {
- "category": "Development",
- "choco": "rust",
- "content": "Rust",
- "description": "Rust is a programming language designed for safety and performance, particularly focused on systems programming.",
- "link": "https://www.rust-lang.org/",
- "winget": "Rustlang.Rust.MSVC"
- },
- "sagethumbs": {
- "category": "Utilities",
- "choco": "sagethumbs",
- "content": "SageThumbs",
- "description": "Provides support for thumbnails in Explorer with more formats.",
- "link": "https://sagethumbs.en.lo4d.com/windows",
- "winget": "CherubicSoftware.SageThumbs"
- },
- "samsungmagician": {
- "category": "Utilities",
- "choco": "samsung-magician",
- "content": "Samsung Magician",
- "description": "Samsung Magician is a utility for managing and optimizing Samsung SSDs.",
- "link": "https://semiconductor.samsung.com/consumer-storage/magician/",
- "winget": "Samsung.SamsungMagician"
- },
- "sandboxie": {
- "category": "Utilities",
- "choco": "sandboxie",
- "content": "Sandboxie Plus",
- "description": "Sandboxie Plus is a sandbox-based isolation program that provides enhanced security by running applications in an isolated environment.",
- "link": "https://github.com/sandboxie-plus/Sandboxie",
- "winget": "Sandboxie.Plus"
- },
- "sdio": {
- "category": "Utilities",
- "choco": "sdio",
- "content": "Snappy Driver Installer Origin",
- "description": "Snappy Driver Installer Origin is a free and open-source driver updater with a vast driver database for Windows.",
- "link": "https://sourceforge.net/projects/snappy-driver-installer-origin",
- "winget": "GlennDelahoy.SnappyDriverInstallerOrigin"
- },
- "session": {
- "category": "Communications",
- "choco": "session",
- "content": "Session",
- "description": "Session is a private and secure messaging app built on a decentralized network for user privacy and data protection.",
- "link": "https://getsession.org/",
- "winget": "Oxen.Session"
- },
- "sharex": {
- "category": "Multimedia Tools",
- "choco": "sharex",
- "content": "ShareX (Screenshots)",
- "description": "ShareX is a free and open-source screen capture and file sharing tool. It supports various capture methods and offers advanced features for editing and sharing screenshots.",
- "link": "https://getsharex.com/",
- "winget": "ShareX.ShareX"
- },
- "nilesoftShell": {
- "category": "Utilities",
- "choco": "nilesoft-shell",
- "content": "Nilesoft Shell",
- "description": "Shell is an expanded context menu tool that adds extra functionality and customization options to the Windows context menu.",
- "link": "https://nilesoft.org/",
- "winget": "Nilesoft.Shell"
- },
- "sidequest": {
- "category": "Games",
- "choco": "sidequest",
- "content": "SideQuestVR",
- "description": "SideQuestVR is a community-driven platform that enables users to discover, install, and manage virtual reality content on Oculus Quest devices.",
- "link": "https://sidequestvr.com/",
- "winget": "SideQuestVR.SideQuest"
- },
- "signal": {
- "category": "Communications",
- "choco": "signal",
- "content": "Signal",
- "description": "Signal is a privacy-focused messaging app that offers end-to-end encryption for secure and private communication.",
- "link": "https://signal.org/",
- "winget": "OpenWhisperSystems.Signal"
- },
- "signalrgb": {
- "category": "Utilities",
- "choco": "na",
- "content": "SignalRGB",
- "description": "SignalRGB lets you control and sync your favorite RGB devices with one free application.",
- "link": "https://www.signalrgb.com/",
- "winget": "WhirlwindFX.SignalRgb"
- },
- "simplenote": {
- "category": "Document",
- "choco": "simplenote",
- "content": "simplenote",
- "description": "Simplenote is an easy way to keep notes, lists, ideas and more.",
- "link": "https://simplenote.com/",
- "winget": "Automattic.Simplenote"
- },
- "simplewall": {
- "category": "Pro Tools",
- "choco": "simplewall",
- "content": "Simplewall",
- "description": "Simplewall is a free and open-source firewall application for Windows. It allows users to control and manage the inbound and outbound network traffic of applications.",
- "link": "https://github.com/henrypp/simplewall",
- "winget": "Henry++.simplewall"
- },
- "skype": {
- "category": "Communications",
- "choco": "skype",
- "content": "Skype",
- "description": "Skype is a widely used communication platform offering video calls, voice calls, and instant messaging services.",
- "link": "https://www.skype.com/",
- "winget": "Microsoft.Skype"
- },
- "slack": {
- "category": "Communications",
- "choco": "slack",
- "content": "Slack",
- "description": "Slack is a collaboration hub that connects teams and facilitates communication through channels, messaging, and file sharing.",
- "link": "https://slack.com/",
- "winget": "SlackTechnologies.Slack"
- },
- "spacedrive": {
- "category": "Utilities",
- "choco": "na",
- "content": "Spacedrive File Manager",
- "description": "Spacedrive is a file manager that offers cloud storage integration and file synchronization across devices.",
- "link": "https://www.spacedrive.com/",
- "winget": "spacedrive.Spacedrive"
- },
- "spacesniffer": {
- "category": "Utilities",
- "choco": "spacesniffer",
- "content": "SpaceSniffer",
- "description": "A tool application that lets you understand how folders and files are structured on your disks",
- "link": "http://www.uderzo.it/main_products/space_sniffer/",
- "winget": "UderzoSoftware.SpaceSniffer"
- },
- "spotube": {
- "category": "Multimedia Tools",
- "choco": "spotube",
- "content": "Spotube",
- "description": "Open source Spotify client that doesn't require Premium nor uses Electron! Available for both desktop & mobile! ",
- "link": "https://github.com/KRTirtho/spotube",
- "winget": "KRTirtho.Spotube"
- },
- "starship": {
- "category": "Development",
- "choco": "starship",
- "content": "Starship (Shell Prompt)",
- "description": "Starship is a minimal, fast, and customizable prompt for any shell.",
- "link": "https://starship.rs/",
- "winget": "starship"
- },
- "steam": {
- "category": "Games",
- "choco": "steam-client",
- "content": "Steam",
- "description": "Steam is a digital distribution platform for purchasing and playing video games, offering multiplayer gaming, video streaming, and more.",
- "link": "https://store.steampowered.com/about/",
- "winget": "Valve.Steam"
- },
- "strawberry": {
- "category": "Multimedia Tools",
- "choco": "strawberrymusicplayer",
- "content": "Strawberry (Music Player)",
- "description": "Strawberry is an open-source music player that focuses on music collection management and audio quality. It supports various audio formats and features a clean user interface.",
- "link": "https://www.strawberrymusicplayer.org/",
- "winget": "StrawberryMusicPlayer.Strawberry"
- },
- "stremio": {
- "winget": "Stremio.Stremio",
- "choco": "stremio",
- "category": "Multimedia Tools",
- "content": "Stremio",
- "link": "https://www.stremio.com/",
- "description": "Stremio is a media center application that allows users to organize and stream their favorite movies, TV shows, and video content."
- },
- "sublimemerge": {
- "category": "Development",
- "choco": "sublimemerge",
- "content": "Sublime Merge",
- "description": "Sublime Merge is a Git client with advanced features and a beautiful interface.",
- "link": "https://www.sublimemerge.com/",
- "winget": "SublimeHQ.SublimeMerge"
- },
- "sublimetext": {
- "category": "Development",
- "choco": "sublimetext4",
- "content": "Sublime Text",
- "description": "Sublime Text is a sophisticated text editor for code, markup, and prose.",
- "link": "https://www.sublimetext.com/",
- "winget": "SublimeHQ.SublimeText.4"
- },
- "sumatra": {
- "category": "Document",
- "choco": "sumatrapdf",
- "content": "Sumatra PDF",
- "description": "Sumatra PDF is a lightweight and fast PDF viewer with minimalistic design.",
- "link": "https://www.sumatrapdfreader.org/free-pdf-reader.html",
- "winget": "SumatraPDF.SumatraPDF"
- },
- "pdfgear": {
- "category": "Document",
- "choco": "na",
- "content": "PDFgear",
- "description": "PDFgear is a piece of full-featured PDF management software for Windows, Mac, and mobile, and it's completely free to use.",
- "link": "https://www.pdfgear.com/",
- "winget": "PDFgear.PDFgear"
- },
- "sunshine": {
- "category": "Games",
- "choco": "sunshine",
- "content": "Sunshine/GameStream Server",
- "description": "Sunshine is a GameStream server that allows you to remotely play PC games on Android devices, offering low-latency streaming.",
- "link": "https://github.com/LizardByte/Sunshine",
- "winget": "LizardByte.Sunshine"
- },
- "superf4": {
- "category": "Utilities",
- "choco": "superf4",
- "content": "SuperF4",
- "description": "SuperF4 is a utility that allows you to terminate programs instantly by pressing a customizable hotkey.",
- "link": "https://stefansundin.github.io/superf4/",
- "winget": "StefanSundin.Superf4"
- },
- "swift": {
- "category": "Development",
- "choco": "na",
- "content": "Swift toolchain",
- "description": "Swift is a general-purpose programming language that's approachable for newcomers and powerful for experts.",
- "link": "https://www.swift.org/",
- "winget": "Swift.Toolchain"
- },
- "synctrayzor": {
- "category": "Utilities",
- "choco": "synctrayzor",
- "content": "SyncTrayzor",
- "description": "Windows tray utility / filesystem watcher / launcher for Syncthing",
- "link": "https://github.com/canton7/SyncTrayzor/",
- "winget": "SyncTrayzor.SyncTrayzor"
- },
- "sqlmanagementstudio": {
- "category": "Microsoft Tools",
- "choco": "sql-server-management-studio",
- "content": "Microsoft SQL Server Management Studio",
- "description": "SQL Server Management Studio (SSMS) is an integrated environment for managing any SQL infrastructure, from SQL Server to Azure SQL Database. SSMS provides tools to configure, monitor, and administer instances of SQL Server and databases.",
- "link": "https://learn.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver16",
- "winget": "Microsoft.SQLServerManagementStudio"
- },
- "tabby": {
- "category": "Utilities",
- "choco": "tabby",
- "content": "Tabby.sh",
- "description": "Tabby is a highly configurable terminal emulator, SSH and serial client for Windows, macOS and Linux",
- "link": "https://tabby.sh/",
- "winget": "Eugeny.Tabby"
- },
- "tailscale": {
- "category": "Utilities",
- "choco": "tailscale",
- "content": "Tailscale",
- "description": "Tailscale is a secure and easy-to-use VPN solution for connecting your devices and networks.",
- "link": "https://tailscale.com/",
- "winget": "tailscale.tailscale"
- },
- "TcNoAccSwitcher": {
- "category": "Games",
- "choco": "tcno-acc-switcher",
- "content": "TCNO Account Switcher",
- "description": "A Super-fast account switcher for Steam, Battle.net, Epic Games, Origin, Riot, Ubisoft and many others!",
- "link": "https://github.com/TCNOco/TcNo-Acc-Switcher",
- "winget": "TechNobo.TcNoAccountSwitcher"
- },
- "tcpview": {
- "category": "Microsoft Tools",
- "choco": "tcpview",
- "content": "SysInternals TCPView",
- "description": "SysInternals TCPView is a network monitoring tool that displays a detailed list of all TCP and UDP endpoints on your system.",
- "link": "https://docs.microsoft.com/en-us/sysinternals/downloads/tcpview",
- "winget": "Microsoft.Sysinternals.TCPView"
- },
- "teams": {
- "category": "Communications",
- "choco": "microsoft-teams",
- "content": "Teams",
- "description": "Microsoft Teams is a collaboration platform that integrates with Office 365 and offers chat, video conferencing, file sharing, and more.",
- "link": "https://www.microsoft.com/en-us/microsoft-teams/group-chat-software",
- "winget": "Microsoft.Teams"
- },
- "teamviewer": {
- "category": "Utilities",
- "choco": "teamviewer9",
- "content": "TeamViewer",
- "description": "TeamViewer is a popular remote access and support software that allows you to connect to and control remote devices.",
- "link": "https://www.teamviewer.com/",
- "winget": "TeamViewer.TeamViewer"
- },
- "telegram": {
- "category": "Communications",
- "choco": "telegram",
- "content": "Telegram",
- "description": "Telegram is a cloud-based instant messaging app known for its security features, speed, and simplicity.",
- "link": "https://telegram.org/",
- "winget": "Telegram.TelegramDesktop"
- },
- "unigram": {
- "category": "Communications",
- "choco": "na",
- "content": "Unigram",
- "description": "Unigram - Telegram for Windows",
- "link": "https://unigramdev.github.io/",
- "winget": "Telegram.Unigram"
- },
- "terminal": {
- "category": "Microsoft Tools",
- "choco": "microsoft-windows-terminal",
- "content": "Windows Terminal",
- "description": "Windows Terminal is a modern, fast, and efficient terminal application for command-line users, supporting multiple tabs, panes, and more.",
- "link": "https://aka.ms/terminal",
- "winget": "Microsoft.WindowsTerminal"
- },
- "Thonny": {
- "category": "Development",
- "choco": "thonny",
- "content": "Thonny Python IDE",
- "description": "Python IDE for beginners.",
- "link": "https://github.com/thonny/thonny",
- "winget": "AivarAnnamaa.Thonny"
- },
- "MuEditor": {
- "category": "Development",
- "choco": "na",
- "content": "Code With Mu (Mu Editor)",
- "description": "Mu is a Python code editor for beginner programmers",
- "link": "https://codewith.mu/",
- "winget": "Mu.Mu"
- },
- "thorium": {
- "category": "Browsers",
- "choco": "na",
- "content": "Thorium Browser AVX2",
- "description": "Browser built for speed over vanilla chromium. It is built with AVX2 optimizations and is the fastest browser on the market.",
- "link": "http://thorium.rocks/",
- "winget": "Alex313031.Thorium.AVX2"
- },
- "thunderbird": {
- "category": "Communications",
- "choco": "thunderbird",
- "content": "Thunderbird",
- "description": "Mozilla Thunderbird is a free and open-source email client, news client, and chat client with advanced features.",
- "link": "https://www.thunderbird.net/",
- "winget": "Mozilla.Thunderbird"
- },
- "betterbird": {
- "category": "Communications",
- "choco": "betterbird",
- "content": "Betterbird",
- "description": "Betterbird is a fork of Mozilla Thunderbird with additional features and bugfixes.",
- "link": "https://www.betterbird.eu/",
- "winget": "Betterbird.Betterbird"
- },
- "tidal": {
- "category": "Multimedia Tools",
- "choco": "na",
- "content": "Tidal",
- "description": "Tidal is a music streaming service known for its high-fidelity audio quality and exclusive content. It offers a vast library of songs and curated playlists.",
- "link": "https://tidal.com/",
- "winget": "9NNCB5BS59PH"
- },
- "tor": {
- "category": "Browsers",
- "choco": "tor-browser",
- "content": "Tor Browser",
- "description": "Tor Browser is designed for anonymous web browsing, utilizing the Tor network to protect user privacy and security.",
- "link": "https://www.torproject.org/",
- "winget": "TorProject.TorBrowser"
- },
- "totalcommander": {
- "category": "Utilities",
- "choco": "TotalCommander",
- "content": "Total Commander",
- "description": "Total Commander is a file manager for Windows that provides a powerful and intuitive interface for file management.",
- "link": "https://www.ghisler.com/",
- "winget": "Ghisler.TotalCommander"
- },
- "treesize": {
- "category": "Utilities",
- "choco": "treesizefree",
- "content": "TreeSize Free",
- "description": "TreeSize Free is a disk space manager that helps you analyze and visualize the space usage on your drives.",
- "link": "https://www.jam-software.com/treesize_free/",
- "winget": "JAMSoftware.TreeSize.Free"
- },
- "ttaskbar": {
- "category": "Utilities",
- "choco": "translucenttb",
- "content": "Translucent Taskbar",
- "description": "Translucent Taskbar is a tool that allows you to customize the transparency of the Windows taskbar.",
- "link": "https://github.com/TranslucentTB/TranslucentTB",
- "winget": "9PF4KZ2VN4W9"
- },
- "twinkletray": {
- "category": "Utilities",
- "choco": "twinkle-tray",
- "content": "Twinkle Tray",
- "description": "Twinkle Tray lets you easily manage the brightness levels of multiple monitors.",
- "link": "https://twinkletray.com/",
- "winget": "xanderfrangos.twinkletray"
- },
- "ubisoft": {
- "category": "Games",
- "choco": "ubisoft-connect",
- "content": "Ubisoft Connect",
- "description": "Ubisoft Connect is Ubisoft's digital distribution and online gaming service, providing access to Ubisoft's games and services.",
- "link": "https://ubisoftconnect.com/",
- "winget": "Ubisoft.Connect"
- },
- "ungoogled": {
- "category": "Browsers",
- "choco": "ungoogled-chromium",
- "content": "Ungoogled",
- "description": "Ungoogled Chromium is a version of Chromium without Google's integration for enhanced privacy and control.",
- "link": "https://github.com/Eloston/ungoogled-chromium",
- "winget": "eloston.ungoogled-chromium"
- },
- "unity": {
- "category": "Development",
- "choco": "unityhub",
- "content": "Unity Game Engine",
- "description": "Unity is a powerful game development platform for creating 2D, 3D, augmented reality, and virtual reality games.",
- "link": "https://unity.com/",
- "winget": "Unity.UnityHub"
- },
- "vagrant": {
- "category": "Development",
- "choco": "vagrant",
- "content": "Vagrant",
- "description": "Vagrant is an open-source tool for building and managing virtualized development environments.",
- "link": "https://www.vagrantup.com/",
- "winget": "Hashicorp.Vagrant"
- },
- "vc2015_32": {
- "category": "Microsoft Tools",
- "choco": "na",
- "content": "Visual C++ 2015-2022 32-bit",
- "description": "Visual C++ 2015-2022 32-bit redistributable package installs runtime components of Visual C++ libraries required to run 32-bit applications.",
- "link": "https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads",
- "winget": "Microsoft.VCRedist.2015+.x86"
- },
- "vc2015_64": {
- "category": "Microsoft Tools",
- "choco": "na",
- "content": "Visual C++ 2015-2022 64-bit",
- "description": "Visual C++ 2015-2022 64-bit redistributable package installs runtime components of Visual C++ libraries required to run 64-bit applications.",
- "link": "https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads",
- "winget": "Microsoft.VCRedist.2015+.x64"
- },
- "ventoy": {
- "category": "Pro Tools",
- "choco": "ventoy",
- "content": "Ventoy",
- "description": "Ventoy is an open-source tool for creating bootable USB drives. It supports multiple ISO files on a single USB drive, making it a versatile solution for installing operating systems.",
- "link": "https://www.ventoy.net/",
- "winget": "Ventoy.Ventoy"
- },
- "vesktop": {
- "category": "Communications",
- "choco": "na",
- "content": "Vesktop",
- "description": "A cross platform electron-based desktop app aiming to give you a snappier Discord experience with Vencord pre-installed.",
- "link": "https://github.com/Vencord/Vesktop",
- "winget": "Vencord.Vesktop"
- },
- "viber": {
- "category": "Communications",
- "choco": "viber",
- "content": "Viber",
- "description": "Viber is a free messaging and calling app with features like group chats, video calls, and more.",
- "link": "https://www.viber.com/",
- "winget": "Viber.Viber"
- },
- "videomass": {
- "category": "Multimedia Tools",
- "choco": "na",
- "content": "Videomass",
- "description": "Videomass by GianlucaPernigotto is a cross-platform GUI for FFmpeg, streamlining multimedia file processing with batch conversions and user-friendly features.",
- "link": "https://jeanslack.github.io/Videomass/",
- "winget": "GianlucaPernigotto.Videomass"
- },
- "visualstudio": {
- "category": "Development",
- "choco": "visualstudio2022community",
- "content": "Visual Studio 2022",
- "description": "Visual Studio 2022 is an integrated development environment (IDE) for building, debugging, and deploying applications.",
- "link": "https://visualstudio.microsoft.com/",
- "winget": "Microsoft.VisualStudio.2022.Community"
- },
- "vivaldi": {
- "category": "Browsers",
- "choco": "vivaldi",
- "content": "Vivaldi",
- "description": "Vivaldi is a highly customizable web browser with a focus on user personalization and productivity features.",
- "link": "https://vivaldi.com/",
- "winget": "Vivaldi.Vivaldi"
- },
- "vlc": {
- "category": "Multimedia Tools",
- "choco": "vlc",
- "content": "VLC (Video Player)",
- "description": "VLC Media Player is a free and open-source multimedia player that supports a wide range of audio and video formats. It is known for its versatility and cross-platform compatibility.",
- "link": "https://www.videolan.org/vlc/",
- "winget": "VideoLAN.VLC"
- },
- "voicemeeter": {
- "category": "Multimedia Tools",
- "choco": "voicemeeter",
- "content": "Voicemeeter (Audio)",
- "description": "Voicemeeter is a virtual audio mixer that allows you to manage and enhance audio streams on your computer. It is commonly used for audio recording and streaming purposes.",
- "link": "https://voicemeeter.com/",
- "winget": "VB-Audio.Voicemeeter"
- },
- "VoicemeeterPotato": {
- "category": "Multimedia Tools",
- "choco": "voicemeeter-potato",
- "content": "Voicemeeter Potato",
- "description": "Voicemeeter Potato is the ultimate version of the Voicemeeter Audio Mixer Application endowed with Virtual Audio Device to mix and manage any audio sources from or to any audio devices or applications.",
- "link": "https://voicemeeter.com/",
- "winget": "VB-Audio.Voicemeeter.Potato"
- },
- "vrdesktopstreamer": {
- "category": "Games",
- "choco": "na",
- "content": "Virtual Desktop Streamer",
- "description": "Virtual Desktop Streamer is a tool that allows you to stream your desktop screen to VR devices.",
- "link": "https://www.vrdesktop.net/",
- "winget": "VirtualDesktop.Streamer"
- },
- "vscode": {
- "category": "Development",
- "choco": "vscode",
- "content": "VS Code",
- "description": "Visual Studio Code is a free, open-source code editor with support for multiple programming languages.",
- "link": "https://code.visualstudio.com/",
- "winget": "Microsoft.VisualStudioCode"
- },
- "vscodium": {
- "category": "Development",
- "choco": "vscodium",
- "content": "VS Codium",
- "description": "VSCodium is a community-driven, freely-licensed binary distribution of Microsoft's VS Code.",
- "link": "https://vscodium.com/",
- "winget": "VSCodium.VSCodium"
- },
- "waterfox": {
- "category": "Browsers",
- "choco": "waterfox",
- "content": "Waterfox",
- "description": "Waterfox is a fast, privacy-focused web browser based on Firefox, designed to preserve user choice and privacy.",
- "link": "https://www.waterfox.net/",
- "winget": "Waterfox.Waterfox"
- },
- "wazuh": {
- "category": "Utilities",
- "choco": "wazuh-agent",
- "content": "Wazuh.",
- "description": "Wazuh is an open-source security monitoring platform that offers intrusion detection, compliance checks, and log analysis.",
- "link": "https://wazuh.com/",
- "winget": "Wazuh.WazuhAgent"
- },
- "wezterm": {
- "category": "Development",
- "choco": "wezterm",
- "content": "Wezterm",
- "description": "WezTerm is a powerful cross-platform terminal emulator and multiplexer",
- "link": "https://wezfurlong.org/wezterm/index.html",
- "winget": "wez.wezterm"
- },
- "windowspchealth": {
- "category": "Utilities",
- "choco": "na",
- "content": "Windows PC Health Check",
- "description": "Windows PC Health Check is a tool that helps you check if your PC meets the system requirements for Windows 11.",
- "link": "https://support.microsoft.com/en-us/windows/how-to-use-the-pc-health-check-app-9c8abd9b-03ba-4e67-81ef-36f37caa7844",
- "winget": "Microsoft.WindowsPCHealthCheck"
- },
- "WindowGrid": {
- "category": "Utilities",
- "choco": "windowgrid",
- "content": "WindowGrid",
- "description": "WindowGrid is a modern window management program for Windows that allows the user to quickly and easily layout their windows on a dynamic grid using just the mouse.",
- "link": "http://windowgrid.net/",
- "winget": "na"
- },
- "wingetui": {
- "category": "Utilities",
- "choco": "wingetui",
- "content": "UniGetUI",
- "description": "UniGetUI is a GUI for Winget, Chocolatey, and other Windows CLI package managers.",
- "link": "https://www.marticliment.com/wingetui/",
- "winget": "SomePythonThings.WingetUIStore"
- },
- "winmerge": {
- "category": "Document",
- "choco": "winmerge",
- "content": "WinMerge",
- "description": "WinMerge is a visual text file and directory comparison tool for Windows.",
- "link": "https://winmerge.org/",
- "winget": "WinMerge.WinMerge"
- },
- "winpaletter": {
- "category": "Utilities",
- "choco": "WinPaletter",
- "content": "WinPaletter",
- "description": "WinPaletter is a tool for adjusting the color palette of Windows 10, providing customization options for window colors.",
- "link": "https://github.com/Abdelrhman-AK/WinPaletter",
- "winget": "Abdelrhman-AK.WinPaletter"
- },
- "winrar": {
- "category": "Utilities",
- "choco": "winrar",
- "content": "WinRAR",
- "description": "WinRAR is a powerful archive manager that allows you to create, manage, and extract compressed files.",
- "link": "https://www.win-rar.com/",
- "winget": "RARLab.WinRAR"
- },
- "winscp": {
- "category": "Pro Tools",
- "choco": "winscp",
- "content": "WinSCP",
- "description": "WinSCP is a popular open-source SFTP, FTP, and SCP client for Windows. It allows secure file transfers between a local and a remote computer.",
- "link": "https://winscp.net/",
- "winget": "WinSCP.WinSCP"
- },
- "wireguard": {
- "category": "Pro Tools",
- "choco": "wireguard",
- "content": "WireGuard",
- "description": "WireGuard is a fast and modern VPN (Virtual Private Network) protocol. It aims to be simpler and more efficient than other VPN protocols, providing secure and reliable connections.",
- "link": "https://www.wireguard.com/",
- "winget": "WireGuard.WireGuard"
- },
- "wireshark": {
- "category": "Pro Tools",
- "choco": "wireshark",
- "content": "Wireshark",
- "description": "Wireshark is a widely-used open-source network protocol analyzer. It allows users to capture and analyze network traffic in real-time, providing detailed insights into network activities.",
- "link": "https://www.wireshark.org/",
- "winget": "WiresharkFoundation.Wireshark"
- },
- "wisetoys": {
- "category": "Utilities",
- "choco": "na",
- "content": "WiseToys",
- "description": "WiseToys is a set of utilities and tools designed to enhance and optimize your Windows experience.",
- "link": "https://toys.wisecleaner.com/",
- "winget": "WiseCleaner.WiseToys"
- },
- "TeraCopy": {
- "category": "Utilities",
- "choco": "TeraCopy",
- "content": "TeraCopy",
- "description": "Copy your files faster and more securely",
- "link": "https://codesector.com/teracopy",
- "winget": "CodeSector.TeraCopy"
- },
- "wizfile": {
- "category": "Utilities",
- "choco": "na",
- "content": "WizFile",
- "description": "Find files by name on your hard drives almost instantly.",
- "link": "https://antibody-software.com/wizfile/",
- "winget": "AntibodySoftware.WizFile"
- },
- "wiztree": {
- "category": "Utilities",
- "choco": "wiztree",
- "content": "WizTree",
- "description": "WizTree is a fast disk space analyzer that helps you quickly find the files and folders consuming the most space on your hard drive.",
- "link": "https://wiztreefree.com/",
- "winget": "AntibodySoftware.WizTree"
- },
- "xdm": {
- "category": "Utilities",
- "choco": "xdm",
- "content": "Xtreme Download Manager",
- "description": "Xtreme Download Manager is an advanced download manager with support for various protocols and browsers.*Browser integration deprecated by google store. No official release.*",
- "link": "https://xtremedownloadmanager.com/",
- "winget": "subhra74.XtremeDownloadManager"
- },
- "xeheditor": {
- "category": "Utilities",
- "choco": "HxD",
- "content": "HxD Hex Editor",
- "description": "HxD is a free hex editor that allows you to edit, view, search, and analyze binary files.",
- "link": "https://mh-nexus.de/en/hxd/",
- "winget": "MHNexus.HxD"
- },
- "xemu": {
- "category": "Games",
- "choco": "na",
- "content": "XEMU",
- "description": "XEMU is an open-source Xbox emulator that allows you to play Xbox games on your PC, aiming for accuracy and compatibility.",
- "link": "https://xemu.app/",
- "winget": "xemu-project.xemu"
- },
- "xnview": {
- "category": "Utilities",
- "choco": "xnview",
- "content": "XnView classic",
- "description": "XnView is an efficient image viewer, browser and converter for Windows.",
- "link": "https://www.xnview.com/en/xnview/",
- "winget": "XnSoft.XnView.Classic"
- },
- "xournal": {
- "category": "Document",
- "choco": "xournalplusplus",
- "content": "Xournal++",
- "description": "Xournal++ is an open-source handwriting notetaking software with PDF annotation capabilities.",
- "link": "https://xournalpp.github.io/",
- "winget": "Xournal++.Xournal++"
- },
- "xpipe": {
- "category": "Pro Tools",
- "choco": "xpipe",
- "content": "XPipe",
- "description": "XPipe is an open-source tool for orchestrating containerized applications. It simplifies the deployment and management of containerized services in a distributed environment.",
- "link": "https://xpipe.io/",
- "winget": "xpipe-io.xpipe"
- },
- "yarn": {
- "category": "Development",
- "choco": "yarn",
- "content": "Yarn",
- "description": "Yarn is a fast, reliable, and secure dependency management tool for JavaScript projects.",
- "link": "https://yarnpkg.com/",
- "winget": "Yarn.Yarn"
- },
- "ytdlp": {
- "category": "Multimedia Tools",
- "choco": "yt-dlp",
- "content": "Yt-dlp",
- "description": "Command-line tool that allows you to download videos from YouTube and other supported sites. It is an improved version of the popular youtube-dl.",
- "link": "https://github.com/yt-dlp/yt-dlp",
- "winget": "yt-dlp.yt-dlp"
- },
- "zerotierone": {
- "category": "Utilities",
- "choco": "zerotier-one",
- "content": "ZeroTier One",
- "description": "ZeroTier One is a software-defined networking tool that allows you to create secure and scalable networks.",
- "link": "https://zerotier.com/",
- "winget": "ZeroTier.ZeroTierOne"
- },
- "zim": {
- "category": "Document",
- "choco": "zim",
- "content": "Zim Desktop Wiki",
- "description": "Zim Desktop Wiki is a graphical text editor used to maintain a collection of wiki pages.",
- "link": "https://zim-wiki.org/",
- "winget": "Zimwiki.Zim"
- },
- "znote": {
- "category": "Document",
- "choco": "na",
- "content": "Znote",
- "description": "Znote is a note-taking application.",
- "link": "https://znote.io/",
- "winget": "alagrede.znote"
- },
- "zoom": {
- "category": "Communications",
- "choco": "zoom",
- "content": "Zoom",
- "description": "Zoom is a popular video conferencing and web conferencing service for online meetings, webinars, and collaborative projects.",
- "link": "https://zoom.us/",
- "winget": "Zoom.Zoom"
- },
- "zoomit": {
- "category": "Utilities",
- "choco": "na",
- "content": "ZoomIt",
- "description": "A screen zoom, annotation, and recording tool for technical presentations and demos",
- "link": "https://learn.microsoft.com/en-us/sysinternals/downloads/zoomit",
- "winget": "Microsoft.Sysinternals.ZoomIt"
- },
- "zotero": {
- "category": "Document",
- "choco": "zotero",
- "content": "Zotero",
- "description": "Zotero is a free, easy-to-use tool to help you collect, organize, cite, and share your research materials.",
- "link": "https://www.zotero.org/",
- "winget": "DigitalScholar.Zotero"
- },
- "zoxide": {
- "category": "Utilities",
- "choco": "zoxide",
- "content": "Zoxide",
- "description": "Zoxide is a fast and efficient directory changer (cd) that helps you navigate your file system with ease.",
- "link": "https://github.com/ajeetdsouza/zoxide",
- "winget": "ajeetdsouza.zoxide"
- },
- "zulip": {
- "category": "Communications",
- "choco": "zulip",
- "content": "Zulip",
- "description": "Zulip is an open-source team collaboration tool with chat streams for productive and organized communication.",
- "link": "https://zulipchat.com/",
- "winget": "Zulip.Zulip"
- },
- "syncthingtray": {
- "category": "Utilities",
- "choco": "syncthingtray",
- "content": "Syncthingtray",
- "description": "Might be the alternative for Synctrayzor. Windows tray utility / filesystem watcher / launcher for Syncthing",
- "link": "https://github.com/Martchus/syncthingtray",
- "winget": "Martchus.syncthingtray"
- },
- "miniconda": {
- "category": "Development",
- "choco": "miniconda3",
- "content": "Miniconda",
- "description": "Miniconda is a free minimal installer for conda. It is a small bootstrap version of Anaconda that includes only conda, Python, the packages they both depend on, and a small number of other useful packages (like pip, zlib, and a few others).",
- "link": "https://docs.conda.io/projects/miniconda",
- "winget": "Anaconda.Miniconda3"
- },
- "pixi": {
- "category": "Development",
- "choco": "pixi",
- "content": "Pixi",
- "description": "Pixi is a fast software package manager built on top of the existing conda ecosystem. Spins up development environments quickly on Windows, macOS and Linux. Pixi supports Python, R, C/C++, Rust, Ruby, and many other languages.",
- "link": "https://pixi.sh",
- "winget": "prefix-dev.pixi"
- },
- "temurin": {
- "category": "Development",
- "choco": "temurin",
- "content": "Eclipse Temurin",
- "description": "Eclipse Temurin is the open source Java SE build based upon OpenJDK.",
- "link": "https://adoptium.net/temurin/",
- "winget": "EclipseAdoptium.Temurin.21.JDK"
- },
- "intelpresentmon": {
- "category": "Utilities",
- "choco": "na",
- "content": "Intel-PresentMon",
- "description": "A new gaming performance overlay and telemetry application to monitor and measure your gaming experience.",
- "link": "https://game.intel.com/us/stories/intel-presentmon/",
- "winget": "Intel.PresentMon.Beta"
- },
- "pyenvwin": {
- "category": "Development",
- "choco": "pyenv-win",
- "content": "Python Version Manager (pyenv-win)",
- "description": "pyenv for Windows is a simple python version management tool. It lets you easily switch between multiple versions of Python.",
- "link": "https://pyenv-win.github.io/pyenv-win/",
- "winget": "na"
- },
- "tightvnc": {
- "category": "Utilities",
- "choco": "TightVNC",
- "content": "TightVNC",
- "description": "TightVNC is a free and Open Source remote desktop software that lets you access and control a computer over the network. With its intuitive interface, you can interact with the remote screen as if you were sitting in front of it. You can open files, launch applications, and perform other actions on the remote desktop almost as if you were physically there",
- "link": "https://www.tightvnc.com/",
- "winget": "GlavSoft.TightVNC"
- },
- "ultravnc": {
- "category": "Utilities",
- "choco": "ultravnc",
- "content": "UltraVNC",
- "description": "UltraVNC is a powerful, easy to use and free - remote pc access softwares - that can display the screen of another computer (via internet or network) on your own screen. The program allows you to use your mouse and keyboard to control the other PC remotely. It means that you can work on a remote computer, as if you were sitting in front of it, right from your current location.",
- "link": "https://uvnc.com/",
- "winget": "uvncbvba.UltraVnc"
- },
- "windowsfirewallcontrol": {
- "category": "Utilities",
- "choco": "windowsfirewallcontrol",
- "content": "Windows Firewall Control",
- "description": "Windows Firewall Control is a powerful tool which extends the functionality of Windows Firewall and provides new extra features which makes Windows Firewall better.",
- "link": "https://www.binisoft.org/wfc",
- "winget": "BiniSoft.WindowsFirewallControl"
- },
- "vistaswitcher": {
- "category": "Utilities",
- "choco": "na",
- "content": "VistaSwitcher",
- "description": "VistaSwitcher makes it easier for you to locate windows and switch focus, even on multi-monitor systems. The switcher window consists of an easy-to-read list of all tasks running with clearly shown titles and a full-sized preview of the selected task.",
- "link": "https://www.ntwind.com/freeware/vistaswitcher.html",
- "winget": "ntwind.VistaSwitcher"
- },
- "autodarkmode": {
- "category": "Utilities",
- "choco": "auto-dark-mode",
- "content": "Windows Auto Dark Mode",
- "description": "Automatically switches between the dark and light theme of Windows 10 and Windows 11",
- "link": "https://github.com/AutoDarkMode/Windows-Auto-Night-Mode",
- "winget": "Armin2208.WindowsAutoNightMode"
- },
- "AmbieWhiteNoise": {
- "category": "Utilities",
- "choco": "na",
- "content": "Ambie White Noise",
- "description": "Ambie is the ultimate app to help you focus, study, or relax. We use white noise and nature sounds combined with an innovative focus timer to keep you concentrated on doing your best work.",
- "link": "https://ambieapp.com/",
- "winget": "9P07XNM5CHP0"
- },
- "magicwormhole": {
- "category": "Utilities",
- "choco": "magic-wormhole",
- "content": "Magic Wormhole",
- "description": "get things from one computer to another, safely",
- "link": "https://github.com/magic-wormhole/magic-wormhole",
- "winget": "magic-wormhole.magic-wormhole"
- },
- "croc": {
- "category": "Utilities",
- "choco": "croc",
- "content": "croc",
- "description": "Easily and securely send things from one computer to another.",
- "link": "https://github.com/schollz/croc",
- "winget": "schollz.croc"
- },
- "qgis": {
- "category": "Multimedia Tools",
- "choco": "qgis",
- "content": "QGIS",
- "description": "QGIS (Quantum GIS) is an open-source Geographic Information System (GIS) software that enables users to create, edit, visualize, analyze, and publish geospatial information on Windows, Mac, and Linux platforms.",
- "link": "https://qgis.org/en/site/",
- "winget": "OSGeo.QGIS"
- },
- "smplayer": {
- "category": "Multimedia Tools",
- "choco": "smplayer",
- "content": "SMPlayer",
- "description": "SMPlayer is a free media player for Windows and Linux with built-in codecs that can play virtually all video and audio formats.",
- "link": "https://www.smplayer.info",
- "winget": "SMPlayer.SMPlayer"
- },
- "glazewm": {
- "category": "Utilities",
- "choco": "na",
- "content": "GlazeWM",
- "description": "GlazeWM is a tiling window manager for Windows inspired by i3 and Polybar",
- "link": "https://github.com/glzr-io/glazewm",
- "winget": "glzr-io.glazewm"
- },
- "fancontrol": {
- "category": "Utilities",
- "choco": "na",
- "content": "FanControl",
- "description": "Fan Control is a free and open-source software that allows the user to control his CPU, GPU and case fans using temperatures.",
- "link": "https://getfancontrol.com/",
- "winget": "Rem0o.FanControl"
- },
- "fnm": {
- "category": "Development",
- "choco": "fnm",
- "content": "Fast Node Manager",
- "description": "Fast Node Manager (fnm) allows you to switch your Node version by using the Terminal",
- "link": "https://github.com/Schniz/fnm",
- "winget": "Schniz.fnm"
- },
- "Windhawk": {
- "category": "Utilities",
- "choco": "windhawk",
- "content": "Windhawk",
- "description": "The customization marketplace for Windows programs",
- "link": "https://windhawk.net",
- "winget": "RamenSoftware.Windhawk"
- },
- "ForceAutoHDR": {
- "category": "Utilities",
- "choco": "na",
- "content": "ForceAutoHDR",
- "description": "ForceAutoHDR simplifies the process of adding games to the AutoHDR list in the Windows Registry",
- "link": "https://github.com/7gxycn08/ForceAutoHDR",
- "winget": "ForceAutoHDR.7gxycn08"
- },
- "JoyToKey": {
- "category": "Utilities",
- "choco": "joytokey",
- "content": "JoyToKey",
- "description": "enables PC game controllers to emulate the keyboard and mouse input",
- "link": "https://joytokey.net/en/",
- "winget": "JTKsoftware.JoyToKey"
- },
- "nditools": {
- "category": "Multimedia Tools",
- "choco": "na",
- "content": "NDI Tools",
- "description":"NDI, or Network Device Interface, is a video connectivity standard that enables multimedia systems to identify and communicate with one another over IP and to encode, transmit, and receive high-quality, low latency, frame-accurate video and audio, and exchange metadata in real-time.",
- "link": "https://ndi.video/",
- "winget": "NDI.NDITools"
- },
- "kicad": {
- "category": "Multimedia Tools",
- "choco": "na",
- "content": "Kicad",
- "description":"Kicad is an open-source EDA tool. It's a good starting point for those who want to do electrical design and is even used by professionals in the industry.",
- "link": "https://www.kicad.org/",
- "winget": "KiCad.KiCad"
- },
- "FormatFactory": {
- "category": "Utilities",
- "choco": "formatfactory",
- "content": "Format Factory",
- "description":"FormatFactory is an ad-supported freeware multimedia converter that can convert video, audio, and picture files. It is also capable of ripping DVDs and CDs to other file formats, as well as creating .iso images. It can also join multiple video files together into one.",
- "link": "http://www.pcfreetime.com/formatfactory/",
- "winget": "na"
- },
- "dropox": {
- "category": "Utilities",
- "choco": "na",
- "content": "Dropbox",
- "description":"The Dropbox desktop app! Save hard drive space, share and edit files and send for signature – all without the distraction of countless browser tabs.",
- "link": "https://www.dropbox.com/en_GB/desktop",
- "winget": "Dropbox.Dropbox"
- },
- "OFGB": {
- "category": "Utilities",
- "choco": "ofgb",
- "content": "OFGB (Oh Frick Go Back)",
- "description":"GUI Tool to remove ads from various places around Windows 11",
- "link": "https://github.com/xM4ddy/OFGB",
- "winget": "xM4ddy.OFGB"
- },
- "PaleMoon": {
- "category": "Browsers",
- "choco": "paleMoon",
- "content": "PaleMoon",
- "description":"Pale Moon is an Open Source, Goanna-based web browser available for Microsoft Windows and Linux (with other operating systems in development), focusing on efficiency and ease of use.",
- "link": "https://www.palemoon.org/download.shtml",
- "winget": "MoonchildProductions.PaleMoon"
- },
- "Shotcut": {
- "category": "Multimedia Tools",
- "choco": "na",
- "content": "Shotcut",
- "description": "Shotcut is a free, open source, cross-platform video editor.",
- "link": "https://shotcut.org/",
- "winget": "Meltytech.Shotcut"
- },
- "LenovoLegionToolkit": {
- "category": "Utilities",
- "choco": "na",
- "content": "Lenovo Legion Toolkit",
- "description": "Lenovo Legion Toolkit (LLT) is a open-source utility created for Lenovo Legion (and similar) series laptops, that allows changing a couple of features that are only available in Lenovo Vantage or Legion Zone. It runs no background services, uses less memory, uses virtually no CPU, and contains no telemetry. Just like Lenovo Vantage, this application is Windows only.",
- "link": "https://github.com/BartoszCichecki/LenovoLegionToolkit",
- "winget": "BartoszCichecki.LenovoLegionToolkit"
- },
- "PulsarEdit": {
- "category": "Development",
- "choco": "pulsar",
- "content": "Pulsar",
- "description": "A Community-led Hyper-Hackable Text Editor",
- "link": "https://pulsar-edit.dev/",
- "winget": "Pulsar-Edit.Pulsar"
- },
- "Aegisub": {
- "category": "Development",
- "choco": "aegisub",
- "content": "Aegisub",
- "description": "Aegisub is a free, cross-platform open source tool for creating and modifying subtitles. Aegisub makes it quick and easy to time subtitles to audio, and features many powerful tools for styling them, including a built-in real-time video preview.",
- "link": "https://github.com/Aegisub/Aegisub",
- "winget": "Aegisub.Aegisub"
- },
- "SubtitleEdit": {
- "category": "Multimedia Tools",
- "choco": "na",
- "content": "Subtitle Edit",
- "description": "Subtitle Edit is a free and open source editor for video subtitles.",
- "link": "https://github.com/SubtitleEdit/subtitleedit",
- "winget": "Nikse.SubtitleEdit"
- },
- "Fork": {
- "category": "Development",
- "choco": "git-fork",
- "content": "Fork",
- "description": "Fork - a fast and friendly git client.",
- "link": "https://git-fork.com/",
- "winget": "Fork.Fork"
- }
+ "1password": {
+ "category": "Utilities",
+ "choco": "1password",
+ "content": "1Password",
+ "description": "1Password is a password manager that allows you to store and manage your passwords securely.",
+ "link": "https://1password.com/",
+ "winget": "AgileBits.1Password"
+ },
+ "7zip": {
+ "category": "Utilities",
+ "choco": "7zip",
+ "content": "7-Zip",
+ "description": "7-Zip is a free and open-source file archiver utility. It supports several compression formats and provides a high compression ratio, making it a popular choice for file compression.",
+ "link": "https://www.7-zip.org/",
+ "winget": "7zip.7zip"
+ },
+ "adobe": {
+ "category": "Document",
+ "choco": "adobereader",
+ "content": "Adobe Acrobat Reader",
+ "description": "Adobe Acrobat Reader is a free PDF viewer with essential features for viewing, printing, and annotating PDF documents.",
+ "link": "https://www.adobe.com/acrobat/pdf-reader.html",
+ "winget": "Adobe.Acrobat.Reader.64-bit"
+ },
+ "advancedip": {
+ "category": "Pro Tools",
+ "choco": "advanced-ip-scanner",
+ "content": "Advanced IP Scanner",
+ "description": "Advanced IP Scanner is a fast and easy-to-use network scanner. It is designed to analyze LAN networks and provides information about connected devices.",
+ "link": "https://www.advanced-ip-scanner.com/",
+ "winget": "Famatech.AdvancedIPScanner"
+ },
+ "affine": {
+ "category": "Document",
+ "choco": "na",
+ "content": "AFFiNE",
+ "description": "AFFiNE is an open source alternative to Notion. Write, draw, plan all at once. Selfhost it to sync across devices.",
+ "link": "https://affine.pro/",
+ "winget": "ToEverything.AFFiNE"
+ },
+ "aimp": {
+ "category": "Multimedia Tools",
+ "choco": "aimp",
+ "content": "AIMP (Music Player)",
+ "description": "AIMP is a feature-rich music player with support for various audio formats, playlists, and customizable user interface.",
+ "link": "https://www.aimp.ru/",
+ "winget": "AIMP.AIMP"
+ },
+ "alacritty": {
+ "category": "Utilities",
+ "choco": "alacritty",
+ "content": "Alacritty Terminal",
+ "description": "Alacritty is a fast, cross-platform, and GPU-accelerated terminal emulator. It is designed for performance and aims to be the fastest terminal emulator available.",
+ "link": "https://alacritty.org/",
+ "winget": "Alacritty.Alacritty"
+ },
+ "anaconda3": {
+ "category": "Development",
+ "choco": "anaconda3",
+ "content": "Anaconda",
+ "description": "Anaconda is a distribution of the Python and R programming languages for scientific computing.",
+ "link": "https://www.anaconda.com/products/distribution",
+ "winget": "Anaconda.Anaconda3"
+ },
+ "angryipscanner": {
+ "category": "Pro Tools",
+ "choco": "angryip",
+ "content": "Angry IP Scanner",
+ "description": "Angry IP Scanner is an open-source and cross-platform network scanner. It is used to scan IP addresses and ports, providing information about network connectivity.",
+ "link": "https://angryip.org/",
+ "winget": "angryziber.AngryIPScanner"
+ },
+ "anki": {
+ "category": "Document",
+ "choco": "anki",
+ "content": "Anki",
+ "description": "Anki is a flashcard application that helps you memorize information with intelligent spaced repetition.",
+ "link": "https://apps.ankiweb.net/",
+ "winget": "Anki.Anki"
+ },
+ "anydesk": {
+ "category": "Utilities",
+ "choco": "anydesk",
+ "content": "AnyDesk",
+ "description": "AnyDesk is a remote desktop software that enables users to access and control computers remotely. It is known for its fast connection and low latency.",
+ "link": "https://anydesk.com/",
+ "winget": "AnyDeskSoftwareGmbH.AnyDesk"
+ },
+ "ATLauncher": {
+ "category": "Games",
+ "choco": "na",
+ "content": "ATLauncher",
+ "description": "ATLauncher is a Launcher for Minecraft which integrates multiple different ModPacks to allow you to download and install ModPacks easily and quickly.",
+ "link": "https://github.com/ATLauncher/ATLauncher",
+ "winget": "ATLauncher.ATLauncher"
+ },
+ "audacity": {
+ "category": "Multimedia Tools",
+ "choco": "audacity",
+ "content": "Audacity",
+ "description": "Audacity is a free and open-source audio editing software known for its powerful recording and editing capabilities.",
+ "link": "https://www.audacityteam.org/",
+ "winget": "Audacity.Audacity"
+ },
+ "autoruns": {
+ "category": "Microsoft Tools",
+ "choco": "autoruns",
+ "content": "Autoruns",
+ "description": "This utility shows you what programs are configured to run during system bootup or login",
+ "link": "https://learn.microsoft.com/en-us/sysinternals/downloads/autoruns",
+ "winget": "Microsoft.Sysinternals.Autoruns"
+ },
+ "rdcman": {
+ "category": "Microsoft Tools",
+ "choco": "rdcman",
+ "content": "RDCMan",
+ "description": "RDCMan manages multiple remote desktop connections. It is useful for managing server labs where you need regular access to each machine such as automated checkin systems and data centers.",
+ "link": "https://learn.microsoft.com/en-us/sysinternals/downloads/rdcman",
+ "winget": "Microsoft.Sysinternals.RDCMan"
+ },
+ "autohotkey": {
+ "category": "Utilities",
+ "choco": "autohotkey",
+ "content": "AutoHotkey",
+ "description": "AutoHotkey is a scripting language for Windows that allows users to create custom automation scripts and macros. It is often used for automating repetitive tasks and customizing keyboard shortcuts.",
+ "link": "https://www.autohotkey.com/",
+ "winget": "AutoHotkey.AutoHotkey"
+ },
+ "azuredatastudio": {
+ "category": "Microsoft Tools",
+ "choco": "azure-data-studio",
+ "content": "Microsoft Azure Data Studio",
+ "description": "Azure Data Studio is a data management tool that enables you to work with SQL Server, Azure SQL DB and SQL DW from Windows, macOS and Linux.",
+ "link": "https://docs.microsoft.com/sql/azure-data-studio/what-is-azure-data-studio",
+ "winget": "Microsoft.AzureDataStudio"
+ },
+ "barrier": {
+ "category": "Utilities",
+ "choco": "barrier",
+ "content": "Barrier",
+ "description": "Barrier is an open-source software KVM (keyboard, video, and mouseswitch). It allows users to control multiple computers with a single keyboard and mouse, even if they have different operating systems.",
+ "link": "https://github.com/debauchee/barrier",
+ "winget": "DebaucheeOpenSourceGroup.Barrier"
+ },
+ "bat": {
+ "category": "Utilities",
+ "choco": "bat",
+ "content": "Bat (Cat)",
+ "description": "Bat is a cat command clone with syntax highlighting. It provides a user-friendly and feature-rich alternative to the traditional cat command for viewing and concatenating files.",
+ "link": "https://github.com/sharkdp/bat",
+ "winget": "sharkdp.bat"
+ },
+ "bitwarden": {
+ "category": "Utilities",
+ "choco": "bitwarden",
+ "content": "Bitwarden",
+ "description": "Bitwarden is an open-source password management solution. It allows users to store and manage their passwords in a secure and encrypted vault, accessible across multiple devices.",
+ "link": "https://bitwarden.com/",
+ "winget": "Bitwarden.Bitwarden"
+ },
+ "bleachbit": {
+ "category": "Utilities",
+ "choco": "bleachbit",
+ "content": "BleachBit",
+ "description": "Clean Your System and Free Disk Space",
+ "link": "https://www.bleachbit.org/",
+ "winget": "BleachBit.BleachBit"
+ },
+ "blender": {
+ "category": "Multimedia Tools",
+ "choco": "blender",
+ "content": "Blender (3D Graphics)",
+ "description": "Blender is a powerful open-source 3D creation suite, offering modeling, sculpting, animation, and rendering tools.",
+ "link": "https://www.blender.org/",
+ "winget": "BlenderFoundation.Blender"
+ },
+ "brave": {
+ "category": "Browsers",
+ "choco": "brave",
+ "content": "Brave",
+ "description": "Brave is a privacy-focused web browser that blocks ads and trackers, offering a faster and safer browsing experience.",
+ "link": "https://www.brave.com",
+ "winget": "Brave.Brave"
+ },
+ "bulkcrapuninstaller": {
+ "category": "Utilities",
+ "choco": "bulk-crap-uninstaller",
+ "content": "Bulk Crap Uninstaller",
+ "description": "Bulk Crap Uninstaller is a free and open-source uninstaller utility for Windows. It helps users remove unwanted programs and clean up their system by uninstalling multiple applications at once.",
+ "link": "https://www.bcuninstaller.com/",
+ "winget": "Klocman.BulkCrapUninstaller"
+ },
+ "bulkrenameutility": {
+ "category": "Utilities",
+ "choco": "bulkrenameutility",
+ "content": "Bulk Rename Utility",
+ "description": "Bulk Rename Utility allows you to easily rename files and folders recursively based upon find-replace, character place, fields, sequences, regular expressions, EXIF data, and more.",
+ "link": "https://www.bulkrenameutility.co.uk",
+ "winget": "TGRMNSoftware.BulkRenameUtility"
+ },
+ "AdvancedRenamer": {
+ "category": "Utilities",
+ "choco": "advanced-renamer",
+ "content": "Advanced Renamer",
+ "description": "Advanced Renamer is a program for renaming multiple files and folders at once. By configuring renaming methods the names can be manipulated in various ways.",
+ "link": "https://www.advancedrenamer.com/",
+ "winget": "HulubuluSoftware.AdvancedRenamer"
+ },
+ "calibre": {
+ "category": "Document",
+ "choco": "calibre",
+ "content": "Calibre",
+ "description": "Calibre is a powerful and easy-to-use e-book manager, viewer, and converter.",
+ "link": "https://calibre-ebook.com/",
+ "winget": "calibre.calibre"
+ },
+ "carnac": {
+ "category": "Utilities",
+ "choco": "carnac",
+ "content": "Carnac",
+ "description": "Carnac is a keystroke visualizer for Windows. It displays keystrokes in an overlay, making it useful for presentations, tutorials, and live demonstrations.",
+ "link": "https://carnackeys.com/",
+ "winget": "code52.Carnac"
+ },
+ "cemu": {
+ "category": "Games",
+ "choco": "cemu",
+ "content": "Cemu",
+ "description": "Cemu is a highly experimental software to emulate Wii U applications on PC.",
+ "link": "https://cemu.info/",
+ "winget": "Cemu.Cemu"
+ },
+ "chatterino": {
+ "category": "Communications",
+ "choco": "chatterino",
+ "content": "Chatterino",
+ "description": "Chatterino is a chat client for Twitch chat that offers a clean and customizable interface for a better streaming experience.",
+ "link": "https://www.chatterino.com/",
+ "winget": "ChatterinoTeam.Chatterino"
+ },
+ "chrome": {
+ "category": "Browsers",
+ "choco": "googlechrome",
+ "content": "Chrome",
+ "description": "Google Chrome is a widely used web browser known for its speed, simplicity, and seamless integration with Google services.",
+ "link": "https://www.google.com/chrome/",
+ "winget": "Google.Chrome"
+ },
+ "chromium": {
+ "category": "Browsers",
+ "choco": "chromium",
+ "content": "Chromium",
+ "description": "Chromium is the open-source project that serves as the foundation for various web browsers, including Chrome.",
+ "link": "https://github.com/Hibbiki/chromium-win64",
+ "winget": "Hibbiki.Chromium"
+ },
+ "arc": {
+ "category": "Browsers",
+ "choco": "na",
+ "content": "Arc",
+ "description": "Arc is a Chromium based browser, known for it's clean and modern design.",
+ "link": "https://arc.net/",
+ "winget": "TheBrowserCompany.Arc"
+ },
+ "clementine": {
+ "category": "Multimedia Tools",
+ "choco": "clementine",
+ "content": "Clementine",
+ "description": "Clementine is a modern music player and library organizer, supporting various audio formats and online radio services.",
+ "link": "https://www.clementine-player.org/",
+ "winget": "Clementine.Clementine"
+ },
+ "clink": {
+ "category": "Development",
+ "choco": "clink",
+ "content": "Clink",
+ "description": "Clink is a powerful Bash-compatible command-line interface (CLIenhancement for Windows, adding features like syntax highlighting and improved history).",
+ "link": "https://mridgers.github.io/clink/",
+ "winget": "chrisant996.Clink"
+ },
+ "clonehero": {
+ "category": "Games",
+ "choco": "na",
+ "content": "Clone Hero",
+ "description": "Clone Hero is a free rhythm game, which can be played with any 5 or 6 button guitar controller.",
+ "link": "https://clonehero.net/",
+ "winget": "CloneHeroTeam.CloneHero"
+ },
+ "cmake": {
+ "category": "Development",
+ "choco": "cmake",
+ "content": "CMake",
+ "description": "CMake is an open-source, cross-platform family of tools designed to build, test and package software.",
+ "link": "https://cmake.org/",
+ "winget": "Kitware.CMake"
+ },
+ "copyq": {
+ "category": "Utilities",
+ "choco": "copyq",
+ "content": "CopyQ (Clipboard Manager)",
+ "description": "CopyQ is a clipboard manager with advanced features, allowing you to store, edit, and retrieve clipboard history.",
+ "link": "https://copyq.readthedocs.io/",
+ "winget": "hluk.CopyQ"
+ },
+ "cpuz": {
+ "category": "Utilities",
+ "choco": "cpu-z",
+ "content": "CPU-Z",
+ "description": "CPU-Z is a system monitoring and diagnostic tool for Windows. It provides detailed information about the computer's hardware components, including the CPU, memory, and motherboard.",
+ "link": "https://www.cpuid.com/softwares/cpu-z.html",
+ "winget": "CPUID.CPU-Z"
+ },
+ "crystaldiskinfo": {
+ "category": "Utilities",
+ "choco": "crystaldiskinfo",
+ "content": "Crystal Disk Info",
+ "description": "Crystal Disk Info is a disk health monitoring tool that provides information about the status and performance of hard drives. It helps users anticipate potential issues and monitor drive health.",
+ "link": "https://crystalmark.info/en/software/crystaldiskinfo/",
+ "winget": "CrystalDewWorld.CrystalDiskInfo"
+ },
+ "capframex": {
+ "category": "Utilities",
+ "choco": "na",
+ "content": "CapFrameX",
+ "description": "Frametimes capture and analysis tool based on Intel's PresentMon. Overlay provided by Rivatuner Statistics Server.",
+ "link": "https://www.capframex.com/",
+ "winget": "CXWorld.CapFrameX"
+ },
+ "crystaldiskmark": {
+ "category": "Utilities",
+ "choco": "crystaldiskmark",
+ "content": "Crystal Disk Mark",
+ "description": "Crystal Disk Mark is a disk benchmarking tool that measures the read and write speeds of storage devices. It helps users assess the performance of their hard drives and SSDs.",
+ "link": "https://crystalmark.info/en/software/crystaldiskmark/",
+ "winget": "CrystalDewWorld.CrystalDiskMark"
+ },
+ "darktable": {
+ "category": "Multimedia Tools",
+ "choco": "darktable",
+ "content": "darktable",
+ "description": "Open-source photo editing tool, offering an intuitive interface, advanced editing capabilities, and a non-destructive workflow for seamless image enhancement.",
+ "link": "https://www.darktable.org/install/",
+ "winget": "darktable.darktable"
+ },
+ "DaxStudio": {
+ "category": "Development",
+ "choco": "daxstudio",
+ "content": "DaxStudio",
+ "description": "DAX (Data Analysis eXpressions) Studio is the ultimate tool for executing and analyzing DAX queries against Microsoft Tabular models.",
+ "link": "https://daxstudio.org/",
+ "winget": "DaxStudio.DaxStudio"
+ },
+ "ddu": {
+ "category": "Utilities",
+ "choco": "ddu",
+ "content": "Display Driver Uninstaller",
+ "description": "Display Driver Uninstaller (DDU) is a tool for completely uninstalling graphics drivers from NVIDIA, AMD, and Intel. It is useful for troubleshooting graphics driver-related issues.",
+ "link": "https://www.wagnardsoft.com/display-driver-uninstaller-DDU-",
+ "winget": "ddu"
+ },
+ "deluge": {
+ "category": "Utilities",
+ "choco": "deluge",
+ "content": "Deluge",
+ "description": "Deluge is a free and open-source BitTorrent client. It features a user-friendly interface, support for plugins, and the ability to manage torrents remotely.",
+ "link": "https://deluge-torrent.org/",
+ "winget": "DelugeTeam.Deluge"
+ },
+ "devtoys": {
+ "category": "Utilities",
+ "choco": "devtoys",
+ "content": "DevToys",
+ "description": "DevToys is a collection of development-related utilities and tools for Windows. It includes tools for file management, code formatting, and productivity enhancements for developers.",
+ "link": "https://devtoys.app/",
+ "winget": "DevToys-app.DevToys"
+ },
+ "digikam": {
+ "category": "Multimedia Tools",
+ "choco": "digikam",
+ "content": "digiKam",
+ "description": "digiKam is an advanced open-source photo management software with features for organizing, editing, and sharing photos.",
+ "link": "https://www.digikam.org/",
+ "winget": "KDE.digikam"
+ },
+ "discord": {
+ "category": "Communications",
+ "choco": "discord",
+ "content": "Discord",
+ "description": "Discord is a popular communication platform with voice, video, and text chat, designed for gamers but used by a wide range of communities.",
+ "link": "https://discord.com/",
+ "winget": "Discord.Discord"
+ },
+ "ditto": {
+ "category": "Utilities",
+ "choco": "ditto",
+ "content": "Ditto",
+ "description": "Ditto is an extension to the standard windows clipboard.",
+ "link": "https://github.com/sabrogden/Ditto",
+ "winget": "Ditto.Ditto"
+ },
+ "dockerdesktop": {
+ "category": "Development",
+ "choco": "docker-desktop",
+ "content": "Docker Desktop",
+ "description": "Docker Desktop is a powerful tool for containerized application development and deployment.",
+ "link": "https://www.docker.com/products/docker-desktop",
+ "winget": "Docker.DockerDesktop"
+ },
+ "dotnet3": {
+ "category": "Microsoft Tools",
+ "choco": "dotnetcore3-desktop-runtime",
+ "content": ".NET Desktop Runtime 3.1",
+ "description": ".NET Desktop Runtime 3.1 is a runtime environment required for running applications developed with .NET Core 3.1.",
+ "link": "https://dotnet.microsoft.com/download/dotnet/3.1",
+ "winget": "Microsoft.DotNet.DesktopRuntime.3_1"
+ },
+ "dotnet5": {
+ "category": "Microsoft Tools",
+ "choco": "dotnet-5.0-runtime",
+ "content": ".NET Desktop Runtime 5",
+ "description": ".NET Desktop Runtime 5 is a runtime environment required for running applications developed with .NET 5.",
+ "link": "https://dotnet.microsoft.com/download/dotnet/5.0",
+ "winget": "Microsoft.DotNet.DesktopRuntime.5"
+ },
+ "dotnet6": {
+ "category": "Microsoft Tools",
+ "choco": "dotnet-6.0-runtime",
+ "content": ".NET Desktop Runtime 6",
+ "description": ".NET Desktop Runtime 6 is a runtime environment required for running applications developed with .NET 6.",
+ "link": "https://dotnet.microsoft.com/download/dotnet/6.0",
+ "winget": "Microsoft.DotNet.DesktopRuntime.6"
+ },
+ "dotnet7": {
+ "category": "Microsoft Tools",
+ "choco": "dotnet-7.0-runtime",
+ "content": ".NET Desktop Runtime 7",
+ "description": ".NET Desktop Runtime 7 is a runtime environment required for running applications developed with .NET 7.",
+ "link": "https://dotnet.microsoft.com/download/dotnet/7.0",
+ "winget": "Microsoft.DotNet.DesktopRuntime.7"
+ },
+ "dotnet8": {
+ "category": "Microsoft Tools",
+ "choco": "dotnet-8.0-runtime",
+ "content": ".NET Desktop Runtime 8",
+ "description": ".NET Desktop Runtime 8 is a runtime environment required for running applications developed with .NET 8.",
+ "link": "https://dotnet.microsoft.com/download/dotnet/8.0",
+ "winget": "Microsoft.DotNet.DesktopRuntime.8"
+ },
+ "dmt": {
+ "winget": "GNE.DualMonitorTools",
+ "choco": "dual-monitor-tools",
+ "category": "Utilities",
+ "content": "Dual Monitor Tools",
+ "link": "https://dualmonitortool.sourceforge.net/",
+ "description": "Dual Monitor Tools (DMT) is a FOSS app that customize handling multiple monitors and even lock the mouse on specific monitor. Useful for full screen games and apps that does not handle well a second monitor or helps the workflow."
+ },
+ "duplicati": {
+ "category": "Utilities",
+ "choco": "duplicati",
+ "content": "Duplicati",
+ "description": "Duplicati is an open-source backup solution that supports encrypted, compressed, and incremental backups. It is designed to securely store data on cloud storage services.",
+ "link": "https://www.duplicati.com/",
+ "winget": "Duplicati.Duplicati"
+ },
+ "eaapp": {
+ "category": "Games",
+ "choco": "ea-app",
+ "content": "EA App",
+ "description": "EA App is a platform for accessing and playing Electronic Arts games.",
+ "link": "https://www.ea.com/ea-app",
+ "winget": "ElectronicArts.EADesktop"
+ },
+ "eartrumpet": {
+ "category": "Multimedia Tools",
+ "choco": "eartrumpet",
+ "content": "EarTrumpet (Audio)",
+ "description": "EarTrumpet is an audio control app for Windows, providing a simple and intuitive interface for managing sound settings.",
+ "link": "https://eartrumpet.app/",
+ "winget": "File-New-Project.EarTrumpet"
+ },
+ "edge": {
+ "category": "Browsers",
+ "choco": "microsoft-edge",
+ "content": "Edge",
+ "description": "Microsoft Edge is a modern web browser built on Chromium, offering performance, security, and integration with Microsoft services.",
+ "link": "https://www.microsoft.com/edge",
+ "winget": "Microsoft.Edge"
+ },
+ "efibooteditor": {
+ "category": "Pro Tools",
+ "choco": "na",
+ "content": "EFI Boot Editor",
+ "description": "EFI Boot Editor is a tool for managing the EFI/UEFI boot entries on your system. It allows you to customize the boot configuration of your computer.",
+ "link": "https://www.easyuefi.com/",
+ "winget": "EFIBootEditor.EFIBootEditor"
+ },
+ "emulationstation": {
+ "category": "Games",
+ "choco": "emulationstation",
+ "content": "Emulation Station",
+ "description": "Emulation Station is a graphical and themeable emulator front-end that allows you to access all your favorite games in one place.",
+ "link": "https://emulationstation.org/",
+ "winget": "Emulationstation.Emulationstation"
+ },
+ "epicgames": {
+ "category": "Games",
+ "choco": "epicgameslauncher",
+ "content": "Epic Games Launcher",
+ "description": "Epic Games Launcher is the client for accessing and playing games from the Epic Games Store.",
+ "link": "https://www.epicgames.com/store/en-US/",
+ "winget": "EpicGames.EpicGamesLauncher"
+ },
+ "errorlookup": {
+ "category": "Utilities",
+ "choco": "na",
+ "content": "Windows Error Code Lookup",
+ "description": "ErrorLookup is a tool for looking up Windows error codes and their descriptions.",
+ "link": "https://github.com/HenryPP/ErrorLookup",
+ "winget": "Henry++.ErrorLookup"
+ },
+ "esearch": {
+ "category": "Utilities",
+ "choco": "everything",
+ "content": "Everything Search",
+ "description": "Everything Search is a fast and efficient file search utility for Windows.",
+ "link": "https://www.voidtools.com/",
+ "winget": "voidtools.Everything"
+ },
+ "espanso": {
+ "category": "Utilities",
+ "choco": "espanso",
+ "content": "Espanso",
+ "description": "Cross-platform and open-source Text Expander written in Rust",
+ "link": "https://espanso.org/",
+ "winget": "Espanso.Espanso"
+ },
+ "etcher": {
+ "category": "Utilities",
+ "choco": "etcher",
+ "content": "Etcher USB Creator",
+ "description": "Etcher is a powerful tool for creating bootable USB drives with ease.",
+ "link": "https://www.balena.io/etcher/",
+ "winget": "Balena.Etcher"
+ },
+ "falkon": {
+ "category": "Browsers",
+ "choco": "falkon",
+ "content": "Falkon",
+ "description": "Falkon is a lightweight and fast web browser with a focus on user privacy and efficiency.",
+ "link": "https://www.falkon.org/",
+ "winget": "KDE.Falkon"
+ },
+ "fastfetch": {
+ "category": "Utilities",
+ "choco": "na",
+ "content": "Fastfetch",
+ "description": "Fastfetch is a neofetch-like tool for fetching system information and displaying them in a pretty way",
+ "link": "https://github.com/fastfetch-cli/fastfetch/",
+ "winget": "Fastfetch-cli.Fastfetch"
+ },
+ "ferdium": {
+ "category": "Communications",
+ "choco": "ferdium",
+ "content": "Ferdium",
+ "description": "Ferdium is a messaging application that combines multiple messaging services into a single app for easy management.",
+ "link": "https://ferdium.org/",
+ "winget": "Ferdium.Ferdium"
+ },
+ "ffmpeg": {
+ "category": "Multimedia Tools",
+ "choco": "ffmpeg-full",
+ "content": "FFmpeg (full)",
+ "description": "FFmpeg is a powerful multimedia processing tool that enables users to convert, edit, and stream audio and video files with a vast range of codecs and formats.",
+ "link": "https://ffmpeg.org/",
+ "winget": "Gyan.FFmpeg"
+ },
+ "fileconverter": {
+ "category": "Utilities",
+ "choco": "file-converter",
+ "content": "File-Converter",
+ "description": "File Converter is a very simple tool which allows you to convert and compress one or several file(s) using the context menu in windows explorer.",
+ "link": "https://file-converter.io/",
+ "winget": "AdrienAllard.FileConverter"
+ },
+ "files": {
+ "category": "Utilities",
+ "choco": "files",
+ "content": "Files",
+ "description": "Alternative file explorer.",
+ "link": "https://github.com/files-community/Files",
+ "winget": "na"
+ },
+ "firealpaca": {
+ "category": "Multimedia Tools",
+ "choco": "firealpaca",
+ "content": "Fire Alpaca",
+ "description": "Fire Alpaca is a free digital painting software that provides a wide range of drawing tools and a user-friendly interface.",
+ "link": "https://firealpaca.com/",
+ "winget": "FireAlpaca.FireAlpaca"
+ },
+ "firefox": {
+ "category": "Browsers",
+ "choco": "firefox",
+ "content": "Firefox",
+ "description": "Mozilla Firefox is an open-source web browser known for its customization options, privacy features, and extensions.",
+ "link": "https://www.mozilla.org/en-US/firefox/new/",
+ "winget": "Mozilla.Firefox"
+ },
+ "firefoxesr": {
+ "category": "Browsers",
+ "choco": "FirefoxESR",
+ "content": "Firefox ESR",
+ "description": "Mozilla Firefox is an open-source web browser known for its customization options, privacy features, and extensions. Firefox ESR (Extended Support Release) receives major updates every 42 weeks with minor updates such as crash fixes, security fixes and policy updates as needed, but at least every four weeks.",
+ "link": "https://www.mozilla.org/en-US/firefox/enterprise/",
+ "winget": "Mozilla.Firefox.ESR"
+ },
+ "flameshot": {
+ "category": "Multimedia Tools",
+ "choco": "flameshot",
+ "content": "Flameshot (Screenshots)",
+ "description": "Flameshot is a powerful yet simple to use screenshot software, offering annotation and editing features.",
+ "link": "https://flameshot.org/",
+ "winget": "Flameshot.Flameshot"
+ },
+ "lightshot": {
+ "category": "Multimedia Tools",
+ "choco": "lightshot",
+ "content": "Lightshot (Screenshots)",
+ "description": "Ligthshot is an Easy-to-use, light-weight screenshot software tool, where you can optionally edit your screenshots using different tools, share them via Internet and/or save to disk, and customize the available options.",
+ "link": "https://app.prntscr.com/",
+ "winget": "Skillbrains.Lightshot"
+ },
+ "floorp": {
+ "category": "Browsers",
+ "choco": "na",
+ "content": "Floorp",
+ "description": "Floorp is an open-source web browser project that aims to provide a simple and fast browsing experience.",
+ "link": "https://floorp.app/",
+ "winget": "Ablaze.Floorp"
+ },
+ "flow": {
+ "category": "Utilities",
+ "choco": "flow-launcher",
+ "content": "Flow launcher",
+ "description": "Keystroke launcher for Windows to search, manage and launch files, folders bookmarks, websites and more.",
+ "link": "https://www.flowlauncher.com/",
+ "winget": "Flow-Launcher.Flow-Launcher"
+ },
+ "flux": {
+ "category": "Utilities",
+ "choco": "flux",
+ "content": "F.lux",
+ "description": "f.lux adjusts the color temperature of your screen to reduce eye strain during nighttime use.",
+ "link": "https://justgetflux.com/",
+ "winget": "flux.flux"
+ },
+ "foobar": {
+ "category": "Multimedia Tools",
+ "choco": "foobar2000",
+ "content": "foobar2000 (Music Player)",
+ "description": "foobar2000 is a highly customizable and extensible music player for Windows, known for its modular design and advanced features.",
+ "link": "https://www.foobar2000.org/",
+ "winget": "PeterPawlowski.foobar2000"
+ },
+ "foxpdfeditor": {
+ "category": "Document",
+ "choco": "na",
+ "content": "Foxit PDF Editor",
+ "description": "Foxit PDF Editor is a feature-rich PDF editor and viewer with a familiar ribbon-style interface.",
+ "link": "https://www.foxit.com/pdf-editor/",
+ "winget": "Foxit.PhantomPDF"
+ },
+ "foxpdfreader": {
+ "category": "Document",
+ "choco": "foxitreader",
+ "content": "Foxit PDF Reader",
+ "description": "Foxit PDF Reader is a free PDF viewer with a familiar ribbon-style interface.",
+ "link": "https://www.foxit.com/pdf-reader/",
+ "winget": "Foxit.FoxitReader"
+ },
+ "freecad": {
+ "category": "Multimedia Tools",
+ "choco": "freecad",
+ "content": "FreeCAD",
+ "description": "FreeCAD is a parametric 3D CAD modeler, designed for product design and engineering tasks, with a focus on flexibility and extensibility.",
+ "link": "https://www.freecadweb.org/",
+ "winget": "FreeCAD.FreeCAD"
+ },
+ "fxsound": {
+ "category": "Multimedia Tools",
+ "choco": "fxsound",
+ "content": "FxSound",
+ "description": "FxSound is a cutting-edge audio enhancement software that elevates your listening experience across all media.",
+ "link": "https://www.fxsound.com/",
+ "winget": "FxSoundLLC.FxSound"
+ },
+ "fzf": {
+ "category": "Utilities",
+ "choco": "fzf",
+ "content": "Fzf",
+ "description": "A command-line fuzzy finder",
+ "link": "https://github.com/junegunn/fzf/",
+ "winget": "junegunn.fzf"
+ },
+ "geforcenow": {
+ "category": "Games",
+ "choco": "nvidia-geforce-now",
+ "content": "GeForce NOW",
+ "description": "GeForce NOW is a cloud gaming service that allows you to play high-quality PC games on your device.",
+ "link": "https://www.nvidia.com/en-us/geforce-now/",
+ "winget": "Nvidia.GeForceNow"
+ },
+ "gimp": {
+ "category": "Multimedia Tools",
+ "choco": "gimp",
+ "content": "GIMP (Image Editor)",
+ "description": "GIMP is a versatile open-source raster graphics editor used for tasks such as photo retouching, image editing, and image composition.",
+ "link": "https://www.gimp.org/",
+ "winget": "GIMP.GIMP"
+ },
+ "git": {
+ "category": "Development",
+ "choco": "git",
+ "content": "Git",
+ "description": "Git is a distributed version control system widely used for tracking changes in source code during software development.",
+ "link": "https://git-scm.com/",
+ "winget": "Git.Git"
+ },
+ "gitbutler": {
+ "category": "Development",
+ "choco": "na",
+ "content": "Git Butler",
+ "description": "A Git client for simultaneous branches on top of your existing workflow.",
+ "link": "https://gitbutler.com/",
+ "winget": "GitButler.GitButler"
+ },
+ "gitextensions": {
+ "category": "Development",
+ "choco": "git;gitextensions",
+ "content": "Git Extensions",
+ "description": "Git Extensions is a graphical user interface for Git, providing additional features for easier source code management.",
+ "link": "https://gitextensions.github.io/",
+ "winget": "GitExtensionsTeam.GitExtensions"
+ },
+ "githubcli": {
+ "category": "Development",
+ "choco": "git;gh",
+ "content": "GitHub CLI",
+ "description": "GitHub CLI is a command-line tool that simplifies working with GitHub directly from the terminal.",
+ "link": "https://cli.github.com/",
+ "winget": "GitHub.cli"
+ },
+ "githubdesktop": {
+ "category": "Development",
+ "choco": "git;github-desktop",
+ "content": "GitHub Desktop",
+ "description": "GitHub Desktop is a visual Git client that simplifies collaboration on GitHub repositories with an easy-to-use interface.",
+ "link": "https://desktop.github.com/",
+ "winget": "GitHub.GitHubDesktop"
+ },
+ "gitkrakenclient": {
+ "category": "Development",
+ "choco": "gitkraken",
+ "content": "GitKraken Client",
+ "description": "GitKraken Client is a powerful visual Git client from Axosoft that works with ALL git repositories on any hosting environment.",
+ "link": "https://www.gitkraken.com/git-client",
+ "winget": "Axosoft.GitKraken"
+ },
+ "glaryutilities": {
+ "category": "Utilities",
+ "choco": "glaryutilities-free",
+ "content": "Glary Utilities",
+ "description": "Glary Utilities is a comprehensive system optimization and maintenance tool for Windows.",
+ "link": "https://www.glarysoft.com/glary-utilities/",
+ "winget": "Glarysoft.GlaryUtilities"
+ },
+ "godotengine": {
+ "category": "Development",
+ "choco": "godot",
+ "content": "Godot Engine",
+ "description": "Godot Engine is a free, open-source 2D and 3D game engine with a focus on usability and flexibility.",
+ "link": "https://godotengine.org/",
+ "winget": "GodotEngine.GodotEngine"
+ },
+ "gog": {
+ "category": "Games",
+ "choco": "goggalaxy",
+ "content": "GOG Galaxy",
+ "description": "GOG Galaxy is a gaming client that offers DRM-free games, additional content, and more.",
+ "link": "https://www.gog.com/galaxy",
+ "winget": "GOG.Galaxy"
+ },
+ "gitify": {
+ "category": "Development",
+ "choco": "na",
+ "content": "Gitify",
+ "description": "GitHub notifications on your menu bar.",
+ "link": "https://www.gitify.io/",
+ "winget": "Gitify.Gitify"
+ },
+ "golang": {
+ "category": "Development",
+ "choco": "golang",
+ "content": "Go",
+ "description": "Go (or Golang) is a statically typed, compiled programming language designed for simplicity, reliability, and efficiency.",
+ "link": "https://go.dev/",
+ "winget": "GoLang.Go"
+ },
+ "googledrive": {
+ "category": "Utilities",
+ "choco": "googledrive",
+ "content": "Google Drive",
+ "description": "File syncing across devices all tied to your google account",
+ "link": "https://www.google.com/drive/",
+ "winget": "Google.Drive"
+ },
+ "gpuz": {
+ "category": "Utilities",
+ "choco": "gpu-z",
+ "content": "GPU-Z",
+ "description": "GPU-Z provides detailed information about your graphics card and GPU.",
+ "link": "https://www.techpowerup.com/gpuz/",
+ "winget": "TechPowerUp.GPU-Z"
+ },
+ "greenshot": {
+ "category": "Multimedia Tools",
+ "choco": "greenshot",
+ "content": "Greenshot (Screenshots)",
+ "description": "Greenshot is a light-weight screenshot software tool with built-in image editor and customizable capture options.",
+ "link": "https://getgreenshot.org/",
+ "winget": "Greenshot.Greenshot"
+ },
+ "gsudo": {
+ "category": "Utilities",
+ "choco": "gsudo",
+ "content": "Gsudo",
+ "description": "Gsudo is a sudo implementation for Windows, allowing elevated privilege execution.",
+ "link": "https://gerardog.github.io/gsudo/",
+ "winget": "gerardog.gsudo"
+ },
+ "guilded": {
+ "category": "Communications",
+ "choco": "na",
+ "content": "Guilded",
+ "description": "Guilded is a communication and productivity platform that includes chat, scheduling, and collaborative tools for gaming and communities.",
+ "link": "https://www.guilded.gg/",
+ "winget": "Guilded.Guilded"
+ },
+ "handbrake": {
+ "category": "Multimedia Tools",
+ "choco": "handbrake",
+ "content": "HandBrake",
+ "description": "HandBrake is an open-source video transcoder, allowing you to convert video from nearly any format to a selection of widely supported codecs.",
+ "link": "https://handbrake.fr/",
+ "winget": "HandBrake.HandBrake"
+ },
+ "harmonoid": {
+ "category": "Multimedia Tools",
+ "choco": "na",
+ "content": "Harmonoid",
+ "description": "Plays and manages your music library. Looks beautiful and juicy. Playlists, visuals, synced lyrics, pitch shift, volume boost and more.",
+ "link": "https://harmonoid.com/",
+ "winget": "Harmonoid.Harmonoid"
+ },
+ "heidisql": {
+ "category": "Pro Tools",
+ "choco": "heidisql",
+ "content": "HeidiSQL",
+ "description": "HeidiSQL is a powerful and easy-to-use client for MySQL, MariaDB, Microsoft SQL Server, and PostgreSQL databases. It provides tools for database management and development.",
+ "link": "https://www.heidisql.com/",
+ "winget": "HeidiSQL.HeidiSQL"
+ },
+ "helix": {
+ "category": "Development",
+ "choco": "helix",
+ "content": "Helix",
+ "description": "Helix is a neovim alternative built in rust.",
+ "link": "https://helix-editor.com/",
+ "winget": "Helix.Helix"
+ },
+ "heroiclauncher": {
+ "category": "Games",
+ "choco": "na",
+ "content": "Heroic Games Launcher",
+ "description": "Heroic Games Launcher is an open-source alternative game launcher for Epic Games Store.",
+ "link": "https://heroicgameslauncher.com/",
+ "winget": "HeroicGamesLauncher.HeroicGamesLauncher"
+ },
+ "hexchat": {
+ "category": "Communications",
+ "choco": "hexchat",
+ "content": "Hexchat",
+ "description": "HexChat is a free, open-source IRC (Internet Relay Chat) client with a graphical interface for easy communication.",
+ "link": "https://hexchat.github.io/",
+ "winget": "HexChat.HexChat"
+ },
+ "hwinfo": {
+ "category": "Utilities",
+ "choco": "hwinfo",
+ "content": "HWiNFO",
+ "description": "HWiNFO provides comprehensive hardware information and diagnostics for Windows.",
+ "link": "https://www.hwinfo.com/",
+ "winget": "REALiX.HWiNFO"
+ },
+ "hwmonitor": {
+ "category": "Utilities",
+ "choco": "hwmonitor",
+ "content": "HWMonitor",
+ "description": "HWMonitor is a hardware monitoring program that reads PC systems main health sensors.",
+ "link": "https://www.cpuid.com/softwares/hwmonitor.html",
+ "winget": "CPUID.HWMonitor"
+ },
+ "imageglass": {
+ "category": "Multimedia Tools",
+ "choco": "imageglass",
+ "content": "ImageGlass (Image Viewer)",
+ "description": "ImageGlass is a versatile image viewer with support for various image formats and a focus on simplicity and speed.",
+ "link": "https://imageglass.org/",
+ "winget": "DuongDieuPhap.ImageGlass"
+ },
+ "imgburn": {
+ "category": "Multimedia Tools",
+ "choco": "imgburn",
+ "content": "ImgBurn",
+ "description": "ImgBurn is a lightweight CD, DVD, HD-DVD, and Blu-ray burning application with advanced features for creating and burning disc images.",
+ "link": "http://www.imgburn.com/",
+ "winget": "LIGHTNINGUK.ImgBurn"
+ },
+ "inkscape": {
+ "category": "Multimedia Tools",
+ "choco": "inkscape",
+ "content": "Inkscape",
+ "description": "Inkscape is a powerful open-source vector graphics editor, suitable for tasks such as illustrations, icons, logos, and more.",
+ "link": "https://inkscape.org/",
+ "winget": "Inkscape.Inkscape"
+ },
+ "itch": {
+ "category": "Games",
+ "choco": "itch",
+ "content": "Itch.io",
+ "description": "Itch.io is a digital distribution platform for indie games and creative projects.",
+ "link": "https://itch.io/",
+ "winget": "ItchIo.Itch"
+ },
+ "itunes": {
+ "category": "Multimedia Tools",
+ "choco": "itunes",
+ "content": "iTunes",
+ "description": "iTunes is a media player, media library, and online radio broadcaster application developed by Apple Inc.",
+ "link": "https://www.apple.com/itunes/",
+ "winget": "Apple.iTunes"
+ },
+ "jami": {
+ "category": "Communications",
+ "choco": "jami",
+ "content": "Jami",
+ "description": "Jami is a secure and privacy-focused communication platform that offers audio and video calls, messaging, and file sharing.",
+ "link": "https://jami.net/",
+ "winget": "SFLinux.Jami"
+ },
+ "java8": {
+ "category": "Development",
+ "choco": "corretto8jdk",
+ "content": "Amazon Corretto 8 (LTS)",
+ "description": "Amazon Corretto is a no-cost, multiplatform, production-ready distribution of the Open Java Development Kit (OpenJDK).",
+ "link": "https://aws.amazon.com/corretto",
+ "winget": "Amazon.Corretto.8.JDK"
+ },
+ "java11": {
+ "category": "Development",
+ "choco": "corretto11jdk",
+ "content": "Amazon Corretto 11 (LTS)",
+ "description": "Amazon Corretto is a no-cost, multiplatform, production-ready distribution of the Open Java Development Kit (OpenJDK).",
+ "link": "https://aws.amazon.com/corretto",
+ "winget": "Amazon.Corretto.11.JDK"
+ },
+ "java17": {
+ "category": "Development",
+ "choco": "corretto17jdk",
+ "content": "Amazon Corretto 17 (LTS)",
+ "description": "Amazon Corretto is a no-cost, multiplatform, production-ready distribution of the Open Java Development Kit (OpenJDK).",
+ "link": "https://aws.amazon.com/corretto",
+ "winget": "Amazon.Corretto.17.JDK"
+ },
+ "java21": {
+ "category": "Development",
+ "choco": "corretto21jdk",
+ "content": "Amazon Corretto 21 (LTS)",
+ "description": "Amazon Corretto is a no-cost, multiplatform, production-ready distribution of the Open Java Development Kit (OpenJDK).",
+ "link": "https://aws.amazon.com/corretto",
+ "winget": "Amazon.Corretto.21.JDK"
+ },
+ "jdownloader": {
+ "category": "Utilities",
+ "choco": "jdownloader",
+ "content": "JDownloader",
+ "description": "JDownloader is a feature-rich download manager with support for various file hosting services.",
+ "link": "http://jdownloader.org/",
+ "winget": "AppWork.JDownloader"
+ },
+ "jellyfinmediaplayer": {
+ "category": "Multimedia Tools",
+ "choco": "jellyfin-media-player",
+ "content": "Jellyfin Media Player",
+ "description": "Jellyfin Media Player is a client application for the Jellyfin media server, providing access to your media library.",
+ "link": "https://github.com/jellyfin/jellyfin-media-player",
+ "winget": "Jellyfin.JellyfinMediaPlayer"
+ },
+ "jellyfinserver": {
+ "category": "Multimedia Tools",
+ "choco": "jellyfin",
+ "content": "Jellyfin Server",
+ "description": "Jellyfin Server is an open-source media server software, allowing you to organize and stream your media library.",
+ "link": "https://jellyfin.org/",
+ "winget": "Jellyfin.Server"
+ },
+ "jetbrains": {
+ "category": "Development",
+ "choco": "jetbrainstoolbox",
+ "content": "Jetbrains Toolbox",
+ "description": "Jetbrains Toolbox is a platform for easy installation and management of JetBrains developer tools.",
+ "link": "https://www.jetbrains.com/toolbox/",
+ "winget": "JetBrains.Toolbox"
+ },
+ "joplin": {
+ "category": "Document",
+ "choco": "joplin",
+ "content": "Joplin (FOSS Notes)",
+ "description": "Joplin is an open-source note-taking and to-do application with synchronization capabilities.",
+ "link": "https://joplinapp.org/",
+ "winget": "Joplin.Joplin"
+ },
+ "jpegview": {
+ "category": "Utilities",
+ "choco": "jpegview",
+ "content": "JPEG View",
+ "description": "JPEGView is a lean, fast and highly configurable viewer/editor for JPEG, BMP, PNG, WEBP, TGA, GIF, JXL, HEIC, HEIF, AVIF and TIFF images with a minimal GUI",
+ "link": "https://github.com/sylikc/jpegview",
+ "winget": "sylikc.JPEGView"
+ },
+ "kdeconnect": {
+ "category": "Utilities",
+ "choco": "kdeconnect-kde",
+ "content": "KDE Connect",
+ "description": "KDE Connect allows seamless integration between your KDE desktop and mobile devices.",
+ "link": "https://community.kde.org/KDEConnect",
+ "winget": "KDE.KDEConnect"
+ },
+ "kdenlive": {
+ "category": "Multimedia Tools",
+ "choco": "kdenlive",
+ "content": "Kdenlive (Video Editor)",
+ "description": "Kdenlive is an open-source video editing software with powerful features for creating and editing professional-quality videos.",
+ "link": "https://kdenlive.org/",
+ "winget": "KDE.Kdenlive"
+ },
+ "keepass": {
+ "category": "Utilities",
+ "choco": "keepassxc",
+ "content": "KeePassXC",
+ "description": "KeePassXC is a cross-platform, open-source password manager with strong encryption features.",
+ "link": "https://keepassxc.org/",
+ "winget": "KeePassXCTeam.KeePassXC"
+ },
+ "klite": {
+ "category": "Multimedia Tools",
+ "choco": "k-litecodecpack-standard",
+ "content": "K-Lite Codec Standard",
+ "description": "K-Lite Codec Pack Standard is a collection of audio and video codecs and related tools, providing essential components for media playback.",
+ "link": "https://www.codecguide.com/",
+ "winget": "CodecGuide.K-LiteCodecPack.Standard"
+ },
+ "kodi": {
+ "category": "Multimedia Tools",
+ "choco": "kodi",
+ "content": "Kodi Media Center",
+ "description": "Kodi is an open-source media center application that allows you to play and view most videos, music, podcasts, and other digital media files.",
+ "link": "https://kodi.tv/",
+ "winget": "XBMCFoundation.Kodi"
+ },
+ "krita": {
+ "category": "Multimedia Tools",
+ "choco": "krita",
+ "content": "Krita (Image Editor)",
+ "description": "Krita is a powerful open-source painting application. It is designed for concept artists, illustrators, matte and texture artists, and the VFX industry.",
+ "link": "https://krita.org/en/features/",
+ "winget": "KDE.Krita"
+ },
+ "lazygit": {
+ "category": "Development",
+ "choco": "lazygit",
+ "content": "Lazygit",
+ "description": "Simple terminal UI for git commands",
+ "link": "https://github.com/jesseduffield/lazygit/",
+ "winget": "JesseDuffield.lazygit"
+ },
+ "libreoffice": {
+ "category": "Document",
+ "choco": "libreoffice-fresh",
+ "content": "LibreOffice",
+ "description": "LibreOffice is a powerful and free office suite, compatible with other major office suites.",
+ "link": "https://www.libreoffice.org/",
+ "winget": "TheDocumentFoundation.LibreOffice"
+ },
+ "librewolf": {
+ "category": "Browsers",
+ "choco": "librewolf",
+ "content": "LibreWolf",
+ "description": "LibreWolf is a privacy-focused web browser based on Firefox, with additional privacy and security enhancements.",
+ "link": "https://librewolf-community.gitlab.io/",
+ "winget": "LibreWolf.LibreWolf"
+ },
+ "linkshellextension": {
+ "category": "Utilities",
+ "choco": "linkshellextension",
+ "content": "Link Shell extension",
+ "description": "Link Shell Extension (LSE) provides for the creation of Hardlinks, Junctions, Volume Mountpoints, Symbolic Links, a folder cloning process that utilises Hardlinks or Symbolic Links and a copy process taking care of Junctions, Symbolic Links, and Hardlinks. LSE, as its name implies is implemented as a Shell extension and is accessed from Windows Explorer, or similar file/folder managers.",
+ "link": "https://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html",
+ "winget": "HermannSchinagl.LinkShellExtension"
+ },
+ "linphone": {
+ "category": "Communications",
+ "choco": "linphone",
+ "content": "Linphone",
+ "description": "Linphone is an open-source voice over IP (VoIPservice that allows for audio and video calls, messaging, and more.",
+ "link": "https://www.linphone.org/",
+ "winget": "BelledonneCommunications.Linphone"
+ },
+ "livelywallpaper": {
+ "category": "Utilities",
+ "choco": "lively",
+ "content": "Lively Wallpaper",
+ "description": "Free and open-source software that allows users to set animated desktop wallpapers and screensavers.",
+ "link": "https://www.rocksdanister.com/lively/",
+ "winget": "rocksdanister.LivelyWallpaper"
+ },
+ "localsend": {
+ "category": "Utilities",
+ "choco": "localsend.install",
+ "content": "LocalSend",
+ "description": "An open source cross-platform alternative to AirDrop.",
+ "link": "https://localsend.org/",
+ "winget": "LocalSend.LocalSend"
+ },
+ "lockhunter": {
+ "category": "Utilities",
+ "choco": "lockhunter",
+ "content": "LockHunter",
+ "description": "LockHunter is a free tool to delete files blocked by something you do not know.",
+ "link": "https://lockhunter.com/",
+ "winget": "CrystalRich.LockHunter"
+ },
+ "logseq": {
+ "category": "Document",
+ "choco": "logseq",
+ "content": "Logseq",
+ "description": "Logseq is a versatile knowledge management and note-taking application designed for the digital thinker. With a focus on the interconnectedness of ideas, Logseq allows users to seamlessly organize their thoughts through a combination of hierarchical outlines and bi-directional linking. It supports both structured and unstructured content, enabling users to create a personalized knowledge graph that adapts to their evolving ideas and insights.",
+ "link": "https://logseq.com/",
+ "winget": "Logseq.Logseq"
+ },
+ "malwarebytes": {
+ "category": "Utilities",
+ "choco": "malwarebytes",
+ "content": "Malwarebytes",
+ "description": "Malwarebytes is an anti-malware software that provides real-time protection against threats.",
+ "link": "https://www.malwarebytes.com/",
+ "winget": "Malwarebytes.Malwarebytes"
+ },
+ "masscode": {
+ "category": "Document",
+ "choco": "na",
+ "content": "massCode (Snippet Manager)",
+ "description": "massCode is a fast and efficient open-source code snippet manager for developers.",
+ "link": "https://masscode.io/",
+ "winget": "antonreshetov.massCode"
+ },
+ "matrix": {
+ "category": "Communications",
+ "choco": "element-desktop",
+ "content": "Element",
+ "description": "Element is a client for Matrix—an open network for secure, decentralized communication.",
+ "link": "https://element.io/",
+ "winget": "Element.Element"
+ },
+ "meld": {
+ "category": "Utilities",
+ "choco": "meld",
+ "content": "Meld",
+ "description": "Meld is a visual diff and merge tool for files and directories.",
+ "link": "https://meldmerge.org/",
+ "winget": "Meld.Meld"
+ },
+ "ModernFlyouts": {
+ "category": "Multimedia Tools",
+ "choco": "na",
+ "content": "Modern Flyouts",
+ "description": "An open source, modern, Fluent Design-based set of flyouts for Windows.",
+ "link": "https://github.com/ModernFlyouts-Community/ModernFlyouts/",
+ "winget": "ModernFlyouts.ModernFlyouts"
+ },
+ "monitorian": {
+ "category": "Utilities",
+ "choco": "monitorian",
+ "content": "Monitorian",
+ "description": "Monitorian is a utility for adjusting monitor brightness and contrast on Windows.",
+ "link": "https://github.com/emoacht/Monitorian",
+ "winget": "emoacht.Monitorian"
+ },
+ "moonlight": {
+ "category": "Games",
+ "choco": "moonlight-qt",
+ "content": "Moonlight/GameStream Client",
+ "description": "Moonlight/GameStream Client allows you to stream PC games to other devices over your local network.",
+ "link": "https://moonlight-stream.org/",
+ "winget": "MoonlightGameStreamingProject.Moonlight"
+ },
+ "Motrix": {
+ "category": "Utilities",
+ "choco": "motrix",
+ "content": "Motrix Download Manager",
+ "description": "A full-featured download manager.",
+ "link": "https://motrix.app/",
+ "winget": "agalwood.Motrix"
+ },
+ "mpchc": {
+ "category": "Multimedia Tools",
+ "choco": "mpc-hc-clsid2",
+ "content": "Media Player Classic - Home Cinema",
+ "description": "Media Player Classic - Home Cinema (MPC-HC) is a free and open-source video and audio player for Windows. MPC-HC is based on the original Guliverkli project and contains many additional features and bug fixes.",
+ "link": "https://github.com/clsid2/mpc-hc/",
+ "winget": "clsid2.mpc-hc"
+ },
+ "mremoteng": {
+ "category": "Pro Tools",
+ "choco": "mremoteng",
+ "content": "mRemoteNG",
+ "description": "mRemoteNG is a free and open-source remote connections manager. It allows you to view and manage multiple remote sessions in a single interface.",
+ "link": "https://mremoteng.org/",
+ "winget": "mRemoteNG.mRemoteNG"
+ },
+ "msedgeredirect": {
+ "category": "Utilities",
+ "choco": "msedgeredirect",
+ "content": "MSEdgeRedirect",
+ "description": "A Tool to Redirect News, Search, Widgets, Weather, and More to Your Default Browser.",
+ "link": "https://github.com/rcmaehl/MSEdgeRedirect",
+ "winget": "rcmaehl.MSEdgeRedirect"
+ },
+ "msiafterburner": {
+ "category": "Utilities",
+ "choco": "msiafterburner",
+ "content": "MSI Afterburner",
+ "description": "MSI Afterburner is a graphics card overclocking utility with advanced features.",
+ "link": "https://www.msi.com/Landing/afterburner",
+ "winget": "Guru3D.Afterburner"
+ },
+ "mullvadvpn": {
+ "category": "Pro Tools",
+ "choco": "mullvad-app",
+ "content": "Mullvad VPN",
+ "description": "This is the VPN client software for the Mullvad VPN service.",
+ "link": "https://github.com/mullvad/mullvadvpn-app",
+ "winget": "MullvadVPN.MullvadVPN"
+ },
+ "BorderlessGaming": {
+ "category": "Utilities",
+ "choco": "borderlessgaming",
+ "content": "Borderless Gaming",
+ "description": "Play your favorite games in a borderless window; no more time consuming alt-tabs.",
+ "link": "https://github.com/Codeusa/Borderless-Gaming",
+ "winget": "Codeusa.BorderlessGaming"
+ },
+ "EqualizerAPO": {
+ "category": "Multimedia Tools",
+ "choco": "equalizerapo",
+ "content": "Equalizer APO",
+ "description": "Equalizer APO is a parametric / graphic equalizer for Windows.",
+ "link": "https://sourceforge.net/projects/equalizerapo",
+ "winget": "na"
+ },
+ "CompactGUI": {
+ "category": "Utilities",
+ "choco": "compactgui",
+ "content": "Compact GUI",
+ "description": "Transparently compress active games and programs using Windows 10/11 APIs",
+ "link": "https://github.com/IridiumIO/CompactGUI",
+ "winget": "IridiumIO.CompactGUI"
+ },
+ "ExifCleaner": {
+ "category": "Utilities",
+ "choco": "na",
+ "content": "ExifCleaner",
+ "description": "Desktop app to clean metadata from images, videos, PDFs, and other files.",
+ "link": "https://github.com/szTheory/exifcleaner",
+ "winget": "szTheory.exifcleaner"
+ },
+ "mullvadbrowser": {
+ "category": "Browsers",
+ "choco": "na",
+ "content": "Mullvad Browser",
+ "description": "Mullvad Browser is a privacy-focused web browser, developed in partnership with the Tor Project.",
+ "link": "https://mullvad.net/browser",
+ "winget": "MullvadVPN.MullvadBrowser"
+ },
+ "musescore": {
+ "category": "Multimedia Tools",
+ "choco": "musescore",
+ "content": "MuseScore",
+ "description": "Create, play back and print beautiful sheet music with free and easy to use music notation software MuseScore.",
+ "link": "https://musescore.org/en",
+ "winget": "Musescore.Musescore"
+ },
+ "musicbee": {
+ "category": "Multimedia Tools",
+ "choco": "musicbee",
+ "content": "MusicBee (Music Player)",
+ "description": "MusicBee is a customizable music player with support for various audio formats. It includes features like an integrated search function, tag editing, and more.",
+ "link": "https://getmusicbee.com/",
+ "winget": "MusicBee.MusicBee"
+ },
+ "mp3tag": {
+ "category": "Multimedia Tools",
+ "choco": "mp3tag",
+ "content": "Mp3tag (Metadata Audio Editor)",
+ "description": "Mp3tag is a powerful and yet easy-to-use tool to edit metadata of common audio formats.",
+ "link": "https://www.mp3tag.de/en/",
+ "winget": "Mp3tag.Mp3tag"
+ },
+ "tagscanner": {
+ "category": "Multimedia Tools",
+ "choco": "tagscanner",
+ "content": "TagScanner (Tag Scanner)",
+ "description": "TagScanner is a powerful tool for organizing and managing your music collection",
+ "link": "https://www.xdlab.ru/en/",
+ "winget": "SergeySerkov.TagScanner"
+ },
+ "nanazip": {
+ "category": "Utilities",
+ "choco": "nanazip",
+ "content": "NanaZip",
+ "description": "NanaZip is a fast and efficient file compression and decompression tool.",
+ "link": "https://github.com/M2Team/NanaZip",
+ "winget": "M2Team.NanaZip"
+ },
+ "netbird": {
+ "category": "Pro Tools",
+ "choco": "netbird",
+ "content": "NetBird",
+ "description": "NetBird is a Open Source alternative comparable to TailScale that can be connected to a selfhosted Server.",
+ "link": "https://netbird.io/",
+ "winget": "netbird"
+ },
+ "naps2": {
+ "category": "Document",
+ "choco": "naps2",
+ "content": "NAPS2 (Document Scanner)",
+ "description": "NAPS2 is a document scanning application that simplifies the process of creating electronic documents.",
+ "link": "https://www.naps2.com/",
+ "winget": "Cyanfish.NAPS2"
+ },
+ "neofetchwin": {
+ "category": "Utilities",
+ "choco": "na",
+ "content": "Neofetch",
+ "description": "Neofetch is a command-line utility for displaying system information in a visually appealing way.",
+ "link": "https://github.com/nepnep39/neofetch-win",
+ "winget": "nepnep.neofetch-win"
+ },
+ "neovim": {
+ "category": "Development",
+ "choco": "neovim",
+ "content": "Neovim",
+ "description": "Neovim is a highly extensible text editor and an improvement over the original Vim editor.",
+ "link": "https://neovim.io/",
+ "winget": "Neovim.Neovim"
+ },
+ "nextclouddesktop": {
+ "category": "Utilities",
+ "choco": "nextcloud-client",
+ "content": "Nextcloud Desktop",
+ "description": "Nextcloud Desktop is the official desktop client for the Nextcloud file synchronization and sharing platform.",
+ "link": "https://nextcloud.com/install/#install-clients",
+ "winget": "Nextcloud.NextcloudDesktop"
+ },
+ "nglide": {
+ "category": "Multimedia Tools",
+ "choco": "na",
+ "content": "nGlide (3dfx compatibility)",
+ "description": "nGlide is a 3Dfx Voodoo Glide wrapper. It allows you to play games that use Glide API on modern graphics cards without the need for a 3Dfx Voodoo graphics card.",
+ "link": "http://www.zeus-software.com/downloads/nglide",
+ "winget": "ZeusSoftware.nGlide"
+ },
+ "nmap": {
+ "category": "Pro Tools",
+ "choco": "nmap",
+ "content": "Nmap",
+ "description": "Nmap (Network Mapper) is an open-source tool for network exploration and security auditing. It discovers devices on a network and provides information about their ports and services.",
+ "link": "https://nmap.org/",
+ "winget": "Insecure.Nmap"
+ },
+ "nodejs": {
+ "category": "Development",
+ "choco": "nodejs",
+ "content": "NodeJS",
+ "description": "NodeJS is a JavaScript runtime built on Chrome's V8 JavaScript engine for building server-side and networking applications.",
+ "link": "https://nodejs.org/",
+ "winget": "OpenJS.NodeJS"
+ },
+ "nodejslts": {
+ "category": "Development",
+ "choco": "nodejs-lts",
+ "content": "NodeJS LTS",
+ "description": "NodeJS LTS provides Long-Term Support releases for stable and reliable server-side JavaScript development.",
+ "link": "https://nodejs.org/",
+ "winget": "OpenJS.NodeJS.LTS"
+ },
+ "nomacs": {
+ "category": "Multimedia Tools",
+ "choco": "nomacs",
+ "content": "Nomacs (Image viewer)",
+ "description": "Nomacs is a free, open-source image viewer that supports multiple platforms. It features basic image editing capabilities and supports a variety of image formats.",
+ "link": "https://nomacs.org/",
+ "winget": "nomacs.nomacs"
+ },
+ "notepadplus": {
+ "category": "Document",
+ "choco": "notepadplusplus",
+ "content": "Notepad++",
+ "description": "Notepad++ is a free, open-source code editor and Notepad replacement with support for multiple languages.",
+ "link": "https://notepad-plus-plus.org/",
+ "winget": "Notepad++.Notepad++"
+ },
+ "nuget": {
+ "category": "Microsoft Tools",
+ "choco": "nuget.commandline",
+ "content": "NuGet",
+ "description": "NuGet is a package manager for the .NET framework, enabling developers to manage and share libraries in their .NET applications.",
+ "link": "https://www.nuget.org/",
+ "winget": "Microsoft.NuGet"
+ },
+ "nushell": {
+ "category": "Utilities",
+ "choco": "nushell",
+ "content": "Nushell",
+ "description": "Nushell is a new shell that takes advantage of modern hardware and systems to provide a powerful, expressive, and fast experience.",
+ "link": "https://www.nushell.sh/",
+ "winget": "Nushell.Nushell"
+ },
+ "nvclean": {
+ "category": "Utilities",
+ "choco": "na",
+ "content": "NVCleanstall",
+ "description": "NVCleanstall is a tool designed to customize NVIDIA driver installations, allowing advanced users to control more aspects of the installation process.",
+ "link": "https://www.techpowerup.com/nvcleanstall/",
+ "winget": "TechPowerUp.NVCleanstall"
+ },
+ "nvm": {
+ "category": "Development",
+ "choco": "nvm",
+ "content": "Node Version Manager",
+ "description": "Node Version Manager (NVM) for Windows allows you to easily switch between multiple Node.js versions.",
+ "link": "https://github.com/coreybutler/nvm-windows",
+ "winget": "CoreyButler.NVMforWindows"
+ },
+ "obs": {
+ "category": "Multimedia Tools",
+ "choco": "obs-studio",
+ "content": "OBS Studio",
+ "description": "OBS Studio is a free and open-source software for video recording and live streaming. It supports real-time video/audio capturing and mixing, making it popular among content creators.",
+ "link": "https://obsproject.com/",
+ "winget": "OBSProject.OBSStudio"
+ },
+ "obsidian": {
+ "category": "Document",
+ "choco": "obsidian",
+ "content": "Obsidian",
+ "description": "Obsidian is a powerful note-taking and knowledge management application.",
+ "link": "https://obsidian.md/",
+ "winget": "Obsidian.Obsidian"
+ },
+ "okular": {
+ "category": "Document",
+ "choco": "okular",
+ "content": "Okular",
+ "description": "Okular is a versatile document viewer with advanced features.",
+ "link": "https://okular.kde.org/",
+ "winget": "KDE.Okular"
+ },
+ "onedrive": {
+ "category": "Microsoft Tools",
+ "choco": "onedrive",
+ "content": "OneDrive",
+ "description": "OneDrive is a cloud storage service provided by Microsoft, allowing users to store and share files securely across devices.",
+ "link": "https://onedrive.live.com/",
+ "winget": "Microsoft.OneDrive"
+ },
+ "onlyoffice": {
+ "category": "Document",
+ "choco": "onlyoffice",
+ "content": "ONLYOffice Desktop",
+ "description": "ONLYOffice Desktop is a comprehensive office suite for document editing and collaboration.",
+ "link": "https://www.onlyoffice.com/desktop.aspx",
+ "winget": "ONLYOFFICE.DesktopEditors"
+ },
+ "OPAutoClicker": {
+ "category": "Utilities",
+ "choco": "autoclicker",
+ "content": "OPAutoClicker",
+ "description": "A full-fledged autoclicker with two modes of autoclicking, at your dynamic cursor location or at a prespecified location.",
+ "link": "https://www.opautoclicker.com",
+ "winget": "OPAutoClicker.OPAutoClicker"
+ },
+ "openhashtab": {
+ "category": "Utilities",
+ "choco": "openhashtab",
+ "content": "OpenHashTab",
+ "description": "OpenHashTab is a shell extension for conveniently calculating and checking file hashes from file properties.",
+ "link": "https://github.com/namazso/OpenHashTab/",
+ "winget": "namazso.OpenHashTab"
+ },
+ "openoffice": {
+ "category": "Document",
+ "choco": "openoffice",
+ "content": "Apache OpenOffice",
+ "description": "Apache OpenOffice is an open-source office software suite for word processing, spreadsheets, presentations, and more.",
+ "link": "https://www.openoffice.org/",
+ "winget": "Apache.OpenOffice"
+ },
+ "openrgb": {
+ "category": "Utilities",
+ "choco": "openrgb",
+ "content": "OpenRGB",
+ "description": "OpenRGB is an open-source RGB lighting control software designed to manage and control RGB lighting for various components and peripherals.",
+ "link": "https://openrgb.org/",
+ "winget": "CalcProgrammer1.OpenRGB"
+ },
+ "openscad": {
+ "category": "Multimedia Tools",
+ "choco": "openscad",
+ "content": "OpenSCAD",
+ "description": "OpenSCAD is a free and open-source script-based 3D CAD modeler. It is especially useful for creating parametric designs for 3D printing.",
+ "link": "https://www.openscad.org/",
+ "winget": "OpenSCAD.OpenSCAD"
+ },
+ "openshell": {
+ "category": "Utilities",
+ "choco": "open-shell",
+ "content": "Open Shell (Start Menu)",
+ "description": "Open Shell is a Windows Start Menu replacement with enhanced functionality and customization options.",
+ "link": "https://github.com/Open-Shell/Open-Shell-Menu",
+ "winget": "Open-Shell.Open-Shell-Menu"
+ },
+ "OpenVPN": {
+ "category": "Pro Tools",
+ "choco": "openvpn-connect",
+ "content": "OpenVPN Connect",
+ "description": "OpenVPN Connect is an open-source VPN client that allows you to connect securely to a VPN server. It provides a secure and encrypted connection for protecting your online privacy.",
+ "link": "https://openvpn.net/",
+ "winget": "OpenVPNTechnologies.OpenVPNConnect"
+ },
+ "OVirtualBox": {
+ "category": "Utilities",
+ "choco": "virtualbox",
+ "content": "Oracle VirtualBox",
+ "description": "Oracle VirtualBox is a powerful and free open-source virtualization tool for x86 and AMD64/Intel64 architectures.",
+ "link": "https://www.virtualbox.org/",
+ "winget": "Oracle.VirtualBox"
+ },
+ "ownclouddesktop": {
+ "category": "Utilities",
+ "choco": "owncloud-client",
+ "content": "ownCloud Desktop",
+ "description": "ownCloud Desktop is the official desktop client for the ownCloud file synchronization and sharing platform.",
+ "link": "https://owncloud.com/desktop-app/",
+ "winget": "ownCloud.ownCloudDesktop"
+ },
+ "Paintdotnet": {
+ "category": "Multimedia Tools",
+ "choco": "paint.net",
+ "content": "Paint.NET",
+ "description": "Paint.NET is a free image and photo editing software for Windows. It features an intuitive user interface and supports a wide range of powerful editing tools.",
+ "link": "https://www.getpaint.net/",
+ "winget": "dotPDN.PaintDotNet"
+ },
+ "parsec": {
+ "category": "Utilities",
+ "choco": "parsec",
+ "content": "Parsec",
+ "description": "Parsec is a low-latency, high-quality remote desktop sharing application for collaborating and gaming across devices.",
+ "link": "https://parsec.app/",
+ "winget": "Parsec.Parsec"
+ },
+ "pdf24creator": {
+ "category": "Document",
+ "choco": "pdf24",
+ "content": "PDF24 creator",
+ "description": "Free and easy-to-use online/desktop PDF tools that make you more productive",
+ "link": "https://tools.pdf24.org/en/",
+ "winget": "geeksoftwareGmbH.PDF24Creator"
+ },
+ "pdfsam": {
+ "category": "Document",
+ "choco": "pdfsam",
+ "content": "PDFsam Basic",
+ "description": "PDFsam Basic is a free and open-source tool for splitting, merging, and rotating PDF files.",
+ "link": "https://pdfsam.org/",
+ "winget": "PDFsam.PDFsam"
+ },
+ "peazip": {
+ "category": "Utilities",
+ "choco": "peazip",
+ "content": "PeaZip",
+ "description": "PeaZip is a free, open-source file archiver utility that supports multiple archive formats and provides encryption features.",
+ "link": "https://peazip.github.io/",
+ "winget": "Giorgiotani.Peazip"
+ },
+ "piimager": {
+ "category": "Utilities",
+ "choco": "rpi-imager",
+ "content": "Raspberry Pi Imager",
+ "description": "Raspberry Pi Imager is a utility for writing operating system images to SD cards for Raspberry Pi devices.",
+ "link": "https://www.raspberrypi.com/software/",
+ "winget": "RaspberryPiFoundation.RaspberryPiImager"
+ },
+ "playnite": {
+ "category": "Games",
+ "choco": "playnite",
+ "content": "Playnite",
+ "description": "Playnite is an open-source video game library manager with one simple goal: To provide a unified interface for all of your games.",
+ "link": "https://playnite.link/",
+ "winget": "Playnite.Playnite"
+ },
+ "plex": {
+ "category": "Multimedia Tools",
+ "choco": "plexmediaserver",
+ "content": "Plex Media Server",
+ "description": "Plex Media Server is a media server software that allows you to organize and stream your media library. It supports various media formats and offers a wide range of features.",
+ "link": "https://www.plex.tv/your-media/",
+ "winget": "Plex.PlexMediaServer"
+ },
+ "plexdesktop": {
+ "category": "Multimedia Tools",
+ "choco": "plex",
+ "content": "Plex Desktop",
+ "description": "Plex Desktop for Windows is the front end for Plex Media Server.",
+ "link": "https://www.plex.tv",
+ "winget": "Plex.Plex"
+ },
+ "Portmaster": {
+ "category": "Pro Tools",
+ "choco": "portmaster",
+ "content": "Portmaster",
+ "description": "Portmaster is a free and open-source application that puts you back in charge over all your computers network connections.",
+ "link": "https://safing.io/",
+ "winget": "Safing.Portmaster"
+ },
+ "posh": {
+ "category": "Development",
+ "choco": "oh-my-posh",
+ "content": "Oh My Posh (Prompt)",
+ "description": "Oh My Posh is a cross-platform prompt theme engine for any shell.",
+ "link": "https://ohmyposh.dev/",
+ "winget": "JanDeDobbeleer.OhMyPosh"
+ },
+ "postman": {
+ "category": "Development",
+ "choco": "postman",
+ "content": "Postman",
+ "description": "Postman is a collaboration platform for API development that simplifies the process of developing APIs.",
+ "link": "https://www.postman.com/",
+ "winget": "Postman.Postman"
+ },
+ "powerautomate": {
+ "category": "Microsoft Tools",
+ "choco": "powerautomatedesktop",
+ "content": "Power Automate",
+ "description": "Using Power Automate Desktop you can automate tasks on the desktop as well as the Web.",
+ "link": "https://www.microsoft.com/en-us/power-platform/products/power-automate",
+ "winget": "Microsoft.PowerAutomateDesktop"
+ },
+ "powerbi": {
+ "category": "Microsoft Tools",
+ "choco": "powerbi",
+ "content": "Power BI",
+ "description": "Create stunning reports and visualizations with Power BI Desktop. It puts visual analytics at your fingertips with intuitive report authoring. Drag-and-drop to place content exactly where you want it on the flexible and fluid canvas. Quickly discover patterns as you explore a single unified view of linked, interactive visualizations.",
+ "link": "https://www.microsoft.com/en-us/power-platform/products/power-bi/",
+ "winget": "Microsoft.PowerBI"
+ },
+ "powershell": {
+ "category": "Microsoft Tools",
+ "choco": "powershell-core",
+ "content": "PowerShell",
+ "description": "PowerShell is a task automation framework and scripting language designed for system administrators, offering powerful command-line capabilities.",
+ "link": "https://github.com/PowerShell/PowerShell",
+ "winget": "Microsoft.PowerShell"
+ },
+ "powertoys": {
+ "category": "Microsoft Tools",
+ "choco": "powertoys",
+ "content": "PowerToys",
+ "description": "PowerToys is a set of utilities for power users to enhance productivity, featuring tools like FancyZones, PowerRename, and more.",
+ "link": "https://github.com/microsoft/PowerToys",
+ "winget": "Microsoft.PowerToys"
+ },
+ "prismlauncher": {
+ "category": "Games",
+ "choco": "prismlauncher",
+ "content": "Prism Launcher",
+ "description": "Prism Launcher is a game launcher and manager designed to provide a clean and intuitive interface for organizing and launching your games.",
+ "link": "https://prismlauncher.org/",
+ "winget": "PrismLauncher.PrismLauncher"
+ },
+ "processlasso": {
+ "category": "Utilities",
+ "choco": "plasso",
+ "content": "Process Lasso",
+ "description": "Process Lasso is a system optimization and automation tool that improves system responsiveness and stability by adjusting process priorities and CPU affinities.",
+ "link": "https://bitsum.com/",
+ "winget": "BitSum.ProcessLasso"
+ },
+ "spotify": {
+ "category": "Multimedia Tools",
+ "choco": "spotify",
+ "content": "Spotify",
+ "description": "Spotify is a digital music service that gives you access to millions of songs, podcasts, and videos from artists all over the world.",
+ "link": "https://www.spotify.com/",
+ "winget": "Spotify.Spotify"
+ },
+ "processmonitor": {
+ "category": "Microsoft Tools",
+ "choco": "procexp",
+ "content": "SysInternals Process Monitor",
+ "description": "SysInternals Process Monitor is an advanced monitoring tool that shows real-time file system, registry, and process/thread activity.",
+ "link": "https://docs.microsoft.com/en-us/sysinternals/downloads/procmon",
+ "winget": "Microsoft.Sysinternals.ProcessMonitor"
+ },
+ "orcaslicer": {
+ "category": "Utilities",
+ "choco": "orcaslicer",
+ "content": "OrcaSlicer",
+ "description": "G-code generator for 3D printers (Bambu, Prusa, Voron, VzBot, RatRig, Creality, etc.)",
+ "link": "https://github.com/SoftFever/OrcaSlicer",
+ "winget": "SoftFever.OrcaSlicer"
+ },
+ "prucaslicer": {
+ "category": "Utilities",
+ "choco": "prusaslicer",
+ "content": "PrusaSlicer",
+ "description": "PrusaSlicer is a powerful and easy-to-use slicing software for 3D printing with Prusa 3D printers.",
+ "link": "https://www.prusa3d.com/prusaslicer/",
+ "winget": "Prusa3d.PrusaSlicer"
+ },
+ "psremoteplay": {
+ "category": "Games",
+ "choco": "ps-remote-play",
+ "content": "PS Remote Play",
+ "description": "PS Remote Play is a free application that allows you to stream games from your PlayStation console to a PC or mobile device.",
+ "link": "https://remoteplay.dl.playstation.net/remoteplay/lang/gb/",
+ "winget": "PlayStation.PSRemotePlay"
+ },
+ "putty": {
+ "category": "Pro Tools",
+ "choco": "putty",
+ "content": "PuTTY",
+ "description": "PuTTY is a free and open-source terminal emulator, serial console, and network file transfer application. It supports various network protocols such as SSH, Telnet, and SCP.",
+ "link": "https://www.chiark.greenend.org.uk/~sgtatham/putty/",
+ "winget": "PuTTY.PuTTY"
+ },
+ "python3": {
+ "category": "Development",
+ "choco": "python",
+ "content": "Python3",
+ "description": "Python is a versatile programming language used for web development, data analysis, artificial intelligence, and more.",
+ "link": "https://www.python.org/",
+ "winget": "Python.Python.3.12"
+ },
+ "qbittorrent": {
+ "category": "Utilities",
+ "choco": "qbittorrent",
+ "content": "qBittorrent",
+ "description": "qBittorrent is a free and open-source BitTorrent client that aims to provide a feature-rich and lightweight alternative to other torrent clients.",
+ "link": "https://www.qbittorrent.org/",
+ "winget": "qBittorrent.qBittorrent"
+ },
+ "transmission": {
+ "category": "Utilities",
+ "choco": "transmission",
+ "content": "Transmission",
+ "description": "Transmission is a cross-platform BitTorrent client that is open source, easy, powerful, and lean.",
+ "link": "https://transmissionbt.com/",
+ "winget": "Transmission.Transmission"
+ },
+ "tixati": {
+ "category": "Utilities",
+ "choco": "tixati.portable",
+ "content": "Tixati",
+ "description": "Tixati is a cross-platform BitTorrent client written in C++ that has been designed to be light on system resources.",
+ "link": "https://www.tixati.com/",
+ "winget": "Tixati.Tixati.Portable"
+ },
+ "qtox": {
+ "category": "Communications",
+ "choco": "qtox",
+ "content": "QTox",
+ "description": "QTox is a free and open-source messaging app that prioritizes user privacy and security in its design.",
+ "link": "https://qtox.github.io/",
+ "winget": "Tox.qTox"
+ },
+ "quicklook": {
+ "category": "Utilities",
+ "choco": "quicklook",
+ "content": "Quicklook",
+ "description": "Bring macOS “Quick Look” feature to Windows",
+ "link": "https://github.com/QL-Win/QuickLook",
+ "winget": "QL-Win.QuickLook"
+ },
+ "rainmeter": {
+ "category": "Utilities",
+ "choco": "na",
+ "content": "Rainmeter",
+ "description": "Rainmeter is a desktop customization tool that allows you to create and share customizable skins for your desktop.",
+ "link": "https://www.rainmeter.net/",
+ "winget": "Rainmeter.Rainmeter"
+ },
+ "revo": {
+ "category": "Utilities",
+ "choco": "revo-uninstaller",
+ "content": "Revo Uninstaller",
+ "description": "Revo Uninstaller is an advanced uninstaller tool that helps you remove unwanted software and clean up your system.",
+ "link": "https://www.revouninstaller.com/",
+ "winget": "RevoUninstaller.RevoUninstaller"
+ },
+ "WiseProgramUninstaller": {
+ "category": "Utilities",
+ "choco": "na",
+ "content": "Wise Program Uninstaller (WiseCleaner)",
+ "description": "Wise Program Uninstaller is the perfect solution for uninstalling Windows programs, allowing you to uninstall applications quickly and completely using its simple and user-friendly interface.",
+ "link": "https://www.wisecleaner.com/wise-program-uninstaller.html",
+ "winget": "WiseCleaner.WiseProgramUninstaller"
+ },
+ "revolt": {
+ "category": "Communications",
+ "choco": "na",
+ "content": "Revolt",
+ "description": "Find your community, connect with the world. Revolt is one of the best ways to stay connected with your friends and community without sacrificing any usability.",
+ "link": "https://revolt.chat/",
+ "winget": "Revolt.RevoltDesktop"
+ },
+ "ripgrep": {
+ "category": "Utilities",
+ "choco": "ripgrep",
+ "content": "Ripgrep",
+ "description": "Fast and powerful commandline search tool",
+ "link": "https://github.com/BurntSushi/ripgrep/",
+ "winget": "BurntSushi.ripgrep.MSVC"
+ },
+ "rufus": {
+ "category": "Utilities",
+ "choco": "rufus",
+ "content": "Rufus Imager",
+ "description": "Rufus is a utility that helps format and create bootable USB drives, such as USB keys or pen drives.",
+ "link": "https://rufus.ie/",
+ "winget": "Rufus.Rufus"
+ },
+ "rustdesk": {
+ "category": "Pro Tools",
+ "choco": "rustdesk.portable",
+ "content": "RustDesk",
+ "description": "RustDesk is a free and open-source remote desktop application. It provides a secure way to connect to remote machines and access desktop environments.",
+ "link": "https://rustdesk.com/",
+ "winget": "RustDesk.RustDesk"
+ },
+ "rustlang": {
+ "category": "Development",
+ "choco": "rust",
+ "content": "Rust",
+ "description": "Rust is a programming language designed for safety and performance, particularly focused on systems programming.",
+ "link": "https://www.rust-lang.org/",
+ "winget": "Rustlang.Rust.MSVC"
+ },
+ "sagethumbs": {
+ "category": "Utilities",
+ "choco": "sagethumbs",
+ "content": "SageThumbs",
+ "description": "Provides support for thumbnails in Explorer with more formats.",
+ "link": "https://sagethumbs.en.lo4d.com/windows",
+ "winget": "CherubicSoftware.SageThumbs"
+ },
+ "samsungmagician": {
+ "category": "Utilities",
+ "choco": "samsung-magician",
+ "content": "Samsung Magician",
+ "description": "Samsung Magician is a utility for managing and optimizing Samsung SSDs.",
+ "link": "https://semiconductor.samsung.com/consumer-storage/magician/",
+ "winget": "Samsung.SamsungMagician"
+ },
+ "sandboxie": {
+ "category": "Utilities",
+ "choco": "sandboxie",
+ "content": "Sandboxie Plus",
+ "description": "Sandboxie Plus is a sandbox-based isolation program that provides enhanced security by running applications in an isolated environment.",
+ "link": "https://github.com/sandboxie-plus/Sandboxie",
+ "winget": "Sandboxie.Plus"
+ },
+ "sdio": {
+ "category": "Utilities",
+ "choco": "sdio",
+ "content": "Snappy Driver Installer Origin",
+ "description": "Snappy Driver Installer Origin is a free and open-source driver updater with a vast driver database for Windows.",
+ "link": "https://sourceforge.net/projects/snappy-driver-installer-origin",
+ "winget": "GlennDelahoy.SnappyDriverInstallerOrigin"
+ },
+ "session": {
+ "category": "Communications",
+ "choco": "session",
+ "content": "Session",
+ "description": "Session is a private and secure messaging app built on a decentralized network for user privacy and data protection.",
+ "link": "https://getsession.org/",
+ "winget": "Oxen.Session"
+ },
+ "sharex": {
+ "category": "Multimedia Tools",
+ "choco": "sharex",
+ "content": "ShareX (Screenshots)",
+ "description": "ShareX is a free and open-source screen capture and file sharing tool. It supports various capture methods and offers advanced features for editing and sharing screenshots.",
+ "link": "https://getsharex.com/",
+ "winget": "ShareX.ShareX"
+ },
+ "nilesoftShell": {
+ "category": "Utilities",
+ "choco": "nilesoft-shell",
+ "content": "Nilesoft Shell",
+ "description": "Shell is an expanded context menu tool that adds extra functionality and customization options to the Windows context menu.",
+ "link": "https://nilesoft.org/",
+ "winget": "Nilesoft.Shell"
+ },
+ "sidequest": {
+ "category": "Games",
+ "choco": "sidequest",
+ "content": "SideQuestVR",
+ "description": "SideQuestVR is a community-driven platform that enables users to discover, install, and manage virtual reality content on Oculus Quest devices.",
+ "link": "https://sidequestvr.com/",
+ "winget": "SideQuestVR.SideQuest"
+ },
+ "signal": {
+ "category": "Communications",
+ "choco": "signal",
+ "content": "Signal",
+ "description": "Signal is a privacy-focused messaging app that offers end-to-end encryption for secure and private communication.",
+ "link": "https://signal.org/",
+ "winget": "OpenWhisperSystems.Signal"
+ },
+ "signalrgb": {
+ "category": "Utilities",
+ "choco": "na",
+ "content": "SignalRGB",
+ "description": "SignalRGB lets you control and sync your favorite RGB devices with one free application.",
+ "link": "https://www.signalrgb.com/",
+ "winget": "WhirlwindFX.SignalRgb"
+ },
+ "simplenote": {
+ "category": "Document",
+ "choco": "simplenote",
+ "content": "simplenote",
+ "description": "Simplenote is an easy way to keep notes, lists, ideas and more.",
+ "link": "https://simplenote.com/",
+ "winget": "Automattic.Simplenote"
+ },
+ "simplewall": {
+ "category": "Pro Tools",
+ "choco": "simplewall",
+ "content": "Simplewall",
+ "description": "Simplewall is a free and open-source firewall application for Windows. It allows users to control and manage the inbound and outbound network traffic of applications.",
+ "link": "https://github.com/henrypp/simplewall",
+ "winget": "Henry++.simplewall"
+ },
+ "skype": {
+ "category": "Communications",
+ "choco": "skype",
+ "content": "Skype",
+ "description": "Skype is a widely used communication platform offering video calls, voice calls, and instant messaging services.",
+ "link": "https://www.skype.com/",
+ "winget": "Microsoft.Skype"
+ },
+ "slack": {
+ "category": "Communications",
+ "choco": "slack",
+ "content": "Slack",
+ "description": "Slack is a collaboration hub that connects teams and facilitates communication through channels, messaging, and file sharing.",
+ "link": "https://slack.com/",
+ "winget": "SlackTechnologies.Slack"
+ },
+ "spacedrive": {
+ "category": "Utilities",
+ "choco": "na",
+ "content": "Spacedrive File Manager",
+ "description": "Spacedrive is a file manager that offers cloud storage integration and file synchronization across devices.",
+ "link": "https://www.spacedrive.com/",
+ "winget": "spacedrive.Spacedrive"
+ },
+ "spacesniffer": {
+ "category": "Utilities",
+ "choco": "spacesniffer",
+ "content": "SpaceSniffer",
+ "description": "A tool application that lets you understand how folders and files are structured on your disks",
+ "link": "http://www.uderzo.it/main_products/space_sniffer/",
+ "winget": "UderzoSoftware.SpaceSniffer"
+ },
+ "spotube": {
+ "category": "Multimedia Tools",
+ "choco": "spotube",
+ "content": "Spotube",
+ "description": "Open source Spotify client that doesn't require Premium nor uses Electron! Available for both desktop & mobile! ",
+ "link": "https://github.com/KRTirtho/spotube",
+ "winget": "KRTirtho.Spotube"
+ },
+ "starship": {
+ "category": "Development",
+ "choco": "starship",
+ "content": "Starship (Shell Prompt)",
+ "description": "Starship is a minimal, fast, and customizable prompt for any shell.",
+ "link": "https://starship.rs/",
+ "winget": "starship"
+ },
+ "steam": {
+ "category": "Games",
+ "choco": "steam-client",
+ "content": "Steam",
+ "description": "Steam is a digital distribution platform for purchasing and playing video games, offering multiplayer gaming, video streaming, and more.",
+ "link": "https://store.steampowered.com/about/",
+ "winget": "Valve.Steam"
+ },
+ "strawberry": {
+ "category": "Multimedia Tools",
+ "choco": "strawberrymusicplayer",
+ "content": "Strawberry (Music Player)",
+ "description": "Strawberry is an open-source music player that focuses on music collection management and audio quality. It supports various audio formats and features a clean user interface.",
+ "link": "https://www.strawberrymusicplayer.org/",
+ "winget": "StrawberryMusicPlayer.Strawberry"
+ },
+ "stremio": {
+ "winget": "Stremio.Stremio",
+ "choco": "stremio",
+ "category": "Multimedia Tools",
+ "content": "Stremio",
+ "link": "https://www.stremio.com/",
+ "description": "Stremio is a media center application that allows users to organize and stream their favorite movies, TV shows, and video content."
+ },
+ "sublimemerge": {
+ "category": "Development",
+ "choco": "sublimemerge",
+ "content": "Sublime Merge",
+ "description": "Sublime Merge is a Git client with advanced features and a beautiful interface.",
+ "link": "https://www.sublimemerge.com/",
+ "winget": "SublimeHQ.SublimeMerge"
+ },
+ "sublimetext": {
+ "category": "Development",
+ "choco": "sublimetext4",
+ "content": "Sublime Text",
+ "description": "Sublime Text is a sophisticated text editor for code, markup, and prose.",
+ "link": "https://www.sublimetext.com/",
+ "winget": "SublimeHQ.SublimeText.4"
+ },
+ "sumatra": {
+ "category": "Document",
+ "choco": "sumatrapdf",
+ "content": "Sumatra PDF",
+ "description": "Sumatra PDF is a lightweight and fast PDF viewer with minimalistic design.",
+ "link": "https://www.sumatrapdfreader.org/free-pdf-reader.html",
+ "winget": "SumatraPDF.SumatraPDF"
+ },
+ "pdfgear": {
+ "category": "Document",
+ "choco": "na",
+ "content": "PDFgear",
+ "description": "PDFgear is a piece of full-featured PDF management software for Windows, Mac, and mobile, and it's completely free to use.",
+ "link": "https://www.pdfgear.com/",
+ "winget": "PDFgear.PDFgear"
+ },
+ "sunshine": {
+ "category": "Games",
+ "choco": "sunshine",
+ "content": "Sunshine/GameStream Server",
+ "description": "Sunshine is a GameStream server that allows you to remotely play PC games on Android devices, offering low-latency streaming.",
+ "link": "https://github.com/LizardByte/Sunshine",
+ "winget": "LizardByte.Sunshine"
+ },
+ "superf4": {
+ "category": "Utilities",
+ "choco": "superf4",
+ "content": "SuperF4",
+ "description": "SuperF4 is a utility that allows you to terminate programs instantly by pressing a customizable hotkey.",
+ "link": "https://stefansundin.github.io/superf4/",
+ "winget": "StefanSundin.Superf4"
+ },
+ "swift": {
+ "category": "Development",
+ "choco": "na",
+ "content": "Swift toolchain",
+ "description": "Swift is a general-purpose programming language that's approachable for newcomers and powerful for experts.",
+ "link": "https://www.swift.org/",
+ "winget": "Swift.Toolchain"
+ },
+ "synctrayzor": {
+ "category": "Utilities",
+ "choco": "synctrayzor",
+ "content": "SyncTrayzor",
+ "description": "Windows tray utility / filesystem watcher / launcher for Syncthing",
+ "link": "https://github.com/canton7/SyncTrayzor/",
+ "winget": "SyncTrayzor.SyncTrayzor"
+ },
+ "sqlmanagementstudio": {
+ "category": "Microsoft Tools",
+ "choco": "sql-server-management-studio",
+ "content": "Microsoft SQL Server Management Studio",
+ "description": "SQL Server Management Studio (SSMS) is an integrated environment for managing any SQL infrastructure, from SQL Server to Azure SQL Database. SSMS provides tools to configure, monitor, and administer instances of SQL Server and databases.",
+ "link": "https://learn.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver16",
+ "winget": "Microsoft.SQLServerManagementStudio"
+ },
+ "tabby": {
+ "category": "Utilities",
+ "choco": "tabby",
+ "content": "Tabby.sh",
+ "description": "Tabby is a highly configurable terminal emulator, SSH and serial client for Windows, macOS and Linux",
+ "link": "https://tabby.sh/",
+ "winget": "Eugeny.Tabby"
+ },
+ "tailscale": {
+ "category": "Utilities",
+ "choco": "tailscale",
+ "content": "Tailscale",
+ "description": "Tailscale is a secure and easy-to-use VPN solution for connecting your devices and networks.",
+ "link": "https://tailscale.com/",
+ "winget": "tailscale.tailscale"
+ },
+ "TcNoAccSwitcher": {
+ "category": "Games",
+ "choco": "tcno-acc-switcher",
+ "content": "TCNO Account Switcher",
+ "description": "A Super-fast account switcher for Steam, Battle.net, Epic Games, Origin, Riot, Ubisoft and many others!",
+ "link": "https://github.com/TCNOco/TcNo-Acc-Switcher",
+ "winget": "TechNobo.TcNoAccountSwitcher"
+ },
+ "tcpview": {
+ "category": "Microsoft Tools",
+ "choco": "tcpview",
+ "content": "SysInternals TCPView",
+ "description": "SysInternals TCPView is a network monitoring tool that displays a detailed list of all TCP and UDP endpoints on your system.",
+ "link": "https://docs.microsoft.com/en-us/sysinternals/downloads/tcpview",
+ "winget": "Microsoft.Sysinternals.TCPView"
+ },
+ "teams": {
+ "category": "Communications",
+ "choco": "microsoft-teams",
+ "content": "Teams",
+ "description": "Microsoft Teams is a collaboration platform that integrates with Office 365 and offers chat, video conferencing, file sharing, and more.",
+ "link": "https://www.microsoft.com/en-us/microsoft-teams/group-chat-software",
+ "winget": "Microsoft.Teams"
+ },
+ "teamviewer": {
+ "category": "Utilities",
+ "choco": "teamviewer9",
+ "content": "TeamViewer",
+ "description": "TeamViewer is a popular remote access and support software that allows you to connect to and control remote devices.",
+ "link": "https://www.teamviewer.com/",
+ "winget": "TeamViewer.TeamViewer"
+ },
+ "telegram": {
+ "category": "Communications",
+ "choco": "telegram",
+ "content": "Telegram",
+ "description": "Telegram is a cloud-based instant messaging app known for its security features, speed, and simplicity.",
+ "link": "https://telegram.org/",
+ "winget": "Telegram.TelegramDesktop"
+ },
+ "unigram": {
+ "category": "Communications",
+ "choco": "na",
+ "content": "Unigram",
+ "description": "Unigram - Telegram for Windows",
+ "link": "https://unigramdev.github.io/",
+ "winget": "Telegram.Unigram"
+ },
+ "terminal": {
+ "category": "Microsoft Tools",
+ "choco": "microsoft-windows-terminal",
+ "content": "Windows Terminal",
+ "description": "Windows Terminal is a modern, fast, and efficient terminal application for command-line users, supporting multiple tabs, panes, and more.",
+ "link": "https://aka.ms/terminal",
+ "winget": "Microsoft.WindowsTerminal"
+ },
+ "Thonny": {
+ "category": "Development",
+ "choco": "thonny",
+ "content": "Thonny Python IDE",
+ "description": "Python IDE for beginners.",
+ "link": "https://github.com/thonny/thonny",
+ "winget": "AivarAnnamaa.Thonny"
+ },
+ "MuEditor": {
+ "category": "Development",
+ "choco": "na",
+ "content": "Code With Mu (Mu Editor)",
+ "description": "Mu is a Python code editor for beginner programmers",
+ "link": "https://codewith.mu/",
+ "winget": "Mu.Mu"
+ },
+ "thorium": {
+ "category": "Browsers",
+ "choco": "na",
+ "content": "Thorium Browser AVX2",
+ "description": "Browser built for speed over vanilla chromium. It is built with AVX2 optimizations and is the fastest browser on the market.",
+ "link": "http://thorium.rocks/",
+ "winget": "Alex313031.Thorium.AVX2"
+ },
+ "thunderbird": {
+ "category": "Communications",
+ "choco": "thunderbird",
+ "content": "Thunderbird",
+ "description": "Mozilla Thunderbird is a free and open-source email client, news client, and chat client with advanced features.",
+ "link": "https://www.thunderbird.net/",
+ "winget": "Mozilla.Thunderbird"
+ },
+ "betterbird": {
+ "category": "Communications",
+ "choco": "betterbird",
+ "content": "Betterbird",
+ "description": "Betterbird is a fork of Mozilla Thunderbird with additional features and bugfixes.",
+ "link": "https://www.betterbird.eu/",
+ "winget": "Betterbird.Betterbird"
+ },
+ "tidal": {
+ "category": "Multimedia Tools",
+ "choco": "na",
+ "content": "Tidal",
+ "description": "Tidal is a music streaming service known for its high-fidelity audio quality and exclusive content. It offers a vast library of songs and curated playlists.",
+ "link": "https://tidal.com/",
+ "winget": "9NNCB5BS59PH"
+ },
+ "tor": {
+ "category": "Browsers",
+ "choco": "tor-browser",
+ "content": "Tor Browser",
+ "description": "Tor Browser is designed for anonymous web browsing, utilizing the Tor network to protect user privacy and security.",
+ "link": "https://www.torproject.org/",
+ "winget": "TorProject.TorBrowser"
+ },
+ "totalcommander": {
+ "category": "Utilities",
+ "choco": "TotalCommander",
+ "content": "Total Commander",
+ "description": "Total Commander is a file manager for Windows that provides a powerful and intuitive interface for file management.",
+ "link": "https://www.ghisler.com/",
+ "winget": "Ghisler.TotalCommander"
+ },
+ "treesize": {
+ "category": "Utilities",
+ "choco": "treesizefree",
+ "content": "TreeSize Free",
+ "description": "TreeSize Free is a disk space manager that helps you analyze and visualize the space usage on your drives.",
+ "link": "https://www.jam-software.com/treesize_free/",
+ "winget": "JAMSoftware.TreeSize.Free"
+ },
+ "ttaskbar": {
+ "category": "Utilities",
+ "choco": "translucenttb",
+ "content": "Translucent Taskbar",
+ "description": "Translucent Taskbar is a tool that allows you to customize the transparency of the Windows taskbar.",
+ "link": "https://github.com/TranslucentTB/TranslucentTB",
+ "winget": "9PF4KZ2VN4W9"
+ },
+ "twinkletray": {
+ "category": "Utilities",
+ "choco": "twinkle-tray",
+ "content": "Twinkle Tray",
+ "description": "Twinkle Tray lets you easily manage the brightness levels of multiple monitors.",
+ "link": "https://twinkletray.com/",
+ "winget": "xanderfrangos.twinkletray"
+ },
+ "ubisoft": {
+ "category": "Games",
+ "choco": "ubisoft-connect",
+ "content": "Ubisoft Connect",
+ "description": "Ubisoft Connect is Ubisoft's digital distribution and online gaming service, providing access to Ubisoft's games and services.",
+ "link": "https://ubisoftconnect.com/",
+ "winget": "Ubisoft.Connect"
+ },
+ "ungoogled": {
+ "category": "Browsers",
+ "choco": "ungoogled-chromium",
+ "content": "Ungoogled",
+ "description": "Ungoogled Chromium is a version of Chromium without Google's integration for enhanced privacy and control.",
+ "link": "https://github.com/Eloston/ungoogled-chromium",
+ "winget": "eloston.ungoogled-chromium"
+ },
+ "unity": {
+ "category": "Development",
+ "choco": "unityhub",
+ "content": "Unity Game Engine",
+ "description": "Unity is a powerful game development platform for creating 2D, 3D, augmented reality, and virtual reality games.",
+ "link": "https://unity.com/",
+ "winget": "Unity.UnityHub"
+ },
+ "vagrant": {
+ "category": "Development",
+ "choco": "vagrant",
+ "content": "Vagrant",
+ "description": "Vagrant is an open-source tool for building and managing virtualized development environments.",
+ "link": "https://www.vagrantup.com/",
+ "winget": "Hashicorp.Vagrant"
+ },
+ "vc2015_32": {
+ "category": "Microsoft Tools",
+ "choco": "na",
+ "content": "Visual C++ 2015-2022 32-bit",
+ "description": "Visual C++ 2015-2022 32-bit redistributable package installs runtime components of Visual C++ libraries required to run 32-bit applications.",
+ "link": "https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads",
+ "winget": "Microsoft.VCRedist.2015+.x86"
+ },
+ "vc2015_64": {
+ "category": "Microsoft Tools",
+ "choco": "na",
+ "content": "Visual C++ 2015-2022 64-bit",
+ "description": "Visual C++ 2015-2022 64-bit redistributable package installs runtime components of Visual C++ libraries required to run 64-bit applications.",
+ "link": "https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads",
+ "winget": "Microsoft.VCRedist.2015+.x64"
+ },
+ "ventoy": {
+ "category": "Pro Tools",
+ "choco": "ventoy",
+ "content": "Ventoy",
+ "description": "Ventoy is an open-source tool for creating bootable USB drives. It supports multiple ISO files on a single USB drive, making it a versatile solution for installing operating systems.",
+ "link": "https://www.ventoy.net/",
+ "winget": "Ventoy.Ventoy"
+ },
+ "vesktop": {
+ "category": "Communications",
+ "choco": "na",
+ "content": "Vesktop",
+ "description": "A cross platform electron-based desktop app aiming to give you a snappier Discord experience with Vencord pre-installed.",
+ "link": "https://github.com/Vencord/Vesktop",
+ "winget": "Vencord.Vesktop"
+ },
+ "viber": {
+ "category": "Communications",
+ "choco": "viber",
+ "content": "Viber",
+ "description": "Viber is a free messaging and calling app with features like group chats, video calls, and more.",
+ "link": "https://www.viber.com/",
+ "winget": "Viber.Viber"
+ },
+ "videomass": {
+ "category": "Multimedia Tools",
+ "choco": "na",
+ "content": "Videomass",
+ "description": "Videomass by GianlucaPernigotto is a cross-platform GUI for FFmpeg, streamlining multimedia file processing with batch conversions and user-friendly features.",
+ "link": "https://jeanslack.github.io/Videomass/",
+ "winget": "GianlucaPernigotto.Videomass"
+ },
+ "visualstudio": {
+ "category": "Development",
+ "choco": "visualstudio2022community",
+ "content": "Visual Studio 2022",
+ "description": "Visual Studio 2022 is an integrated development environment (IDE) for building, debugging, and deploying applications.",
+ "link": "https://visualstudio.microsoft.com/",
+ "winget": "Microsoft.VisualStudio.2022.Community"
+ },
+ "vivaldi": {
+ "category": "Browsers",
+ "choco": "vivaldi",
+ "content": "Vivaldi",
+ "description": "Vivaldi is a highly customizable web browser with a focus on user personalization and productivity features.",
+ "link": "https://vivaldi.com/",
+ "winget": "Vivaldi.Vivaldi"
+ },
+ "vlc": {
+ "category": "Multimedia Tools",
+ "choco": "vlc",
+ "content": "VLC (Video Player)",
+ "description": "VLC Media Player is a free and open-source multimedia player that supports a wide range of audio and video formats. It is known for its versatility and cross-platform compatibility.",
+ "link": "https://www.videolan.org/vlc/",
+ "winget": "VideoLAN.VLC"
+ },
+ "voicemeeter": {
+ "category": "Multimedia Tools",
+ "choco": "voicemeeter",
+ "content": "Voicemeeter (Audio)",
+ "description": "Voicemeeter is a virtual audio mixer that allows you to manage and enhance audio streams on your computer. It is commonly used for audio recording and streaming purposes.",
+ "link": "https://voicemeeter.com/",
+ "winget": "VB-Audio.Voicemeeter"
+ },
+ "VoicemeeterPotato": {
+ "category": "Multimedia Tools",
+ "choco": "voicemeeter-potato",
+ "content": "Voicemeeter Potato",
+ "description": "Voicemeeter Potato is the ultimate version of the Voicemeeter Audio Mixer Application endowed with Virtual Audio Device to mix and manage any audio sources from or to any audio devices or applications.",
+ "link": "https://voicemeeter.com/",
+ "winget": "VB-Audio.Voicemeeter.Potato"
+ },
+ "vrdesktopstreamer": {
+ "category": "Games",
+ "choco": "na",
+ "content": "Virtual Desktop Streamer",
+ "description": "Virtual Desktop Streamer is a tool that allows you to stream your desktop screen to VR devices.",
+ "link": "https://www.vrdesktop.net/",
+ "winget": "VirtualDesktop.Streamer"
+ },
+ "vscode": {
+ "category": "Development",
+ "choco": "vscode",
+ "content": "VS Code",
+ "description": "Visual Studio Code is a free, open-source code editor with support for multiple programming languages.",
+ "link": "https://code.visualstudio.com/",
+ "winget": "Microsoft.VisualStudioCode"
+ },
+ "vscodium": {
+ "category": "Development",
+ "choco": "vscodium",
+ "content": "VS Codium",
+ "description": "VSCodium is a community-driven, freely-licensed binary distribution of Microsoft's VS Code.",
+ "link": "https://vscodium.com/",
+ "winget": "VSCodium.VSCodium"
+ },
+ "waterfox": {
+ "category": "Browsers",
+ "choco": "waterfox",
+ "content": "Waterfox",
+ "description": "Waterfox is a fast, privacy-focused web browser based on Firefox, designed to preserve user choice and privacy.",
+ "link": "https://www.waterfox.net/",
+ "winget": "Waterfox.Waterfox"
+ },
+ "wazuh": {
+ "category": "Utilities",
+ "choco": "wazuh-agent",
+ "content": "Wazuh.",
+ "description": "Wazuh is an open-source security monitoring platform that offers intrusion detection, compliance checks, and log analysis.",
+ "link": "https://wazuh.com/",
+ "winget": "Wazuh.WazuhAgent"
+ },
+ "wezterm": {
+ "category": "Development",
+ "choco": "wezterm",
+ "content": "Wezterm",
+ "description": "WezTerm is a powerful cross-platform terminal emulator and multiplexer",
+ "link": "https://wezfurlong.org/wezterm/index.html",
+ "winget": "wez.wezterm"
+ },
+ "windowspchealth": {
+ "category": "Utilities",
+ "choco": "na",
+ "content": "Windows PC Health Check",
+ "description": "Windows PC Health Check is a tool that helps you check if your PC meets the system requirements for Windows 11.",
+ "link": "https://support.microsoft.com/en-us/windows/how-to-use-the-pc-health-check-app-9c8abd9b-03ba-4e67-81ef-36f37caa7844",
+ "winget": "Microsoft.WindowsPCHealthCheck"
+ },
+ "WindowGrid": {
+ "category": "Utilities",
+ "choco": "windowgrid",
+ "content": "WindowGrid",
+ "description": "WindowGrid is a modern window management program for Windows that allows the user to quickly and easily layout their windows on a dynamic grid using just the mouse.",
+ "link": "http://windowgrid.net/",
+ "winget": "na"
+ },
+ "wingetui": {
+ "category": "Utilities",
+ "choco": "wingetui",
+ "content": "UniGetUI",
+ "description": "UniGetUI is a GUI for Winget, Chocolatey, and other Windows CLI package managers.",
+ "link": "https://www.marticliment.com/wingetui/",
+ "winget": "SomePythonThings.WingetUIStore"
+ },
+ "winmerge": {
+ "category": "Document",
+ "choco": "winmerge",
+ "content": "WinMerge",
+ "description": "WinMerge is a visual text file and directory comparison tool for Windows.",
+ "link": "https://winmerge.org/",
+ "winget": "WinMerge.WinMerge"
+ },
+ "winpaletter": {
+ "category": "Utilities",
+ "choco": "WinPaletter",
+ "content": "WinPaletter",
+ "description": "WinPaletter is a tool for adjusting the color palette of Windows 10, providing customization options for window colors.",
+ "link": "https://github.com/Abdelrhman-AK/WinPaletter",
+ "winget": "Abdelrhman-AK.WinPaletter"
+ },
+ "winrar": {
+ "category": "Utilities",
+ "choco": "winrar",
+ "content": "WinRAR",
+ "description": "WinRAR is a powerful archive manager that allows you to create, manage, and extract compressed files.",
+ "link": "https://www.win-rar.com/",
+ "winget": "RARLab.WinRAR"
+ },
+ "winscp": {
+ "category": "Pro Tools",
+ "choco": "winscp",
+ "content": "WinSCP",
+ "description": "WinSCP is a popular open-source SFTP, FTP, and SCP client for Windows. It allows secure file transfers between a local and a remote computer.",
+ "link": "https://winscp.net/",
+ "winget": "WinSCP.WinSCP"
+ },
+ "wireguard": {
+ "category": "Pro Tools",
+ "choco": "wireguard",
+ "content": "WireGuard",
+ "description": "WireGuard is a fast and modern VPN (Virtual Private Network) protocol. It aims to be simpler and more efficient than other VPN protocols, providing secure and reliable connections.",
+ "link": "https://www.wireguard.com/",
+ "winget": "WireGuard.WireGuard"
+ },
+ "wireshark": {
+ "category": "Pro Tools",
+ "choco": "wireshark",
+ "content": "Wireshark",
+ "description": "Wireshark is a widely-used open-source network protocol analyzer. It allows users to capture and analyze network traffic in real-time, providing detailed insights into network activities.",
+ "link": "https://www.wireshark.org/",
+ "winget": "WiresharkFoundation.Wireshark"
+ },
+ "wisetoys": {
+ "category": "Utilities",
+ "choco": "na",
+ "content": "WiseToys",
+ "description": "WiseToys is a set of utilities and tools designed to enhance and optimize your Windows experience.",
+ "link": "https://toys.wisecleaner.com/",
+ "winget": "WiseCleaner.WiseToys"
+ },
+ "TeraCopy": {
+ "category": "Utilities",
+ "choco": "TeraCopy",
+ "content": "TeraCopy",
+ "description": "Copy your files faster and more securely",
+ "link": "https://codesector.com/teracopy",
+ "winget": "CodeSector.TeraCopy"
+ },
+ "wizfile": {
+ "category": "Utilities",
+ "choco": "na",
+ "content": "WizFile",
+ "description": "Find files by name on your hard drives almost instantly.",
+ "link": "https://antibody-software.com/wizfile/",
+ "winget": "AntibodySoftware.WizFile"
+ },
+ "wiztree": {
+ "category": "Utilities",
+ "choco": "wiztree",
+ "content": "WizTree",
+ "description": "WizTree is a fast disk space analyzer that helps you quickly find the files and folders consuming the most space on your hard drive.",
+ "link": "https://wiztreefree.com/",
+ "winget": "AntibodySoftware.WizTree"
+ },
+ "xdm": {
+ "category": "Utilities",
+ "choco": "xdm",
+ "content": "Xtreme Download Manager",
+ "description": "Xtreme Download Manager is an advanced download manager with support for various protocols and browsers.*Browser integration deprecated by google store. No official release.*",
+ "link": "https://xtremedownloadmanager.com/",
+ "winget": "subhra74.XtremeDownloadManager"
+ },
+ "xeheditor": {
+ "category": "Utilities",
+ "choco": "HxD",
+ "content": "HxD Hex Editor",
+ "description": "HxD is a free hex editor that allows you to edit, view, search, and analyze binary files.",
+ "link": "https://mh-nexus.de/en/hxd/",
+ "winget": "MHNexus.HxD"
+ },
+ "xemu": {
+ "category": "Games",
+ "choco": "na",
+ "content": "XEMU",
+ "description": "XEMU is an open-source Xbox emulator that allows you to play Xbox games on your PC, aiming for accuracy and compatibility.",
+ "link": "https://xemu.app/",
+ "winget": "xemu-project.xemu"
+ },
+ "xnview": {
+ "category": "Utilities",
+ "choco": "xnview",
+ "content": "XnView classic",
+ "description": "XnView is an efficient image viewer, browser and converter for Windows.",
+ "link": "https://www.xnview.com/en/xnview/",
+ "winget": "XnSoft.XnView.Classic"
+ },
+ "xournal": {
+ "category": "Document",
+ "choco": "xournalplusplus",
+ "content": "Xournal++",
+ "description": "Xournal++ is an open-source handwriting notetaking software with PDF annotation capabilities.",
+ "link": "https://xournalpp.github.io/",
+ "winget": "Xournal++.Xournal++"
+ },
+ "xpipe": {
+ "category": "Pro Tools",
+ "choco": "xpipe",
+ "content": "XPipe",
+ "description": "XPipe is an open-source tool for orchestrating containerized applications. It simplifies the deployment and management of containerized services in a distributed environment.",
+ "link": "https://xpipe.io/",
+ "winget": "xpipe-io.xpipe"
+ },
+ "yarn": {
+ "category": "Development",
+ "choco": "yarn",
+ "content": "Yarn",
+ "description": "Yarn is a fast, reliable, and secure dependency management tool for JavaScript projects.",
+ "link": "https://yarnpkg.com/",
+ "winget": "Yarn.Yarn"
+ },
+ "ytdlp": {
+ "category": "Multimedia Tools",
+ "choco": "yt-dlp",
+ "content": "Yt-dlp",
+ "description": "Command-line tool that allows you to download videos from YouTube and other supported sites. It is an improved version of the popular youtube-dl.",
+ "link": "https://github.com/yt-dlp/yt-dlp",
+ "winget": "yt-dlp.yt-dlp"
+ },
+ "zerotierone": {
+ "category": "Utilities",
+ "choco": "zerotier-one",
+ "content": "ZeroTier One",
+ "description": "ZeroTier One is a software-defined networking tool that allows you to create secure and scalable networks.",
+ "link": "https://zerotier.com/",
+ "winget": "ZeroTier.ZeroTierOne"
+ },
+ "zim": {
+ "category": "Document",
+ "choco": "zim",
+ "content": "Zim Desktop Wiki",
+ "description": "Zim Desktop Wiki is a graphical text editor used to maintain a collection of wiki pages.",
+ "link": "https://zim-wiki.org/",
+ "winget": "Zimwiki.Zim"
+ },
+ "znote": {
+ "category": "Document",
+ "choco": "na",
+ "content": "Znote",
+ "description": "Znote is a note-taking application.",
+ "link": "https://znote.io/",
+ "winget": "alagrede.znote"
+ },
+ "zoom": {
+ "category": "Communications",
+ "choco": "zoom",
+ "content": "Zoom",
+ "description": "Zoom is a popular video conferencing and web conferencing service for online meetings, webinars, and collaborative projects.",
+ "link": "https://zoom.us/",
+ "winget": "Zoom.Zoom"
+ },
+ "zoomit": {
+ "category": "Utilities",
+ "choco": "na",
+ "content": "ZoomIt",
+ "description": "A screen zoom, annotation, and recording tool for technical presentations and demos",
+ "link": "https://learn.microsoft.com/en-us/sysinternals/downloads/zoomit",
+ "winget": "Microsoft.Sysinternals.ZoomIt"
+ },
+ "zotero": {
+ "category": "Document",
+ "choco": "zotero",
+ "content": "Zotero",
+ "description": "Zotero is a free, easy-to-use tool to help you collect, organize, cite, and share your research materials.",
+ "link": "https://www.zotero.org/",
+ "winget": "DigitalScholar.Zotero"
+ },
+ "zoxide": {
+ "category": "Utilities",
+ "choco": "zoxide",
+ "content": "Zoxide",
+ "description": "Zoxide is a fast and efficient directory changer (cd) that helps you navigate your file system with ease.",
+ "link": "https://github.com/ajeetdsouza/zoxide",
+ "winget": "ajeetdsouza.zoxide"
+ },
+ "zulip": {
+ "category": "Communications",
+ "choco": "zulip",
+ "content": "Zulip",
+ "description": "Zulip is an open-source team collaboration tool with chat streams for productive and organized communication.",
+ "link": "https://zulipchat.com/",
+ "winget": "Zulip.Zulip"
+ },
+ "syncthingtray": {
+ "category": "Utilities",
+ "choco": "syncthingtray",
+ "content": "Syncthingtray",
+ "description": "Might be the alternative for Synctrayzor. Windows tray utility / filesystem watcher / launcher for Syncthing",
+ "link": "https://github.com/Martchus/syncthingtray",
+ "winget": "Martchus.syncthingtray"
+ },
+ "miniconda": {
+ "category": "Development",
+ "choco": "miniconda3",
+ "content": "Miniconda",
+ "description": "Miniconda is a free minimal installer for conda. It is a small bootstrap version of Anaconda that includes only conda, Python, the packages they both depend on, and a small number of other useful packages (like pip, zlib, and a few others).",
+ "link": "https://docs.conda.io/projects/miniconda",
+ "winget": "Anaconda.Miniconda3"
+ },
+ "pixi": {
+ "category": "Development",
+ "choco": "pixi",
+ "content": "Pixi",
+ "description": "Pixi is a fast software package manager built on top of the existing conda ecosystem. Spins up development environments quickly on Windows, macOS and Linux. Pixi supports Python, R, C/C++, Rust, Ruby, and many other languages.",
+ "link": "https://pixi.sh",
+ "winget": "prefix-dev.pixi"
+ },
+ "temurin": {
+ "category": "Development",
+ "choco": "temurin",
+ "content": "Eclipse Temurin",
+ "description": "Eclipse Temurin is the open source Java SE build based upon OpenJDK.",
+ "link": "https://adoptium.net/temurin/",
+ "winget": "EclipseAdoptium.Temurin.21.JDK"
+ },
+ "intelpresentmon": {
+ "category": "Utilities",
+ "choco": "na",
+ "content": "Intel-PresentMon",
+ "description": "A new gaming performance overlay and telemetry application to monitor and measure your gaming experience.",
+ "link": "https://game.intel.com/us/stories/intel-presentmon/",
+ "winget": "Intel.PresentMon.Beta"
+ },
+ "pyenvwin": {
+ "category": "Development",
+ "choco": "pyenv-win",
+ "content": "Python Version Manager (pyenv-win)",
+ "description": "pyenv for Windows is a simple python version management tool. It lets you easily switch between multiple versions of Python.",
+ "link": "https://pyenv-win.github.io/pyenv-win/",
+ "winget": "na"
+ },
+ "tightvnc": {
+ "category": "Utilities",
+ "choco": "TightVNC",
+ "content": "TightVNC",
+ "description": "TightVNC is a free and Open Source remote desktop software that lets you access and control a computer over the network. With its intuitive interface, you can interact with the remote screen as if you were sitting in front of it. You can open files, launch applications, and perform other actions on the remote desktop almost as if you were physically there",
+ "link": "https://www.tightvnc.com/",
+ "winget": "GlavSoft.TightVNC"
+ },
+ "ultravnc": {
+ "category": "Utilities",
+ "choco": "ultravnc",
+ "content": "UltraVNC",
+ "description": "UltraVNC is a powerful, easy to use and free - remote pc access softwares - that can display the screen of another computer (via internet or network) on your own screen. The program allows you to use your mouse and keyboard to control the other PC remotely. It means that you can work on a remote computer, as if you were sitting in front of it, right from your current location.",
+ "link": "https://uvnc.com/",
+ "winget": "uvncbvba.UltraVnc"
+ },
+ "windowsfirewallcontrol": {
+ "category": "Utilities",
+ "choco": "windowsfirewallcontrol",
+ "content": "Windows Firewall Control",
+ "description": "Windows Firewall Control is a powerful tool which extends the functionality of Windows Firewall and provides new extra features which makes Windows Firewall better.",
+ "link": "https://www.binisoft.org/wfc",
+ "winget": "BiniSoft.WindowsFirewallControl"
+ },
+ "vistaswitcher": {
+ "category": "Utilities",
+ "choco": "na",
+ "content": "VistaSwitcher",
+ "description": "VistaSwitcher makes it easier for you to locate windows and switch focus, even on multi-monitor systems. The switcher window consists of an easy-to-read list of all tasks running with clearly shown titles and a full-sized preview of the selected task.",
+ "link": "https://www.ntwind.com/freeware/vistaswitcher.html",
+ "winget": "ntwind.VistaSwitcher"
+ },
+ "autodarkmode": {
+ "category": "Utilities",
+ "choco": "auto-dark-mode",
+ "content": "Windows Auto Dark Mode",
+ "description": "Automatically switches between the dark and light theme of Windows 10 and Windows 11",
+ "link": "https://github.com/AutoDarkMode/Windows-Auto-Night-Mode",
+ "winget": "Armin2208.WindowsAutoNightMode"
+ },
+ "AmbieWhiteNoise": {
+ "category": "Utilities",
+ "choco": "na",
+ "content": "Ambie White Noise",
+ "description": "Ambie is the ultimate app to help you focus, study, or relax. We use white noise and nature sounds combined with an innovative focus timer to keep you concentrated on doing your best work.",
+ "link": "https://ambieapp.com/",
+ "winget": "9P07XNM5CHP0"
+ },
+ "magicwormhole": {
+ "category": "Utilities",
+ "choco": "magic-wormhole",
+ "content": "Magic Wormhole",
+ "description": "get things from one computer to another, safely",
+ "link": "https://github.com/magic-wormhole/magic-wormhole",
+ "winget": "magic-wormhole.magic-wormhole"
+ },
+ "croc": {
+ "category": "Utilities",
+ "choco": "croc",
+ "content": "croc",
+ "description": "Easily and securely send things from one computer to another.",
+ "link": "https://github.com/schollz/croc",
+ "winget": "schollz.croc"
+ },
+ "qgis": {
+ "category": "Multimedia Tools",
+ "choco": "qgis",
+ "content": "QGIS",
+ "description": "QGIS (Quantum GIS) is an open-source Geographic Information System (GIS) software that enables users to create, edit, visualize, analyze, and publish geospatial information on Windows, Mac, and Linux platforms.",
+ "link": "https://qgis.org/en/site/",
+ "winget": "OSGeo.QGIS"
+ },
+ "smplayer": {
+ "category": "Multimedia Tools",
+ "choco": "smplayer",
+ "content": "SMPlayer",
+ "description": "SMPlayer is a free media player for Windows and Linux with built-in codecs that can play virtually all video and audio formats.",
+ "link": "https://www.smplayer.info",
+ "winget": "SMPlayer.SMPlayer"
+ },
+ "glazewm": {
+ "category": "Utilities",
+ "choco": "na",
+ "content": "GlazeWM",
+ "description": "GlazeWM is a tiling window manager for Windows inspired by i3 and Polybar",
+ "link": "https://github.com/glzr-io/glazewm",
+ "winget": "glzr-io.glazewm"
+ },
+ "fancontrol": {
+ "category": "Utilities",
+ "choco": "na",
+ "content": "FanControl",
+ "description": "Fan Control is a free and open-source software that allows the user to control his CPU, GPU and case fans using temperatures.",
+ "link": "https://getfancontrol.com/",
+ "winget": "Rem0o.FanControl"
+ },
+ "fnm": {
+ "category": "Development",
+ "choco": "fnm",
+ "content": "Fast Node Manager",
+ "description": "Fast Node Manager (fnm) allows you to switch your Node version by using the Terminal",
+ "link": "https://github.com/Schniz/fnm",
+ "winget": "Schniz.fnm"
+ },
+ "Windhawk": {
+ "category": "Utilities",
+ "choco": "windhawk",
+ "content": "Windhawk",
+ "description": "The customization marketplace for Windows programs",
+ "link": "https://windhawk.net",
+ "winget": "RamenSoftware.Windhawk"
+ },
+ "ForceAutoHDR": {
+ "category": "Utilities",
+ "choco": "na",
+ "content": "ForceAutoHDR",
+ "description": "ForceAutoHDR simplifies the process of adding games to the AutoHDR list in the Windows Registry",
+ "link": "https://github.com/7gxycn08/ForceAutoHDR",
+ "winget": "ForceAutoHDR.7gxycn08"
+ },
+ "JoyToKey": {
+ "category": "Utilities",
+ "choco": "joytokey",
+ "content": "JoyToKey",
+ "description": "enables PC game controllers to emulate the keyboard and mouse input",
+ "link": "https://joytokey.net/en/",
+ "winget": "JTKsoftware.JoyToKey"
+ },
+ "nditools": {
+ "category": "Multimedia Tools",
+ "choco": "na",
+ "content": "NDI Tools",
+ "description":"NDI, or Network Device Interface, is a video connectivity standard that enables multimedia systems to identify and communicate with one another over IP and to encode, transmit, and receive high-quality, low latency, frame-accurate video and audio, and exchange metadata in real-time.",
+ "link": "https://ndi.video/",
+ "winget": "NDI.NDITools"
+ },
+ "kicad": {
+ "category": "Multimedia Tools",
+ "choco": "na",
+ "content": "Kicad",
+ "description":"Kicad is an open-source EDA tool. It's a good starting point for those who want to do electrical design and is even used by professionals in the industry.",
+ "link": "https://www.kicad.org/",
+ "winget": "KiCad.KiCad"
+ },
+ "FormatFactory": {
+ "category": "Utilities",
+ "choco": "formatfactory",
+ "content": "Format Factory",
+ "description":"FormatFactory is an ad-supported freeware multimedia converter that can convert video, audio, and picture files. It is also capable of ripping DVDs and CDs to other file formats, as well as creating .iso images. It can also join multiple video files together into one.",
+ "link": "http://www.pcfreetime.com/formatfactory/",
+ "winget": "na"
+ },
+ "dropox": {
+ "category": "Utilities",
+ "choco": "na",
+ "content": "Dropbox",
+ "description":"The Dropbox desktop app! Save hard drive space, share and edit files and send for signature – all without the distraction of countless browser tabs.",
+ "link": "https://www.dropbox.com/en_GB/desktop",
+ "winget": "Dropbox.Dropbox"
+ },
+ "OFGB": {
+ "category": "Utilities",
+ "choco": "ofgb",
+ "content": "OFGB (Oh Frick Go Back)",
+ "description":"GUI Tool to remove ads from various places around Windows 11",
+ "link": "https://github.com/xM4ddy/OFGB",
+ "winget": "xM4ddy.OFGB"
+ },
+ "PaleMoon": {
+ "category": "Browsers",
+ "choco": "paleMoon",
+ "content": "PaleMoon",
+ "description":"Pale Moon is an Open Source, Goanna-based web browser available for Microsoft Windows and Linux (with other operating systems in development), focusing on efficiency and ease of use.",
+ "link": "https://www.palemoon.org/download.shtml",
+ "winget": "MoonchildProductions.PaleMoon"
+ },
+ "Shotcut": {
+ "category": "Multimedia Tools",
+ "choco": "na",
+ "content": "Shotcut",
+ "description": "Shotcut is a free, open source, cross-platform video editor.",
+ "link": "https://shotcut.org/",
+ "winget": "Meltytech.Shotcut"
+ },
+ "LenovoLegionToolkit": {
+ "category": "Utilities",
+ "choco": "na",
+ "content": "Lenovo Legion Toolkit",
+ "description": "Lenovo Legion Toolkit (LLT) is a open-source utility created for Lenovo Legion (and similar) series laptops, that allows changing a couple of features that are only available in Lenovo Vantage or Legion Zone. It runs no background services, uses less memory, uses virtually no CPU, and contains no telemetry. Just like Lenovo Vantage, this application is Windows only.",
+ "link": "https://github.com/BartoszCichecki/LenovoLegionToolkit",
+ "winget": "BartoszCichecki.LenovoLegionToolkit"
+ },
+ "PulsarEdit": {
+ "category": "Development",
+ "choco": "pulsar",
+ "content": "Pulsar",
+ "description": "A Community-led Hyper-Hackable Text Editor",
+ "link": "https://pulsar-edit.dev/",
+ "winget": "Pulsar-Edit.Pulsar"
+ },
+ "Aegisub": {
+ "category": "Development",
+ "choco": "aegisub",
+ "content": "Aegisub",
+ "description": "Aegisub is a free, cross-platform open source tool for creating and modifying subtitles. Aegisub makes it quick and easy to time subtitles to audio, and features many powerful tools for styling them, including a built-in real-time video preview.",
+ "link": "https://github.com/Aegisub/Aegisub",
+ "winget": "Aegisub.Aegisub"
+ },
+ "SubtitleEdit": {
+ "category": "Multimedia Tools",
+ "choco": "na",
+ "content": "Subtitle Edit",
+ "description": "Subtitle Edit is a free and open source editor for video subtitles.",
+ "link": "https://github.com/SubtitleEdit/subtitleedit",
+ "winget": "Nikse.SubtitleEdit"
+ },
+ "Fork": {
+ "category": "Development",
+ "choco": "git-fork",
+ "content": "Fork",
+ "description": "Fork - a fast and friendly git client.",
+ "link": "https://git-fork.com/",
+ "winget": "Fork.Fork"
+ }
}
diff --git a/config/autounattend.xml b/config/autounattend.xml
new file mode 100644
index 00000000..c3a2f213
--- /dev/null
+++ b/config/autounattend.xml
@@ -0,0 +1,442 @@
+
+
+
+
+
+
+
+ en-US
+
+ 0409:00000409
+ en-US
+ en-US
+ en-US
+
+
+
+
+ VK7JG-NPHTM-C97JM-9MPGT-3V66T
+
+ true
+
+
+
+ 1
+ reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassTPMCheck /t REG_DWORD /d 1 /f
+
+
+ 2
+ reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassSecureBootCheck /t REG_DWORD /d 1 /f
+
+
+ 3
+ reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassRAMCheck /t REG_DWORD /d 1 /f
+
+
+
+
+
+
+
+
+
+ 1
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v BypassNRO /t REG_DWORD /d 1 /f
+
+
+ 2
+ reg.exe load "HKU\DefaultUser" "C:\Users\Default\NTUSER.DAT"
+
+
+ 3
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\Runonce" /v "UninstallCopilot" /t REG_SZ /d "powershell.exe -NoProfile -Command \"Get-AppxPackage -Name 'Microsoft.Windows.Ai.Copilot.Provider' | Remove-AppxPackage;\"" /f
+
+
+ 4
+ reg.exe add "HKU\DefaultUser\Software\Policies\Microsoft\Windows\WindowsCopilot" /v TurnOffWindowsCopilot /t REG_DWORD /d 1 /f
+
+
+ 5
+ reg.exe unload "HKU\DefaultUser"
+
+
+ 6
+ reg.exe delete "HKLM\SOFTWARE\Microsoft\WindowsUpdate\Orchestrator\UScheduler_Oobe\DevHomeUpdate" /f
+
+
+ 7
+ reg.exe load "HKU\DefaultUser" "C:\Users\Default\NTUSER.DAT"
+
+
+ 8
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Notepad" /v ShowStoreBanner /t REG_DWORD /d 0 /f
+
+
+ 9
+ reg.exe unload "HKU\DefaultUser"
+
+
+ 10
+ cmd.exe /c "del "C:\Users\Default\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\OneDrive.lnk""
+
+
+ 11
+ cmd.exe /c "del "C:\Windows\System32\OneDriveSetup.exe""
+
+
+ 12
+ cmd.exe /c "del "C:\Windows\SysWOW64\OneDriveSetup.exe""
+
+
+ 13
+ reg.exe load "HKU\DefaultUser" "C:\Users\Default\NTUSER.DAT"
+
+
+ 14
+ reg.exe delete "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\Run" /v OneDriveSetup /f
+
+
+ 15
+ reg.exe unload "HKU\DefaultUser"
+
+
+ 16
+ reg.exe delete "HKLM\SOFTWARE\Microsoft\WindowsUpdate\Orchestrator\UScheduler_Oobe\OutlookUpdate" /f
+
+
+ 17
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Communications" /v ConfigureChatAutoInstall /t REG_DWORD /d 0 /f
+
+
+ 18
+ powershell.exe -NoProfile -Command "$xml = [xml]::new(); $xml.Load('C:\Windows\Panther\unattend.xml'); $sb = [scriptblock]::Create( $xml.unattend.Extensions.ExtractScript ); Invoke-Command -ScriptBlock $sb -ArgumentList $xml;"
+
+
+ 19
+ powershell.exe -NoProfile -Command "Get-Content -LiteralPath 'C:\Windows\Temp\remove-packages.ps1' -Raw | Invoke-Expression;"
+
+
+ 20
+ powershell.exe -NoProfile -Command "Get-Content -LiteralPath 'C:\Windows\Temp\remove-caps.ps1' -Raw | Invoke-Expression;"
+
+
+ 21
+ reg.exe add "HKLM\SOFTWARE\Microsoft\PolicyManager\current\device\Start" /v ConfigureStartPins /t REG_SZ /d "{ \"pinnedList\": [] }" /f
+
+
+ 22
+ reg.exe add "HKLM\SOFTWARE\Microsoft\PolicyManager\current\device\Start" /v ConfigureStartPins_ProviderSet /t REG_DWORD /d 1 /f
+
+
+ 23
+ reg.exe add "HKLM\SOFTWARE\Microsoft\PolicyManager\current\device\Start" /v ConfigureStartPins_WinningProvider /t REG_SZ /d B5292708-1619-419B-9923-E5D9F3925E71 /f
+
+
+ 24
+ reg.exe add "HKLM\SOFTWARE\Microsoft\PolicyManager\providers\B5292708-1619-419B-9923-E5D9F3925E71\default\Device\Start" /v ConfigureStartPins /t REG_SZ /d "{ \"pinnedList\": [] }" /f
+
+
+ 25
+ reg.exe add "HKLM\SOFTWARE\Microsoft\PolicyManager\providers\B5292708-1619-419B-9923-E5D9F3925E71\default\Device\Start" /v ConfigureStartPins_LastWrite /t REG_DWORD /d 1 /f
+
+
+ 26
+ net.exe accounts /maxpwage:UNLIMITED
+
+
+ 27
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\FileSystem" /v LongPathsEnabled /t REG_DWORD /d 1 /f
+
+
+ 28
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Power" /v HiberbootEnabled /t REG_DWORD /d 0 /f
+
+
+ 29
+ reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Dsh" /v AllowNewsAndInterests /t REG_DWORD /d 0 /f
+
+
+ 30
+ reg.exe load "HKU\DefaultUser" "C:\Users\Default\NTUSER.DAT"
+
+
+ 31
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "ContentDeliveryAllowed" /t REG_DWORD /d 0 /f
+
+
+ 32
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "FeatureManagementEnabled" /t REG_DWORD /d 0 /f
+
+
+ 33
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "OEMPreInstalledAppsEnabled" /t REG_DWORD /d 0 /f
+
+
+ 34
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEnabled" /t REG_DWORD /d 0 /f
+
+
+ 35
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEverEnabled" /t REG_DWORD /d 0 /f
+
+
+ 36
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SilentInstalledAppsEnabled" /t REG_DWORD /d 0 /f
+
+
+ 37
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SoftLandingEnabled" /t REG_DWORD /d 0 /f
+
+
+ 38
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContentEnabled" /t REG_DWORD /d 0 /f
+
+
+ 39
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-310093Enabled" /t REG_DWORD /d 0 /f
+
+
+ 40
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338387Enabled" /t REG_DWORD /d 0 /f
+
+
+ 41
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338388Enabled" /t REG_DWORD /d 0 /f
+
+
+ 42
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338389Enabled" /t REG_DWORD /d 0 /f
+
+
+ 43
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338393Enabled" /t REG_DWORD /d 0 /f
+
+
+ 44
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-353698Enabled" /t REG_DWORD /d 0 /f
+
+
+ 45
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SystemPaneSuggestionsEnabled" /t REG_DWORD /d 0 /f
+
+
+ 46
+ reg.exe unload "HKU\DefaultUser"
+
+
+ 47
+ reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 0 /f
+
+
+ 48
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\BitLocker" /v "PreventDeviceEncryption" /t REG_DWORD /d 1 /f
+
+
+ 49
+ reg.exe load "HKU\DefaultUser" "C:\Users\Default\NTUSER.DAT"
+
+
+ 50
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\Runonce" /v "ClassicContextMenu" /t REG_SZ /d "reg.exe add \"HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32\" /ve /f" /f
+
+
+ 51
+ reg.exe unload "HKU\DefaultUser"
+
+
+
+
+
+
+
+
+ 0409:00000409
+ en-US
+ en-US
+ en-US
+
+
+
+
+
+ User
+ Administrators
+
+
+ true
+
+
+
+
+
+ User
+ true
+ 1
+
+
+ true
+
+
+
+ 3
+ true
+ true
+
+
+
+ 1
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f
+
+
+
+
+
+
+param(
+ [xml] $Document
+);
+
+$scriptsDir = 'C:\Windows\Setup\Scripts\';
+foreach( $file in $Document.unattend.Extensions.File ) {
+ $path = [System.Environment]::ExpandEnvironmentVariables(
+ $file.GetAttribute( 'path' )
+ );
+ if( $path.StartsWith( $scriptsDir ) ) {
+ mkdir -Path $scriptsDir -ErrorAction 'SilentlyContinue';
+ }
+ $encoding = switch( [System.IO.Path]::GetExtension( $path ) ) {
+ { $_ -in '.ps1', '.xml' } { [System.Text.Encoding]::UTF8; }
+ { $_ -in '.reg', '.vbs', '.js' } { [System.Text.UnicodeEncoding]::new( $false, $true ); }
+ default { [System.Text.Encoding]::Default; }
+ };
+ [System.IO.File]::WriteAllBytes( $path, ( $encoding.GetPreamble() + $encoding.GetBytes( $file.InnerText.Trim() ) ) );
+}
+
+
+$selectors = @(
+ 'Microsoft.Microsoft3DViewer';
+ 'Microsoft.BingSearch';
+ 'Microsoft.WindowsCamera';
+ 'Clipchamp.Clipchamp';
+ 'Microsoft.WindowsAlarms';
+ 'Microsoft.549981C3F5F10';
+ 'Microsoft.Windows.DevHome';
+ 'MicrosoftCorporationII.MicrosoftFamily';
+ 'Microsoft.WindowsFeedbackHub';
+ 'Microsoft.GetHelp';
+ 'Microsoft.Getstarted';
+ 'microsoft.windowscommunicationsapps';
+ 'Microsoft.WindowsMaps';
+ 'Microsoft.BingNews';
+ 'Microsoft.WindowsNotepad';
+ 'Microsoft.MicrosoftOfficeHub';
+ 'Microsoft.Office.OneNote';
+ 'Microsoft.OutlookForWindows';
+ 'Microsoft.MSPaint';
+ 'Microsoft.People';
+ 'Microsoft.PowerAutomateDesktop';
+ 'MicrosoftCorporationII.QuickAssist';
+ 'Microsoft.SkypeApp';
+ 'Microsoft.MicrosoftSolitaireCollection';
+ 'Microsoft.MicrosoftStickyNotes';
+ 'MSTeams';
+ 'Microsoft.Todos';
+ 'Microsoft.WindowsSoundRecorder';
+ 'Microsoft.BingWeather';
+ 'Microsoft.ZuneMusic';
+ 'Microsoft.ZuneVideo';
+);
+$getCommand = { Get-AppxProvisionedPackage -Online; };
+$filterCommand = { $_.DisplayName -eq $selector; };
+$removeCommand = {
+ [CmdletBinding()]
+ param(
+ [Parameter( Mandatory, ValueFromPipeline )]
+ $InputObject
+ );
+ process {
+ $InputObject | Remove-AppxProvisionedPackage -AllUsers -Online -ErrorAction 'Continue';
+ }
+};
+$type = 'Package';
+$logfile = 'C:\Windows\Temp\remove-packages.log';
+& {
+ $installed = & $getCommand;
+ foreach( $selector in $selectors ) {
+ $result = [ordered] @{
+ Selector = $selector;
+ };
+ $found = $installed | Where-Object -FilterScript $filterCommand;
+ if( $found ) {
+ $result.Output = $found | & $removeCommand;
+ if( $? ) {
+ $result.Message = "$type removed.";
+ } else {
+ $result.Message = "$type not removed.";
+ $result.Error = $Error[0];
+ }
+ } else {
+ $result.Message = "$type not installed.";
+ }
+ $result | ConvertTo-Json -Depth 3 -Compress;
+ }
+} *>&1 >> $logfile;
+
+
+$selectors = @(
+ 'Browser.InternetExplorer';
+ 'MathRecognizer';
+ 'OpenSSH.Client';
+ 'App.Support.QuickAssist';
+ 'App.StepsRecorder';
+ 'Media.WindowsMediaPlayer';
+ 'Microsoft.Windows.WordPad';
+);
+$getCommand = { Get-WindowsCapability -Online; };
+$filterCommand = { ($_.Name -split '~')[0] -eq $selector; };
+$removeCommand = {
+ [CmdletBinding()]
+ param(
+ [Parameter( Mandatory, ValueFromPipeline )]
+ $InputObject
+ );
+ process {
+ $InputObject | Remove-WindowsCapability -Online -ErrorAction 'Continue';
+ }
+};
+$type = 'Capability';
+$logfile = 'C:\Windows\Temp\remove-caps.log';
+& {
+ $installed = & $getCommand;
+ foreach( $selector in $selectors ) {
+ $result = [ordered] @{
+ Selector = $selector;
+ };
+ $found = $installed | Where-Object -FilterScript $filterCommand;
+ if( $found ) {
+ $result.Output = $found | & $removeCommand;
+ if( $? ) {
+ $result.Message = "$type removed.";
+ } else {
+ $result.Message = "$type not removed.";
+ $result.Error = $Error[0];
+ }
+ } else {
+ $result.Message = "$type not installed.";
+ }
+ $result | ConvertTo-Json -Depth 3 -Compress;
+ }
+} *>&1 >> $logfile;
+
+
+
+
+
+
+
+
+
+ ]]>
+
+
diff --git a/config/dns.json b/config/dns.json
index 8f5ca14c..6c2ffbbd 100644
--- a/config/dns.json
+++ b/config/dns.json
@@ -47,4 +47,4 @@
"Primary6": "2a10:50c0::bad1:ff",
"Secondary6": "2a10:50c0::bad2:ff"
}
-}
\ No newline at end of file
+}
diff --git a/config/feature.json b/config/feature.json
index bd66859a..f28a92ed 100644
--- a/config/feature.json
+++ b/config/feature.json
@@ -9,9 +9,8 @@
"NetFx4-AdvSrvs",
"NetFx3"
],
- "InvokeScript": [
-
- ]
+ "InvokeScript": [],
+ "link": "https://christitustech.github.io/winutil/dev/features/Features/dotnet"
},
"WPFFeatureshyperv": {
"Content": "HyperV Virtualization",
@@ -31,7 +30,8 @@
],
"InvokeScript": [
"Start-Process -FilePath cmd.exe -ArgumentList '/c bcdedit /set hypervisorschedulertype classic' -Wait"
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/features/Features/hyperv"
},
"WPFFeatureslegacymedia": {
"Content": "Legacy Media (WMP, DirectPlay)",
@@ -45,9 +45,8 @@
"DirectPlay",
"LegacyComponents"
],
- "InvokeScript": [
-
- ]
+ "InvokeScript": [],
+ "link": "https://christitustech.github.io/winutil/dev/features/Features/legacymedia"
},
"WPFFeaturewsl": {
"Content": "Windows Subsystem for Linux",
@@ -59,9 +58,8 @@
"VirtualMachinePlatform",
"Microsoft-Windows-Subsystem-Linux"
],
- "InvokeScript": [
-
- ]
+ "InvokeScript": [],
+ "link": "https://christitustech.github.io/winutil/dev/features/Features/wsl"
},
"WPFFeaturenfs": {
"Content": "NFS - Network File System",
@@ -80,7 +78,8 @@
"Set-ItemProperty -Path 'HKLM:\\SOFTWARE\\Microsoft\\ClientForNFS\\CurrentVersion\\Default' -Name 'AnonymousGID' -Type DWord -Value 0",
"nfsadmin client start",
"nfsadmin client localhost config fileaccess=755 SecFlavors=+sys -krb5 -krb5i"
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/features/Features/nfs"
},
"WPFFeatureEnableSearchSuggestions": {
"Content": "Enable Search Box Web Suggestions in Registry(explorer restart)",
@@ -88,8 +87,7 @@
"category": "Features",
"panel": "1",
"Order": "a015_",
- "feature": [
- ],
+ "feature": [],
"InvokeScript": [
"
If (!(Test-Path 'HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer')) {
@@ -98,7 +96,8 @@
New-ItemProperty -Path 'HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer' -Name 'DisableSearchBoxSuggestions' -Type DWord -Value 0 -Force
Stop-Process -name explorer -force
"
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/features/Features/EnableSearchSuggestions"
},
"WPFFeatureDisableSearchSuggestions": {
"Content": "Disable Search Box Web Suggestions in Registry(explorer restart)",
@@ -106,8 +105,7 @@
"category": "Features",
"panel": "1",
"Order": "a016_",
- "feature": [
- ],
+ "feature": [],
"InvokeScript": [
"
If (!(Test-Path 'HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer')) {
@@ -116,7 +114,8 @@
New-ItemProperty -Path 'HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer' -Name 'DisableSearchBoxSuggestions' -Type DWord -Value 1 -Force
Stop-Process -name explorer -force
"
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/features/Features/DisableSearchSuggestions"
},
"WPFFeatureRegBackup": {
"Content": "Enable Daily Registry Backup Task 12.30am",
@@ -124,8 +123,7 @@
"category": "Features",
"panel": "1",
"Order": "a017_",
- "feature": [
- ],
+ "feature": [],
"InvokeScript": [
"
New-ItemProperty -Path 'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager' -Name 'EnablePeriodicBackup' -Type DWord -Value 1 -Force
@@ -134,7 +132,8 @@
$trigger = New-ScheduledTaskTrigger -Daily -At 00:30
Register-ScheduledTask -Action $action -Trigger $trigger -TaskName 'AutoRegBackup' -Description 'Create System Registry Backups' -User 'System'
"
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/features/Features/RegBackup"
},
"WPFFeatureEnableLegacyRecovery": {
"Content": "Enable Legacy F8 Boot Recovery",
@@ -142,8 +141,7 @@
"category": "Features",
"panel": "1",
"Order": "a018_",
- "feature": [
- ],
+ "feature": [],
"InvokeScript": [
"
If (!(Test-Path 'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager\\LastKnownGood')) {
@@ -152,7 +150,8 @@
New-ItemProperty -Path 'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager\\LastKnownGood' -Name 'Enabled' -Type DWord -Value 1 -Force
Start-Process -FilePath cmd.exe -ArgumentList '/c bcdedit /Set {Current} BootMenuPolicy Legacy' -Wait
"
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/features/Features/EnableLegacyRecovery"
},
"WPFFeatureDisableLegacyRecovery": {
"Content": "Disable Legacy F8 Boot Recovery",
@@ -160,8 +159,7 @@
"category": "Features",
"panel": "1",
"Order": "a019_",
- "feature": [
- ],
+ "feature": [],
"InvokeScript": [
"
If (!(Test-Path 'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager\\LastKnownGood')) {
@@ -170,14 +168,16 @@
New-ItemProperty -Path 'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager\\LastKnownGood' -Name 'Enabled' -Type DWord -Value 0 -Force
Start-Process -FilePath cmd.exe -ArgumentList '/c bcdedit /Set {Current} BootMenuPolicy Standard' -Wait
"
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/features/Features/DisableLegacyRecovery"
},
- "WPFFeaturesandbox": {
+ "WPFFeaturesSandbox": {
"Content": "Windows Sandbox",
"category": "Features",
"panel": "1",
"Order": "a021_",
- "Description": "Windows Sandbox is a lightweight virtual machine that provides a temporary desktop environment to safely run applications and programs in isolation."
+ "Description": "Windows Sandbox is a lightweight virtual machine that provides a temporary desktop environment to safely run applications and programs in isolation.",
+ "link": "https://christitustech.github.io/winutil/dev/features/Features/Sandbox"
},
"WPFFeatureInstall": {
"Content": "Install Features",
@@ -185,7 +185,8 @@
"panel": "1",
"Order": "a060_",
"Type": "Button",
- "ButtonWidth": "300"
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/features/Features/Install"
},
"WPFPanelAutologin": {
"Content": "Set Up Autologin",
@@ -193,7 +194,8 @@
"Order": "a040_",
"panel": "1",
"Type": "Button",
- "ButtonWidth": "300"
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/features/Fixes/Autologin"
},
"WPFFixesUpdate": {
"Content": "Reset Windows Update",
@@ -201,7 +203,8 @@
"panel": "1",
"Order": "a041_",
"Type": "Button",
- "ButtonWidth": "300"
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/features/Fixes/Update"
},
"WPFFixesNetwork": {
"Content": "Reset Network",
@@ -209,7 +212,8 @@
"Order": "a042_",
"panel": "1",
"Type": "Button",
- "ButtonWidth": "300"
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/features/Fixes/Network"
},
"WPFPanelDISM": {
"Content": "System Corruption Scan",
@@ -217,7 +221,8 @@
"panel": "1",
"Order": "a043_",
"Type": "Button",
- "ButtonWidth": "300"
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/features/Fixes/DISM"
},
"WPFFixesWinget": {
"Content": "WinGet Reinstall",
@@ -225,7 +230,8 @@
"panel": "1",
"Order": "a044_",
"Type": "Button",
- "ButtonWidth": "300"
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/features/Fixes/Winget"
},
"WPFRunAdobeCCCleanerTool": {
"Content": "Remove Adobe Creative Cloud",
@@ -233,55 +239,63 @@
"panel": "1",
"Order": "a045_",
"Type": "Button",
- "ButtonWidth": "300"
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/features/Fixes/RunAdobeCCCleanerTool"
},
"WPFPanelnetwork": {
"Content": "Network Connections",
"category": "Legacy Windows Panels",
"panel": "2",
"Type": "Button",
- "ButtonWidth": "300"
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/features/Legacy-Windows-Panels/network"
},
"WPFPanelcontrol": {
"Content": "Control Panel",
"category": "Legacy Windows Panels",
"panel": "2",
"Type": "Button",
- "ButtonWidth": "300"
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/features/Legacy-Windows-Panels/control"
},
"WPFPanelpower": {
"Content": "Power Panel",
"category": "Legacy Windows Panels",
"panel": "2",
"Type": "Button",
- "ButtonWidth": "300"
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/features/Legacy-Windows-Panels/power"
},
"WPFPanelregion": {
"Content": "Region",
"category": "Legacy Windows Panels",
"panel": "2",
"Type": "Button",
- "ButtonWidth": "300"
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/features/Legacy-Windows-Panels/region"
},
"WPFPanelsound": {
"Content": "Sound Settings",
"category": "Legacy Windows Panels",
"panel": "2",
"Type": "Button",
- "ButtonWidth": "300"
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/features/Legacy-Windows-Panels/sound"
},
"WPFPanelsystem": {
"Content": "System Properties",
"category": "Legacy Windows Panels",
"panel": "2",
"Type": "Button",
- "ButtonWidth": "300"
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/features/Legacy-Windows-Panels/system"
},
"WPFPaneluser": {
"Content": "User Accounts",
"category": "Legacy Windows Panels",
"panel": "2",
"Type": "Button",
- "ButtonWidth": "300"
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/features/Legacy-Windows-Panels/user"
}
}
diff --git a/config/tweaks.json b/config/tweaks.json
index f15bbf72..07c17d85 100644
--- a/config/tweaks.json
+++ b/config/tweaks.json
@@ -27,7 +27,8 @@
"Value": "0",
"OriginalValue": "1"
}
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/AH"
},
"WPFTweaksHiber": {
"Content": "Disable Hibernation",
@@ -52,11 +53,12 @@
}
],
"InvokeScript": [
- "powercfg.exe /hibernate off"
+ "powercfg.exe /hibernate off"
],
"UndoScript": [
- "powercfg.exe /hibernate on"
- ]
+ "powercfg.exe /hibernate on"
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Hiber"
},
"WPFTweaksLaptopHibernation": {
"Content": "Set Hibernation as default (good for laptops)",
@@ -103,7 +105,8 @@
Start-Process -FilePath powercfg -ArgumentList \"/change monitor-timeout-ac 15\" -NoNewWindow -Wait
Start-Process -FilePath powercfg -ArgumentList \"/change monitor-timeout-dc 15\" -NoNewWindow -Wait
"
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/LaptopHibernation"
},
"WPFTweaksHome": {
"Content": "Disable Homegroup",
@@ -122,7 +125,8 @@
"StartupType": "Manual",
"OriginalType": "Automatic"
}
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Home"
},
"WPFTweaksLoc": {
"Content": "Disable Location Tracking",
@@ -159,7 +163,8 @@
"Value": "0",
"OriginalValue": "1"
}
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Loc"
},
"WPFTweaksServices": {
"Content": "Set Services to Manual",
@@ -1578,9 +1583,167 @@
"StartupType": "Manual",
"OriginalType": "Manual"
}
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Services"
},
- "WPFTweaksConsumerFeatures":{
+ "WPFTweaksEdgeDebloat": {
+ "Content": "Debloat Edge",
+ "Description": "Disables various telemetry options, popups, and other annoyances in Edge.",
+ "category": "Essential Tweaks",
+ "panel": "1",
+ "Order": "a016_",
+ "registry": [
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\EdgeUpdate",
+ "Name": "CreateDesktopShortcutDefault",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "EdgeEnhanceImagesEnabled",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "PersonalizationReportingEnabled",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "ShowRecommendationsEnabled",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "HideFirstRunExperience",
+ "Type": "DWord",
+ "Value": "1",
+ "OriginalValue": "0"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "UserFeedbackAllowed",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "ConfigureDoNotTrack",
+ "Type": "DWord",
+ "Value": "1",
+ "OriginalValue": "0"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "AlternateErrorPagesEnabled",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "EdgeCollectionsEnabled",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "EdgeFollowEnabled",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "EdgeShoppingAssistantEnabled",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "MicrosoftEdgeInsiderPromotionEnabled",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "PersonalizationReportingEnabled",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "ShowMicrosoftRewards",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "WebWidgetAllowed",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "DiagnosticData",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "EdgeAssetDeliveryServiceEnabled",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "EdgeCollectionsEnabled",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "CryptoWalletEnabled",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "ConfigureDoNotTrack",
+ "Type": "DWord",
+ "Value": "1",
+ "OriginalValue": "0"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "WalletDonationEnabled",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ }
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/EdgeDebloat"
+ },
+ "WPFTweaksConsumerFeatures": {
"Content": "Disable ConsumerFeatures",
"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)",
"category": "Essential Tweaks",
@@ -1588,13 +1751,14 @@
"Order": "a003_",
"registry": [
{
- "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\CloudContent",
- "OriginalValue": "0",
- "Name": "DisableWindowsConsumerFeatures",
- "Value": "1",
- "Type": "DWord"
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\CloudContent",
+ "OriginalValue": "0",
+ "Name": "DisableWindowsConsumerFeatures",
+ "Value": "1",
+ "Type": "DWord"
}
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/ConsumerFeatures"
},
"WPFTweaksTele": {
"Content": "Disable Telemetry",
@@ -1839,7 +2003,7 @@
"Type": "DWord"
},
{
- "_Comment" : "Driver searching is a function that should be left in",
+ "_Comment": "Driver searching is a function that should be left in",
"Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\DriverSearching",
"OriginalValue": "1",
"Name": "SearchOrderConfig",
@@ -1965,7 +2129,8 @@
# Disable Defender Auto Sample Submission
Set-MpPreference -SubmitSamplesConsent 2 -ErrorAction SilentlyContinue | Out-Null
"
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Tele"
},
"WPFTweaksWifi": {
"Content": "Disable Wifi-Sense",
@@ -1988,7 +2153,8 @@
"Value": "0",
"OriginalValue": "1"
}
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Wifi"
},
"WPFTweaksUTC": {
"Content": "Set Time to UTC (Dual Boot)",
@@ -2004,7 +2170,8 @@
"Value": "1",
"OriginalValue": "0"
}
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/UTC"
},
"WPFTweaksRemoveHomeGallery": {
"Content": "Remove Home and Gallery from explorer",
@@ -2018,14 +2185,15 @@
REG DELETE \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Desktop\\NameSpace\\{f874310e-b6b7-47dc-bc84-b9e6b38f5903}\" /f
REG ADD \"HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\" /f /v \"LaunchTo\" /t REG_DWORD /d \"1\"
"
- ],
- "UndoScript": [
+ ],
+ "UndoScript": [
"
REG ADD \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Desktop\\NameSpace\\{e88865ea-0e1c-4e20-9aa6-edcd0212c87c}\" /f /ve /t REG_SZ /d \"{e88865ea-0e1c-4e20-9aa6-edcd0212c87c}\"
REG ADD \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Desktop\\NameSpace\\{f874310e-b6b7-47dc-bc84-b9e6b38f5903}\" /f /ve /t REG_SZ /d \"CLSID_MSGraphHomeFolder\"
REG DELETE \"HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\" /f /v \"LaunchTo\"
"
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/RemoveHomeGallery"
},
"WPFTweaksDisplay": {
"Content": "Set Display for Performance",
@@ -2131,7 +2299,8 @@
],
"UndoScript": [
"Remove-ItemProperty -Path \"HKCU:\\Control Panel\\Desktop\" -Name \"UserPreferencesMask\""
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/Display"
},
"WPFTweaksDeBloat": {
"Content": "Remove ALL MS Store Apps - NOT RECOMMENDED",
@@ -2172,11 +2341,10 @@
"microsoft.windowscommunicationsapps",
"Microsoft.WindowsFeedbackHub",
"Microsoft.WindowsMaps",
- "Microsoft.WindowsPhone",
+ "Microsoft.YourPhone",
"Microsoft.WindowsSoundRecorder",
"Microsoft.XboxApp",
"Microsoft.ConnectivityStore",
- "Microsoft.CommsPhone",
"Microsoft.ScreenSketch",
"Microsoft.Xbox.TCUI",
"Microsoft.XboxGameOverlay",
@@ -2250,7 +2418,8 @@
$proc.WaitForExit()
}
"
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/DeBloat"
},
"WPFTweaksRestorePoint": {
"Content": "Create Restore Point",
@@ -2277,7 +2446,7 @@
# Check if the SystemRestorePointCreationFrequency value exists
$exists = Get-ItemProperty -path \"HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\SystemRestore\" -Name \"SystemRestorePointCreationFrequency\" -ErrorAction SilentlyContinue
- if($null -eq $exists){
+ if($null -eq $exists) {
write-host 'Changing system to allow multiple restore points per day'
Set-ItemProperty -Path \"HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\SystemRestore\" -Name \"SystemRestorePointCreationFrequency\" -Value \"0\" -Type DWord -Force -ErrorAction Stop | Out-Null
}
@@ -2306,7 +2475,8 @@
Write-Host -ForegroundColor Green \"System Restore Point Created Successfully\"
}
"
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/RestorePoint"
},
"WPFTweaksEndTaskOnTaskbar": {
"Content": "Enable End Task With Right Click",
@@ -2339,7 +2509,8 @@
# Set the property, creating it if it doesn't exist
New-ItemProperty -Path $path -Name $name -PropertyType DWord -Value $value -Force | Out-Null"
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/EndTaskOnTaskbar"
},
"WPFTweaksPowershell7": {
"Content": "Change Windows Terminal default: PowerShell 5 -> PowerShell 7",
@@ -2352,7 +2523,8 @@
],
"UndoScript": [
"Invoke-WPFTweakPS7 -action \"PS5\""
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Powershell7"
},
"WPFTweaksPowershell7Tele": {
"Content": "Disable Powershell 7 Telemetry",
@@ -2365,7 +2537,8 @@
],
"UndoScript": [
"[Environment]::SetEnvironmentVariable('POWERSHELL_TELEMETRY_OPTOUT', '', 'Machine')"
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Powershell7Tele"
},
"WPFTweaksStorage": {
"Content": "Disable Storage Sense",
@@ -2378,27 +2551,22 @@
],
"UndoScript": [
"Set-ItemProperty -Path \"HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\StorageSense\\Parameters\\StoragePolicy\" -Name \"01\" -Value 1 -Type Dword -Force"
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Storage"
},
"WPFTweaksRemoveEdge": {
- "Content": "Remove Microsoft Edge - NOT RECOMMENDED",
- "Description": "Removes MS Edge when it gets reinstalled by updates. Credit: AveYo",
+ "Content": "Remove Microsoft Edge",
+ "Description": "Removes MS Edge when it gets reinstalled by updates. Credit: Psyirius",
"category": "z__Advanced Tweaks - CAUTION",
"panel": "1",
"Order": "a029_",
"InvokeScript": [
- "
- #:: Standalone script by AveYo Source: https://raw.githubusercontent.com/AveYo/fox/main/Edge_Removal.bat
- Invoke-WebRequest -Uri \"https://raw.githubusercontent.com/ChrisTitusTech/winutil/main/edgeremoval.bat\" -OutFile \"$ENV:TEMP\\edgeremoval.bat\"
- Start-Process $ENV:temp\\edgeremoval.bat
- "
+ "Uninstall-WinUtilEdgeBrowser -action \"Uninstall\""
],
"UndoScript": [
- "
- Write-Host \"Install Microsoft Edge\"
- Start-Process -FilePath winget -ArgumentList \"install -e --accept-source-agreements --accept-package-agreements --silent Microsoft.Edge \" -NoNewWindow -Wait
- "
- ]
+ "Uninstall-WinUtilEdgeBrowser -action \"Install\""
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/RemoveEdge"
},
"WPFTweaksRemoveCopilot": {
"Content": "Disable Microsoft Copilot",
@@ -2408,7 +2576,6 @@
"Order": "a025_",
"registry": [
{
-
"Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsCopilot",
"Name": "TurnOffWindowsCopilot",
"Type": "DWord",
@@ -2441,7 +2608,8 @@
Write-Host \"Install Copilot\"
dism /online /add-package /package-name:Microsoft.Windows.Copilot
"
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/RemoveCopilot"
},
"WPFTweaksDisableLMS1": {
"Content": "Disable Intel MM (vPro LMS)",
@@ -2450,7 +2618,7 @@
"panel": "1",
"Order": "a026_",
"InvokeScript": [
- "
+ "
Write-Host \"Kill LMS\"
$serviceName = \"LMS\"
Write-Host \"Stopping and disabling service: $serviceName\"
@@ -2498,7 +2666,8 @@
Write-Host \"LMS vPro needs to be redownloaded from intel.com\"
"
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableLMS1"
},
"WPFTweaksRemoveOnedrive": {
"Content": "Remove OneDrive",
@@ -2511,17 +2680,16 @@
$OneDrivePath = $($env:OneDrive)
Write-Host \"Removing OneDrive\"
$regPath = \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OneDriveSetup.exe\"
- if (Test-Path $regPath){
+ if (Test-Path $regPath) {
$OneDriveUninstallString = Get-ItemPropertyValue \"$regPath\" -Name \"UninstallString\"
$OneDriveExe, $OneDriveArgs = $OneDriveUninstallString.Split(\" \")
Start-Process -FilePath $OneDriveExe -ArgumentList \"$OneDriveArgs /silent\" -NoNewWindow -Wait
- }
- else{
+ } else {
Write-Host \"Onedrive dosn't seem to be installed anymore\" -ForegroundColor Red
return
}
# Check if OneDrive got Uninstalled
- if (-not (Test-Path $regPath)){
+ if (-not (Test-Path $regPath)) {
Write-Host \"Copy downloaded Files from the OneDrive Folder to Root UserProfile\"
Start-Process -FilePath powershell -ArgumentList \"robocopy '$($OneDrivePath)' '$($env:USERPROFILE.TrimEnd())\\' /mov /e /xj\" -NoNewWindow -Wait
@@ -2583,8 +2751,7 @@
Write-Host \"Please Note - The OneDrive folder at $OneDrivePath may still have items in it. You must manually delete it, but all the files should already be copied to the base user folder.\"
Write-Host \"If there are Files missing afterwards, please Login to Onedrive.com and Download them manually\" -ForegroundColor Yellow
Start-Sleep 5
- }
- else{
+ } else {
Write-Host \"Something went Wrong during the Unistallation of OneDrive\" -ForegroundColor Red
}
"
@@ -2594,7 +2761,8 @@
Write-Host \"Install OneDrive\"
Start-Process -FilePath winget -ArgumentList \"install -e --accept-source-agreements --accept-package-agreements --silent Microsoft.OneDrive \" -NoNewWindow -Wait
"
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/RemoveOnedrive"
},
"WPFTweaksDisableNotifications": {
"Content": "Disable Notification Tray/Calendar",
@@ -2617,7 +2785,8 @@
"Value": "0",
"OriginalValue": "1"
}
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableNotifications"
},
"WPFTweaksDebloatAdobe": {
"Content": "Adobe Debloat",
@@ -2765,7 +2934,8 @@
"StartupType": "Manual",
"OriginalType": "Automatic"
}
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/DebloatAdobe"
},
"WPFTweaksBlockAdobeNet": {
"Content": "Adobe Network Block",
@@ -2784,8 +2954,7 @@
try {
Invoke-WebRequest -Uri $remoteHostsUrl -OutFile $tempHostsPath
Write-Output \"Downloaded the remote HOSTS file to a temporary location.\"
- }
- catch {
+ } catch {
Write-Error \"Failed to download the HOSTS file. Error: $_\"
}
@@ -2811,8 +2980,7 @@
$combinedContent | Set-Content $localHostsPath -Encoding ASCII
Write-Output \"Successfully added the AdobeNetBlock.\"
}
- }
- catch {
+ } catch {
Write-Error \"Error during processing: $_\"
}
@@ -2823,8 +2991,7 @@
try {
Invoke-Expression \"ipconfig /flushdns\"
Write-Output \"DNS cache flushed successfully.\"
- }
- catch {
+ } catch {
Write-Error \"Failed to flush DNS cache. Error: $_\"
}
"
@@ -2837,8 +3004,7 @@
# Load the content of the HOSTS file
try {
$hostsContent = Get-Content $localHostsPath -ErrorAction Stop
- }
- catch {
+ } catch {
Write-Error \"Failed to load the HOSTS file. Error: $_\"
return
}
@@ -2864,8 +3030,7 @@
try {
$newContent | Set-Content $localHostsPath -Encoding ASCII
Write-Output \"Successfully removed the AdobeNetBlock section from the HOSTS file.\"
- }
- catch {
+ } catch {
Write-Error \"Failed to write back to the HOSTS file. Error: $_\"
}
@@ -2873,12 +3038,12 @@
try {
Invoke-Expression \"ipconfig /flushdns\"
Write-Output \"DNS cache flushed successfully.\"
- }
- catch {
+ } catch {
Write-Error \"Failed to flush DNS cache. Error: $_\"
}
"
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/BlockAdobeNet"
},
"WPFTweaksRightClickMenu": {
"Content": "Set Classic Right-Click Menu ",
@@ -2902,7 +3067,8 @@
$process = Get-Process -Name \"explorer\"
Stop-Process -InputObject $process
"
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/RightClickMenu"
},
"WPFTweaksDiskCleanup": {
"Content": "Run Disk Cleanup",
@@ -2915,7 +3081,8 @@
cleanmgr.exe /d C: /VERYLOWDISK
Dism.exe /online /Cleanup-Image /StartComponentCleanup /ResetBase
"
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/DiskCleanup"
},
"WPFTweaksDeleteTempFiles": {
"Content": "Delete Temporary Files",
@@ -2926,7 +3093,8 @@
"InvokeScript": [
"Get-ChildItem -Path \"C:\\Windows\\Temp\" *.* -Recurse | Remove-Item -Force -Recurse
Get-ChildItem -Path $env:TEMP *.* -Recurse | Remove-Item -Force -Recurse"
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/DeleteTempFiles"
},
"WPFTweaksDVR": {
"Content": "Disable GameDVR",
@@ -2970,7 +3138,8 @@
"OriginalValue": "1",
"Type": "DWord"
}
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/DVR"
},
"WPFTweaksTeredo": {
"Content": "Disable Teredo",
@@ -2992,7 +3161,8 @@
],
"UndoScript": [
"netsh interface teredo set state default"
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Teredo"
},
"WPFTweaksDisableipsix": {
"Content": "Disable IPv6",
@@ -3014,7 +3184,8 @@
],
"UndoScript": [
"Enable-NetAdapterBinding -Name \"*\" -ComponentID ms_tcpip6"
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/Disableipsix"
},
"WPFTweaksDisableBGapps": {
"Content": "Disable Background Apps",
@@ -3030,7 +3201,8 @@
"OriginalValue": "0",
"Type": "DWord"
}
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableBGapps"
},
"WPFTweaksDisableFSO": {
"Content": "Disable Fullscreen Optimizations",
@@ -3046,7 +3218,8 @@
"OriginalValue": "0",
"Type": "DWord"
}
- ]
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableFSO"
},
"WPFToggleDarkMode": {
"Content": "Dark Theme for Windows",
@@ -3054,7 +3227,8 @@
"category": "Customize Preferences",
"panel": "2",
"Order": "a100_",
- "Type": "Toggle"
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/DarkMode"
},
"WPFToggleBingSearch": {
"Content": "Bing Search in Start Menu",
@@ -3062,7 +3236,8 @@
"category": "Customize Preferences",
"panel": "2",
"Order": "a101_",
- "Type": "Toggle"
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/BingSearch"
},
"WPFToggleNumLock": {
"Content": "NumLock on Startup",
@@ -3070,7 +3245,8 @@
"category": "Customize Preferences",
"panel": "2",
"Order": "a102_",
- "Type": "Toggle"
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/NumLock"
},
"WPFToggleVerboseLogon": {
"Content": "Verbose Messages During Logon",
@@ -3078,7 +3254,8 @@
"category": "Customize Preferences",
"panel": "2",
"Order": "a103_",
- "Type": "Toggle"
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/VerboseLogon"
},
"WPFToggleSnapWindow": {
"Content": "Snap Window",
@@ -3086,7 +3263,8 @@
"category": "Customize Preferences",
"panel": "2",
"Order": "a104_",
- "Type": "Toggle"
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/SnapWindow"
},
"WPFToggleSnapFlyout": {
"Content": "Snap Assist Flyout",
@@ -3094,7 +3272,8 @@
"category": "Customize Preferences",
"panel": "2",
"Order": "a105_",
- "Type": "Toggle"
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/SnapFlyout"
},
"WPFToggleSnapSuggestion": {
"Content": "Snap Assist Suggestion",
@@ -3102,7 +3281,8 @@
"category": "Customize Preferences",
"panel": "2",
"Order": "a106_",
- "Type": "Toggle"
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/SnapSuggestion"
},
"WPFToggleMouseAcceleration": {
"Content": "Mouse Acceleration",
@@ -3110,7 +3290,8 @@
"category": "Customize Preferences",
"panel": "2",
"Order": "a107_",
- "Type": "Toggle"
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/MouseAcceleration"
},
"WPFToggleStickyKeys": {
"Content": "Sticky Keys",
@@ -3118,7 +3299,8 @@
"category": "Customize Preferences",
"panel": "2",
"Order": "a108_",
- "Type": "Toggle"
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/StickyKeys"
},
"WPFToggleHiddenFiles": {
"Content": "Show Hidden Files",
@@ -3126,7 +3308,8 @@
"category": "Customize Preferences",
"panel": "2",
"Order": "a200_",
- "Type": "Toggle"
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/HiddenFiles"
},
"WPFToggleShowExt": {
"Content": "Show File Extensions",
@@ -3134,7 +3317,8 @@
"category": "Customize Preferences",
"panel": "2",
"Order": "a201_",
- "Type": "Toggle"
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/ShowExt"
},
"WPFToggleTaskbarSearch": {
"Content": "Search Button in Taskbar",
@@ -3142,7 +3326,8 @@
"category": "Customize Preferences",
"panel": "2",
"Order": "a202_",
- "Type": "Toggle"
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/TaskbarSearch"
},
"WPFToggleTaskView": {
"Content": "Task View Button in Taskbar",
@@ -3150,7 +3335,8 @@
"category": "Customize Preferences",
"panel": "2",
"Order": "a203_",
- "Type": "Toggle"
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/TaskView"
},
"WPFToggleTaskbarWidgets": {
"Content": "Widgets Button in Taskbar",
@@ -3158,7 +3344,8 @@
"category": "Customize Preferences",
"panel": "2",
"Order": "a204_",
- "Type": "Toggle"
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/TaskbarWidgets"
},
"WPFToggleTaskbarAlignment": {
"Content": "Center Taskbar Items",
@@ -3166,7 +3353,8 @@
"category": "Customize Preferences",
"panel": "2",
"Order": "a204_",
- "Type": "Toggle"
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/TaskbarAlignment"
},
"WPFToggleDetailedBSoD": {
"Content": "Detailed BSoD",
@@ -3174,14 +3362,16 @@
"category": "Customize Preferences",
"panel": "2",
"Order": "a205_",
- "Type": "Toggle"
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/DetailedBSoD"
},
"WPFOOSUbutton": {
"Content": "Run OO Shutup 10",
"category": "z__Advanced Tweaks - CAUTION",
"panel": "1",
"Order": "a039_",
- "Type": "Button"
+ "Type": "Button",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/OOSUbutton"
},
"WPFchangedns": {
"Content": "DNS",
@@ -3189,21 +3379,24 @@
"panel": "1",
"Order": "a040_",
"Type": "Combobox",
- "ComboItems": "Default DHCP Google Cloudflare Cloudflare_Malware Cloudflare_Malware_Adult Open_DNS Quad9 AdGuard_Ads_Trackers AdGuard_Ads_Trackers_Malware_Adult"
+ "ComboItems": "Default DHCP Google Cloudflare Cloudflare_Malware Cloudflare_Malware_Adult Open_DNS Quad9 AdGuard_Ads_Trackers AdGuard_Ads_Trackers_Malware_Adult",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/changedns"
},
"WPFTweaksbutton": {
"Content": "Run Tweaks",
"category": "z__Advanced Tweaks - CAUTION",
"panel": "1",
"Order": "a041_",
- "Type": "Button"
+ "Type": "Button",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/button"
},
"WPFUndoall": {
"Content": "Undo Selected Tweaks",
"category": "z__Advanced Tweaks - CAUTION",
"panel": "1",
"Order": "a042_",
- "Type": "Button"
+ "Type": "Button",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/Undoall"
},
"WPFAddUltPerf": {
"Content": "Add and Activate Ultimate Performance Profile",
@@ -3211,7 +3404,8 @@
"panel": "2",
"Order": "a080_",
"Type": "Button",
- "ButtonWidth": "300"
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Performance-Plans/AddUltPerf"
},
"WPFRemoveUltPerf": {
"Content": "Remove Ultimate Performance Profile",
@@ -3219,7 +3413,8 @@
"panel": "2",
"Order": "a081_",
"Type": "Button",
- "ButtonWidth": "300"
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Performance-Plans/RemoveUltPerf"
},
"WPFWinUtilShortcut": {
"Content": "Create WinUtil Shortcut",
@@ -3227,6 +3422,7 @@
"panel": "2",
"Order": "a082_",
"Type": "Button",
- "ButtonWidth": "300"
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Shortcuts/Shortcut"
}
}
diff --git a/docs/KnownIssues.md b/docs/KnownIssues.md
index b95a0d68..0e834676 100644
--- a/docs/KnownIssues.md
+++ b/docs/KnownIssues.md
@@ -176,4 +176,4 @@ Get-Service -Name "XboxGipSvc" | Set-Service -StartupType Automatic
7. **ISO File Integrity:**
Ensure that the ISO file you are trying to mount is uncorrupted. Try mounting a different ISO file to see if the issue persists.
-* If the problem persists after trying these steps, additional troubleshooting is required. Consider seeking assistance from Microsoft support or community forums for more specific guidance based on your system configuration and the software you use to mount the ISO.
\ No newline at end of file
+* If the problem persists after trying these steps, additional troubleshooting is required. Consider seeking assistance from Microsoft support or community forums for more specific guidance based on your system configuration and the software you use to mount the ISO.
diff --git a/docs/changelog.md b/docs/changelog.md
deleted file mode 100644
index 498aee89..00000000
--- a/docs/changelog.md
+++ /dev/null
@@ -1,175 +0,0 @@
-
-# Changelog
-
-WinUtil change log received from GitHub Releases, it's autogenerated using GitHub Actions.
-
-> [!WARNING]
-> This file **SHOULD NOT** be edited directly, any PRs that tries changing it directly will either be requested on not changing it, or it'll get rejected.
-
-# Release 24.07.17
-
-![GitHub Downloads (specific asset, specific tag)](https://img.shields.io/github/downloads/ChrisTitusTech/winutil/24.07.17/winutil.ps1)
-
-## What's Changed
-* Pump up the value of 'operations-per-run' Field for 'Close Old Issues' Workflow by @og-mrk in https://github.com/ChrisTitusTech/winutil/pull/2219
-* Improvements/Fixes for the Release Actions by @Marterich in https://github.com/ChrisTitusTech/winutil/pull/2221
-* Move Launch Issues from ReadMe to Known Issues by @MyDrift-user in https://github.com/ChrisTitusTech/winutil/pull/2222
-* [01] Refactoring UI code by @og-mrk in https://github.com/ChrisTitusTech/winutil/pull/2274
-* Delete Un-used 'helperscript.ps1' File by @og-mrk in https://github.com/ChrisTitusTech/winutil/pull/2223
-* Known Issues: Removed redundancy caused by resolving the merge conflict. by @MyDrift-user in https://github.com/ChrisTitusTech/winutil/pull/2224
-* Redirect dev to latest Full Release if can't find prerelease by @MyDrift-user in https://github.com/ChrisTitusTech/winutil/pull/2225
-* Add 'CONTRIBUTING.md' File by @og-mrk in https://github.com/ChrisTitusTech/winutil/pull/2227
-* Update main.ps1 by @eltociear in https://github.com/ChrisTitusTech/winutil/pull/2229
-* Added get installed check for classic right click menu tweak by @btstromberg in https://github.com/ChrisTitusTech/winutil/pull/2231
-* fix syntax highlighting in .MDs by @MyDrift-user in https://github.com/ChrisTitusTech/winutil/pull/2235
-* Add "Shotcut" in applications by @ksb2311 in https://github.com/ChrisTitusTech/winutil/pull/2238
-* Fix Icon Support for Shortcut Creation by @og-mrk in https://github.com/ChrisTitusTech/winutil/pull/2242
-* Allow for tasks to be distinguished by @CodingWonders in https://github.com/ChrisTitusTech/winutil/pull/2251
-* Fix & Rename Nilesoft Shell by @MyDrift-user in https://github.com/ChrisTitusTech/winutil/pull/2261
-* Fix: Ultimate Performance Plan by @MyDrift-user in https://github.com/ChrisTitusTech/winutil/pull/2267
-* Change Main loop from 'ForEach' to 'For' inside 'Install-WinUtilProgramWinget' Private Function by @og-mrk in https://github.com/ChrisTitusTech/winutil/pull/2271
-* Fix 'Close Old Issues' Workflow by @og-mrk in https://github.com/ChrisTitusTech/winutil/pull/2272
-* Add new 'Disable Powershell 7 Telemetry' Tweak by @og-mrk in https://github.com/ChrisTitusTech/winutil/pull/2273
-* Fix Typo in 'Invoke-WinUtilTaskbarSearch' Private Function by @og-mrk in https://github.com/ChrisTitusTech/winutil/pull/2275
-* Update applications.json by @dhruvmistry2000 in https://github.com/ChrisTitusTech/winutil/pull/2290
-* Add app: Modern Flyouts by @MyDrift-user in https://github.com/ChrisTitusTech/winutil/pull/2293
-* Adds PR template by @Real-MullaC in https://github.com/ChrisTitusTech/winutil/pull/2299
-* Add download counter by @Marterich in https://github.com/ChrisTitusTech/winutil/pull/2300
-* Change Kicad category by @Joanty24 in https://github.com/ChrisTitusTech/winutil/pull/2302
-* Fix: PR Template file extension by @MyDrift-user in https://github.com/ChrisTitusTech/winutil/pull/2304
-* Rework JDK packages with Corretto LTS ones by @meenbeese in https://github.com/ChrisTitusTech/winutil/pull/2305
-* Added IPv6 DNS by @Joanty24 in https://github.com/ChrisTitusTech/winutil/pull/2303
-* Create createchangelog.yml for docs page by @Real-MullaC in https://github.com/ChrisTitusTech/winutil/pull/2346
-* Adds all files for winutil docs by @Real-MullaC in https://github.com/ChrisTitusTech/winutil/pull/2342
-* Adds Community Discord to ReadMe file by @Real-MullaC in https://github.com/ChrisTitusTech/winutil/pull/2343
-* Discussions close on PR merge by @Real-MullaC in https://github.com/ChrisTitusTech/winutil/pull/2336
-* Documentation & ReadMe Cleanup by @MyDrift-user in https://github.com/ChrisTitusTech/winutil/pull/2310
-* Added MicroWin documentation by @CodingWonders in https://github.com/ChrisTitusTech/winutil/pull/2349
-* Update Install-WinUtilProgramChoco.ps1 by @Real-MullaC in https://github.com/ChrisTitusTech/winutil/pull/2307
-* Addition of Fork by @Real-MullaC in https://github.com/ChrisTitusTech/winutil/pull/2313
-* Hidden File Tweaks by @Real-MullaC in https://github.com/ChrisTitusTech/winutil/pull/2320
-* Optimized: Shortcut Creation and PS7 Tweak by @Marterich in https://github.com/ChrisTitusTech/winutil/pull/2314
-* Addition of multiple applications by @Real-MullaC in https://github.com/ChrisTitusTech/winutil/pull/2316
-* Add Application: ZoomIt by @MyDrift-user in https://github.com/ChrisTitusTech/winutil/pull/2319
-* Fix Compile Errors on PowerShell 5 by @Marterich in https://github.com/ChrisTitusTech/winutil/pull/2322
-* Add application: Lenovo Legion Toolkit by @Klusio19 in https://github.com/ChrisTitusTech/winutil/pull/2324
-* Remove Edge leftovers from WOW6432Node by @CodingWonders in https://github.com/ChrisTitusTech/winutil/pull/2328
-* Fix: End Task with right click by @MyDrift-user in https://github.com/ChrisTitusTech/winutil/pull/2331
-* Adds Palemoon and closes old issues if not needed by @Real-MullaC in https://github.com/ChrisTitusTech/winutil/pull/2332
-* Change the titles for each section from Bold Text to Header 2 in Bug Report Issue Template by @og-mrk in https://github.com/ChrisTitusTech/winutil/pull/2339
-* Optimize badges by @Marterich in https://github.com/ChrisTitusTech/winutil/pull/2356
-* Add New Windows 11 Specific Toggle - The 'Taskbar Alignment' Toggle by @og-mrk in https://github.com/ChrisTitusTech/winutil/pull/2347
-* Make the 'Youtube Tutorial' Header be the link instead of the Youtube Thumbnail for it, Making the 'README.md' even shorter by @og-mrk in https://github.com/ChrisTitusTech/winutil/pull/2359
-* Fix WinUtil Crashing on Startup - Xaml Error from Generated Applications List by @og-mrk in https://github.com/ChrisTitusTech/winutil/pull/2361
-* [Wiki] Automatically enabling Dark/Light mode set by user's browser Preference by @Angxddeep in https://github.com/ChrisTitusTech/winutil/pull/2366
-* Fixes an issue with create changelog not working by @Real-MullaC in https://github.com/ChrisTitusTech/winutil/pull/2375
-* Updates PR template so disscussion and issue is on the same line. by @Real-MullaC in https://github.com/ChrisTitusTech/winutil/pull/2363
-* Update close-discussion.yml so it detects based on new previous PR by @Real-MullaC in https://github.com/ChrisTitusTech/winutil/pull/2364
-* Repo Cleanup by @MyDrift-user in https://github.com/ChrisTitusTech/winutil/pull/2367
-* Add /close command for the active contributors to close issues by @Marterich in https://github.com/ChrisTitusTech/winutil/pull/2380
-* Update workflows to remove `::set-output` by @wojsmol in https://github.com/ChrisTitusTech/winutil/pull/2384
-* Fixes release log by @Real-MullaC in https://github.com/ChrisTitusTech/winutil/pull/2377
-* Bump actions/checkout from 2 to 4 by @dependabot in https://github.com/ChrisTitusTech/winutil/pull/2389
-* Bump actions/cache from 2 to 4 by @dependabot in https://github.com/ChrisTitusTech/winutil/pull/2390
-
-## New Contributors
-* @btstromberg made their first contribution in https://github.com/ChrisTitusTech/winutil/pull/2231
-* @ksb2311 made their first contribution in https://github.com/ChrisTitusTech/winutil/pull/2238
-* @dhruvmistry2000 made their first contribution in https://github.com/ChrisTitusTech/winutil/pull/2290
-* @Klusio19 made their first contribution in https://github.com/ChrisTitusTech/winutil/pull/2324
-* @Angxddeep made their first contribution in https://github.com/ChrisTitusTech/winutil/pull/2366
-* @wojsmol made their first contribution in https://github.com/ChrisTitusTech/winutil/pull/2384
-* @dependabot made their first contribution in https://github.com/ChrisTitusTech/winutil/pull/2389
-
-**Full Changelog**: https://github.com/ChrisTitusTech/winutil/compare/24.06.29...24.07.17
-
-# Release 24.06.28
-
-![GitHub Downloads (specific asset, specific tag)](https://img.shields.io/github/downloads/ChrisTitusTech/winutil/24.06.28/winutil.ps1)
-
-## What's Changed
-* Rename Application: ForceAutoHDR by @MyDrift-user in https://github.com/ChrisTitusTech/winutil/pull/2081
-* Remove force install of Winget + Small improvements by @Marterich in https://github.com/ChrisTitusTech/winutil/pull/2083
-* Remove WwanSvc Service From Manual Services Tweak by @Marterich in https://github.com/ChrisTitusTech/winutil/pull/2086
-* Added Plex Desktop along side Plex Media Server by @PedroBuffon in https://github.com/ChrisTitusTech/winutil/pull/2091
-* Remove java 20 by @brrock in https://github.com/ChrisTitusTech/winutil/pull/2095
-* Remove oosu essential tweak by @Marterich in https://github.com/ChrisTitusTech/winutil/pull/2099
-* Removed Free File Sync because of Malware warning on choco repo by @Marterich in https://github.com/ChrisTitusTech/winutil/pull/2101
-* Remove unused Functions by @Marterich in https://github.com/ChrisTitusTech/winutil/pull/2102
-* Remove Extra Tabs in 'applications.json' File by @og-mrk in https://github.com/ChrisTitusTech/winutil/pull/2113
-* Fix Compile -Run always starting as PS5 by @Marterich in https://github.com/ChrisTitusTech/winutil/pull/2165
-* Fix White space (bottom right of Application Tab) by @MyDrift-user in https://github.com/ChrisTitusTech/winutil/pull/2120
-* Delete Un-used 'logs' Folder by @og-mrk in https://github.com/ChrisTitusTech/winutil/pull/2135
-* Fixes Edge Removal by @Real-MullaC in https://github.com/ChrisTitusTech/winutil/pull/2136
-* Added kicad by @Real-MullaC in https://github.com/ChrisTitusTech/winutil/pull/2138
-* Addition of Dropbox by @Real-MullaC in https://github.com/ChrisTitusTech/winutil/pull/2200
-* Spelling Fix: uninstall button by @MyDrift-user in https://github.com/ChrisTitusTech/winutil/pull/2197
-* Add Overlay to Taskbaritem by @MyDrift-user in https://github.com/ChrisTitusTech/winutil/pull/2196
-
-## New Contributors
-* @PedroBuffon made their first contribution in https://github.com/ChrisTitusTech/winutil/pull/2091
-* @brrock made their first contribution in https://github.com/ChrisTitusTech/winutil/pull/2095
-
-**Full Changelog**: https://github.com/ChrisTitusTech/winutil/compare/24.06.25...24.06.28
-
-# Release 24.06.18
-
-## What's Changed
-* Update Invoke-WinUtilNumLock.ps1 by @ChrisTitusTech in https://github.com/ChrisTitusTech/winutil/pull/2104
-
-
-**Full Changelog**: https://github.com/ChrisTitusTech/winutil/compare/24.06.11...24.06.18
-
-# Release 24.06.11
-
-This release is an auto generated release.
-
-From now on any pull request on the main branch generates a release like this, which ensures you can rewind in time to ANY version of winutil. Also this makes it easy to launch winutil from github.com instead of using raw GitHub which is blocked in some countries. Big shoutout to KonTy for the auto release idea!
-
-## What's Changed
-* Fix Numlock toggle by @ChrisTitusTech in https://github.com/ChrisTitusTech/winutil/pull/2044
-* fix typo by @nikolan123 in https://github.com/ChrisTitusTech/winutil/pull/2041
-* Simplify 'Close Old Issues' Workflow by using 'actions/stale' GitHub Action by @og-mrk in https://github.com/ChrisTitusTech/winutil/pull/2055
-* Compile Cleanup and Tweak Fixes by @ChrisTitusTech in https://github.com/ChrisTitusTech/winutil/pull/2062
-* Fix the URL of an Example in 'README.md' File by @og-mrk in https://github.com/ChrisTitusTech/winutil/pull/2063
-
-## New Contributors
-* @nikolan123 made their first contribution in https://github.com/ChrisTitusTech/winutil/pull/2041
-
-**Full Changelog**: https://github.com/ChrisTitusTech/winutil/compare/v2024.06.05...24.06.11
-
-# WinUtil 2024.06.05 Bug Fixes and Feature Additions
-
-- Applications cleanup (Few unmaintained applications culled)
-- Application Additions
-- Various Microwin fixes thanks to @KonTy
-- Better application filtering @Marterich
-- CoPilot Removal @KonTy @ModernTTY
-- Import Drivers @CodingWonders
-- OOSU updates @Marterich
-- Fix Auto HDR @og-mrk
-- Only install chocolatey if needed @Marterich
-- Various winget fixes @og-mrk
-- Adobe Fixes @MyDrift-user
-- Disable Fullscreen Optimizations Tweak Added
-- Tweaks reorder and cleanup
-- Chocolatey fallback fix @ty802
-
-This was a massive 100+ commit PR and the last of it's size. Going forward I will be making multiple branches to separate the pr's into. This will help seperate application PRs, GUI PRs, Tweaks, and others into their own branches based on features.
-
-# WinUtil 2024.04.20 Bug Fixes and Issue Fixes
-
-- Toggle Widgets fix @og-mrk
-- Fix Special Characters causing errors in JSON files @og-mrk
-- Restart explorer on classic right click tweak @og-mrk
-- Fix Disable Storage Sense @og-mrk
-- Robocopy fix when username has space in during OneDrive uninstall @og-mrk
-- Multiple Winget Fixes made by @ruxunderscore
-- Fix DISM Conversion for ESD files @CodingWonders
-- Independent Edge Removal Update by @DaEpicR
-- Disable SCOOBE @ICTdE
-- O&O Tweaks update by @Marterich
-- Bugfix for Window Restore Creation by @ChrisTitusTech
-- Fix Winget Installs for Default -> User Scope -> Unelevated if one fails it trys the next method. @ChrisTitusTech
-- Fix Unit Tests for Functions @ChrisTitusTech
-
diff --git a/docs/contribute.md b/docs/contribute.md
index f76b5ab7..457c880c 100644
--- a/docs/contribute.md
+++ b/docs/contribute.md
@@ -1,106 +1,3 @@
-# How to Contribute?
+--8<-- ".github/CONTRIBUTING.md"
-## Testing
-
-* Test the latest changes to WinUtil by running the pre-release and reporting issues you are encountering to help us continually improve WinUtil!
-
-#### **Run the latest pre-release**
- ```ps1
- irm christitus.com/windev | iex
- ```
-
-!!! bug "Keep in mind"
-
- This is a pre-release and should be treated as such. It exists for developers to test the utility and report or fix bugs before they get added to the stable release. Don't use it in production!
-
-## Issues
-
-* If you encounter any challenges or problems with the script, I kindly request that you submit them via the "Issues" tab on the GitHub repository. By filling out the provided template, you can provide specific details about the issue, allowing me (and others in the community) to promptly address any bugs or consider feature requests.
-
-## Contribute Code
-
-* Pull requests are now handled directly on the **MAIN branch**. This was done since we can now select specific releases to launch via releases in GitHub.
-
-* If you're doing code changes, then you can submit a PR to `main` branch, but I am very selective about these.
-
-!!! warning "Important"
-
- Do not use a code formatter, make massive amounts of line changes, or make multiple feature changes. EACH FEATURE CHANGE SHOULD BE IT'S OWN PULL REQUEST!
-
-* When creating pull requests, it is essential to thoroughly document all changes made. This includes, but is not limited to, documenting any additions made to the `tweaks` section and corresponding `undo tweak`, so users are able to remove the newly added tweaks if necessary, and comprehensive documentation is required for all code changes. Document your changes and briefly explain why you made your changes in your Pull Request Description. Failure to adhere to this format may result in the denial of the pull request. Additionally, any code lacking sufficient documentation may also be denied.
-
-* By following these guidelines, we can maintain a high standard of quality and ensure that the codebase remains organized and well-documented.
-
-!!! note
-
- When creating a function, please include "WPF" or "WinUtil" in the file name so it can be loaded into the runspace.
-
-## Walk through
-
-* This is a guide for beginners. If you are still having issues, look at the following official GitHub documentation:
- * [Commit through WEB](https://docs.github.com/en/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/about-commits)
- * [Commit through GitHub Desktop](https://docs.github.com/en/desktop/making-changes-in-a-branch/committing-and-reviewing-changes-to-your-project-in-github-desktop#about-commits)
- * [Create a Pull Request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request)
-
-
-### Overview
-
-``` mermaid
-graph LR
- A[Fork Project] --> B[Clone Repository];
- B --> C[Create New Branch];
- C --> D[Make Changes];
- D --> G[Test Changes];
- G --> H{Tests Passed?};
- H -->|Yes| E[Commit Changes];
- E --> F[Push Branch];
- H -->|No| J[Fix Issues];
- F --> K[Create Pull Request];
- K --> L[Fill out PR template];
- J --> G;
-```
-!!! info
-
- This is a diagram to guide you through the process. It may vary depending on the type of change you're making.
-
-### Fork the Repo
-* Fork the WinUtil Repository [here](https://github.com/ChrisTitusTech/winutil) to create a copy that will be available in your repository list.
-![Fork Image](assets/Fork-Button-Dark.png#only-dark)
-![FOrk Image](assets/Fork-Button-Light.png#only-light)
-
-### Clone the Fork
-!!! tip
-
- While you can make your changes directly through the Web, we recommend cloning the repo to your device using the application GitHub Desktop (available in WinUtil) to test your fork easily.
-
-* Install GitHub Desktop if it is not already installed.
-* Log in using the same GitHub account you used to fork WinUtil.
-* Choose the fork under "Your Repositories" and press "clone {repo name}"
-* Create a new branch and name it something relatable to your changes.
-
-* Now you can modify WinUtil to your liking using your preferred text editor.
-
-
-### Testing your changes
-
-* To test to see if your changes work as intended run following commands in a powershell teminal as admin:
-
-* Change the directory where you are running the commands to the forked project.
-* `cd {path to the folder with the compile.ps1}`
-* Run the following command to compile and run WinUtil:
-* `.\Compile.ps1 -run`
-* ![Compile](assets/Compile.png)
-* After seeing that your changes work properly, feel free to commit the changes to the repository and make a PR. For help on that, follow the documentation below.
-
-### Committing the changes
-* Before committing your changes, please discard changes made to the `winutil.ps1` file, like the following:
-- ![Push Commit Image](assets/Discard-GHD.png)
-* Now, commit your changes once you are happy with the result.
-![Commit Image](assets/Commit-GHD.png)
-* Push the changes to upload them to your fork on github.com.
-![Push Commit Image](assets/Push-Commit.png)
-
-### Making a PR
-* To make a PR on your repo under a new branch linking to the main branch, a button will show and say Preview and Create pull request. Click that button and fill in all the information that is provided on the template. Once all the information is filled in correctly, check your PR to make sure there is not a WinUtil.ps1 file attached to the PR. Once everything is good, make the PR and wait for Chris (the maintainer) to accept or deny your PR. Once it is accepted by Chris, you will be able to see your changes in the "/windev" build.
-* If you do not see your feature in the main "/win" build, that is fine. All new changes go into the /windev build to make sure everything is working OK before going fully public.
-* Congratulations! You just submitted your first PR. Thank you so much for contributing to WinUtil.
\ No newline at end of file
+
diff --git a/docs/dev/features/Features/DisableLegacyRecovery.md b/docs/dev/features/Features/DisableLegacyRecovery.md
new file mode 100644
index 00000000..98b948ca
--- /dev/null
+++ b/docs/dev/features/Features/DisableLegacyRecovery.md
@@ -0,0 +1,61 @@
+# Disable Legacy F8 Boot Recovery
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Disables Advanced Boot Options screen that lets you start Windows in advanced troubleshooting modes.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Disable Legacy F8 Boot Recovery",
+ "Description": "Disables Advanced Boot Options screen that lets you start Windows in advanced troubleshooting modes.",
+ "category": "Features",
+ "panel": "1",
+ "Order": "a019_",
+ "feature": [],
+ "InvokeScript": [
+ "
+ If (!(Test-Path 'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager\\LastKnownGood')) {
+ New-Item -Path 'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager\\LastKnownGood' -Force | Out-Null
+ }
+ New-ItemProperty -Path 'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager\\LastKnownGood' -Name 'Enabled' -Type DWord -Value 0 -Force
+ Start-Process -FilePath cmd.exe -ArgumentList '/c bcdedit /Set {Current} BootMenuPolicy Standard' -Wait
+ "
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/features/Features/DisableLegacyRecovery"
+}
+```
+
+
+
+## Invoke Script
+
+```powershell
+
+ If (!(Test-Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Configuration Manager\LastKnownGood')) {
+ New-Item -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Configuration Manager\LastKnownGood' -Force | Out-Null
+ }
+ New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Configuration Manager\LastKnownGood' -Name 'Enabled' -Type DWord -Value 0 -Force
+ Start-Process -FilePath cmd.exe -ArgumentList '/c bcdedit /Set {Current} BootMenuPolicy Standard' -Wait
+
+
+```
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json)
+
diff --git a/docs/dev/features/Features/DisableSearchSuggestions.md b/docs/dev/features/Features/DisableSearchSuggestions.md
new file mode 100644
index 00000000..f683b270
--- /dev/null
+++ b/docs/dev/features/Features/DisableSearchSuggestions.md
@@ -0,0 +1,61 @@
+# Disable Search Box Web Suggestions in Registry(explorer restart)
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Disables web suggestions when searching using Windows Search.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Disable Search Box Web Suggestions in Registry(explorer restart)",
+ "Description": "Disables web suggestions when searching using Windows Search.",
+ "category": "Features",
+ "panel": "1",
+ "Order": "a016_",
+ "feature": [],
+ "InvokeScript": [
+ "
+ If (!(Test-Path 'HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer')) {
+ New-Item -Path 'HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer' -Force | Out-Null
+ }
+ New-ItemProperty -Path 'HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer' -Name 'DisableSearchBoxSuggestions' -Type DWord -Value 1 -Force
+ Stop-Process -name explorer -force
+ "
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/features/Features/DisableSearchSuggestions"
+}
+```
+
+
+
+## Invoke Script
+
+```powershell
+
+ If (!(Test-Path 'HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer')) {
+ New-Item -Path 'HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer' -Force | Out-Null
+ }
+ New-ItemProperty -Path 'HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer' -Name 'DisableSearchBoxSuggestions' -Type DWord -Value 1 -Force
+ Stop-Process -name explorer -force
+
+
+```
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json)
+
diff --git a/docs/dev/features/Features/EnableLegacyRecovery.md b/docs/dev/features/Features/EnableLegacyRecovery.md
new file mode 100644
index 00000000..938a8e53
--- /dev/null
+++ b/docs/dev/features/Features/EnableLegacyRecovery.md
@@ -0,0 +1,61 @@
+# Enable Legacy F8 Boot Recovery
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Enables Advanced Boot Options screen that lets you start Windows in advanced troubleshooting modes.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Enable Legacy F8 Boot Recovery",
+ "Description": "Enables Advanced Boot Options screen that lets you start Windows in advanced troubleshooting modes.",
+ "category": "Features",
+ "panel": "1",
+ "Order": "a018_",
+ "feature": [],
+ "InvokeScript": [
+ "
+ If (!(Test-Path 'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager\\LastKnownGood')) {
+ New-Item -Path 'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager\\LastKnownGood' -Force | Out-Null
+ }
+ New-ItemProperty -Path 'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager\\LastKnownGood' -Name 'Enabled' -Type DWord -Value 1 -Force
+ Start-Process -FilePath cmd.exe -ArgumentList '/c bcdedit /Set {Current} BootMenuPolicy Legacy' -Wait
+ "
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/features/Features/EnableLegacyRecovery"
+}
+```
+
+
+
+## Invoke Script
+
+```powershell
+
+ If (!(Test-Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Configuration Manager\LastKnownGood')) {
+ New-Item -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Configuration Manager\LastKnownGood' -Force | Out-Null
+ }
+ New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Configuration Manager\LastKnownGood' -Name 'Enabled' -Type DWord -Value 1 -Force
+ Start-Process -FilePath cmd.exe -ArgumentList '/c bcdedit /Set {Current} BootMenuPolicy Legacy' -Wait
+
+
+```
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json)
+
diff --git a/docs/dev/features/Features/EnableSearchSuggestions.md b/docs/dev/features/Features/EnableSearchSuggestions.md
new file mode 100644
index 00000000..1cb9c51a
--- /dev/null
+++ b/docs/dev/features/Features/EnableSearchSuggestions.md
@@ -0,0 +1,61 @@
+# Enable Search Box Web Suggestions in Registry(explorer restart)
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Enables web suggestions when searching using Windows Search.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Enable Search Box Web Suggestions in Registry(explorer restart)",
+ "Description": "Enables web suggestions when searching using Windows Search.",
+ "category": "Features",
+ "panel": "1",
+ "Order": "a015_",
+ "feature": [],
+ "InvokeScript": [
+ "
+ If (!(Test-Path 'HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer')) {
+ New-Item -Path 'HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer' -Force | Out-Null
+ }
+ New-ItemProperty -Path 'HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer' -Name 'DisableSearchBoxSuggestions' -Type DWord -Value 0 -Force
+ Stop-Process -name explorer -force
+ "
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/features/Features/EnableSearchSuggestions"
+}
+```
+
+
+
+## Invoke Script
+
+```powershell
+
+ If (!(Test-Path 'HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer')) {
+ New-Item -Path 'HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer' -Force | Out-Null
+ }
+ New-ItemProperty -Path 'HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer' -Name 'DisableSearchBoxSuggestions' -Type DWord -Value 0 -Force
+ Stop-Process -name explorer -force
+
+
+```
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json)
+
diff --git a/docs/dev/features/Features/Install.md b/docs/dev/features/Features/Install.md
new file mode 100644
index 00000000..048cd801
--- /dev/null
+++ b/docs/dev/features/Features/Install.md
@@ -0,0 +1,80 @@
+# Install Features
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Install Features",
+ "category": "Features",
+ "panel": "1",
+ "Order": "a060_",
+ "Type": "Button",
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/features/Features/Install"
+}
+```
+
+
+
+## Function: Invoke-WPFFeatureInstall
+
+```powershell
+function Invoke-WPFFeatureInstall {
+ <#
+
+ .SYNOPSIS
+ Installs selected Windows Features
+
+ #>
+
+ if($sync.ProcessRunning) {
+ $msg = "[Invoke-WPFFeatureInstall] Install process is currently running."
+ [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
+ return
+ }
+
+ $Features = (Get-WinUtilCheckBoxes)["WPFFeature"]
+
+ Invoke-WPFRunspace -ArgumentList $Features -DebugPreference $DebugPreference -ScriptBlock {
+ param($Features, $DebugPreference)
+ $sync.ProcessRunning = $true
+ if ($Features.count -eq 1) {
+ $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" })
+ } else {
+ $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" })
+ }
+
+ Invoke-WinUtilFeatureInstall $Features
+
+ $sync.ProcessRunning = $false
+ $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" })
+
+ Write-Host "==================================="
+ Write-Host "--- Features are Installed ---"
+ Write-Host "--- A Reboot may be required ---"
+ Write-Host "==================================="
+ }
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json)
+
diff --git a/docs/dev/features/Features/RegBackup.md b/docs/dev/features/Features/RegBackup.md
new file mode 100644
index 00000000..2012d605
--- /dev/null
+++ b/docs/dev/features/Features/RegBackup.md
@@ -0,0 +1,61 @@
+# Enable Daily Registry Backup Task 12.30am
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Enables daily registry backup, previously disabled by Microsoft in Windows 10 1803.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Enable Daily Registry Backup Task 12.30am",
+ "Description": "Enables daily registry backup, previously disabled by Microsoft in Windows 10 1803.",
+ "category": "Features",
+ "panel": "1",
+ "Order": "a017_",
+ "feature": [],
+ "InvokeScript": [
+ "
+ New-ItemProperty -Path 'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager' -Name 'EnablePeriodicBackup' -Type DWord -Value 1 -Force
+ New-ItemProperty -Path 'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager' -Name 'BackupCount' -Type DWord -Value 2 -Force
+ $action = New-ScheduledTaskAction -Execute 'schtasks' -Argument '/run /i /tn \"\\Microsoft\\Windows\\Registry\\RegIdleBackup\"'
+ $trigger = New-ScheduledTaskTrigger -Daily -At 00:30
+ Register-ScheduledTask -Action $action -Trigger $trigger -TaskName 'AutoRegBackup' -Description 'Create System Registry Backups' -User 'System'
+ "
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/features/Features/RegBackup"
+}
+```
+
+
+
+## Invoke Script
+
+```powershell
+
+ New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Configuration Manager' -Name 'EnablePeriodicBackup' -Type DWord -Value 1 -Force
+ New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Configuration Manager' -Name 'BackupCount' -Type DWord -Value 2 -Force
+ $action = New-ScheduledTaskAction -Execute 'schtasks' -Argument '/run /i /tn "\Microsoft\Windows\Registry\RegIdleBackup"'
+ $trigger = New-ScheduledTaskTrigger -Daily -At 00:30
+ Register-ScheduledTask -Action $action -Trigger $trigger -TaskName 'AutoRegBackup' -Description 'Create System Registry Backups' -User 'System'
+
+
+```
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json)
+
diff --git a/docs/dev/features/Features/Sandbox.md b/docs/dev/features/Features/Sandbox.md
new file mode 100644
index 00000000..bd10ee82
--- /dev/null
+++ b/docs/dev/features/Features/Sandbox.md
@@ -0,0 +1,39 @@
+# Windows Sandbox
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Windows Sandbox is a lightweight virtual machine that provides a temporary desktop environment to safely run applications and programs in isolation.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Windows Sandbox",
+ "category": "Features",
+ "panel": "1",
+ "Order": "a021_",
+ "Description": "Windows Sandbox is a lightweight virtual machine that provides a temporary desktop environment to safely run applications and programs in isolation.",
+ "link": "https://christitustech.github.io/winutil/dev/features/Features/Sandbox"
+}
+```
+
+
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json)
+
diff --git a/docs/dev/features/Features/dotnet.md b/docs/dev/features/Features/dotnet.md
new file mode 100644
index 00000000..b6f8526b
--- /dev/null
+++ b/docs/dev/features/Features/dotnet.md
@@ -0,0 +1,56 @@
+# All .Net Framework (2,3,4)
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+.NET and .NET Framework is a developer platform made up of tools, programming languages, and libraries for building many different types of applications.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "All .Net Framework (2,3,4)",
+ "Description": ".NET and .NET Framework is a developer platform made up of tools, programming languages, and libraries for building many different types of applications.",
+ "category": "Features",
+ "panel": "1",
+ "Order": "a010_",
+ "feature": [
+ "NetFx4-AdvSrvs",
+ "NetFx3"
+ ],
+ "InvokeScript": [],
+ "link": "https://christitustech.github.io/winutil/dev/features/Features/dotnet"
+}
+```
+
+
+
+## Features
+
+
+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.
+
+
+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).
+
+### Features to install
+- NetFx4-AdvSrvs
+- NetFx3
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json)
+
diff --git a/docs/dev/features/Features/hyperv.md b/docs/dev/features/Features/hyperv.md
new file mode 100644
index 00000000..e1b77463
--- /dev/null
+++ b/docs/dev/features/Features/hyperv.md
@@ -0,0 +1,76 @@
+# HyperV Virtualization
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Hyper-V is a hardware virtualization product developed by Microsoft that allows users to create and manage virtual machines.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "HyperV Virtualization",
+ "Description": "Hyper-V is a hardware virtualization product developed by Microsoft that allows users to create and manage virtual machines.",
+ "category": "Features",
+ "panel": "1",
+ "Order": "a011_",
+ "feature": [
+ "HypervisorPlatform",
+ "Microsoft-Hyper-V-All",
+ "Microsoft-Hyper-V",
+ "Microsoft-Hyper-V-Tools-All",
+ "Microsoft-Hyper-V-Management-PowerShell",
+ "Microsoft-Hyper-V-Hypervisor",
+ "Microsoft-Hyper-V-Services",
+ "Microsoft-Hyper-V-Management-Clients"
+ ],
+ "InvokeScript": [
+ "Start-Process -FilePath cmd.exe -ArgumentList '/c bcdedit /set hypervisorschedulertype classic' -Wait"
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/features/Features/hyperv"
+}
+```
+
+
+
+## Features
+
+
+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.
+
+
+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).
+
+### Features to install
+- HypervisorPlatform
+- Microsoft-Hyper-V-All
+- Microsoft-Hyper-V
+- Microsoft-Hyper-V-Tools-All
+- Microsoft-Hyper-V-Management-PowerShell
+- Microsoft-Hyper-V-Hypervisor
+- Microsoft-Hyper-V-Services
+- Microsoft-Hyper-V-Management-Clients
+
+## Invoke Script
+
+```powershell
+Start-Process -FilePath cmd.exe -ArgumentList '/c bcdedit /set hypervisorschedulertype classic' -Wait
+
+```
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json)
+
diff --git a/docs/dev/features/Features/legacymedia.md b/docs/dev/features/Features/legacymedia.md
new file mode 100644
index 00000000..64bac661
--- /dev/null
+++ b/docs/dev/features/Features/legacymedia.md
@@ -0,0 +1,60 @@
+# Legacy Media (WMP, DirectPlay)
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Enables legacy programs from previous versions of windows
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Legacy Media (WMP, DirectPlay)",
+ "Description": "Enables legacy programs from previous versions of windows",
+ "category": "Features",
+ "panel": "1",
+ "Order": "a012_",
+ "feature": [
+ "WindowsMediaPlayer",
+ "MediaPlayback",
+ "DirectPlay",
+ "LegacyComponents"
+ ],
+ "InvokeScript": [],
+ "link": "https://christitustech.github.io/winutil/dev/features/Features/legacymedia"
+}
+```
+
+
+
+## Features
+
+
+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.
+
+
+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).
+
+### Features to install
+- WindowsMediaPlayer
+- MediaPlayback
+- DirectPlay
+- LegacyComponents
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json)
+
diff --git a/docs/dev/features/Features/nfs.md b/docs/dev/features/Features/nfs.md
new file mode 100644
index 00000000..5c726a1f
--- /dev/null
+++ b/docs/dev/features/Features/nfs.md
@@ -0,0 +1,74 @@
+# NFS - Network File System
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Network File System (NFS) is a mechanism for storing files on a network.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "NFS - Network File System",
+ "Description": "Network File System (NFS) is a mechanism for storing files on a network.",
+ "category": "Features",
+ "panel": "1",
+ "Order": "a014_",
+ "feature": [
+ "ServicesForNFS-ClientOnly",
+ "ClientForNFS-Infrastructure",
+ "NFS-Administration"
+ ],
+ "InvokeScript": [
+ "nfsadmin client stop",
+ "Set-ItemProperty -Path 'HKLM:\\SOFTWARE\\Microsoft\\ClientForNFS\\CurrentVersion\\Default' -Name 'AnonymousUID' -Type DWord -Value 0",
+ "Set-ItemProperty -Path 'HKLM:\\SOFTWARE\\Microsoft\\ClientForNFS\\CurrentVersion\\Default' -Name 'AnonymousGID' -Type DWord -Value 0",
+ "nfsadmin client start",
+ "nfsadmin client localhost config fileaccess=755 SecFlavors=+sys -krb5 -krb5i"
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/features/Features/nfs"
+}
+```
+
+
+
+## Features
+
+
+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.
+
+
+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).
+
+### Features to install
+- ServicesForNFS-ClientOnly
+- ClientForNFS-Infrastructure
+- NFS-Administration
+
+## Invoke Script
+
+```powershell
+nfsadmin client stop
+Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default' -Name 'AnonymousUID' -Type DWord -Value 0
+Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default' -Name 'AnonymousGID' -Type DWord -Value 0
+nfsadmin client start
+nfsadmin client localhost config fileaccess=755 SecFlavors=+sys -krb5 -krb5i
+
+```
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json)
+
diff --git a/docs/dev/features/Features/wsl.md b/docs/dev/features/Features/wsl.md
new file mode 100644
index 00000000..fbf15cc6
--- /dev/null
+++ b/docs/dev/features/Features/wsl.md
@@ -0,0 +1,56 @@
+# Windows Subsystem for Linux
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## 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.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Windows Subsystem for Linux",
+ "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.",
+ "category": "Features",
+ "panel": "1",
+ "Order": "a020_",
+ "feature": [
+ "VirtualMachinePlatform",
+ "Microsoft-Windows-Subsystem-Linux"
+ ],
+ "InvokeScript": [],
+ "link": "https://christitustech.github.io/winutil/dev/features/Features/wsl"
+}
+```
+
+
+
+## Features
+
+
+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.
+
+
+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).
+
+### Features to install
+- VirtualMachinePlatform
+- Microsoft-Windows-Subsystem-Linux
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json)
+
diff --git a/docs/dev/features/Fixes/Autologin.md b/docs/dev/features/Fixes/Autologin.md
new file mode 100644
index 00000000..ae269ab4
--- /dev/null
+++ b/docs/dev/features/Fixes/Autologin.md
@@ -0,0 +1,56 @@
+# Set Up Autologin
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Set Up Autologin",
+ "category": "Fixes",
+ "Order": "a040_",
+ "panel": "1",
+ "Type": "Button",
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/features/Fixes/Autologin"
+}
+```
+
+
+
+## Function: Invoke-WPFPanelAutologin
+
+```powershell
+function Invoke-WPFPanelAutologin {
+ <#
+
+ .SYNOPSIS
+ Enables autologin using Sysinternals Autologon.exe
+
+ #>
+
+ # Official Microsoft recommendation: https://learn.microsoft.com/en-us/sysinternals/downloads/autologon
+ Invoke-WebRequest -Uri "https://live.sysinternals.com/Autologon.exe" -OutFile "$env:temp\autologin.exe"
+ cmd /c "$env:temp\autologin.exe" /accepteula
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json)
+
diff --git a/docs/dev/features/Fixes/DISM.md b/docs/dev/features/Fixes/DISM.md
new file mode 100644
index 00000000..b7687967
--- /dev/null
+++ b/docs/dev/features/Fixes/DISM.md
@@ -0,0 +1,74 @@
+# System Corruption Scan
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "System Corruption Scan",
+ "category": "Fixes",
+ "panel": "1",
+ "Order": "a043_",
+ "Type": "Button",
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/features/Fixes/DISM"
+}
+```
+
+
+
+## Function: Invoke-WPFPanelDISM
+
+```powershell
+function Invoke-WPFPanelDISM {
+ <#
+
+ .SYNOPSIS
+ Checks for system corruption using Chkdsk, SFC, and DISM
+
+ .DESCRIPTION
+ 1. Chkdsk - Fixes disk and filesystem corruption
+ 2. SFC Run 1 - Fixes system file corruption, and fixes DISM if it was corrupted
+ 3. DISM - Fixes system image corruption, and fixes SFC's system image if it was corrupted
+ 4. SFC Run 2 - Fixes system file corruption, this time with an almost guaranteed uncorrupted system image
+
+ .NOTES
+ Command Arguments:
+ 1. Chkdsk
+ /Scan - Runs an online scan on the system drive, attempts to fix any corruption, and queues other corruption for fixing on reboot
+ 2. SFC
+ /ScanNow - Performs a scan of the system files and fixes any corruption
+ 3. DISM - Fixes system image corruption, and fixes SFC's system image if it was corrupted
+ /Online - Fixes the currently running system image
+ /Cleanup-Image - Performs cleanup operations on the image, could remove some unneeded temporary files
+ /Restorehealth - Performs a scan of the image and fixes any corruption
+
+ #>
+ Start-Process PowerShell -ArgumentList "Write-Host '(1/4) Chkdsk' -ForegroundColor Green; Chkdsk /scan;
+ Write-Host '`n(2/4) SFC - 1st scan' -ForegroundColor Green; sfc /scannow;
+ Write-Host '`n(3/4) DISM' -ForegroundColor Green; DISM /Online /Cleanup-Image /Restorehealth;
+ Write-Host '`n(4/4) SFC - 2nd scan' -ForegroundColor Green; sfc /scannow;
+ Read-Host '`nPress Enter to Continue'" -verb runas
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json)
+
diff --git a/docs/dev/features/Fixes/Network.md b/docs/dev/features/Fixes/Network.md
new file mode 100644
index 00000000..2f5dc47f
--- /dev/null
+++ b/docs/dev/features/Fixes/Network.md
@@ -0,0 +1,73 @@
+# Reset Network
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Reset Network",
+ "category": "Fixes",
+ "Order": "a042_",
+ "panel": "1",
+ "Type": "Button",
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/features/Fixes/Network"
+}
+```
+
+
+
+## Function: Invoke-WPFFixesNetwork
+
+```powershell
+function Invoke-WPFFixesNetwork {
+ <#
+
+ .SYNOPSIS
+ Resets various network configurations
+
+ #>
+
+ Write-Host "Resetting Network with netsh"
+
+ # Reset WinSock catalog to a clean state
+ Start-Process -NoNewWindow -FilePath "netsh" -ArgumentList "winsock", "reset"
+ # Resets WinHTTP proxy setting to DIRECT
+ Start-Process -NoNewWindow -FilePath "netsh" -ArgumentList "winhttp", "reset", "proxy"
+ # Removes all user configured IP settings
+ Start-Process -NoNewWindow -FilePath "netsh" -ArgumentList "int", "ip", "reset"
+
+ Write-Host "Process complete. Please reboot your computer."
+
+ $ButtonType = [System.Windows.MessageBoxButton]::OK
+ $MessageboxTitle = "Network Reset "
+ $Messageboxbody = ("Stock settings loaded.`n Please reboot your computer")
+ $MessageIcon = [System.Windows.MessageBoxImage]::Information
+
+ [System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon)
+ Write-Host "=========================================="
+ Write-Host "-- Network Configuration has been Reset --"
+ Write-Host "=========================================="
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json)
+
diff --git a/docs/dev/features/Fixes/RunAdobeCCCleanerTool.md b/docs/dev/features/Fixes/RunAdobeCCCleanerTool.md
new file mode 100644
index 00000000..7707736e
--- /dev/null
+++ b/docs/dev/features/Fixes/RunAdobeCCCleanerTool.md
@@ -0,0 +1,76 @@
+# Remove Adobe Creative Cloud
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Remove Adobe Creative Cloud",
+ "category": "Fixes",
+ "panel": "1",
+ "Order": "a045_",
+ "Type": "Button",
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/features/Fixes/RunAdobeCCCleanerTool"
+}
+```
+
+
+
+## Function: Invoke-WPFRunAdobeCCCleanerTool
+
+```powershell
+function Invoke-WPFRunAdobeCCCleanerTool {
+ <#
+ .SYNOPSIS
+ It removes or fixes problem files and resolves permission issues in registry keys.
+ .DESCRIPTION
+ The Creative Cloud Cleaner tool is a utility for experienced users to clean up corrupted installations.
+ #>
+
+ [string]$url="https://swupmf.adobe.com/webfeed/CleanerTool/win/AdobeCreativeCloudCleanerTool.exe"
+
+ Write-Host "The Adobe Creative Cloud Cleaner tool is hosted at"
+ Write-Host "$url"
+
+ try {
+ # Don't show the progress because it will slow down the download speed
+ $ProgressPreference='SilentlyContinue'
+
+ Invoke-WebRequest -Uri $url -OutFile "$env:TEMP\AdobeCreativeCloudCleanerTool.exe" -UseBasicParsing -ErrorAction SilentlyContinue -Verbose
+
+ # Revert back the ProgressPreference variable to the default value since we got the file desired
+ $ProgressPreference='Continue'
+
+ Start-Process -FilePath "$env:TEMP\AdobeCreativeCloudCleanerTool.exe" -Wait -ErrorAction SilentlyContinue -Verbose
+ } catch {
+ Write-Error $_.Exception.Message
+ } finally {
+ if (Test-Path -Path "$env:TEMP\AdobeCreativeCloudCleanerTool.exe") {
+ Write-Host "Cleaning up..."
+ Remove-Item -Path "$env:TEMP\AdobeCreativeCloudCleanerTool.exe" -Verbose
+ }
+ }
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json)
+
diff --git a/docs/dev/features/Fixes/Update.md b/docs/dev/features/Fixes/Update.md
new file mode 100644
index 00000000..027829fd
--- /dev/null
+++ b/docs/dev/features/Fixes/Update.md
@@ -0,0 +1,336 @@
+# Reset Windows Update
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Reset Windows Update",
+ "category": "Fixes",
+ "panel": "1",
+ "Order": "a041_",
+ "Type": "Button",
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/features/Fixes/Update"
+}
+```
+
+
+
+## Function: Invoke-WPFFixesUpdate
+
+```powershell
+function Invoke-WPFFixesUpdate {
+
+ <#
+
+ .SYNOPSIS
+ Performs various tasks in an attempt to repair Windows Update
+
+ .DESCRIPTION
+ 1. (Aggressive Only) Scans the system for corruption using chkdsk, SFC, and DISM
+ Steps:
+ 1. Runs chkdsk /scan /perf
+ /scan - Runs an online scan on the volume
+ /perf - Uses more system resources to complete a scan as fast as possible
+ 2. Runs SFC /scannow
+ /scannow - Scans integrity of all protected system files and repairs files with problems when possible
+ 3. Runs DISM /Online /Cleanup-Image /RestoreHealth
+ /Online - Targets the running operating system
+ /Cleanup-Image - Performs cleanup and recovery operations on the image
+ /RestoreHealth - Scans the image for component store corruption and attempts to repair the corruption using Windows Update
+ 4. Runs SFC /scannow
+ Ran twice in case DISM repaired SFC
+ 2. Stops Windows Update Services
+ 3. Remove the QMGR Data file, which stores BITS jobs
+ 4. (Aggressive Only) Renames the DataStore and CatRoot2 folders
+ DataStore - Contains the Windows Update History and Log Files
+ CatRoot2 - Contains the Signatures for Windows Update Packages
+ 5. Renames the Windows Update Download Folder
+ 6. Deletes the Windows Update Log
+ 7. (Aggressive Only) Resets the Security Descriptors on the Windows Update Services
+ 8. Reregisters the BITS and Windows Update DLLs
+ 9. Removes the WSUS client settings
+ 10. Resets WinSock
+ 11. Gets and deletes all BITS jobs
+ 12. Sets the startup type of the Windows Update Services then starts them
+ 13. Forces Windows Update to check for updates
+
+ .PARAMETER Aggressive
+ If specified, the script will take additional steps to repair Windows Update that are more dangerous, take a significant amount of time, or are generally unnecessary
+
+ #>
+
+ param($Aggressive = $false)
+
+ Write-Progress -Id 0 -Activity "Repairing Windows Update" -PercentComplete 0
+ # Wait for the first progress bar to show, otherwise the second one won't show
+ Start-Sleep -Milliseconds 200
+
+ if ($Aggressive) {
+ # Scan system for corruption
+ Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Scanning for corruption..." -PercentComplete 0
+ Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running chkdsk..." -PercentComplete 0
+ # 2>&1 redirects stdout, alowing iteration over the output
+ chkdsk.exe /scan /perf 2>&1 | ForEach-Object {
+ # Write stdout to the Verbose stream
+ Write-Verbose $_
+
+ # Get the index of the total percentage
+ $index = $_.IndexOf("Total:")
+ if (
+ # If the percent is found
+ ($percent = try {(
+ $_.Substring(
+ $index + 6,
+ $_.IndexOf("%", $index) - $index - 6
+ )
+ ).Trim()} catch {0}) `
+ <# And the current percentage is greater than the previous one #>`
+ -and $percent -gt $oldpercent
+ ) {
+ # Update the progress bar
+ $oldpercent = $percent
+ Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running chkdsk... ($percent%)" -PercentComplete $percent
+ }
+ }
+
+ Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running SFC..." -PercentComplete 0
+ $oldpercent = 0
+ # SFC has a bug when redirected which causes it to output only when the stdout buffer is full, causing the progress bar to move in chunks
+ sfc /scannow 2>&1 | ForEach-Object {
+ # Write stdout to the Verbose stream
+ Write-Verbose $_
+
+ # Filter for lines that contain a percentage that is greater than the previous one
+ if (
+ (
+ # Use a different method to get the percentage that accounts for SFC's Unicode output
+ [int]$percent = try {(
+ (
+ $_.Substring(
+ $_.IndexOf("n") + 2,
+ $_.IndexOf("%") - $_.IndexOf("n") - 2
+ ).ToCharArray() | Where-Object {$_}
+ ) -join ''
+ ).TrimStart()} catch {0}
+ ) -and $percent -gt $oldpercent
+ ) {
+ # Update the progress bar
+ $oldpercent = $percent
+ Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running SFC... ($percent%)" -PercentComplete $percent
+ }
+ }
+
+ Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running DISM..." -PercentComplete 0
+ $oldpercent = 0
+ DISM /Online /Cleanup-Image /RestoreHealth | ForEach-Object {
+ # Write stdout to the Verbose stream
+ Write-Verbose $_
+
+ # Filter for lines that contain a percentage that is greater than the previous one
+ if (
+ ($percent = try {
+ [int]($_ -replace "\[" -replace "=" -replace " " -replace "%" -replace "\]")
+ } catch {0}) `
+ -and $percent -gt $oldpercent
+ ) {
+ # Update the progress bar
+ $oldpercent = $percent
+ Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running DISM... ($percent%)" -PercentComplete $percent
+ }
+ }
+
+ Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running SFC again..." -PercentComplete 0
+ $oldpercent = 0
+ sfc /scannow 2>&1 | ForEach-Object {
+ # Write stdout to the Verbose stream
+ Write-Verbose $_
+
+ # Filter for lines that contain a percentage that is greater than the previous one
+ if (
+ (
+ [int]$percent = try {(
+ (
+ $_.Substring(
+ $_.IndexOf("n") + 2,
+ $_.IndexOf("%") - $_.IndexOf("n") - 2
+ ).ToCharArray() | Where-Object {$_}
+ ) -join ''
+ ).TrimStart()} catch {0}
+ ) -and $percent -gt $oldpercent
+ ) {
+ # Update the progress bar
+ $oldpercent = $percent
+ Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running SFC... ($percent%)" -PercentComplete $percent
+ }
+ }
+ Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Completed" -PercentComplete 100
+ }
+
+
+ Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Stopping Windows Update Services..." -PercentComplete 10
+ # Stop the Windows Update Services
+ Write-Progress -Id 2 -ParentId 0 -Activity "Stopping Services" -Status "Stopping BITS..." -PercentComplete 0
+ Stop-Service -Name BITS -Force
+ Write-Progress -Id 2 -ParentId 0 -Activity "Stopping Services" -Status "Stopping wuauserv..." -PercentComplete 20
+ Stop-Service -Name wuauserv -Force
+ Write-Progress -Id 2 -ParentId 0 -Activity "Stopping Services" -Status "Stopping appidsvc..." -PercentComplete 40
+ Stop-Service -Name appidsvc -Force
+ Write-Progress -Id 2 -ParentId 0 -Activity "Stopping Services" -Status "Stopping cryptsvc..." -PercentComplete 60
+ Stop-Service -Name cryptsvc -Force
+ Write-Progress -Id 2 -ParentId 0 -Activity "Stopping Services" -Status "Completed" -PercentComplete 100
+
+
+ # Remove the QMGR Data file
+ Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Renaming/Removing Files..." -PercentComplete 20
+ Write-Progress -Id 3 -ParentId 0 -Activity "Renaming/Removing Files" -Status "Removing QMGR Data files..." -PercentComplete 0
+ Remove-Item "$env:allusersprofile\Application Data\Microsoft\Network\Downloader\qmgr*.dat" -ErrorAction SilentlyContinue
+
+
+ if ($Aggressive) {
+ # Rename the Windows Update Log and Signature Folders
+ Write-Progress -Id 3 -ParentId 0 -Activity "Renaming/Removing Files" -Status "Renaming the Windows Update Log, Download, and Signature Folder..." -PercentComplete 20
+ Rename-Item $env:systemroot\SoftwareDistribution\DataStore DataStore.bak -ErrorAction SilentlyContinue
+ Rename-Item $env:systemroot\System32\Catroot2 catroot2.bak -ErrorAction SilentlyContinue
+ }
+
+ # Rename the Windows Update Download Folder
+ Write-Progress -Id 3 -ParentId 0 -Activity "Renaming/Removing Files" -Status "Renaming the Windows Update Download Folder..." -PercentComplete 20
+ Rename-Item $env:systemroot\SoftwareDistribution\Download Download.bak -ErrorAction SilentlyContinue
+
+ # Delete the legacy Windows Update Log
+ Write-Progress -Id 3 -ParentId 0 -Activity "Renaming/Removing Files" -Status "Removing the old Windows Update log..." -PercentComplete 80
+ Remove-Item $env:systemroot\WindowsUpdate.log -ErrorAction SilentlyContinue
+ Write-Progress -Id 3 -ParentId 0 -Activity "Renaming/Removing Files" -Status "Completed" -PercentComplete 100
+
+
+ if ($Aggressive) {
+ # Reset the Security Descriptors on the Windows Update Services
+ Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Resetting the WU Service Security Descriptors..." -PercentComplete 25
+ Write-Progress -Id 4 -ParentId 0 -Activity "Resetting the WU Service Security Descriptors" -Status "Resetting the BITS Security Descriptor..." -PercentComplete 0
+ Start-Process -NoNewWindow -FilePath "sc.exe" -ArgumentList "sdset", "bits", "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)"
+ Write-Progress -Id 4 -ParentId 0 -Activity "Resetting the WU Service Security Descriptors" -Status "Resetting the wuauserv Security Descriptor..." -PercentComplete 50
+ Start-Process -NoNewWindow -FilePath "sc.exe" -ArgumentList "sdset", "wuauserv", "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)"
+ Write-Progress -Id 4 -ParentId 0 -Activity "Resetting the WU Service Security Descriptors" -Status "Completed" -PercentComplete 100
+ }
+
+
+ # Reregister the BITS and Windows Update DLLs
+ Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Reregistering DLLs..." -PercentComplete 40
+ $oldLocation = Get-Location
+ Set-Location $env:systemroot\system32
+ $i = 0
+ $DLLs = @(
+ "atl.dll", "urlmon.dll", "mshtml.dll", "shdocvw.dll", "browseui.dll",
+ "jscript.dll", "vbscript.dll", "scrrun.dll", "msxml.dll", "msxml3.dll",
+ "msxml6.dll", "actxprxy.dll", "softpub.dll", "wintrust.dll", "dssenh.dll",
+ "rsaenh.dll", "gpkcsp.dll", "sccbase.dll", "slbcsp.dll", "cryptdlg.dll",
+ "oleaut32.dll", "ole32.dll", "shell32.dll", "initpki.dll", "wuapi.dll",
+ "wuaueng.dll", "wuaueng1.dll", "wucltui.dll", "wups.dll", "wups2.dll",
+ "wuweb.dll", "qmgr.dll", "qmgrprxy.dll", "wucltux.dll", "muweb.dll", "wuwebv.dll"
+ )
+ foreach ($dll in $DLLs) {
+ Write-Progress -Id 5 -ParentId 0 -Activity "Reregistering DLLs" -Status "Registering $dll..." -PercentComplete ($i / $DLLs.Count * 100)
+ $i++
+ Start-Process -NoNewWindow -FilePath "regsvr32.exe" -ArgumentList "/s", $dll
+ }
+ Set-Location $oldLocation
+ Write-Progress -Id 5 -ParentId 0 -Activity "Reregistering DLLs" -Status "Completed" -PercentComplete 100
+
+
+ # Remove the WSUS client settings
+ if (Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate") {
+ Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Removing WSUS client settings..." -PercentComplete 60
+ Write-Progress -Id 6 -ParentId 0 -Activity "Removing WSUS client settings" -PercentComplete 0
+ Start-Process -NoNewWindow -FilePath "REG" -ArgumentList "DELETE", "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate", "/v", "AccountDomainSid", "/f" -RedirectStandardError $true
+ Start-Process -NoNewWindow -FilePath "REG" -ArgumentList "DELETE", "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate", "/v", "PingID", "/f" -RedirectStandardError $true
+ Start-Process -NoNewWindow -FilePath "REG" -ArgumentList "DELETE", "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate", "/v", "SusClientId", "/f" -RedirectStandardError $true
+ Write-Progress -Id 6 -ParentId 0 -Activity "Removing WSUS client settings" -Status "Completed" -PercentComplete 100
+ }
+
+
+ # Reset WinSock
+ Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Resetting WinSock..." -PercentComplete 65
+ Write-Progress -Id 7 -ParentId 0 -Activity "Resetting WinSock" -Status "Resetting WinSock..." -PercentComplete 0
+ Start-Process -NoNewWindow -FilePath "netsh" -ArgumentList "winsock", "reset" -RedirectStandardOutput $true
+ Start-Process -NoNewWindow -FilePath "netsh" -ArgumentList "winhttp", "reset", "proxy" -RedirectStandardOutput $true
+ Start-Process -NoNewWindow -FilePath "netsh" -ArgumentList "int", "ip", "reset" -RedirectStandardOutput $true
+ Write-Progress -Id 7 -ParentId 0 -Activity "Resetting WinSock" -Status "Completed" -PercentComplete 100
+
+
+ # Get and delete all BITS jobs
+ Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Deleting BITS jobs..." -PercentComplete 75
+ Write-Progress -Id 8 -ParentId 0 -Activity "Deleting BITS jobs" -Status "Deleting BITS jobs..." -PercentComplete 0
+ Get-BitsTransfer | Remove-BitsTransfer
+ Write-Progress -Id 8 -ParentId 0 -Activity "Deleting BITS jobs" -Status "Completed" -PercentComplete 100
+
+
+ # Change the startup type of the Windows Update Services and start them
+ Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Starting Windows Update Services..." -PercentComplete 90
+ Write-Progress -Id 9 -ParentId 0 -Activity "Starting Windows Update Services" -Status "Starting BITS..." -PercentComplete 0
+ Get-Service BITS | Set-Service -StartupType Manual -PassThru | Start-Service
+ Write-Progress -Id 9 -ParentId 0 -Activity "Starting Windows Update Services" -Status "Starting wuauserv..." -PercentComplete 25
+ Get-Service wuauserv | Set-Service -StartupType Manual -PassThru | Start-Service
+ Write-Progress -Id 9 -ParentId 0 -Activity "Starting Windows Update Services" -Status "Starting AppIDSvc..." -PercentComplete 50
+ # The AppIDSvc service is protected, so the startup type has to be changed in the registry
+ Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\AppIDSvc" -Name "Start" -Value "3" # Manual
+ Start-Service AppIDSvc
+ Write-Progress -Id 9 -ParentId 0 -Activity "Starting Windows Update Services" -Status "Starting CryptSvc..." -PercentComplete 75
+ Get-Service CryptSvc | Set-Service -StartupType Manual -PassThru | Start-Service
+ Write-Progress -Id 9 -ParentId 0 -Activity "Starting Windows Update Services" -Status "Completed" -PercentComplete 100
+
+
+ # Force Windows Update to check for updates
+ Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Forcing discovery..." -PercentComplete 95
+ Write-Progress -Id 10 -ParentId 0 -Activity "Forcing discovery" -Status "Forcing discovery..." -PercentComplete 0
+ (New-Object -ComObject Microsoft.Update.AutoUpdate).DetectNow()
+ Start-Process -NoNewWindow -FilePath "wuauclt" -ArgumentList "/resetauthorization", "/detectnow"
+ Write-Progress -Id 10 -ParentId 0 -Activity "Forcing discovery" -Status "Completed" -PercentComplete 100
+ Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Completed" -PercentComplete 100
+
+ $ButtonType = [System.Windows.MessageBoxButton]::OK
+ $MessageboxTitle = "Reset Windows Update "
+ $Messageboxbody = ("Stock settings loaded.`n Please reboot your computer")
+ $MessageIcon = [System.Windows.MessageBoxImage]::Information
+
+ [System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon)
+ Write-Host "==============================================="
+ Write-Host "-- Reset All Windows Update Settings to Stock -"
+ Write-Host "==============================================="
+
+ # Remove the progress bars
+ Write-Progress -Id 0 -Activity "Repairing Windows Update" -Completed
+ Write-Progress -Id 1 -Activity "Scanning for corruption" -Completed
+ Write-Progress -Id 2 -Activity "Stopping Services" -Completed
+ Write-Progress -Id 3 -Activity "Renaming/Removing Files" -Completed
+ Write-Progress -Id 4 -Activity "Resetting the WU Service Security Descriptors" -Completed
+ Write-Progress -Id 5 -Activity "Reregistering DLLs" -Completed
+ Write-Progress -Id 6 -Activity "Removing WSUS client settings" -Completed
+ Write-Progress -Id 7 -Activity "Resetting WinSock" -Completed
+ Write-Progress -Id 8 -Activity "Deleting BITS jobs" -Completed
+ Write-Progress -Id 9 -Activity "Starting Windows Update Services" -Completed
+ Write-Progress -Id 10 -Activity "Forcing discovery" -Completed
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json)
+
diff --git a/docs/dev/features/Fixes/Winget.md b/docs/dev/features/Fixes/Winget.md
new file mode 100644
index 00000000..730b243e
--- /dev/null
+++ b/docs/dev/features/Fixes/Winget.md
@@ -0,0 +1,58 @@
+# WinGet Reinstall
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "WinGet Reinstall",
+ "category": "Fixes",
+ "panel": "1",
+ "Order": "a044_",
+ "Type": "Button",
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/features/Fixes/Winget"
+}
+```
+
+
+
+## Function: Invoke-WPFFixesWinget
+
+```powershell
+function Invoke-WPFFixesWinget {
+
+ <#
+
+ .SYNOPSIS
+ Fixes Winget by running choco install winget
+ .DESCRIPTION
+ BravoNorris for the fantastic idea of a button to reinstall winget
+ #>
+ # Install Choco if not already present
+ Install-WinUtilChoco
+ Start-Process -FilePath "choco" -ArgumentList "install winget -y --force" -NoNewWindow -Wait
+
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json)
+
diff --git a/docs/dev/features/Legacy-Windows-Panels/control.md b/docs/dev/features/Legacy-Windows-Panels/control.md
new file mode 100644
index 00000000..ca0a38af
--- /dev/null
+++ b/docs/dev/features/Legacy-Windows-Panels/control.md
@@ -0,0 +1,65 @@
+# Control Panel
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Control Panel",
+ "category": "Legacy Windows Panels",
+ "panel": "2",
+ "Type": "Button",
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/features/Legacy-Windows-Panels/control"
+}
+```
+
+
+
+## Function: Invoke-WPFControlPanel
+
+```powershell
+function Invoke-WPFControlPanel {
+ <#
+
+ .SYNOPSIS
+ Opens the requested legacy panel
+
+ .PARAMETER Panel
+ The panel to open
+
+ #>
+ param($Panel)
+
+ switch ($Panel) {
+ "WPFPanelcontrol" {cmd /c control}
+ "WPFPanelnetwork" {cmd /c ncpa.cpl}
+ "WPFPanelpower" {cmd /c powercfg.cpl}
+ "WPFPanelregion" {cmd /c intl.cpl}
+ "WPFPanelsound" {cmd /c mmsys.cpl}
+ "WPFPanelsystem" {cmd /c sysdm.cpl}
+ "WPFPaneluser" {cmd /c "control userpasswords2"}
+ }
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json)
+
diff --git a/docs/dev/features/Legacy-Windows-Panels/network.md b/docs/dev/features/Legacy-Windows-Panels/network.md
new file mode 100644
index 00000000..edc68099
--- /dev/null
+++ b/docs/dev/features/Legacy-Windows-Panels/network.md
@@ -0,0 +1,65 @@
+# Network Connections
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Network Connections",
+ "category": "Legacy Windows Panels",
+ "panel": "2",
+ "Type": "Button",
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/features/Legacy-Windows-Panels/network"
+}
+```
+
+
+
+## Function: Invoke-WPFControlPanel
+
+```powershell
+function Invoke-WPFControlPanel {
+ <#
+
+ .SYNOPSIS
+ Opens the requested legacy panel
+
+ .PARAMETER Panel
+ The panel to open
+
+ #>
+ param($Panel)
+
+ switch ($Panel) {
+ "WPFPanelcontrol" {cmd /c control}
+ "WPFPanelnetwork" {cmd /c ncpa.cpl}
+ "WPFPanelpower" {cmd /c powercfg.cpl}
+ "WPFPanelregion" {cmd /c intl.cpl}
+ "WPFPanelsound" {cmd /c mmsys.cpl}
+ "WPFPanelsystem" {cmd /c sysdm.cpl}
+ "WPFPaneluser" {cmd /c "control userpasswords2"}
+ }
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json)
+
diff --git a/docs/dev/features/Legacy-Windows-Panels/power.md b/docs/dev/features/Legacy-Windows-Panels/power.md
new file mode 100644
index 00000000..6d0d0423
--- /dev/null
+++ b/docs/dev/features/Legacy-Windows-Panels/power.md
@@ -0,0 +1,65 @@
+# Power Panel
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Power Panel",
+ "category": "Legacy Windows Panels",
+ "panel": "2",
+ "Type": "Button",
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/features/Legacy-Windows-Panels/power"
+}
+```
+
+
+
+## Function: Invoke-WPFControlPanel
+
+```powershell
+function Invoke-WPFControlPanel {
+ <#
+
+ .SYNOPSIS
+ Opens the requested legacy panel
+
+ .PARAMETER Panel
+ The panel to open
+
+ #>
+ param($Panel)
+
+ switch ($Panel) {
+ "WPFPanelcontrol" {cmd /c control}
+ "WPFPanelnetwork" {cmd /c ncpa.cpl}
+ "WPFPanelpower" {cmd /c powercfg.cpl}
+ "WPFPanelregion" {cmd /c intl.cpl}
+ "WPFPanelsound" {cmd /c mmsys.cpl}
+ "WPFPanelsystem" {cmd /c sysdm.cpl}
+ "WPFPaneluser" {cmd /c "control userpasswords2"}
+ }
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json)
+
diff --git a/docs/dev/features/Legacy-Windows-Panels/region.md b/docs/dev/features/Legacy-Windows-Panels/region.md
new file mode 100644
index 00000000..49430caa
--- /dev/null
+++ b/docs/dev/features/Legacy-Windows-Panels/region.md
@@ -0,0 +1,65 @@
+# Region
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Region",
+ "category": "Legacy Windows Panels",
+ "panel": "2",
+ "Type": "Button",
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/features/Legacy-Windows-Panels/region"
+}
+```
+
+
+
+## Function: Invoke-WPFControlPanel
+
+```powershell
+function Invoke-WPFControlPanel {
+ <#
+
+ .SYNOPSIS
+ Opens the requested legacy panel
+
+ .PARAMETER Panel
+ The panel to open
+
+ #>
+ param($Panel)
+
+ switch ($Panel) {
+ "WPFPanelcontrol" {cmd /c control}
+ "WPFPanelnetwork" {cmd /c ncpa.cpl}
+ "WPFPanelpower" {cmd /c powercfg.cpl}
+ "WPFPanelregion" {cmd /c intl.cpl}
+ "WPFPanelsound" {cmd /c mmsys.cpl}
+ "WPFPanelsystem" {cmd /c sysdm.cpl}
+ "WPFPaneluser" {cmd /c "control userpasswords2"}
+ }
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json)
+
diff --git a/docs/dev/features/Legacy-Windows-Panels/sound.md b/docs/dev/features/Legacy-Windows-Panels/sound.md
new file mode 100644
index 00000000..be2c61ac
--- /dev/null
+++ b/docs/dev/features/Legacy-Windows-Panels/sound.md
@@ -0,0 +1,65 @@
+# Sound Settings
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Sound Settings",
+ "category": "Legacy Windows Panels",
+ "panel": "2",
+ "Type": "Button",
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/features/Legacy-Windows-Panels/sound"
+}
+```
+
+
+
+## Function: Invoke-WPFControlPanel
+
+```powershell
+function Invoke-WPFControlPanel {
+ <#
+
+ .SYNOPSIS
+ Opens the requested legacy panel
+
+ .PARAMETER Panel
+ The panel to open
+
+ #>
+ param($Panel)
+
+ switch ($Panel) {
+ "WPFPanelcontrol" {cmd /c control}
+ "WPFPanelnetwork" {cmd /c ncpa.cpl}
+ "WPFPanelpower" {cmd /c powercfg.cpl}
+ "WPFPanelregion" {cmd /c intl.cpl}
+ "WPFPanelsound" {cmd /c mmsys.cpl}
+ "WPFPanelsystem" {cmd /c sysdm.cpl}
+ "WPFPaneluser" {cmd /c "control userpasswords2"}
+ }
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json)
+
diff --git a/docs/dev/features/Legacy-Windows-Panels/system.md b/docs/dev/features/Legacy-Windows-Panels/system.md
new file mode 100644
index 00000000..b8ee8987
--- /dev/null
+++ b/docs/dev/features/Legacy-Windows-Panels/system.md
@@ -0,0 +1,65 @@
+# System Properties
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "System Properties",
+ "category": "Legacy Windows Panels",
+ "panel": "2",
+ "Type": "Button",
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/features/Legacy-Windows-Panels/system"
+}
+```
+
+
+
+## Function: Invoke-WPFControlPanel
+
+```powershell
+function Invoke-WPFControlPanel {
+ <#
+
+ .SYNOPSIS
+ Opens the requested legacy panel
+
+ .PARAMETER Panel
+ The panel to open
+
+ #>
+ param($Panel)
+
+ switch ($Panel) {
+ "WPFPanelcontrol" {cmd /c control}
+ "WPFPanelnetwork" {cmd /c ncpa.cpl}
+ "WPFPanelpower" {cmd /c powercfg.cpl}
+ "WPFPanelregion" {cmd /c intl.cpl}
+ "WPFPanelsound" {cmd /c mmsys.cpl}
+ "WPFPanelsystem" {cmd /c sysdm.cpl}
+ "WPFPaneluser" {cmd /c "control userpasswords2"}
+ }
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json)
+
diff --git a/docs/dev/features/Legacy-Windows-Panels/user.md b/docs/dev/features/Legacy-Windows-Panels/user.md
new file mode 100644
index 00000000..b2cfa975
--- /dev/null
+++ b/docs/dev/features/Legacy-Windows-Panels/user.md
@@ -0,0 +1,65 @@
+# User Accounts
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "User Accounts",
+ "category": "Legacy Windows Panels",
+ "panel": "2",
+ "Type": "Button",
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/features/Legacy-Windows-Panels/user"
+}
+```
+
+
+
+## Function: Invoke-WPFControlPanel
+
+```powershell
+function Invoke-WPFControlPanel {
+ <#
+
+ .SYNOPSIS
+ Opens the requested legacy panel
+
+ .PARAMETER Panel
+ The panel to open
+
+ #>
+ param($Panel)
+
+ switch ($Panel) {
+ "WPFPanelcontrol" {cmd /c control}
+ "WPFPanelnetwork" {cmd /c ncpa.cpl}
+ "WPFPanelpower" {cmd /c powercfg.cpl}
+ "WPFPanelregion" {cmd /c intl.cpl}
+ "WPFPanelsound" {cmd /c mmsys.cpl}
+ "WPFPanelsystem" {cmd /c sysdm.cpl}
+ "WPFPaneluser" {cmd /c "control userpasswords2"}
+ }
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/feature.json)
+
diff --git a/docs/dev/tweaks/Customize-Preferences/BingSearch.md b/docs/dev/tweaks/Customize-Preferences/BingSearch.md
new file mode 100644
index 00000000..570390f0
--- /dev/null
+++ b/docs/dev/tweaks/Customize-Preferences/BingSearch.md
@@ -0,0 +1,76 @@
+# Bing Search in Start Menu
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+If enable then includes web search results from Bing in your Start Menu search.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Bing Search in Start Menu",
+ "Description": "If enable then includes web search results from Bing in your Start Menu search.",
+ "category": "Customize Preferences",
+ "panel": "2",
+ "Order": "a101_",
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/BingSearch"
+}
+```
+
+
+
+## Function: Invoke-WinUtilBingSearch
+
+```powershell
+function Invoke-WinUtilBingSearch {
+ <#
+
+ .SYNOPSIS
+ Disables/Enables Bing Search
+
+ .PARAMETER Enabled
+ Indicates whether to enable or disable Bing Search
+
+ #>
+ Param($Enabled)
+ try {
+ if ($Enabled -eq $false) {
+ Write-Host "Enabling Bing Search"
+ $value = 1
+ } else {
+ Write-Host "Disabling Bing Search"
+ $value = 0
+ }
+ $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Search"
+ Set-ItemProperty -Path $Path -Name BingSearchEnabled -Value $value
+ } catch [System.Security.SecurityException] {
+ Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
+ } catch [System.Management.Automation.ItemNotFoundException] {
+ Write-Warning $psitem.Exception.ErrorRecord
+ } catch {
+ Write-Warning "Unable to set $Name due to unhandled exception"
+ Write-Warning $psitem.Exception.StackTrace
+ }
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Customize-Preferences/DarkMode.md b/docs/dev/tweaks/Customize-Preferences/DarkMode.md
new file mode 100644
index 00000000..8a88f769
--- /dev/null
+++ b/docs/dev/tweaks/Customize-Preferences/DarkMode.md
@@ -0,0 +1,78 @@
+# Dark Theme for Windows
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Enable/Disable Dark Mode.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Dark Theme for Windows",
+ "Description": "Enable/Disable Dark Mode.",
+ "category": "Customize Preferences",
+ "panel": "2",
+ "Order": "a100_",
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/DarkMode"
+}
+```
+
+
+
+## Function: Invoke-WinUtilDarkMode
+
+```powershell
+Function Invoke-WinUtilDarkMode {
+ <#
+
+ .SYNOPSIS
+ Enables/Disables Dark Mode
+
+ .PARAMETER DarkMoveEnabled
+ Indicates the current dark mode state
+
+ #>
+ Param($DarkMoveEnabled)
+ try {
+ if ($DarkMoveEnabled -eq $false) {
+ Write-Host "Enabling Dark Mode"
+ $DarkMoveValue = 0
+ } else {
+ Write-Host "Disabling Dark Mode"
+ $DarkMoveValue = 1
+ }
+
+ $Path = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize"
+ Set-ItemProperty -Path $Path -Name AppsUseLightTheme -Value $DarkMoveValue
+ Set-ItemProperty -Path $Path -Name SystemUsesLightTheme -Value $DarkMoveValue
+ } catch [System.Security.SecurityException] {
+ Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
+ } catch [System.Management.Automation.ItemNotFoundException] {
+ Write-Warning $psitem.Exception.ErrorRecord
+ } catch {
+ Write-Warning "Unable to set $Name due to unhandled exception"
+ Write-Warning $psitem.Exception.StackTrace
+ }
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Customize-Preferences/DetailedBSoD.md b/docs/dev/tweaks/Customize-Preferences/DetailedBSoD.md
new file mode 100644
index 00000000..fe75f06d
--- /dev/null
+++ b/docs/dev/tweaks/Customize-Preferences/DetailedBSoD.md
@@ -0,0 +1,76 @@
+# Detailed BSoD
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+If Enabled then you will see a detailed Blue Screen of Death (BSOD) with more information.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Detailed BSoD",
+ "Description": "If Enabled then you will see a detailed Blue Screen of Death (BSOD) with more information.",
+ "category": "Customize Preferences",
+ "panel": "2",
+ "Order": "a205_",
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/DetailedBSoD"
+}
+```
+
+
+
+## Function: Invoke-WinUtilDetailedBSoD
+
+```powershell
+Function Invoke-WinUtilDetailedBSoD {
+ <#
+
+ .SYNOPSIS
+ Enables/Disables Detailed BSoD
+ (Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl' -Name 'DisplayParameters').DisplayParameters
+
+
+ #>
+ Param($Enabled)
+ try {
+ if ($Enabled -eq $false) {
+ Write-Host "Enabling Detailed BSoD"
+ $value = 1
+ } else {
+ Write-Host "Disabling Detailed BSoD"
+ $value =0
+ }
+
+ $Path = "HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl"
+ Set-ItemProperty -Path $Path -Name DisplayParameters -Value $value
+ } catch [System.Security.SecurityException] {
+ Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
+ } catch [System.Management.Automation.ItemNotFoundException] {
+ Write-Warning $psitem.Exception.ErrorRecord
+ } catch {
+ Write-Warning "Unable to set $Name due to unhandled exception"
+ Write-Warning $psitem.Exception.StackTrace
+ }
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Customize-Preferences/HiddenFiles.md b/docs/dev/tweaks/Customize-Preferences/HiddenFiles.md
new file mode 100644
index 00000000..4d90b311
--- /dev/null
+++ b/docs/dev/tweaks/Customize-Preferences/HiddenFiles.md
@@ -0,0 +1,76 @@
+# Show Hidden Files
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+If Enabled then Hidden Files will be shown.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Show Hidden Files",
+ "Description": "If Enabled then Hidden Files will be shown.",
+ "category": "Customize Preferences",
+ "panel": "2",
+ "Order": "a200_",
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/HiddenFiles"
+}
+```
+
+
+
+## Function: Invoke-WinUtilHiddenFiles
+
+```powershell
+function Invoke-WinUtilHiddenFiles {
+ <#
+
+ .SYNOPSIS
+ Enable/Disable Hidden Files
+
+ .PARAMETER Enabled
+ Indicates whether to enable or disable Hidden Files
+
+ #>
+ Param($Enabled)
+ try {
+ if ($Enabled -eq $false) {
+ Write-Host "Enabling Hidden Files"
+ $value = 1
+ } else {
+ Write-Host "Disabling Hidden Files"
+ $value = 0
+ }
+ $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
+ Set-ItemProperty -Path $Path -Name Hidden -Value $value
+ } catch [System.Security.SecurityException] {
+ Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
+ } catch [System.Management.Automation.ItemNotFoundException] {
+ Write-Warning $psitem.Exception.ErrorRecord
+ } catch {
+ Write-Warning "Unable to set $Name due to unhandled exception"
+ Write-Warning $psitem.Exception.StackTrace
+ }
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Customize-Preferences/MouseAcceleration.md b/docs/dev/tweaks/Customize-Preferences/MouseAcceleration.md
new file mode 100644
index 00000000..83d6aff7
--- /dev/null
+++ b/docs/dev/tweaks/Customize-Preferences/MouseAcceleration.md
@@ -0,0 +1,84 @@
+# Mouse Acceleration
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+If Enabled then Cursor movement is affected by the speed of your physical mouse movements.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Mouse Acceleration",
+ "Description": "If Enabled then Cursor movement is affected by the speed of your physical mouse movements.",
+ "category": "Customize Preferences",
+ "panel": "2",
+ "Order": "a107_",
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/MouseAcceleration"
+}
+```
+
+
+
+## Function: Invoke-WinUtilMouseAcceleration
+
+```powershell
+Function Invoke-WinUtilMouseAcceleration {
+ <#
+
+ .SYNOPSIS
+ Enables/Disables Mouse Acceleration
+
+ .PARAMETER DarkMoveEnabled
+ Indicates the current Mouse Acceleration State
+
+ #>
+ Param($MouseAccelerationEnabled)
+ try {
+ if ($MouseAccelerationEnabled -eq $false) {
+ Write-Host "Enabling Mouse Acceleration"
+ $MouseSpeed = 1
+ $MouseThreshold1 = 6
+ $MouseThreshold2 = 10
+ } else {
+ Write-Host "Disabling Mouse Acceleration"
+ $MouseSpeed = 0
+ $MouseThreshold1 = 0
+ $MouseThreshold2 = 0
+
+ }
+
+ $Path = "HKCU:\Control Panel\Mouse"
+ Set-ItemProperty -Path $Path -Name MouseSpeed -Value $MouseSpeed
+ Set-ItemProperty -Path $Path -Name MouseThreshold1 -Value $MouseThreshold1
+ Set-ItemProperty -Path $Path -Name MouseThreshold2 -Value $MouseThreshold2
+ } catch [System.Security.SecurityException] {
+ Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
+ } catch [System.Management.Automation.ItemNotFoundException] {
+ Write-Warning $psitem.Exception.ErrorRecord
+ } catch {
+ Write-Warning "Unable to set $Name due to unhandled exception"
+ Write-Warning $psitem.Exception.StackTrace
+ }
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Customize-Preferences/NumLock.md b/docs/dev/tweaks/Customize-Preferences/NumLock.md
new file mode 100644
index 00000000..00fc0990
--- /dev/null
+++ b/docs/dev/tweaks/Customize-Preferences/NumLock.md
@@ -0,0 +1,77 @@
+# NumLock on Startup
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Toggle the Num Lock key state when your computer starts.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "NumLock on Startup",
+ "Description": "Toggle the Num Lock key state when your computer starts.",
+ "category": "Customize Preferences",
+ "panel": "2",
+ "Order": "a102_",
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/NumLock"
+}
+```
+
+
+
+## Function: Invoke-WinUtilNumLock
+
+```powershell
+function Invoke-WinUtilNumLock {
+ <#
+ .SYNOPSIS
+ Disables/Enables NumLock on startup
+ .PARAMETER Enabled
+ Indicates whether to enable or disable Numlock on startup
+ #>
+ Param($Enabled)
+ try {
+ if ($Enabled -eq $false) {
+ Write-Host "Enabling Numlock on startup"
+ $value = 2
+ } else {
+ Write-Host "Disabling Numlock on startup"
+ $value = 0
+ }
+ New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS
+ $HKUPath = "HKU:\.Default\Control Panel\Keyboard"
+ $HKCUPath = "HKCU:\Control Panel\Keyboard"
+ Set-ItemProperty -Path $HKUPath -Name InitialKeyboardIndicators -Value $value
+ Set-ItemProperty -Path $HKCUPath -Name InitialKeyboardIndicators -Value $value
+ }
+ Catch [System.Security.SecurityException] {
+ Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
+ } catch [System.Management.Automation.ItemNotFoundException] {
+ Write-Warning $psitem.Exception.ErrorRecord
+ } catch {
+ Write-Warning "Unable to set $Name due to unhandled exception"
+ Write-Warning $psitem.Exception.StackTrace
+ }
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Customize-Preferences/ShowExt.md b/docs/dev/tweaks/Customize-Preferences/ShowExt.md
new file mode 100644
index 00000000..9913035f
--- /dev/null
+++ b/docs/dev/tweaks/Customize-Preferences/ShowExt.md
@@ -0,0 +1,73 @@
+# Show File Extensions
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+If enabled then File extensions (e.g., .txt, .jpg) are visible.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Show File Extensions",
+ "Description": "If enabled then File extensions (e.g., .txt, .jpg) are visible.",
+ "category": "Customize Preferences",
+ "panel": "2",
+ "Order": "a201_",
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/ShowExt"
+}
+```
+
+
+
+## Function: Invoke-WinUtilShowExt
+
+```powershell
+function Invoke-WinUtilShowExt {
+ <#
+ .SYNOPSIS
+ Disables/Enables Show file Extentions
+ .PARAMETER Enabled
+ Indicates whether to enable or disable Show file extentions
+ #>
+ Param($Enabled)
+ try {
+ if ($Enabled -eq $false) {
+ Write-Host "Showing file extentions"
+ $value = 0
+ } else {
+ Write-Host "hiding file extensions"
+ $value = 1
+ }
+ $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
+ Set-ItemProperty -Path $Path -Name HideFileExt -Value $value
+ } catch [System.Security.SecurityException] {
+ Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
+ } catch [System.Management.Automation.ItemNotFoundException] {
+ Write-Warning $psitem.Exception.ErrorRecord
+ } catch {
+ Write-Warning "Unable to set $Name due to unhandled exception"
+ Write-Warning $psitem.Exception.StackTrace
+ }
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Customize-Preferences/SnapFlyout.md b/docs/dev/tweaks/Customize-Preferences/SnapFlyout.md
new file mode 100644
index 00000000..9d637322
--- /dev/null
+++ b/docs/dev/tweaks/Customize-Preferences/SnapFlyout.md
@@ -0,0 +1,76 @@
+# Snap Assist Flyout
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+If enabled then Snap preview is disabled when maximize button is hovered.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Snap Assist Flyout",
+ "Description": "If enabled then Snap preview is disabled when maximize button is hovered.",
+ "category": "Customize Preferences",
+ "panel": "2",
+ "Order": "a105_",
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/SnapFlyout"
+}
+```
+
+
+
+## Function: Invoke-WinUtilSnapFlyout
+
+```powershell
+function Invoke-WinUtilSnapFlyout {
+ <#
+ .SYNOPSIS
+ Disables/Enables Snap Assist Flyout on startup
+ .PARAMETER Enabled
+ Indicates whether to enable or disable Snap Assist Flyout on startup
+ #>
+ Param($Enabled)
+ try {
+ if ($Enabled -eq $false) {
+ Write-Host "Enabling Snap Assist Flyout On startup"
+ $value = 1
+ } else {
+ Write-Host "Disabling Snap Assist Flyout On startup"
+ $value = 0
+ }
+ # taskkill.exe /F /IM "explorer.exe"
+ $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
+ taskkill.exe /F /IM "explorer.exe"
+ Set-ItemProperty -Path $Path -Name EnableSnapAssistFlyout -Value $value
+ Start-Process "explorer.exe"
+ } catch [System.Security.SecurityException] {
+ Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
+ } catch [System.Management.Automation.ItemNotFoundException] {
+ Write-Warning $psitem.Exception.ErrorRecord
+ } catch {
+ Write-Warning "Unable to set $Name due to unhandled exception"
+ Write-Warning $psitem.Exception.StackTrace
+ }
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Customize-Preferences/SnapSuggestion.md b/docs/dev/tweaks/Customize-Preferences/SnapSuggestion.md
new file mode 100644
index 00000000..3e725d57
--- /dev/null
+++ b/docs/dev/tweaks/Customize-Preferences/SnapSuggestion.md
@@ -0,0 +1,76 @@
+# Snap Assist Suggestion
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+If enabled then you will get suggestions to snap other applications in the left over spaces.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Snap Assist Suggestion",
+ "Description": "If enabled then you will get suggestions to snap other applications in the left over spaces.",
+ "category": "Customize Preferences",
+ "panel": "2",
+ "Order": "a106_",
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/SnapSuggestion"
+}
+```
+
+
+
+## Function: Invoke-WinUtilSnapSuggestion
+
+```powershell
+function Invoke-WinUtilSnapSuggestion {
+ <#
+ .SYNOPSIS
+ Disables/Enables Snap Assist Suggestions on startup
+ .PARAMETER Enabled
+ Indicates whether to enable or disable Snap Assist Suggestions on startup
+ #>
+ Param($Enabled)
+ try {
+ if ($Enabled -eq $false) {
+ Write-Host "Enabling Snap Assist Suggestion On startup"
+ $value = 1
+ } else {
+ Write-Host "Disabling Snap Assist Suggestion On startup"
+ $value = 0
+ }
+ # taskkill.exe /F /IM "explorer.exe"
+ $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
+ taskkill.exe /F /IM "explorer.exe"
+ Set-ItemProperty -Path $Path -Name SnapAssist -Value $value
+ Start-Process "explorer.exe"
+ } catch [System.Security.SecurityException] {
+ Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
+ } catch [System.Management.Automation.ItemNotFoundException] {
+ Write-Warning $psitem.Exception.ErrorRecord
+ } catch {
+ Write-Warning "Unable to set $Name due to unhandled exception"
+ Write-Warning $psitem.Exception.StackTrace
+ }
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Customize-Preferences/SnapWindow.md b/docs/dev/tweaks/Customize-Preferences/SnapWindow.md
new file mode 100644
index 00000000..7192a858
--- /dev/null
+++ b/docs/dev/tweaks/Customize-Preferences/SnapWindow.md
@@ -0,0 +1,73 @@
+# Snap Window
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+If enabled you can align windows by dragging them. | Relogin Required
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Snap Window",
+ "Description": "If enabled you can align windows by dragging them. | Relogin Required",
+ "category": "Customize Preferences",
+ "panel": "2",
+ "Order": "a104_",
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/SnapWindow"
+}
+```
+
+
+
+## Function: Invoke-WinUtilSnapWindow
+
+```powershell
+function Invoke-WinUtilSnapWindow {
+ <#
+ .SYNOPSIS
+ Disables/Enables Snapping Windows on startup
+ .PARAMETER Enabled
+ Indicates whether to enable or disable Snapping Windows on startup
+ #>
+ Param($Enabled)
+ try {
+ if ($Enabled -eq $false) {
+ Write-Host "Enabling Snap Windows On startup | Relogin Required"
+ $value = 1
+ } else {
+ Write-Host "Disabling Snap Windows On startup | Relogin Required"
+ $value = 0
+ }
+ $Path = "HKCU:\Control Panel\Desktop"
+ Set-ItemProperty -Path $Path -Name WindowArrangementActive -Value $value
+ } catch [System.Security.SecurityException] {
+ Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
+ } catch [System.Management.Automation.ItemNotFoundException] {
+ Write-Warning $psitem.Exception.ErrorRecord
+ } catch {
+ Write-Warning "Unable to set $Name due to unhandled exception"
+ Write-Warning $psitem.Exception.StackTrace
+ }
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Customize-Preferences/StickyKeys.md b/docs/dev/tweaks/Customize-Preferences/StickyKeys.md
new file mode 100644
index 00000000..e2213ee8
--- /dev/null
+++ b/docs/dev/tweaks/Customize-Preferences/StickyKeys.md
@@ -0,0 +1,73 @@
+# Sticky Keys
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+If Enabled then Sticky Keys is activated - Sticky keys is an accessibility feature of some graphical user interfaces which assists users who have physical disabilities or help users reduce repetitive strain injury.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Sticky Keys",
+ "Description": "If Enabled then Sticky Keys is activated - Sticky keys is an accessibility feature of some graphical user interfaces which assists users who have physical disabilities or help users reduce repetitive strain injury.",
+ "category": "Customize Preferences",
+ "panel": "2",
+ "Order": "a108_",
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/StickyKeys"
+}
+```
+
+
+
+## Function: Invoke-WinUtilStickyKeys
+
+```powershell
+Function Invoke-WinUtilStickyKeys {
+ <#
+ .SYNOPSIS
+ Disables/Enables Sticky Keyss on startup
+ .PARAMETER Enabled
+ Indicates whether to enable or disable Sticky Keys on startup
+ #>
+ Param($Enabled)
+ try {
+ if ($Enabled -eq $false) {
+ Write-Host "Enabling Sticky Keys On startup"
+ $value = 510
+ } else {
+ Write-Host "Disabling Sticky Keys On startup"
+ $value = 58
+ }
+ $Path = "HKCU:\Control Panel\Accessibility\StickyKeys"
+ Set-ItemProperty -Path $Path -Name Flags -Value $value
+ } catch [System.Security.SecurityException] {
+ Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
+ } catch [System.Management.Automation.ItemNotFoundException] {
+ Write-Warning $psitem.Exception.ErrorRecord
+ } catch {
+ Write-Warning "Unable to set $Name due to unhandled exception"
+ Write-Warning $psitem.Exception.StackTrace
+ }
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Customize-Preferences/TaskView.md b/docs/dev/tweaks/Customize-Preferences/TaskView.md
new file mode 100644
index 00000000..4161a0f9
--- /dev/null
+++ b/docs/dev/tweaks/Customize-Preferences/TaskView.md
@@ -0,0 +1,76 @@
+# Task View Button in Taskbar
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+If Enabled then Task View Button in Taskbar will be shown.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Task View Button in Taskbar",
+ "Description": "If Enabled then Task View Button in Taskbar will be shown.",
+ "category": "Customize Preferences",
+ "panel": "2",
+ "Order": "a203_",
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/TaskView"
+}
+```
+
+
+
+## Function: Invoke-WinUtilTaskView
+
+```powershell
+function Invoke-WinUtilTaskView {
+ <#
+
+ .SYNOPSIS
+ Enable/Disable Task View
+
+ .PARAMETER Enabled
+ Indicates whether to enable or disable Task View
+
+ #>
+ Param($Enabled)
+ try {
+ if ($Enabled -eq $false) {
+ Write-Host "Enabling Task View"
+ $value = 1
+ } else {
+ Write-Host "Disabling Task View"
+ $value = 0
+ }
+ $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
+ Set-ItemProperty -Path $Path -Name ShowTaskViewButton -Value $value
+ } catch [System.Security.SecurityException] {
+ Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
+ } catch [System.Management.Automation.ItemNotFoundException] {
+ Write-Warning $psitem.Exception.ErrorRecord
+ } catch {
+ Write-Warning "Unable to set $Name due to unhandled exception"
+ Write-Warning $psitem.Exception.StackTrace
+ }
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Customize-Preferences/TaskbarAlignment.md b/docs/dev/tweaks/Customize-Preferences/TaskbarAlignment.md
new file mode 100644
index 00000000..3a4d2995
--- /dev/null
+++ b/docs/dev/tweaks/Customize-Preferences/TaskbarAlignment.md
@@ -0,0 +1,76 @@
+# Center Taskbar Items
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## 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.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Center Taskbar Items",
+ "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.",
+ "category": "Customize Preferences",
+ "panel": "2",
+ "Order": "a204_",
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/TaskbarAlignment"
+}
+```
+
+
+
+## Function: Invoke-WinUtilTaskbarAlignment
+
+```powershell
+function Invoke-WinUtilTaskbarAlignment {
+ <#
+
+ .SYNOPSIS
+ Switches between Center & Left Taskbar Alignment
+
+ .PARAMETER Enabled
+ Indicates whether to make Taskbar Alignment Center or Left
+
+ #>
+ Param($Enabled)
+ try {
+ if ($Enabled -eq $false) {
+ Write-Host "Making Taskbar Alignment to the Center"
+ $value = 1
+ } else {
+ Write-Host "Making Taskbar Alignment to the Left"
+ $value = 0
+ }
+ $Path = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
+ Set-ItemProperty -Path $Path -Name "TaskbarAl" -Value $value
+ } catch [System.Security.SecurityException] {
+ Write-Warning "Unable to set $Path\$Name to $value due to a Security Exception"
+ } catch [System.Management.Automation.ItemNotFoundException] {
+ Write-Warning $psitem.Exception.ErrorRecord
+ } catch {
+ Write-Warning "Unable to set $Name due to unhandled exception"
+ Write-Warning $psitem.Exception.StackTrace
+ }
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Customize-Preferences/TaskbarSearch.md b/docs/dev/tweaks/Customize-Preferences/TaskbarSearch.md
new file mode 100644
index 00000000..fc0d27e8
--- /dev/null
+++ b/docs/dev/tweaks/Customize-Preferences/TaskbarSearch.md
@@ -0,0 +1,76 @@
+# Search Button in Taskbar
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+If Enabled Search Button will be on the taskbar.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Search Button in Taskbar",
+ "Description": "If Enabled Search Button will be on the taskbar.",
+ "category": "Customize Preferences",
+ "panel": "2",
+ "Order": "a202_",
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/TaskbarSearch"
+}
+```
+
+
+
+## Function: Invoke-WinUtilTaskbarSearch
+
+```powershell
+function Invoke-WinUtilTaskbarSearch {
+ <#
+
+ .SYNOPSIS
+ Enable/Disable Taskbar Search Button.
+
+ .PARAMETER Enabled
+ Indicates whether to enable or disable Taskbar Search Button.
+
+ #>
+ Param($Enabled)
+ try {
+ if ($Enabled -eq $false) {
+ Write-Host "Enabling Search Button"
+ $value = 1
+ } else {
+ Write-Host "Disabling Search Button"
+ $value = 0
+ }
+ $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Search\"
+ Set-ItemProperty -Path $Path -Name SearchboxTaskbarMode -Value $value
+ } catch [System.Security.SecurityException] {
+ Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
+ } catch [System.Management.Automation.ItemNotFoundException] {
+ Write-Warning $psitem.Exception.ErrorRecord
+ } catch {
+ Write-Warning "Unable to set $Name due to unhandled exception"
+ Write-Warning $psitem.Exception.StackTrace
+ }
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Customize-Preferences/TaskbarWidgets.md b/docs/dev/tweaks/Customize-Preferences/TaskbarWidgets.md
new file mode 100644
index 00000000..739afe7b
--- /dev/null
+++ b/docs/dev/tweaks/Customize-Preferences/TaskbarWidgets.md
@@ -0,0 +1,76 @@
+# Widgets Button in Taskbar
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+If Enabled then Widgets Button in Taskbar will be shown.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Widgets Button in Taskbar",
+ "Description": "If Enabled then Widgets Button in Taskbar will be shown.",
+ "category": "Customize Preferences",
+ "panel": "2",
+ "Order": "a204_",
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/TaskbarWidgets"
+}
+```
+
+
+
+## Function: Invoke-WinUtilTaskbarWidgets
+
+```powershell
+function Invoke-WinUtilTaskbarWidgets {
+ <#
+
+ .SYNOPSIS
+ Enable/Disable Taskbar Widgets
+
+ .PARAMETER Enabled
+ Indicates whether to enable or disable Taskbar Widgets
+
+ #>
+ Param($Enabled)
+ try {
+ if ($Enabled -eq $false) {
+ Write-Host "Enabling Taskbar Widgets"
+ $value = 1
+ } else {
+ Write-Host "Disabling Taskbar Widgets"
+ $value = 0
+ }
+ $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
+ Set-ItemProperty -Path $Path -Name TaskbarDa -Value $value
+ } catch [System.Security.SecurityException] {
+ Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
+ } catch [System.Management.Automation.ItemNotFoundException] {
+ Write-Warning $psitem.Exception.ErrorRecord
+ } catch {
+ Write-Warning "Unable to set $Name due to unhandled exception"
+ Write-Warning $psitem.Exception.StackTrace
+ }
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Customize-Preferences/VerboseLogon.md b/docs/dev/tweaks/Customize-Preferences/VerboseLogon.md
new file mode 100644
index 00000000..44bf183a
--- /dev/null
+++ b/docs/dev/tweaks/Customize-Preferences/VerboseLogon.md
@@ -0,0 +1,73 @@
+# Verbose Messages During Logon
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Show detailed messages during the login process for troubleshooting and diagnostics.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Verbose Messages During Logon",
+ "Description": "Show detailed messages during the login process for troubleshooting and diagnostics.",
+ "category": "Customize Preferences",
+ "panel": "2",
+ "Order": "a103_",
+ "Type": "Toggle",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/VerboseLogon"
+}
+```
+
+
+
+## Function: Invoke-WinUtilVerboseLogon
+
+```powershell
+function Invoke-WinUtilVerboseLogon {
+ <#
+ .SYNOPSIS
+ Disables/Enables VerboseLogon Messages
+ .PARAMETER Enabled
+ Indicates whether to enable or disable VerboseLogon messages
+ #>
+ Param($Enabled)
+ try {
+ if ($Enabled -eq $false) {
+ Write-Host "Enabling Verbose Logon Messages"
+ $value = 1
+ } else {
+ Write-Host "Disabling Verbose Logon Messages"
+ $value = 0
+ }
+ $Path = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"
+ Set-ItemProperty -Path $Path -Name VerboseStatus -Value $value
+ } catch [System.Security.SecurityException] {
+ Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
+ } catch [System.Management.Automation.ItemNotFoundException] {
+ Write-Warning $psitem.Exception.ErrorRecord
+ } catch {
+ Write-Warning "Unable to set $Name due to unhandled exception"
+ Write-Warning $psitem.Exception.StackTrace
+ }
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Essential-Tweaks/AH.md b/docs/dev/tweaks/Essential-Tweaks/AH.md
new file mode 100644
index 00000000..eae8dfdf
--- /dev/null
+++ b/docs/dev/tweaks/Essential-Tweaks/AH.md
@@ -0,0 +1,93 @@
+# Disable Activity History
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+This erases recent docs, clipboard, and run history.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Disable Activity History",
+ "Description": "This erases recent docs, clipboard, and run history.",
+ "category": "Essential Tweaks",
+ "panel": "1",
+ "Order": "a005_",
+ "registry": [
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\System",
+ "Name": "EnableActivityFeed",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\System",
+ "Name": "PublishUserActivities",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\System",
+ "Name": "UploadUserActivities",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ }
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/AH"
+}
+```
+
+
+
+## Registry Changes
+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.
+
+
+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).
+
+### Registry Key: EnableActivityFeed
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: PublishUserActivities
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: UploadUserActivities
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Essential-Tweaks/ConsumerFeatures.md b/docs/dev/tweaks/Essential-Tweaks/ConsumerFeatures.md
new file mode 100644
index 00000000..19f5f7ee
--- /dev/null
+++ b/docs/dev/tweaks/Essential-Tweaks/ConsumerFeatures.md
@@ -0,0 +1,63 @@
+# Disable ConsumerFeatures
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## 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)
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Disable ConsumerFeatures",
+ "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)",
+ "category": "Essential Tweaks",
+ "panel": "1",
+ "Order": "a003_",
+ "registry": [
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\CloudContent",
+ "OriginalValue": "0",
+ "Name": "DisableWindowsConsumerFeatures",
+ "Value": "1",
+ "Type": "DWord"
+ }
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/ConsumerFeatures"
+}
+```
+
+
+
+## Registry Changes
+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.
+
+
+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).
+
+### Registry Key: DisableWindowsConsumerFeatures
+
+**Type:** DWord
+
+**Original Value:** 0
+
+**New Value:** 1
+
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Essential-Tweaks/DVR.md b/docs/dev/tweaks/Essential-Tweaks/DVR.md
new file mode 100644
index 00000000..7d909f61
--- /dev/null
+++ b/docs/dev/tweaks/Essential-Tweaks/DVR.md
@@ -0,0 +1,123 @@
+# Disable GameDVR
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+GameDVR is a Windows App that is a dependency for some Store Games. I've never met someone that likes it, but it's there for the XBOX crowd.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Disable GameDVR",
+ "Description": "GameDVR is a Windows App that is a dependency for some Store Games. I've never met someone that likes it, but it's there for the XBOX crowd.",
+ "category": "Essential Tweaks",
+ "panel": "1",
+ "Order": "a005_",
+ "registry": [
+ {
+ "Path": "HKCU:\\System\\GameConfigStore",
+ "Name": "GameDVR_FSEBehavior",
+ "Value": "2",
+ "OriginalValue": "1",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\System\\GameConfigStore",
+ "Name": "GameDVR_Enabled",
+ "Value": "0",
+ "OriginalValue": "1",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\System\\GameConfigStore",
+ "Name": "GameDVR_HonorUserFSEBehaviorMode",
+ "Value": "1",
+ "OriginalValue": "0",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\System\\GameConfigStore",
+ "Name": "GameDVR_EFSEFeatureFlags",
+ "Value": "0",
+ "OriginalValue": "1",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\GameDVR",
+ "Name": "AllowGameDVR",
+ "Value": "0",
+ "OriginalValue": "1",
+ "Type": "DWord"
+ }
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/DVR"
+}
+```
+
+
+
+## Registry Changes
+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.
+
+
+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).
+
+### Registry Key: GameDVR_FSEBehavior
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 2
+
+### Registry Key: GameDVR_Enabled
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: GameDVR_HonorUserFSEBehaviorMode
+
+**Type:** DWord
+
+**Original Value:** 0
+
+**New Value:** 1
+
+### Registry Key: GameDVR_EFSEFeatureFlags
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: AllowGameDVR
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Essential-Tweaks/DeleteTempFiles.md b/docs/dev/tweaks/Essential-Tweaks/DeleteTempFiles.md
new file mode 100644
index 00000000..50e34e8f
--- /dev/null
+++ b/docs/dev/tweaks/Essential-Tweaks/DeleteTempFiles.md
@@ -0,0 +1,50 @@
+# Delete Temporary Files
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Erases TEMP Folders
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Delete Temporary Files",
+ "Description": "Erases TEMP Folders",
+ "category": "Essential Tweaks",
+ "panel": "1",
+ "Order": "a002_",
+ "InvokeScript": [
+ "Get-ChildItem -Path \"C:\\Windows\\Temp\" *.* -Recurse | Remove-Item -Force -Recurse
+ Get-ChildItem -Path $env:TEMP *.* -Recurse | Remove-Item -Force -Recurse"
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/DeleteTempFiles"
+}
+```
+
+
+
+## Invoke Script
+
+```powershell
+Get-ChildItem -Path "C:\Windows\Temp" *.* -Recurse | Remove-Item -Force -Recurse
+ Get-ChildItem -Path $env:TEMP *.* -Recurse | Remove-Item -Force -Recurse
+
+```
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Essential-Tweaks/DiskCleanup.md b/docs/dev/tweaks/Essential-Tweaks/DiskCleanup.md
new file mode 100644
index 00000000..fedad44a
--- /dev/null
+++ b/docs/dev/tweaks/Essential-Tweaks/DiskCleanup.md
@@ -0,0 +1,54 @@
+# Run Disk Cleanup
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Runs Disk Cleanup on Drive C: and removes old Windows Updates.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Run Disk Cleanup",
+ "Description": "Runs Disk Cleanup on Drive C: and removes old Windows Updates.",
+ "category": "Essential Tweaks",
+ "panel": "1",
+ "Order": "a009_",
+ "InvokeScript": [
+ "
+ cleanmgr.exe /d C: /VERYLOWDISK
+ Dism.exe /online /Cleanup-Image /StartComponentCleanup /ResetBase
+ "
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/DiskCleanup"
+}
+```
+
+
+
+## Invoke Script
+
+```powershell
+
+ cleanmgr.exe /d C: /VERYLOWDISK
+ Dism.exe /online /Cleanup-Image /StartComponentCleanup /ResetBase
+
+
+```
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Essential-Tweaks/EdgeDebloat.md b/docs/dev/tweaks/Essential-Tweaks/EdgeDebloat.md
new file mode 100644
index 00000000..a9af5d7d
--- /dev/null
+++ b/docs/dev/tweaks/Essential-Tweaks/EdgeDebloat.md
@@ -0,0 +1,363 @@
+# Debloat Edge
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Disables various telemetry options, popups, and other annoyances in Edge.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Debloat Edge",
+ "Description": "Disables various telemetry options, popups, and other annoyances in Edge.",
+ "category": "Essential Tweaks",
+ "panel": "1",
+ "Order": "a016_",
+ "registry": [
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\EdgeUpdate",
+ "Name": "CreateDesktopShortcutDefault",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "EdgeEnhanceImagesEnabled",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "PersonalizationReportingEnabled",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "ShowRecommendationsEnabled",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "HideFirstRunExperience",
+ "Type": "DWord",
+ "Value": "1",
+ "OriginalValue": "0"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "UserFeedbackAllowed",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "ConfigureDoNotTrack",
+ "Type": "DWord",
+ "Value": "1",
+ "OriginalValue": "0"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "AlternateErrorPagesEnabled",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "EdgeCollectionsEnabled",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "EdgeFollowEnabled",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "EdgeShoppingAssistantEnabled",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "MicrosoftEdgeInsiderPromotionEnabled",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "PersonalizationReportingEnabled",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "ShowMicrosoftRewards",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "WebWidgetAllowed",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "DiagnosticData",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "EdgeAssetDeliveryServiceEnabled",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "EdgeCollectionsEnabled",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "CryptoWalletEnabled",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "ConfigureDoNotTrack",
+ "Type": "DWord",
+ "Value": "1",
+ "OriginalValue": "0"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
+ "Name": "WalletDonationEnabled",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ }
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/EdgeDebloat"
+}
+```
+
+
+
+## Registry Changes
+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.
+
+
+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).
+
+### Registry Key: CreateDesktopShortcutDefault
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: EdgeEnhanceImagesEnabled
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: PersonalizationReportingEnabled
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: ShowRecommendationsEnabled
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: HideFirstRunExperience
+
+**Type:** DWord
+
+**Original Value:** 0
+
+**New Value:** 1
+
+### Registry Key: UserFeedbackAllowed
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: ConfigureDoNotTrack
+
+**Type:** DWord
+
+**Original Value:** 0
+
+**New Value:** 1
+
+### Registry Key: AlternateErrorPagesEnabled
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: EdgeCollectionsEnabled
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: EdgeFollowEnabled
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: EdgeShoppingAssistantEnabled
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: MicrosoftEdgeInsiderPromotionEnabled
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: PersonalizationReportingEnabled
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: ShowMicrosoftRewards
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: WebWidgetAllowed
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: DiagnosticData
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: EdgeAssetDeliveryServiceEnabled
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: EdgeCollectionsEnabled
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: CryptoWalletEnabled
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: ConfigureDoNotTrack
+
+**Type:** DWord
+
+**Original Value:** 0
+
+**New Value:** 1
+
+### Registry Key: WalletDonationEnabled
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Essential-Tweaks/EndTaskOnTaskbar.md b/docs/dev/tweaks/Essential-Tweaks/EndTaskOnTaskbar.md
new file mode 100644
index 00000000..de6192bc
--- /dev/null
+++ b/docs/dev/tweaks/Essential-Tweaks/EndTaskOnTaskbar.md
@@ -0,0 +1,97 @@
+# Enable End Task With Right Click
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Enables option to end task when right clicking a program in the taskbar
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Enable End Task With Right Click",
+ "Description": "Enables option to end task when right clicking a program in the taskbar",
+ "category": "Essential Tweaks",
+ "panel": "1",
+ "Order": "a006_",
+ "InvokeScript": [
+ "$path = \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\\TaskbarDeveloperSettings\"
+ $name = \"TaskbarEndTask\"
+ $value = 1
+
+ # Ensure the registry key exists
+ if (-not (Test-Path $path)) {
+ New-Item -Path $path -Force | Out-Null
+ }
+
+ # Set the property, creating it if it doesn't exist
+ New-ItemProperty -Path $path -Name $name -PropertyType DWord -Value $value -Force | Out-Null"
+ ],
+ "UndoScript": [
+ "$path = \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\\TaskbarDeveloperSettings\"
+ $name = \"TaskbarEndTask\"
+ $value = 0
+
+ # Ensure the registry key exists
+ if (-not (Test-Path $path)) {
+ New-Item -Path $path -Force | Out-Null
+ }
+
+ # Set the property, creating it if it doesn't exist
+ New-ItemProperty -Path $path -Name $name -PropertyType DWord -Value $value -Force | Out-Null"
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/EndTaskOnTaskbar"
+}
+```
+
+
+
+## Invoke Script
+
+```powershell
+$path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\TaskbarDeveloperSettings"
+ $name = "TaskbarEndTask"
+ $value = 1
+
+ # Ensure the registry key exists
+ if (-not (Test-Path $path)) {
+ New-Item -Path $path -Force | Out-Null
+ }
+
+ # Set the property, creating it if it doesn't exist
+ New-ItemProperty -Path $path -Name $name -PropertyType DWord -Value $value -Force | Out-Null
+
+```
+## Undo Script
+
+```powershell
+$path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\TaskbarDeveloperSettings"
+ $name = "TaskbarEndTask"
+ $value = 0
+
+ # Ensure the registry key exists
+ if (-not (Test-Path $path)) {
+ New-Item -Path $path -Force | Out-Null
+ }
+
+ # Set the property, creating it if it doesn't exist
+ New-ItemProperty -Path $path -Name $name -PropertyType DWord -Value $value -Force | Out-Null
+
+```
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Essential-Tweaks/Hiber.md b/docs/dev/tweaks/Essential-Tweaks/Hiber.md
new file mode 100644
index 00000000..1fde36f3
--- /dev/null
+++ b/docs/dev/tweaks/Essential-Tweaks/Hiber.md
@@ -0,0 +1,96 @@
+# Disable Hibernation
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Hibernation is really meant for laptops as it saves what's in memory before turning the pc off. It really should never be used, but some people are lazy and rely on it. Don't be like Bob. Bob likes hibernation.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Disable Hibernation",
+ "Description": "Hibernation is really meant for laptops as it saves what's in memory before turning the pc off. It really should never be used, but some people are lazy and rely on it. Don't be like Bob. Bob likes hibernation.",
+ "category": "Essential Tweaks",
+ "panel": "1",
+ "Order": "a005_",
+ "registry": [
+ {
+ "Path": "HKLM:\\System\\CurrentControlSet\\Control\\Session Manager\\Power",
+ "Name": "HibernateEnabled",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FlyoutMenuSettings",
+ "Name": "ShowHibernateOption",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ }
+ ],
+ "InvokeScript": [
+ "powercfg.exe /hibernate off"
+ ],
+ "UndoScript": [
+ "powercfg.exe /hibernate on"
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Hiber"
+}
+```
+
+
+
+## Invoke Script
+
+```powershell
+powercfg.exe /hibernate off
+
+```
+## Undo Script
+
+```powershell
+powercfg.exe /hibernate on
+
+```
+## Registry Changes
+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.
+
+
+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).
+
+### Registry Key: HibernateEnabled
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: ShowHibernateOption
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Essential-Tweaks/Home.md b/docs/dev/tweaks/Essential-Tweaks/Home.md
new file mode 100644
index 00000000..b49fb131
--- /dev/null
+++ b/docs/dev/tweaks/Essential-Tweaks/Home.md
@@ -0,0 +1,70 @@
+# Disable Homegroup
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## 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.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Disable Homegroup",
+ "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.",
+ "category": "Essential Tweaks",
+ "panel": "1",
+ "Order": "a005_",
+ "service": [
+ {
+ "Name": "HomeGroupListener",
+ "StartupType": "Manual",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "HomeGroupProvider",
+ "StartupType": "Manual",
+ "OriginalType": "Automatic"
+ }
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Home"
+}
+```
+
+
+
+## Service Changes
+
+Windows services are background processes for system functions or applications. Setting some to manual optimizes performance by starting them only when needed.
+
+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).
+
+### Service Name: HomeGroupListener
+
+**Startup Type:** Manual
+
+**Original Type:** Automatic
+
+### Service Name: HomeGroupProvider
+
+**Startup Type:** Manual
+
+**Original Type:** Automatic
+
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Essential-Tweaks/LaptopHibernation.md b/docs/dev/tweaks/Essential-Tweaks/LaptopHibernation.md
new file mode 100644
index 00000000..ff8cce93
--- /dev/null
+++ b/docs/dev/tweaks/Essential-Tweaks/LaptopHibernation.md
@@ -0,0 +1,132 @@
+# Set Hibernation as default (good for laptops)
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Most modern laptops have connected standby enabled which drains the battery, this sets hibernation as default which will not drain the battery. See issue https://github.com/ChrisTitusTech/winutil/issues/1399
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Set Hibernation as default (good for laptops)",
+ "Description": "Most modern laptops have connected standby enabled which drains the battery, this sets hibernation as default which will not drain the battery. See issue https://github.com/ChrisTitusTech/winutil/issues/1399",
+ "category": "Essential Tweaks",
+ "panel": "1",
+ "Order": "a014_",
+ "registry": [
+ {
+ "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Power\\PowerSettings\\238C9FA8-0AAD-41ED-83F4-97BE242C8F20\\7bc4a2f9-d8fc-4469-b07b-33eb785aaca0",
+ "OriginalValue": "1",
+ "Name": "Attributes",
+ "Value": "2",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Power\\PowerSettings\\abfc2519-3608-4c2a-94ea-171b0ed546ab\\94ac6d29-73ce-41a6-809f-6363ba21b47e",
+ "OriginalValue": "0",
+ "Name": "Attributes ",
+ "Value": "2",
+ "Type": "DWord"
+ }
+ ],
+ "InvokeScript": [
+ "
+ Write-Host \"Turn on Hibernation\"
+ Start-Process -FilePath powercfg -ArgumentList \"/hibernate on\" -NoNewWindow -Wait
+
+ # Set hibernation as the default action
+ Start-Process -FilePath powercfg -ArgumentList \"/change standby-timeout-ac 60\" -NoNewWindow -Wait
+ Start-Process -FilePath powercfg -ArgumentList \"/change standby-timeout-dc 60\" -NoNewWindow -Wait
+ Start-Process -FilePath powercfg -ArgumentList \"/change monitor-timeout-ac 10\" -NoNewWindow -Wait
+ Start-Process -FilePath powercfg -ArgumentList \"/change monitor-timeout-dc 1\" -NoNewWindow -Wait
+ "
+ ],
+ "UndoScript": [
+ "
+ Write-Host \"Turn off Hibernation\"
+ Start-Process -FilePath powercfg -ArgumentList \"/hibernate off\" -NoNewWindow -Wait
+
+ # Set standby to detault values
+ Start-Process -FilePath powercfg -ArgumentList \"/change standby-timeout-ac 15\" -NoNewWindow -Wait
+ Start-Process -FilePath powercfg -ArgumentList \"/change standby-timeout-dc 15\" -NoNewWindow -Wait
+ Start-Process -FilePath powercfg -ArgumentList \"/change monitor-timeout-ac 15\" -NoNewWindow -Wait
+ Start-Process -FilePath powercfg -ArgumentList \"/change monitor-timeout-dc 15\" -NoNewWindow -Wait
+ "
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/LaptopHibernation"
+}
+```
+
+
+
+## Invoke Script
+
+```powershell
+
+ Write-Host "Turn on Hibernation"
+ Start-Process -FilePath powercfg -ArgumentList "/hibernate on" -NoNewWindow -Wait
+
+ # Set hibernation as the default action
+ Start-Process -FilePath powercfg -ArgumentList "/change standby-timeout-ac 60" -NoNewWindow -Wait
+ Start-Process -FilePath powercfg -ArgumentList "/change standby-timeout-dc 60" -NoNewWindow -Wait
+ Start-Process -FilePath powercfg -ArgumentList "/change monitor-timeout-ac 10" -NoNewWindow -Wait
+ Start-Process -FilePath powercfg -ArgumentList "/change monitor-timeout-dc 1" -NoNewWindow -Wait
+
+
+```
+## Undo Script
+
+```powershell
+
+ Write-Host "Turn off Hibernation"
+ Start-Process -FilePath powercfg -ArgumentList "/hibernate off" -NoNewWindow -Wait
+
+ # Set standby to detault values
+ Start-Process -FilePath powercfg -ArgumentList "/change standby-timeout-ac 15" -NoNewWindow -Wait
+ Start-Process -FilePath powercfg -ArgumentList "/change standby-timeout-dc 15" -NoNewWindow -Wait
+ Start-Process -FilePath powercfg -ArgumentList "/change monitor-timeout-ac 15" -NoNewWindow -Wait
+ Start-Process -FilePath powercfg -ArgumentList "/change monitor-timeout-dc 15" -NoNewWindow -Wait
+
+
+```
+## Registry Changes
+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.
+
+
+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).
+
+### Registry Key: Attributes
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 2
+
+### Registry Key: Attributes
+
+**Type:** DWord
+
+**Original Value:** 0
+
+**New Value:** 2
+
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Essential-Tweaks/Loc.md b/docs/dev/tweaks/Essential-Tweaks/Loc.md
new file mode 100644
index 00000000..e4b9f426
--- /dev/null
+++ b/docs/dev/tweaks/Essential-Tweaks/Loc.md
@@ -0,0 +1,108 @@
+# Disable Location Tracking
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Disables Location Tracking...DUH!
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Disable Location Tracking",
+ "Description": "Disables Location Tracking...DUH!",
+ "category": "Essential Tweaks",
+ "panel": "1",
+ "Order": "a005_",
+ "registry": [
+ {
+ "Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\CapabilityAccessManager\\ConsentStore\\location",
+ "Name": "Value",
+ "Type": "String",
+ "Value": "Deny",
+ "OriginalValue": "Allow"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Sensor\\Overrides\\{BFA794E4-F964-4FDB-90F6-51056BFE4B44}",
+ "Name": "SensorPermissionState",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\lfsvc\\Service\\Configuration",
+ "Name": "Status",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SYSTEM\\Maps",
+ "Name": "AutoUpdateEnabled",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ }
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Loc"
+}
+```
+
+
+
+## Registry Changes
+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.
+
+
+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).
+
+### Registry Key: Value
+
+**Type:** String
+
+**Original Value:** Allow
+
+**New Value:** Deny
+
+### Registry Key: SensorPermissionState
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: Status
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: AutoUpdateEnabled
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Essential-Tweaks/Powershell7.md b/docs/dev/tweaks/Essential-Tweaks/Powershell7.md
new file mode 100644
index 00000000..03474481
--- /dev/null
+++ b/docs/dev/tweaks/Essential-Tweaks/Powershell7.md
@@ -0,0 +1,416 @@
+# Change Windows Terminal default: PowerShell 5 -> PowerShell 7
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+This will edit the config file of the Windows Terminal replacing PowerShell 5 with PowerShell 7 and installing PS7 if necessary
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Change Windows Terminal default: PowerShell 5 -> PowerShell 7",
+ "Description": "This will edit the config file of the Windows Terminal replacing PowerShell 5 with PowerShell 7 and installing PS7 if necessary",
+ "category": "Essential Tweaks",
+ "panel": "1",
+ "Order": "a009_",
+ "InvokeScript": [
+ "Invoke-WPFTweakPS7 -action \"PS7\""
+ ],
+ "UndoScript": [
+ "Invoke-WPFTweakPS7 -action \"PS5\""
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Powershell7"
+}
+```
+
+
+
+## Invoke Script
+
+```powershell
+Invoke-WPFTweakPS7 -action "PS7"
+
+```
+## Undo Script
+
+```powershell
+Invoke-WPFTweakPS7 -action "PS5"
+
+```
+## Function: Invoke-WPFTweakPS7
+
+```powershell
+function Invoke-WPFTweakPS7{
+ <#
+ .SYNOPSIS
+ This will edit the config file of the Windows Terminal Replacing the Powershell 5 to Powershell 7 and install Powershell 7 if necessary
+ .PARAMETER action
+ PS7: Configures Powershell 7 to be the default Terminal
+ PS5: Configures Powershell 5 to be the default Terminal
+ #>
+ param (
+ [ValidateSet("PS7", "PS5")]
+ [string]$action
+ )
+
+ switch ($action) {
+ "PS7"{
+ if (Test-Path -Path "$env:ProgramFiles\PowerShell\7") {
+ Write-Host "Powershell 7 is already installed."
+ } else {
+ Write-Host "Installing Powershell 7..."
+ Invoke-WinUtilWingetProgram -Action Install -Programs @("Microsoft.PowerShell")
+ }
+ $targetTerminalName = "PowerShell"
+ }
+ "PS5"{
+ $targetTerminalName = "Windows PowerShell"
+ }
+ }
+ # Check if the Windows Terminal is installed and return if not (Prerequisite for the following code)
+ if (-not (Get-Command "wt" -ErrorAction SilentlyContinue)) {
+ Write-Host "Windows Terminal not installed. Skipping Terminal preference"
+ return
+ }
+ # Check if the Windows Terminal settings.json file exists and return if not (Prereqisite for the following code)
+ $settingsPath = "$env:LOCALAPPDATA\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json"
+ if (-not (Test-Path -Path $settingsPath)) {
+ Write-Host "Windows Terminal Settings file not found at $settingsPath"
+ return
+ }
+
+ Write-Host "Settings file found."
+ $settingsContent = Get-Content -Path $settingsPath | ConvertFrom-Json
+ $ps7Profile = $settingsContent.profiles.list | Where-Object { $_.name -eq $targetTerminalName }
+ if ($ps7Profile) {
+ $settingsContent.defaultProfile = $ps7Profile.guid
+ $updatedSettings = $settingsContent | ConvertTo-Json -Depth 100
+ Set-Content -Path $settingsPath -Value $updatedSettings
+ Write-Host "Default profile updated to " -NoNewline
+ Write-Host "$targetTerminalName " -ForegroundColor White -NoNewline
+ Write-Host "using the name attribute."
+ } else {
+ Write-Host "No PowerShell 7 profile found in Windows Terminal settings using the name attribute."
+ }
+}
+
+```
+## Function: Invoke-WinUtilWingetProgram
+
+```powershell
+Function Invoke-WinUtilWingetProgram {
+ <#
+ .SYNOPSIS
+ Runs the designated action on the provided programs using Winget
+
+ .PARAMETER Programs
+ A list of programs to process
+
+ .PARAMETER action
+ The action to perform on the programs, can be either 'Install' or 'Uninstall'
+
+ .NOTES
+ The triple quotes are required any time you need a " in a normal script block.
+ The winget Return codes are documented here: https://github.com/microsoft/winget-cli/blob/master/doc/windows/package-actionr/winget/returnCodes.md
+ #>
+
+ param(
+ [Parameter(Mandatory, Position=0)]$Programs,
+
+ [Parameter(Mandatory, Position=1)]
+ [ValidateSet("Install", "Uninstall")]
+ [String]$Action
+ )
+
+ Function Invoke-Winget {
+ <#
+ .SYNOPSIS
+ Invokes the winget.exe with the provided arguments and return the exit code
+
+ .PARAMETER wingetId
+ The Id of the Program that Winget should Install/Uninstall
+
+ .PARAMETER scope
+ Determines the installation mode. Can be "user" or "machine" (For more info look at the winget documentation)
+
+ .PARAMETER credential
+ The PSCredential Object of the user that should be used to run winget
+
+ .NOTES
+ Invoke Winget uses the public variable $Action defined outside the function to determine if a Program should be installed or removed
+ #>
+ param (
+ [string]$wingetId,
+ [string]$scope = "",
+ [PScredential]$credential = $null
+ )
+
+ $commonArguments = "--id $wingetId --silent"
+ $arguments = if ($Action -eq "Install") {
+ "install $commonArguments --accept-source-agreements --accept-package-agreements $(if ($scope) {" --scope $scope"})"
+ } else {
+ "uninstall $commonArguments"
+ }
+
+ $processParams = @{
+ FilePath = "winget"
+ ArgumentList = $arguments
+ Wait = $true
+ PassThru = $true
+ NoNewWindow = $true
+ }
+
+ if ($credential) {
+ $processParams.credential = $credential
+ }
+
+ return (Start-Process @processParams).ExitCode
+ }
+
+ Function Invoke-Install {
+ <#
+ .SYNOPSIS
+ Contains the Install Logic and return code handling from winget
+
+ .PARAMETER Program
+ The Winget ID of the Program that should be installed
+ #>
+ param (
+ [string]$Program
+ )
+ $status = Invoke-Winget -wingetId $Program
+ if ($status -eq 0) {
+ Write-Host "$($Program) installed successfully."
+ return $true
+ } elseif ($status -eq -1978335189) {
+ Write-Host "$($Program) No applicable update found"
+ return $true
+ }
+
+ Write-Host "Attempt installation of $($Program) with User scope"
+ $status = Invoke-Winget -wingetId $Program -scope "user"
+ if ($status -eq 0) {
+ Write-Host "$($Program) installed successfully with User scope."
+ return $true
+ } elseif ($status -eq -1978335189) {
+ Write-Host "$($Program) No applicable update found"
+ return $true
+ }
+
+ $userChoice = [System.Windows.MessageBox]::Show("Do you want to attempt $($Program) installation with specific user credentials? Select 'Yes' to proceed or 'No' to skip.", "User credential Prompt", [System.Windows.MessageBoxButton]::YesNo)
+ if ($userChoice -eq 'Yes') {
+ $getcreds = Get-Credential
+ $status = Invoke-Winget -wingetId $Program -credential $getcreds
+ if ($status -eq 0) {
+ Write-Host "$($Program) installed successfully with User prompt."
+ return $true
+ }
+ } else {
+ Write-Host "Skipping installation with specific user credentials."
+ }
+
+ Write-Host "Failed to install $($Program)."
+ return $false
+ }
+
+ Function Invoke-Uninstall {
+ <#
+ .SYNOPSIS
+ Contains the Uninstall Logic and return code handling from winget
+
+ .PARAMETER Program
+ The Winget ID of the Program that should be uninstalled
+ #>
+ param (
+ [psobject]$Program
+ )
+
+ try {
+ $status = Invoke-Winget -wingetId $Program
+ if ($status -eq 0) {
+ Write-Host "$($Program) uninstalled successfully."
+ return $true
+ } else {
+ Write-Host "Failed to uninstall $($Program)."
+ return $false
+ }
+ } catch {
+ Write-Host "Failed to uninstall $($Program) due to an error: $_"
+ return $false
+ }
+ }
+
+ $count = $Programs.Count
+ $failedPackages = @()
+
+ Write-Host "==========================================="
+ Write-Host "-- Configuring winget packages ---"
+ Write-Host "==========================================="
+
+ for ($i = 0; $i -lt $count; $i++) {
+ $Program = $Programs[$i]
+ $result = $false
+ Set-WinUtilProgressBar -label "$Action $($Program)" -percent ($i / $count * 100)
+ $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -value ($i / $count)})
+
+ $result = switch ($Action) {
+ "Install" {Invoke-Install -Program $Program}
+ "Uninstall" {Invoke-Uninstall -Program $Program}
+ default {throw "[Install-WinUtilProgramWinget] Invalid action: $Action"}
+ }
+
+ if (-not $result) {
+ $failedPackages += $Program
+ }
+ }
+
+ Set-WinUtilProgressBar -label "$($Action)ation done" -percent 100
+ return $failedPackages
+}
+
+```
+## Function: Set-WinUtilProgressbar
+
+```powershell
+function Set-WinUtilProgressbar{
+ <#
+ .SYNOPSIS
+ This function is used to Update the Progress Bar displayed in the winutil GUI.
+ It will be automatically hidden if the user clicks something and no process is running
+ .PARAMETER Label
+ The Text to be overlayed onto the Progress Bar
+ .PARAMETER PERCENT
+ The percentage of the Progress Bar that should be filled (0-100)
+ .PARAMETER Hide
+ If provided, the Progress Bar and the label will be hidden
+ #>
+ param(
+ [string]$Label,
+ [ValidateRange(0,100)]
+ [int]$Percent,
+ $Hide
+ )
+ if ($hide) {
+ $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBarLabel.Visibility = "Collapsed"})
+ $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBar.Visibility = "Collapsed"})
+ } else {
+ $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBarLabel.Visibility = "Visible"})
+ $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBar.Visibility = "Visible"})
+ }
+ $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBarLabel.Content.Text = $label})
+ $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBarLabel.Content.ToolTip = $label})
+ $sync.form.Dispatcher.Invoke([action]{ $sync.ProgressBar.Value = $percent})
+
+}
+
+```
+## Function: Set-WinUtilTaskbarItem
+
+```powershell
+function Set-WinUtilTaskbaritem {
+ <#
+
+ .SYNOPSIS
+ Modifies the Taskbaritem of the WPF Form
+
+ .PARAMETER value
+ Value can be between 0 and 1, 0 being no progress done yet and 1 being fully completed
+ Value does not affect item without setting the state to 'Normal', 'Error' or 'Paused'
+ Set-WinUtilTaskbaritem -value 0.5
+
+ .PARAMETER state
+ State can be 'None' > No progress, 'Indeterminate' > inf. loading gray, 'Normal' > Gray, 'Error' > Red, 'Paused' > Yellow
+ no value needed:
+ - Set-WinUtilTaskbaritem -state "None"
+ - Set-WinUtilTaskbaritem -state "Indeterminate"
+ value needed:
+ - Set-WinUtilTaskbaritem -state "Error"
+ - Set-WinUtilTaskbaritem -state "Normal"
+ - Set-WinUtilTaskbaritem -state "Paused"
+
+ .PARAMETER overlay
+ Overlay icon to display on the taskbar item, there are the presets 'None', 'logo' and 'checkmark' or you can specify a path/link to an image file.
+ CTT logo preset:
+ - Set-WinUtilTaskbaritem -overlay "logo"
+ Checkmark preset:
+ - Set-WinUtilTaskbaritem -overlay "checkmark"
+ Warning preset:
+ - Set-WinUtilTaskbaritem -overlay "warning"
+ No overlay:
+ - Set-WinUtilTaskbaritem -overlay "None"
+ Custom icon (needs to be supported by WPF):
+ - Set-WinUtilTaskbaritem -overlay "C:\path\to\icon.png"
+
+ .PARAMETER description
+ Description to display on the taskbar item preview
+ Set-WinUtilTaskbaritem -description "This is a description"
+ #>
+ param (
+ [string]$state,
+ [double]$value,
+ [string]$overlay,
+ [string]$description
+ )
+
+ if ($value) {
+ $sync["Form"].taskbarItemInfo.ProgressValue = $value
+ }
+
+ if ($state) {
+ switch ($state) {
+ 'None' { $sync["Form"].taskbarItemInfo.ProgressState = "None" }
+ 'Indeterminate' { $sync["Form"].taskbarItemInfo.ProgressState = "Indeterminate" }
+ 'Normal' { $sync["Form"].taskbarItemInfo.ProgressState = "Normal" }
+ 'Error' { $sync["Form"].taskbarItemInfo.ProgressState = "Error" }
+ 'Paused' { $sync["Form"].taskbarItemInfo.ProgressState = "Paused" }
+ default { throw "[Set-WinUtilTaskbarItem] Invalid state" }
+ }
+ }
+
+ if ($overlay) {
+ switch ($overlay) {
+ 'logo' {
+ $sync["Form"].taskbarItemInfo.Overlay = "$env:LOCALAPPDATA\winutil\cttlogo.png"
+ }
+ 'checkmark' {
+ $sync["Form"].taskbarItemInfo.Overlay = "$env:LOCALAPPDATA\winutil\checkmark.png"
+ }
+ 'warning' {
+ $sync["Form"].taskbarItemInfo.Overlay = "$env:LOCALAPPDATA\winutil\warning.png"
+ }
+ 'None' {
+ $sync["Form"].taskbarItemInfo.Overlay = $null
+ }
+ default {
+ if (Test-Path $overlay) {
+ $sync["Form"].taskbarItemInfo.Overlay = $overlay
+ }
+ }
+ }
+ }
+
+ if ($description) {
+ $sync["Form"].taskbarItemInfo.Description = $description
+ }
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Essential-Tweaks/Powershell7Tele.md b/docs/dev/tweaks/Essential-Tweaks/Powershell7Tele.md
new file mode 100644
index 00000000..9da9af90
--- /dev/null
+++ b/docs/dev/tweaks/Essential-Tweaks/Powershell7Tele.md
@@ -0,0 +1,57 @@
+# Disable Powershell 7 Telemetry
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## 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.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Disable Powershell 7 Telemetry",
+ "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.",
+ "category": "Essential Tweaks",
+ "panel": "1",
+ "Order": "a009_",
+ "InvokeScript": [
+ "[Environment]::SetEnvironmentVariable('POWERSHELL_TELEMETRY_OPTOUT', '1', 'Machine')"
+ ],
+ "UndoScript": [
+ "[Environment]::SetEnvironmentVariable('POWERSHELL_TELEMETRY_OPTOUT', '', 'Machine')"
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Powershell7Tele"
+}
+```
+
+
+
+## Invoke Script
+
+```powershell
+[Environment]::SetEnvironmentVariable('POWERSHELL_TELEMETRY_OPTOUT', '1', 'Machine')
+
+```
+## Undo Script
+
+```powershell
+[Environment]::SetEnvironmentVariable('POWERSHELL_TELEMETRY_OPTOUT', '', 'Machine')
+
+```
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Essential-Tweaks/RestorePoint.md b/docs/dev/tweaks/Essential-Tweaks/RestorePoint.md
new file mode 100644
index 00000000..a7db58af
--- /dev/null
+++ b/docs/dev/tweaks/Essential-Tweaks/RestorePoint.md
@@ -0,0 +1,139 @@
+# Create Restore Point
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Creates a restore point at runtime in case a revert is needed from WinUtil modifications
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Create Restore Point",
+ "Description": "Creates a restore point at runtime in case a revert is needed from WinUtil modifications",
+ "category": "Essential Tweaks",
+ "panel": "1",
+ "Checked": "False",
+ "Order": "a001_",
+ "InvokeScript": [
+ "
+ # Check if the user has administrative privileges
+ if (-Not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
+ Write-Host \"Please run this script as an administrator.\"
+ return
+ }
+
+ # Check if System Restore is enabled for the main drive
+ try {
+ # Try getting restore points to check if System Restore is enabled
+ Enable-ComputerRestore -Drive \"$env:SystemDrive\"
+ } catch {
+ Write-Host \"An error occurred while enabling System Restore: $_\"
+ }
+
+ # Check if the SystemRestorePointCreationFrequency value exists
+ $exists = Get-ItemProperty -path \"HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\SystemRestore\" -Name \"SystemRestorePointCreationFrequency\" -ErrorAction SilentlyContinue
+ if($null -eq $exists) {
+ write-host 'Changing system to allow multiple restore points per day'
+ Set-ItemProperty -Path \"HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\SystemRestore\" -Name \"SystemRestorePointCreationFrequency\" -Value \"0\" -Type DWord -Force -ErrorAction Stop | Out-Null
+ }
+
+ # Attempt to load the required module for Get-ComputerRestorePoint
+ try {
+ Import-Module Microsoft.PowerShell.Management -ErrorAction Stop
+ } catch {
+ Write-Host \"Failed to load the Microsoft.PowerShell.Management module: $_\"
+ return
+ }
+
+ # Get all the restore points for the current day
+ try {
+ $existingRestorePoints = Get-ComputerRestorePoint | Where-Object { $_.CreationTime.Date -eq (Get-Date).Date }
+ } catch {
+ Write-Host \"Failed to retrieve restore points: $_\"
+ return
+ }
+
+ # Check if there is already a restore point created today
+ if ($existingRestorePoints.Count -eq 0) {
+ $description = \"System Restore Point created by WinUtil\"
+
+ Checkpoint-Computer -Description $description -RestorePointType \"MODIFY_SETTINGS\"
+ Write-Host -ForegroundColor Green \"System Restore Point Created Successfully\"
+ }
+ "
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/RestorePoint"
+}
+```
+
+
+
+## Invoke Script
+
+```powershell
+
+ # Check if the user has administrative privileges
+ if (-Not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
+ Write-Host "Please run this script as an administrator."
+ return
+ }
+
+ # Check if System Restore is enabled for the main drive
+ try {
+ # Try getting restore points to check if System Restore is enabled
+ Enable-ComputerRestore -Drive "$env:SystemDrive"
+ } catch {
+ Write-Host "An error occurred while enabling System Restore: $_"
+ }
+
+ # Check if the SystemRestorePointCreationFrequency value exists
+ $exists = Get-ItemProperty -path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore" -Name "SystemRestorePointCreationFrequency" -ErrorAction SilentlyContinue
+ if($null -eq $exists) {
+ write-host 'Changing system to allow multiple restore points per day'
+ Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore" -Name "SystemRestorePointCreationFrequency" -Value "0" -Type DWord -Force -ErrorAction Stop | Out-Null
+ }
+
+ # Attempt to load the required module for Get-ComputerRestorePoint
+ try {
+ Import-Module Microsoft.PowerShell.Management -ErrorAction Stop
+ } catch {
+ Write-Host "Failed to load the Microsoft.PowerShell.Management module: $_"
+ return
+ }
+
+ # Get all the restore points for the current day
+ try {
+ $existingRestorePoints = Get-ComputerRestorePoint | Where-Object { $_.CreationTime.Date -eq (Get-Date).Date }
+ } catch {
+ Write-Host "Failed to retrieve restore points: $_"
+ return
+ }
+
+ # Check if there is already a restore point created today
+ if ($existingRestorePoints.Count -eq 0) {
+ $description = "System Restore Point created by WinUtil"
+
+ Checkpoint-Computer -Description $description -RestorePointType "MODIFY_SETTINGS"
+ Write-Host -ForegroundColor Green "System Restore Point Created Successfully"
+ }
+
+
+```
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Essential-Tweaks/Services.md b/docs/dev/tweaks/Essential-Tweaks/Services.md
new file mode 100644
index 00000000..d96f2ef2
--- /dev/null
+++ b/docs/dev/tweaks/Essential-Tweaks/Services.md
@@ -0,0 +1,3150 @@
+# Set Services to Manual
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Turns a bunch of system services to manual that don't need to be running all the time. This is pretty harmless as if the service is needed, it will simply start on demand.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Set Services to Manual",
+ "Description": "Turns a bunch of system services to manual that don't need to be running all the time. This is pretty harmless as if the service is needed, it will simply start on demand.",
+ "category": "Essential Tweaks",
+ "panel": "1",
+ "Order": "a014_",
+ "service": [
+ {
+ "Name": "AJRouter",
+ "StartupType": "Disabled",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "ALG",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "AppIDSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "AppMgmt",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "AppReadiness",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "AppVClient",
+ "StartupType": "Disabled",
+ "OriginalType": "Disabled"
+ },
+ {
+ "Name": "AppXSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "Appinfo",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "AssignedAccessManagerSvc",
+ "StartupType": "Disabled",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "AudioEndpointBuilder",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "AudioSrv",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "Audiosrv",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "AxInstSV",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "BDESVC",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "BFE",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "BITS",
+ "StartupType": "AutomaticDelayedStart",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "BTAGService",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "BcastDVRUserService_*",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "BluetoothUserService_*",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "BrokerInfrastructure",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "Browser",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "BthAvctpSvc",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "BthHFSrv",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "CDPSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "CDPUserSvc_*",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "COMSysApp",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "CaptureService_*",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "CertPropSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "ClipSVC",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "ConsentUxUserSvc_*",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "CoreMessagingRegistrar",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "CredentialEnrollmentManagerUserSvc_*",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "CryptSvc",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "CscService",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "DPS",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "DcomLaunch",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "DcpSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "DevQueryBroker",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "DeviceAssociationBrokerSvc_*",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "DeviceAssociationService",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "DeviceInstall",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "DevicePickerUserSvc_*",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "DevicesFlowUserSvc_*",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "Dhcp",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "DiagTrack",
+ "StartupType": "Disabled",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "DialogBlockingService",
+ "StartupType": "Disabled",
+ "OriginalType": "Disabled"
+ },
+ {
+ "Name": "DispBrokerDesktopSvc",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "DisplayEnhancementService",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "DmEnrollmentSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "Dnscache",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "DoSvc",
+ "StartupType": "AutomaticDelayedStart",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "DsSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "DsmSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "DusmSvc",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "EFS",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "EapHost",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "EntAppSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "EventLog",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "EventSystem",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "FDResPub",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "Fax",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "FontCache",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "FrameServer",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "FrameServerMonitor",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "GraphicsPerfSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "HomeGroupListener",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "HomeGroupProvider",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "HvHost",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "IEEtwCollectorService",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "IKEEXT",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "InstallService",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "InventorySvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "IpxlatCfgSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "KeyIso",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "KtmRm",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "LSM",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "LanmanServer",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "LanmanWorkstation",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "LicenseManager",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "LxpSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "MSDTC",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "MSiSCSI",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "MapsBroker",
+ "StartupType": "AutomaticDelayedStart",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "McpManagementService",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "MessagingService_*",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "MicrosoftEdgeElevationService",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "MixedRealityOpenXRSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "MpsSvc",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "MsKeyboardFilter",
+ "StartupType": "Manual",
+ "OriginalType": "Disabled"
+ },
+ {
+ "Name": "NPSMSvc_*",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "NaturalAuthentication",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "NcaSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "NcbService",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "NcdAutoSetup",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "NetSetupSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "NetTcpPortSharing",
+ "StartupType": "Disabled",
+ "OriginalType": "Disabled"
+ },
+ {
+ "Name": "Netlogon",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "Netman",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "NgcCtnrSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "NgcSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "NlaSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "OneSyncSvc_*",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "P9RdrService_*",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "PNRPAutoReg",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "PNRPsvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "PcaSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "PeerDistSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "PenService_*",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "PerfHost",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "PhoneSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "PimIndexMaintenanceSvc_*",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "PlugPlay",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "PolicyAgent",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "Power",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "PrintNotify",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "PrintWorkflowUserSvc_*",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "ProfSvc",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "PushToInstall",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "QWAVE",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "RasAuto",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "RasMan",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "RemoteAccess",
+ "StartupType": "Disabled",
+ "OriginalType": "Disabled"
+ },
+ {
+ "Name": "RemoteRegistry",
+ "StartupType": "Disabled",
+ "OriginalType": "Disabled"
+ },
+ {
+ "Name": "RetailDemo",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "RmSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "RpcEptMapper",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "RpcLocator",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "RpcSs",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "SCPolicySvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "SCardSvr",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "SDRSVC",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "SEMgrSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "SENS",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "SNMPTRAP",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "SNMPTrap",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "SSDPSRV",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "SamSs",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "ScDeviceEnum",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "Schedule",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "SecurityHealthService",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "Sense",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "SensorDataService",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "SensorService",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "SensrSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "SessionEnv",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "SgrmBroker",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "SharedAccess",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "SharedRealitySvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "ShellHWDetection",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "SmsRouter",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "Spooler",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "SstpSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "StateRepository",
+ "StartupType": "Manual",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "StiSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "StorSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "SysMain",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "SystemEventsBroker",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "TabletInputService",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "TapiSrv",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "TermService",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "TextInputManagementService",
+ "StartupType": "Manual",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "Themes",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "TieringEngineService",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "TimeBroker",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "TimeBrokerSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "TokenBroker",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "TrkWks",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "TroubleshootingSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "TrustedInstaller",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "UI0Detect",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "UdkUserSvc_*",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "UevAgentService",
+ "StartupType": "Disabled",
+ "OriginalType": "Disabled"
+ },
+ {
+ "Name": "UmRdpService",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "UnistoreSvc_*",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "UserDataSvc_*",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "UserManager",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "UsoSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "VGAuthService",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "VMTools",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "VSS",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "VacSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "VaultSvc",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "W32Time",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "WEPHOSTSVC",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "WFDSConMgrSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "WMPNetworkSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "WManSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "WPDBusEnum",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "WSService",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "WSearch",
+ "StartupType": "AutomaticDelayedStart",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "WaaSMedicSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "WalletService",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "WarpJITSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "WbioSrvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "Wcmsvc",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "WcsPlugInService",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "WdNisSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "WdiServiceHost",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "WdiSystemHost",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "WebClient",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "Wecsvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "WerSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "WiaRpc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "WinDefend",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "WinHttpAutoProxySvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "WinRM",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "Winmgmt",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "WlanSvc",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "WpcMonSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "WpnService",
+ "StartupType": "Manual",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "WpnUserService_*",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "XblAuthManager",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "XblGameSave",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "XboxGipSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "XboxNetApiSvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "autotimesvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "bthserv",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "camsvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "cbdhsvc_*",
+ "StartupType": "Manual",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "cloudidsvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "dcsvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "defragsvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "diagnosticshub.standardcollector.service",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "diagsvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "dmwappushservice",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "dot3svc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "edgeupdate",
+ "StartupType": "Manual",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "edgeupdatem",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "embeddedmode",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "fdPHost",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "fhsvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "gpsvc",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "hidserv",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "icssvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "iphlpsvc",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "lfsvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "lltdsvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "lmhosts",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "mpssvc",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "msiserver",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "netprofm",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "nsi",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "p2pimsvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "p2psvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "perceptionsimulation",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "pla",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "seclogon",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "shpamsvc",
+ "StartupType": "Disabled",
+ "OriginalType": "Disabled"
+ },
+ {
+ "Name": "smphost",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "spectrum",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "sppsvc",
+ "StartupType": "AutomaticDelayedStart",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "ssh-agent",
+ "StartupType": "Disabled",
+ "OriginalType": "Disabled"
+ },
+ {
+ "Name": "svsvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "swprv",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "tiledatamodelsvc",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "tzautoupdate",
+ "StartupType": "Disabled",
+ "OriginalType": "Disabled"
+ },
+ {
+ "Name": "uhssvc",
+ "StartupType": "Disabled",
+ "OriginalType": "Disabled"
+ },
+ {
+ "Name": "upnphost",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "vds",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "vm3dservice",
+ "StartupType": "Manual",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "vmicguestinterface",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "vmicheartbeat",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "vmickvpexchange",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "vmicrdv",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "vmicshutdown",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "vmictimesync",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "vmicvmsession",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "vmicvss",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "vmvss",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "wbengine",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "wcncsvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "webthreatdefsvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "webthreatdefusersvc_*",
+ "StartupType": "Automatic",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "wercplsupport",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "wisvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "wlidsvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "wlpasvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "wmiApSrv",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "workfolderssvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "wscsvc",
+ "StartupType": "AutomaticDelayedStart",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "wuauserv",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ },
+ {
+ "Name": "wudfsvc",
+ "StartupType": "Manual",
+ "OriginalType": "Manual"
+ }
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Services"
+}
+```
+
+
+
+## Service Changes
+
+Windows services are background processes for system functions or applications. Setting some to manual optimizes performance by starting them only when needed.
+
+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).
+
+### Service Name: AJRouter
+
+**Startup Type:** Disabled
+
+**Original Type:** Manual
+
+### Service Name: ALG
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: AppIDSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: AppMgmt
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: AppReadiness
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: AppVClient
+
+**Startup Type:** Disabled
+
+**Original Type:** Disabled
+
+### Service Name: AppXSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: Appinfo
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: AssignedAccessManagerSvc
+
+**Startup Type:** Disabled
+
+**Original Type:** Manual
+
+### Service Name: AudioEndpointBuilder
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: AudioSrv
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: Audiosrv
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: AxInstSV
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: BDESVC
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: BFE
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: BITS
+
+**Startup Type:** AutomaticDelayedStart
+
+**Original Type:** Automatic
+
+### Service Name: BTAGService
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: BcastDVRUserService_*
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: BluetoothUserService_*
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: BrokerInfrastructure
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: Browser
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: BthAvctpSvc
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: BthHFSrv
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: CDPSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Automatic
+
+### Service Name: CDPUserSvc_*
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: COMSysApp
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: CaptureService_*
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: CertPropSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: ClipSVC
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: ConsentUxUserSvc_*
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: CoreMessagingRegistrar
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: CredentialEnrollmentManagerUserSvc_*
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: CryptSvc
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: CscService
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: DPS
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: DcomLaunch
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: DcpSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: DevQueryBroker
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: DeviceAssociationBrokerSvc_*
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: DeviceAssociationService
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: DeviceInstall
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: DevicePickerUserSvc_*
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: DevicesFlowUserSvc_*
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: Dhcp
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: DiagTrack
+
+**Startup Type:** Disabled
+
+**Original Type:** Automatic
+
+### Service Name: DialogBlockingService
+
+**Startup Type:** Disabled
+
+**Original Type:** Disabled
+
+### Service Name: DispBrokerDesktopSvc
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: DisplayEnhancementService
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: DmEnrollmentSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: Dnscache
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: DoSvc
+
+**Startup Type:** AutomaticDelayedStart
+
+**Original Type:** Automatic
+
+### Service Name: DsSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: DsmSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: DusmSvc
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: EFS
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: EapHost
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: EntAppSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: EventLog
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: EventSystem
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: FDResPub
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: Fax
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: FontCache
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: FrameServer
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: FrameServerMonitor
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: GraphicsPerfSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: HomeGroupListener
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: HomeGroupProvider
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: HvHost
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: IEEtwCollectorService
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: IKEEXT
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: InstallService
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: InventorySvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: IpxlatCfgSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: KeyIso
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: KtmRm
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: LSM
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: LanmanServer
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: LanmanWorkstation
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: LicenseManager
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: LxpSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: MSDTC
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: MSiSCSI
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: MapsBroker
+
+**Startup Type:** AutomaticDelayedStart
+
+**Original Type:** Automatic
+
+### Service Name: McpManagementService
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: MessagingService_*
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: MicrosoftEdgeElevationService
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: MixedRealityOpenXRSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: MpsSvc
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: MsKeyboardFilter
+
+**Startup Type:** Manual
+
+**Original Type:** Disabled
+
+### Service Name: NPSMSvc_*
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: NaturalAuthentication
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: NcaSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: NcbService
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: NcdAutoSetup
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: NetSetupSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: NetTcpPortSharing
+
+**Startup Type:** Disabled
+
+**Original Type:** Disabled
+
+### Service Name: Netlogon
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: Netman
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: NgcCtnrSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: NgcSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: NlaSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: OneSyncSvc_*
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: P9RdrService_*
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: PNRPAutoReg
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: PNRPsvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: PcaSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Automatic
+
+### Service Name: PeerDistSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: PenService_*
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: PerfHost
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: PhoneSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: PimIndexMaintenanceSvc_*
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: PlugPlay
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: PolicyAgent
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: Power
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: PrintNotify
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: PrintWorkflowUserSvc_*
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: ProfSvc
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: PushToInstall
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: QWAVE
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: RasAuto
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: RasMan
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: RemoteAccess
+
+**Startup Type:** Disabled
+
+**Original Type:** Disabled
+
+### Service Name: RemoteRegistry
+
+**Startup Type:** Disabled
+
+**Original Type:** Disabled
+
+### Service Name: RetailDemo
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: RmSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: RpcEptMapper
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: RpcLocator
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: RpcSs
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: SCPolicySvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: SCardSvr
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: SDRSVC
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: SEMgrSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: SENS
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: SNMPTRAP
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: SNMPTrap
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: SSDPSRV
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: SamSs
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: ScDeviceEnum
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: Schedule
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: SecurityHealthService
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: Sense
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: SensorDataService
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: SensorService
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: SensrSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: SessionEnv
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: SgrmBroker
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: SharedAccess
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: SharedRealitySvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: ShellHWDetection
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: SmsRouter
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: Spooler
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: SstpSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: StateRepository
+
+**Startup Type:** Manual
+
+**Original Type:** Automatic
+
+### Service Name: StiSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: StorSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Automatic
+
+### Service Name: SysMain
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: SystemEventsBroker
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: TabletInputService
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: TapiSrv
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: TermService
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: TextInputManagementService
+
+**Startup Type:** Manual
+
+**Original Type:** Automatic
+
+### Service Name: Themes
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: TieringEngineService
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: TimeBroker
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: TimeBrokerSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: TokenBroker
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: TrkWks
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: TroubleshootingSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: TrustedInstaller
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: UI0Detect
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: UdkUserSvc_*
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: UevAgentService
+
+**Startup Type:** Disabled
+
+**Original Type:** Disabled
+
+### Service Name: UmRdpService
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: UnistoreSvc_*
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: UserDataSvc_*
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: UserManager
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: UsoSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Automatic
+
+### Service Name: VGAuthService
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: VMTools
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: VSS
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: VacSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: VaultSvc
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: W32Time
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: WEPHOSTSVC
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: WFDSConMgrSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: WMPNetworkSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: WManSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: WPDBusEnum
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: WSService
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: WSearch
+
+**Startup Type:** AutomaticDelayedStart
+
+**Original Type:** Automatic
+
+### Service Name: WaaSMedicSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: WalletService
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: WarpJITSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: WbioSrvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: Wcmsvc
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: WcsPlugInService
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: WdNisSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: WdiServiceHost
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: WdiSystemHost
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: WebClient
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: Wecsvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: WerSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: WiaRpc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: WinDefend
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: WinHttpAutoProxySvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: WinRM
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: Winmgmt
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: WlanSvc
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: WpcMonSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: WpnService
+
+**Startup Type:** Manual
+
+**Original Type:** Automatic
+
+### Service Name: WpnUserService_*
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: XblAuthManager
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: XblGameSave
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: XboxGipSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: XboxNetApiSvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: autotimesvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: bthserv
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: camsvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: cbdhsvc_*
+
+**Startup Type:** Manual
+
+**Original Type:** Automatic
+
+### Service Name: cloudidsvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: dcsvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: defragsvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: diagnosticshub.standardcollector.service
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: diagsvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: dmwappushservice
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: dot3svc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: edgeupdate
+
+**Startup Type:** Manual
+
+**Original Type:** Automatic
+
+### Service Name: edgeupdatem
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: embeddedmode
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: fdPHost
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: fhsvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: gpsvc
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: hidserv
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: icssvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: iphlpsvc
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: lfsvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: lltdsvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: lmhosts
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: mpssvc
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: msiserver
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: netprofm
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: nsi
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: p2pimsvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: p2psvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: perceptionsimulation
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: pla
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: seclogon
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: shpamsvc
+
+**Startup Type:** Disabled
+
+**Original Type:** Disabled
+
+### Service Name: smphost
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: spectrum
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: sppsvc
+
+**Startup Type:** AutomaticDelayedStart
+
+**Original Type:** Automatic
+
+### Service Name: ssh-agent
+
+**Startup Type:** Disabled
+
+**Original Type:** Disabled
+
+### Service Name: svsvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: swprv
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: tiledatamodelsvc
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: tzautoupdate
+
+**Startup Type:** Disabled
+
+**Original Type:** Disabled
+
+### Service Name: uhssvc
+
+**Startup Type:** Disabled
+
+**Original Type:** Disabled
+
+### Service Name: upnphost
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: vds
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: vm3dservice
+
+**Startup Type:** Manual
+
+**Original Type:** Automatic
+
+### Service Name: vmicguestinterface
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: vmicheartbeat
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: vmickvpexchange
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: vmicrdv
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: vmicshutdown
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: vmictimesync
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: vmicvmsession
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: vmicvss
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: vmvss
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: wbengine
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: wcncsvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: webthreatdefsvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: webthreatdefusersvc_*
+
+**Startup Type:** Automatic
+
+**Original Type:** Automatic
+
+### Service Name: wercplsupport
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: wisvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: wlidsvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: wlpasvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: wmiApSrv
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: workfolderssvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: wscsvc
+
+**Startup Type:** AutomaticDelayedStart
+
+**Original Type:** Automatic
+
+### Service Name: wuauserv
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+### Service Name: wudfsvc
+
+**Startup Type:** Manual
+
+**Original Type:** Manual
+
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Essential-Tweaks/Storage.md b/docs/dev/tweaks/Essential-Tweaks/Storage.md
new file mode 100644
index 00000000..2a26929f
--- /dev/null
+++ b/docs/dev/tweaks/Essential-Tweaks/Storage.md
@@ -0,0 +1,57 @@
+# Disable Storage Sense
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Storage Sense deletes temp files automatically.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Disable Storage Sense",
+ "Description": "Storage Sense deletes temp files automatically.",
+ "category": "Essential Tweaks",
+ "panel": "1",
+ "Order": "a005_",
+ "InvokeScript": [
+ "Set-ItemProperty -Path \"HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\StorageSense\\Parameters\\StoragePolicy\" -Name \"01\" -Value 0 -Type Dword -Force"
+ ],
+ "UndoScript": [
+ "Set-ItemProperty -Path \"HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\StorageSense\\Parameters\\StoragePolicy\" -Name \"01\" -Value 1 -Type Dword -Force"
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Storage"
+}
+```
+
+
+
+## Invoke Script
+
+```powershell
+Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy" -Name "01" -Value 0 -Type Dword -Force
+
+```
+## Undo Script
+
+```powershell
+Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy" -Name "01" -Value 1 -Type Dword -Force
+
+```
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Essential-Tweaks/Tele.md b/docs/dev/tweaks/Essential-Tweaks/Tele.md
new file mode 100644
index 00000000..648398b6
--- /dev/null
+++ b/docs/dev/tweaks/Essential-Tweaks/Tele.md
@@ -0,0 +1,830 @@
+# Disable Telemetry
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Disables Microsoft Telemetry. Note: This will lock many Edge Browser settings. Microsoft spies heavily on you when using the Edge browser.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Disable Telemetry",
+ "Description": "Disables Microsoft Telemetry. Note: This will lock many Edge Browser settings. Microsoft spies heavily on you when using the Edge browser.",
+ "category": "Essential Tweaks",
+ "panel": "1",
+ "Order": "a003_",
+ "ScheduledTask": [
+ {
+ "Name": "Microsoft\\Windows\\Application Experience\\Microsoft Compatibility Appraiser",
+ "State": "Disabled",
+ "OriginalState": "Enabled"
+ },
+ {
+ "Name": "Microsoft\\Windows\\Application Experience\\ProgramDataUpdater",
+ "State": "Disabled",
+ "OriginalState": "Enabled"
+ },
+ {
+ "Name": "Microsoft\\Windows\\Autochk\\Proxy",
+ "State": "Disabled",
+ "OriginalState": "Enabled"
+ },
+ {
+ "Name": "Microsoft\\Windows\\Customer Experience Improvement Program\\Consolidator",
+ "State": "Disabled",
+ "OriginalState": "Enabled"
+ },
+ {
+ "Name": "Microsoft\\Windows\\Customer Experience Improvement Program\\UsbCeip",
+ "State": "Disabled",
+ "OriginalState": "Enabled"
+ },
+ {
+ "Name": "Microsoft\\Windows\\DiskDiagnostic\\Microsoft-Windows-DiskDiagnosticDataCollector",
+ "State": "Disabled",
+ "OriginalState": "Enabled"
+ },
+ {
+ "Name": "Microsoft\\Windows\\Feedback\\Siuf\\DmClient",
+ "State": "Disabled",
+ "OriginalState": "Enabled"
+ },
+ {
+ "Name": "Microsoft\\Windows\\Feedback\\Siuf\\DmClientOnScenarioDownload",
+ "State": "Disabled",
+ "OriginalState": "Enabled"
+ },
+ {
+ "Name": "Microsoft\\Windows\\Windows Error Reporting\\QueueReporting",
+ "State": "Disabled",
+ "OriginalState": "Enabled"
+ },
+ {
+ "Name": "Microsoft\\Windows\\Application Experience\\MareBackup",
+ "State": "Disabled",
+ "OriginalState": "Enabled"
+ },
+ {
+ "Name": "Microsoft\\Windows\\Application Experience\\StartupAppTask",
+ "State": "Disabled",
+ "OriginalState": "Enabled"
+ },
+ {
+ "Name": "Microsoft\\Windows\\Application Experience\\PcaPatchDbTask",
+ "State": "Disabled",
+ "OriginalState": "Enabled"
+ },
+ {
+ "Name": "Microsoft\\Windows\\Maps\\MapsUpdateTask",
+ "State": "Disabled",
+ "OriginalState": "Enabled"
+ }
+ ],
+ "registry": [
+ {
+ "Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\DataCollection",
+ "Type": "DWord",
+ "Value": "0",
+ "Name": "AllowTelemetry",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\DataCollection",
+ "OriginalValue": "1",
+ "Name": "AllowTelemetry",
+ "Value": "0",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ContentDeliveryManager",
+ "OriginalValue": "1",
+ "Name": "ContentDeliveryAllowed",
+ "Value": "0",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ContentDeliveryManager",
+ "OriginalValue": "1",
+ "Name": "OemPreInstalledAppsEnabled",
+ "Value": "0",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ContentDeliveryManager",
+ "OriginalValue": "1",
+ "Name": "PreInstalledAppsEnabled",
+ "Value": "0",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ContentDeliveryManager",
+ "OriginalValue": "1",
+ "Name": "PreInstalledAppsEverEnabled",
+ "Value": "0",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ContentDeliveryManager",
+ "OriginalValue": "1",
+ "Name": "SilentInstalledAppsEnabled",
+ "Value": "0",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\ContentDeliveryManager",
+ "OriginalValue": "1",
+ "Name": "SubscribedContent-338387Enabled",
+ "Value": "0",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ContentDeliveryManager",
+ "OriginalValue": "1",
+ "Name": "SubscribedContent-338388Enabled",
+ "Value": "0",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ContentDeliveryManager",
+ "OriginalValue": "1",
+ "Name": "SubscribedContent-338389Enabled",
+ "Value": "0",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ContentDeliveryManager",
+ "OriginalValue": "1",
+ "Name": "SubscribedContent-353698Enabled",
+ "Value": "0",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ContentDeliveryManager",
+ "OriginalValue": "1",
+ "Name": "SystemPaneSuggestionsEnabled",
+ "Value": "0",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\SOFTWARE\\Microsoft\\Siuf\\Rules",
+ "OriginalValue": "0",
+ "Name": "NumberOfSIUFInPeriod",
+ "Value": "0",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\DataCollection",
+ "OriginalValue": "0",
+ "Name": "DoNotShowFeedbackNotifications",
+ "Value": "1",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\CloudContent",
+ "OriginalValue": "0",
+ "Name": "DisableTailoredExperiencesWithDiagnosticData",
+ "Value": "1",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\AdvertisingInfo",
+ "OriginalValue": "0",
+ "Name": "DisabledByGroupPolicy",
+ "Value": "1",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\Windows Error Reporting",
+ "OriginalValue": "0",
+ "Name": "Disabled",
+ "Value": "1",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\DeliveryOptimization\\Config",
+ "OriginalValue": "1",
+ "Name": "DODownloadMode",
+ "Value": "1",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Remote Assistance",
+ "OriginalValue": "1",
+ "Name": "fAllowToGetHelp",
+ "Value": "0",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\OperationStatusManager",
+ "OriginalValue": "0",
+ "Name": "EnthusiastMode",
+ "Value": "1",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
+ "OriginalValue": "1",
+ "Name": "ShowTaskViewButton",
+ "Value": "0",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\\People",
+ "OriginalValue": "1",
+ "Name": "PeopleBand",
+ "Value": "0",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
+ "OriginalValue": "1",
+ "Name": "LaunchTo",
+ "Value": "1",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\FileSystem",
+ "OriginalValue": "0",
+ "Name": "LongPathsEnabled",
+ "Value": "1",
+ "Type": "DWord"
+ },
+ {
+ "_Comment": "Driver searching is a function that should be left in",
+ "Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\DriverSearching",
+ "OriginalValue": "1",
+ "Name": "SearchOrderConfig",
+ "Value": "1",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Multimedia\\SystemProfile",
+ "OriginalValue": "1",
+ "Name": "SystemResponsiveness",
+ "Value": "0",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Multimedia\\SystemProfile",
+ "OriginalValue": "1",
+ "Name": "NetworkThrottlingIndex",
+ "Value": "4294967295",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\Control Panel\\Desktop",
+ "OriginalValue": "1",
+ "Name": "MenuShowDelay",
+ "Value": "1",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\Control Panel\\Desktop",
+ "OriginalValue": "1",
+ "Name": "AutoEndTasks",
+ "Value": "1",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Memory Management",
+ "OriginalValue": "0",
+ "Name": "ClearPageFileAtShutdown",
+ "Value": "0",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKLM:\\SYSTEM\\ControlSet001\\Services\\Ndu",
+ "OriginalValue": "1",
+ "Name": "Start",
+ "Value": "2",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\Control Panel\\Mouse",
+ "OriginalValue": "400",
+ "Name": "MouseHoverTime",
+ "Value": "400",
+ "Type": "String"
+ },
+ {
+ "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\LanmanServer\\Parameters",
+ "OriginalValue": "20",
+ "Name": "IRPStackSize",
+ "Value": "30",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Windows Feeds",
+ "OriginalValue": "1",
+ "Name": "EnableFeeds",
+ "Value": "0",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Feeds",
+ "OriginalValue": "1",
+ "Name": "ShellFeedsTaskbarViewMode",
+ "Value": "2",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer",
+ "OriginalValue": "1",
+ "Name": "HideSCAMeetNow",
+ "Value": "1",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\UserProfileEngagement",
+ "OriginalValue": "1",
+ "Name": "ScoobeSystemSettingEnabled",
+ "Value": "0",
+ "Type": "DWord"
+ }
+ ],
+ "InvokeScript": [
+ "
+ bcdedit /set `{current`} bootmenupolicy Legacy | Out-Null
+ If ((get-ItemProperty -Path \"HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\" -Name CurrentBuild).CurrentBuild -lt 22557) {
+ $taskmgr = Start-Process -WindowStyle Hidden -FilePath taskmgr.exe -PassThru
+ Do {
+ Start-Sleep -Milliseconds 100
+ $preferences = Get-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\TaskManager\" -Name \"Preferences\" -ErrorAction SilentlyContinue
+ } Until ($preferences)
+ Stop-Process $taskmgr
+ $preferences.Preferences[28] = 0
+ Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\TaskManager\" -Name \"Preferences\" -Type Binary -Value $preferences.Preferences
+ }
+ Remove-Item -Path \"HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MyComputer\\NameSpace\\{0DB7E03F-FC29-4DC6-9020-FF41B59E513A}\" -Recurse -ErrorAction SilentlyContinue
+
+ # Fix Managed by your organization in Edge if regustry path exists then remove it
+
+ If (Test-Path \"HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge\") {
+ Remove-Item -Path \"HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge\" -Recurse -ErrorAction SilentlyContinue
+ }
+
+ # Group svchost.exe processes
+ $ram = (Get-CimInstance -ClassName Win32_PhysicalMemory | Measure-Object -Property Capacity -Sum).Sum / 1kb
+ Set-ItemProperty -Path \"HKLM:\\SYSTEM\\CurrentControlSet\\Control\" -Name \"SvcHostSplitThresholdInKB\" -Type DWord -Value $ram -Force
+
+ $autoLoggerDir = \"$env:PROGRAMDATA\\Microsoft\\Diagnosis\\ETLLogs\\AutoLogger\"
+ If (Test-Path \"$autoLoggerDir\\AutoLogger-Diagtrack-Listener.etl\") {
+ Remove-Item \"$autoLoggerDir\\AutoLogger-Diagtrack-Listener.etl\"
+ }
+ icacls $autoLoggerDir /deny SYSTEM:`(OI`)`(CI`)F | Out-Null
+
+ # Disable Defender Auto Sample Submission
+ Set-MpPreference -SubmitSamplesConsent 2 -ErrorAction SilentlyContinue | Out-Null
+ "
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Tele"
+}
+```
+
+
+
+## Invoke Script
+
+```powershell
+
+ bcdedit /set `{current`} bootmenupolicy Legacy | Out-Null
+ If ((get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name CurrentBuild).CurrentBuild -lt 22557) {
+ $taskmgr = Start-Process -WindowStyle Hidden -FilePath taskmgr.exe -PassThru
+ Do {
+ Start-Sleep -Milliseconds 100
+ $preferences = Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\TaskManager" -Name "Preferences" -ErrorAction SilentlyContinue
+ } Until ($preferences)
+ Stop-Process $taskmgr
+ $preferences.Preferences[28] = 0
+ Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\TaskManager" -Name "Preferences" -Type Binary -Value $preferences.Preferences
+ }
+ Remove-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{0DB7E03F-FC29-4DC6-9020-FF41B59E513A}" -Recurse -ErrorAction SilentlyContinue
+
+ # Fix Managed by your organization in Edge if regustry path exists then remove it
+
+ If (Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Edge") {
+ Remove-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Edge" -Recurse -ErrorAction SilentlyContinue
+ }
+
+ # Group svchost.exe processes
+ $ram = (Get-CimInstance -ClassName Win32_PhysicalMemory | Measure-Object -Property Capacity -Sum).Sum / 1kb
+ Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control" -Name "SvcHostSplitThresholdInKB" -Type DWord -Value $ram -Force
+
+ $autoLoggerDir = "$env:PROGRAMDATA\Microsoft\Diagnosis\ETLLogs\AutoLogger"
+ If (Test-Path "$autoLoggerDir\AutoLogger-Diagtrack-Listener.etl") {
+ Remove-Item "$autoLoggerDir\AutoLogger-Diagtrack-Listener.etl"
+ }
+ icacls $autoLoggerDir /deny SYSTEM:`(OI`)`(CI`)F | Out-Null
+
+ # Disable Defender Auto Sample Submission
+ Set-MpPreference -SubmitSamplesConsent 2 -ErrorAction SilentlyContinue | Out-Null
+
+
+```
+## Registry Changes
+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.
+
+
+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).
+
+### Registry Key: AllowTelemetry
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: AllowTelemetry
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: ContentDeliveryAllowed
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: OemPreInstalledAppsEnabled
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: PreInstalledAppsEnabled
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: PreInstalledAppsEverEnabled
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: SilentInstalledAppsEnabled
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: SubscribedContent-338387Enabled
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: SubscribedContent-338388Enabled
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: SubscribedContent-338389Enabled
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: SubscribedContent-353698Enabled
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: SystemPaneSuggestionsEnabled
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: NumberOfSIUFInPeriod
+
+**Type:** DWord
+
+**Original Value:** 0
+
+**New Value:** 0
+
+### Registry Key: DoNotShowFeedbackNotifications
+
+**Type:** DWord
+
+**Original Value:** 0
+
+**New Value:** 1
+
+### Registry Key: DisableTailoredExperiencesWithDiagnosticData
+
+**Type:** DWord
+
+**Original Value:** 0
+
+**New Value:** 1
+
+### Registry Key: DisabledByGroupPolicy
+
+**Type:** DWord
+
+**Original Value:** 0
+
+**New Value:** 1
+
+### Registry Key: Disabled
+
+**Type:** DWord
+
+**Original Value:** 0
+
+**New Value:** 1
+
+### Registry Key: DODownloadMode
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 1
+
+### Registry Key: fAllowToGetHelp
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: EnthusiastMode
+
+**Type:** DWord
+
+**Original Value:** 0
+
+**New Value:** 1
+
+### Registry Key: ShowTaskViewButton
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: PeopleBand
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: LaunchTo
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 1
+
+### Registry Key: LongPathsEnabled
+
+**Type:** DWord
+
+**Original Value:** 0
+
+**New Value:** 1
+
+### Registry Key: SearchOrderConfig
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 1
+
+### Registry Key: SystemResponsiveness
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: NetworkThrottlingIndex
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 4294967295
+
+### Registry Key: MenuShowDelay
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 1
+
+### Registry Key: AutoEndTasks
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 1
+
+### Registry Key: ClearPageFileAtShutdown
+
+**Type:** DWord
+
+**Original Value:** 0
+
+**New Value:** 0
+
+### Registry Key: Start
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 2
+
+### Registry Key: MouseHoverTime
+
+**Type:** String
+
+**Original Value:** 400
+
+**New Value:** 400
+
+### Registry Key: IRPStackSize
+
+**Type:** DWord
+
+**Original Value:** 20
+
+**New Value:** 30
+
+### Registry Key: EnableFeeds
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: ShellFeedsTaskbarViewMode
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 2
+
+### Registry Key: HideSCAMeetNow
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 1
+
+### Registry Key: ScoobeSystemSettingEnabled
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+
+## Scheduled Task Changes
+
+Windows scheduled tasks are used to run scripts or programs at specific times or events. Disabling unnecessary tasks can improve system performance and reduce unwanted background activity.
+
+
+You can find information about scheduled tasks on [Wikipedia](https://www.wikiwand.com/en/Windows_Task_Scheduler) and [Microsoft's Website](https://learn.microsoft.com/en-us/windows/desktop/taskschd/about-the-task-scheduler).
+
+### Task Name: Microsoft\Windows\Application Experience\Microsoft Compatibility Appraiser
+
+**State:** Disabled
+
+**Original State:** Enabled
+
+### Task Name: Microsoft\Windows\Application Experience\ProgramDataUpdater
+
+**State:** Disabled
+
+**Original State:** Enabled
+
+### Task Name: Microsoft\Windows\Autochk\Proxy
+
+**State:** Disabled
+
+**Original State:** Enabled
+
+### Task Name: Microsoft\Windows\Customer Experience Improvement Program\Consolidator
+
+**State:** Disabled
+
+**Original State:** Enabled
+
+### Task Name: Microsoft\Windows\Customer Experience Improvement Program\UsbCeip
+
+**State:** Disabled
+
+**Original State:** Enabled
+
+### Task Name: Microsoft\Windows\DiskDiagnostic\Microsoft-Windows-DiskDiagnosticDataCollector
+
+**State:** Disabled
+
+**Original State:** Enabled
+
+### Task Name: Microsoft\Windows\Feedback\Siuf\DmClient
+
+**State:** Disabled
+
+**Original State:** Enabled
+
+### Task Name: Microsoft\Windows\Feedback\Siuf\DmClientOnScenarioDownload
+
+**State:** Disabled
+
+**Original State:** Enabled
+
+### Task Name: Microsoft\Windows\Windows Error Reporting\QueueReporting
+
+**State:** Disabled
+
+**Original State:** Enabled
+
+### Task Name: Microsoft\Windows\Application Experience\MareBackup
+
+**State:** Disabled
+
+**Original State:** Enabled
+
+### Task Name: Microsoft\Windows\Application Experience\StartupAppTask
+
+**State:** Disabled
+
+**Original State:** Enabled
+
+### Task Name: Microsoft\Windows\Application Experience\PcaPatchDbTask
+
+**State:** Disabled
+
+**Original State:** Enabled
+
+### Task Name: Microsoft\Windows\Maps\MapsUpdateTask
+
+**State:** Disabled
+
+**Original State:** Enabled
+
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Essential-Tweaks/Teredo.md b/docs/dev/tweaks/Essential-Tweaks/Teredo.md
new file mode 100644
index 00000000..4206d514
--- /dev/null
+++ b/docs/dev/tweaks/Essential-Tweaks/Teredo.md
@@ -0,0 +1,81 @@
+# Disable Teredo
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Teredo network tunneling is a ipv6 feature that can cause additional latency.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Disable Teredo",
+ "Description": "Teredo network tunneling is a ipv6 feature that can cause additional latency.",
+ "category": "Essential Tweaks",
+ "panel": "1",
+ "Order": "a005_",
+ "registry": [
+ {
+ "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters",
+ "Name": "DisabledComponents",
+ "Value": "1",
+ "OriginalValue": "0",
+ "Type": "DWord"
+ }
+ ],
+ "InvokeScript": [
+ "netsh interface teredo set state disabled"
+ ],
+ "UndoScript": [
+ "netsh interface teredo set state default"
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Teredo"
+}
+```
+
+
+
+## Invoke Script
+
+```powershell
+netsh interface teredo set state disabled
+
+```
+## Undo Script
+
+```powershell
+netsh interface teredo set state default
+
+```
+## Registry Changes
+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.
+
+
+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).
+
+### Registry Key: DisabledComponents
+
+**Type:** DWord
+
+**Original Value:** 0
+
+**New Value:** 1
+
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Essential-Tweaks/Wifi.md b/docs/dev/tweaks/Essential-Tweaks/Wifi.md
new file mode 100644
index 00000000..9610ae77
--- /dev/null
+++ b/docs/dev/tweaks/Essential-Tweaks/Wifi.md
@@ -0,0 +1,78 @@
+# Disable Wifi-Sense
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Wifi Sense is a spying service that phones home all nearby scanned wifi networks and your current geo location.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Disable Wifi-Sense",
+ "Description": "Wifi Sense is a spying service that phones home all nearby scanned wifi networks and your current geo location.",
+ "category": "Essential Tweaks",
+ "panel": "1",
+ "Order": "a005_",
+ "registry": [
+ {
+ "Path": "HKLM:\\Software\\Microsoft\\PolicyManager\\default\\WiFi\\AllowWiFiHotSpotReporting",
+ "Name": "Value",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ },
+ {
+ "Path": "HKLM:\\Software\\Microsoft\\PolicyManager\\default\\WiFi\\AllowAutoConnectToWiFiSenseHotspots",
+ "Name": "Value",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ }
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Wifi"
+}
+```
+
+
+
+## Registry Changes
+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.
+
+
+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).
+
+### Registry Key: Value
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: Value
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Performance-Plans/AddUltPerf.md b/docs/dev/tweaks/Performance-Plans/AddUltPerf.md
new file mode 100644
index 00000000..3565cfc6
--- /dev/null
+++ b/docs/dev/tweaks/Performance-Plans/AddUltPerf.md
@@ -0,0 +1,97 @@
+# Add and Activate Ultimate Performance Profile
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Add and Activate Ultimate Performance Profile",
+ "category": "Performance Plans",
+ "panel": "2",
+ "Order": "a080_",
+ "Type": "Button",
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Performance-Plans/AddUltPerf"
+}
+```
+
+
+
+## Function: Invoke-WPFUltimatePerformance
+
+```powershell
+Function Invoke-WPFUltimatePerformance {
+ <#
+
+ .SYNOPSIS
+ Creates or removes the Ultimate Performance power scheme
+
+ .PARAMETER State
+ Indicates whether to enable or disable the Ultimate Performance power scheme
+
+ #>
+ param($State)
+ try {
+ # Check if Ultimate Performance plan is installed
+ $ultimatePlan = powercfg -list | Select-String -Pattern "Ultimate Performance"
+ if($state -eq "Enable") {
+ if ($ultimatePlan) {
+ Write-Host "Ultimate Performance plan is already installed."
+ } else {
+ Write-Host "Installing Ultimate Performance plan..."
+ powercfg -duplicatescheme e9a42b02-d5df-448d-aa00-03f14749eb61
+ Write-Host "> Ultimate Performance plan installed."
+ }
+
+ # Set the Ultimate Performance plan as active
+ $ultimatePlanGUID = (powercfg -list | Select-String -Pattern "Ultimate Performance").Line.Split()[3]
+ powercfg -setactive $ultimatePlanGUID
+
+ Write-Host "Ultimate Performance plan is now active."
+
+
+ }
+ elseif($state -eq "Disable") {
+ if ($ultimatePlan) {
+ # Extract the GUID of the Ultimate Performance plan
+ $ultimatePlanGUID = $ultimatePlan.Line.Split()[3]
+
+ # Set a different power plan as active before deleting the Ultimate Performance plan
+ $balancedPlanGUID = (powercfg -list | Select-String -Pattern "Balanced").Line.Split()[3]
+ powercfg -setactive $balancedPlanGUID
+
+ # Delete the Ultimate Performance plan
+ powercfg -delete $ultimatePlanGUID
+
+ Write-Host "Ultimate Performance plan has been uninstalled."
+ Write-Host "> Balanced plan is now active."
+ } else {
+ Write-Host "Ultimate Performance plan is not installed."
+ }
+ }
+ } catch {
+ Write-Warning $psitem.Exception.Message
+ }
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Performance-Plans/RemoveUltPerf.md b/docs/dev/tweaks/Performance-Plans/RemoveUltPerf.md
new file mode 100644
index 00000000..10ca678d
--- /dev/null
+++ b/docs/dev/tweaks/Performance-Plans/RemoveUltPerf.md
@@ -0,0 +1,97 @@
+# Remove Ultimate Performance Profile
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Remove Ultimate Performance Profile",
+ "category": "Performance Plans",
+ "panel": "2",
+ "Order": "a081_",
+ "Type": "Button",
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Performance-Plans/RemoveUltPerf"
+}
+```
+
+
+
+## Function: Invoke-WPFUltimatePerformance
+
+```powershell
+Function Invoke-WPFUltimatePerformance {
+ <#
+
+ .SYNOPSIS
+ Creates or removes the Ultimate Performance power scheme
+
+ .PARAMETER State
+ Indicates whether to enable or disable the Ultimate Performance power scheme
+
+ #>
+ param($State)
+ try {
+ # Check if Ultimate Performance plan is installed
+ $ultimatePlan = powercfg -list | Select-String -Pattern "Ultimate Performance"
+ if($state -eq "Enable") {
+ if ($ultimatePlan) {
+ Write-Host "Ultimate Performance plan is already installed."
+ } else {
+ Write-Host "Installing Ultimate Performance plan..."
+ powercfg -duplicatescheme e9a42b02-d5df-448d-aa00-03f14749eb61
+ Write-Host "> Ultimate Performance plan installed."
+ }
+
+ # Set the Ultimate Performance plan as active
+ $ultimatePlanGUID = (powercfg -list | Select-String -Pattern "Ultimate Performance").Line.Split()[3]
+ powercfg -setactive $ultimatePlanGUID
+
+ Write-Host "Ultimate Performance plan is now active."
+
+
+ }
+ elseif($state -eq "Disable") {
+ if ($ultimatePlan) {
+ # Extract the GUID of the Ultimate Performance plan
+ $ultimatePlanGUID = $ultimatePlan.Line.Split()[3]
+
+ # Set a different power plan as active before deleting the Ultimate Performance plan
+ $balancedPlanGUID = (powercfg -list | Select-String -Pattern "Balanced").Line.Split()[3]
+ powercfg -setactive $balancedPlanGUID
+
+ # Delete the Ultimate Performance plan
+ powercfg -delete $ultimatePlanGUID
+
+ Write-Host "Ultimate Performance plan has been uninstalled."
+ Write-Host "> Balanced plan is now active."
+ } else {
+ Write-Host "Ultimate Performance plan is not installed."
+ }
+ }
+ } catch {
+ Write-Warning $psitem.Exception.Message
+ }
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/Shortcuts/Shortcut.md b/docs/dev/tweaks/Shortcuts/Shortcut.md
new file mode 100644
index 00000000..c980269e
--- /dev/null
+++ b/docs/dev/tweaks/Shortcuts/Shortcut.md
@@ -0,0 +1,113 @@
+# Create WinUtil Shortcut
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Create WinUtil Shortcut",
+ "category": "Shortcuts",
+ "panel": "2",
+ "Order": "a082_",
+ "Type": "Button",
+ "ButtonWidth": "300",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/Shortcuts/Shortcut"
+}
+```
+
+
+
+## Function: Invoke-WPFShortcut
+
+```powershell
+function Invoke-WPFShortcut {
+ <#
+
+ .SYNOPSIS
+ Creates a shortcut and prompts for a save location
+
+ .PARAMETER ShortcutToAdd
+ The name of the shortcut to add
+
+ .PARAMETER RunAsAdmin
+ A boolean value to make 'Run as administrator' property on (true) or off (false), defaults to off
+
+ #>
+ param(
+ $ShortcutToAdd,
+ [bool]$RunAsAdmin = $false
+ )
+
+ # Preper the Shortcut Fields and add an a Custom Icon if it's available, else don't add a Custom Icon.
+
+ Switch ($ShortcutToAdd) {
+ "WinUtil" {
+ # Use Powershell 7 if installed and fallback to PS5 if not
+ if (Get-Command "pwsh" -ErrorAction SilentlyContinue) {
+ $shell = "pwsh.exe"
+ } else {
+ $shell = "powershell.exe"
+ }
+
+ $shellArgs = "-ExecutionPolicy Bypass -Command `"Start-Process $shell -verb runas -ArgumentList `'-Command `"irm https://github.com/ChrisTitusTech/winutil/releases/latest/download/winutil.ps1 | iex`"`'"
+
+ $DestinationName = "WinUtil.lnk"
+ }
+ }
+
+ # Show a File Dialog Browser, to let the User choose the Name and Location of where to save the Shortcut
+ $FileBrowser = New-Object System.Windows.Forms.SaveFileDialog
+ $FileBrowser.InitialDirectory = [Environment]::GetFolderPath('Desktop')
+ $FileBrowser.Filter = "Shortcut Files (*.lnk)|*.lnk"
+ $FileBrowser.FileName = $DestinationName
+
+ # Do an Early Return if the Save Operation was canceled by User's Input.
+ $FileBrowserResult = $FileBrowser.ShowDialog()
+ $DialogResultEnum = New-Object System.Windows.Forms.DialogResult
+ if (-not ($FileBrowserResult -eq $DialogResultEnum::OK)) {
+ return
+ }
+
+ # Prepare the Shortcut paramter
+ $WshShell = New-Object -comObject WScript.Shell
+ $Shortcut = $WshShell.CreateShortcut($FileBrowser.FileName)
+ $Shortcut.TargetPath = $shell
+ $Shortcut.Arguments = $shellArgs
+ if (Test-Path -Path $winutildir["logo.ico"]) {
+ $shortcut.IconLocation = $winutildir["logo.ico"]
+ }
+
+ # Save the Shortcut to disk
+ $Shortcut.Save()
+
+ if ($RunAsAdmin -eq $true) {
+ $bytes = [System.IO.File]::ReadAllBytes($FileBrowser.FileName)
+ # Set byte value at position 0x15 in hex, or 21 in decimal, from the value 0x00 to 0x20 in hex
+ $bytes[0x15] = $bytes[0x15] -bor 0x20
+ [System.IO.File]::WriteAllBytes($FileBrowser.FileName, $bytes)
+ }
+
+ Write-Host "Shortcut for $ShortcutToAdd has been saved to $($FileBrowser.FileName) with 'Run as administrator' set to $RunAsAdmin"
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/BlockAdobeNet.md b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/BlockAdobeNet.md
new file mode 100644
index 00000000..a4683703
--- /dev/null
+++ b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/BlockAdobeNet.md
@@ -0,0 +1,245 @@
+# Adobe Network Block
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Reduce user interruptions by selectively blocking connections to Adobe's activation and telemetry servers. Credit: Ruddernation-Designs
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Adobe Network Block",
+ "Description": "Reduce user interruptions by selectively blocking connections to Adobe's activation and telemetry servers. Credit: Ruddernation-Designs",
+ "category": "z__Advanced Tweaks - CAUTION",
+ "panel": "1",
+ "Order": "a021_",
+ "InvokeScript": [
+ "
+ # Define the URL of the remote HOSTS file and the local paths
+ $remoteHostsUrl = \"https://raw.githubusercontent.com/Ruddernation-Designs/Adobe-URL-Block-List/master/hosts\"
+ $localHostsPath = \"C:\\Windows\\System32\\drivers\\etc\\hosts\"
+ $tempHostsPath = \"C:\\Windows\\System32\\drivers\\etc\\temp_hosts\"
+
+ # Download the remote HOSTS file to a temporary location
+ try {
+ Invoke-WebRequest -Uri $remoteHostsUrl -OutFile $tempHostsPath
+ Write-Output \"Downloaded the remote HOSTS file to a temporary location.\"
+ } catch {
+ Write-Error \"Failed to download the HOSTS file. Error: $_\"
+ }
+
+ # Check if the AdobeNetBlock has already been started
+ try {
+ $localHostsContent = Get-Content $localHostsPath -ErrorAction Stop
+
+ # Check if AdobeNetBlock markers exist
+ $blockStartExists = $localHostsContent -like \"*#AdobeNetBlock-start*\"
+ if ($blockStartExists) {
+ Write-Output \"AdobeNetBlock-start already exists. Skipping addition of new block.\"
+ } else {
+ # Load the new block from the downloaded file
+ $newBlockContent = Get-Content $tempHostsPath -ErrorAction Stop
+ $newBlockContent = $newBlockContent | Where-Object { $_ -notmatch \"^\\s*#\" -and $_ -ne \"\" } # Exclude empty lines and comments
+ $newBlockHeader = \"#AdobeNetBlock-start\"
+ $newBlockFooter = \"#AdobeNetBlock-end\"
+
+ # Combine the contents, ensuring new block is properly formatted
+ $combinedContent = $localHostsContent + $newBlockHeader, $newBlockContent, $newBlockFooter | Out-String
+
+ # Write the combined content back to the original HOSTS file
+ $combinedContent | Set-Content $localHostsPath -Encoding ASCII
+ Write-Output \"Successfully added the AdobeNetBlock.\"
+ }
+ } catch {
+ Write-Error \"Error during processing: $_\"
+ }
+
+ # Clean up temporary file
+ Remove-Item $tempHostsPath -ErrorAction Ignore
+
+ # Flush the DNS resolver cache
+ try {
+ Invoke-Expression \"ipconfig /flushdns\"
+ Write-Output \"DNS cache flushed successfully.\"
+ } catch {
+ Write-Error \"Failed to flush DNS cache. Error: $_\"
+ }
+ "
+ ],
+ "UndoScript": [
+ "
+ # Define the local path of the HOSTS file
+ $localHostsPath = \"C:\\Windows\\System32\\drivers\\etc\\hosts\"
+
+ # Load the content of the HOSTS file
+ try {
+ $hostsContent = Get-Content $localHostsPath -ErrorAction Stop
+ } catch {
+ Write-Error \"Failed to load the HOSTS file. Error: $_\"
+ return
+ }
+
+ # Initialize flags and buffer for new content
+ $recording = $true
+ $newContent = @()
+
+ # Iterate over each line of the HOSTS file
+ foreach ($line in $hostsContent) {
+ if ($line -match \"#AdobeNetBlock-start\") {
+ $recording = $false
+ }
+ if ($recording) {
+ $newContent += $line
+ }
+ if ($line -match \"#AdobeNetBlock-end\") {
+ $recording = $true
+ }
+ }
+
+ # Write the filtered content back to the HOSTS file
+ try {
+ $newContent | Set-Content $localHostsPath -Encoding ASCII
+ Write-Output \"Successfully removed the AdobeNetBlock section from the HOSTS file.\"
+ } catch {
+ Write-Error \"Failed to write back to the HOSTS file. Error: $_\"
+ }
+
+ # Flush the DNS resolver cache
+ try {
+ Invoke-Expression \"ipconfig /flushdns\"
+ Write-Output \"DNS cache flushed successfully.\"
+ } catch {
+ Write-Error \"Failed to flush DNS cache. Error: $_\"
+ }
+ "
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/BlockAdobeNet"
+}
+```
+
+
+
+## Invoke Script
+
+```powershell
+
+ # Define the URL of the remote HOSTS file and the local paths
+ $remoteHostsUrl = "https://raw.githubusercontent.com/Ruddernation-Designs/Adobe-URL-Block-List/master/hosts"
+ $localHostsPath = "C:\Windows\System32\drivers\etc\hosts"
+ $tempHostsPath = "C:\Windows\System32\drivers\etc\temp_hosts"
+
+ # Download the remote HOSTS file to a temporary location
+ try {
+ Invoke-WebRequest -Uri $remoteHostsUrl -OutFile $tempHostsPath
+ Write-Output "Downloaded the remote HOSTS file to a temporary location."
+ } catch {
+ Write-Error "Failed to download the HOSTS file. Error: $_"
+ }
+
+ # Check if the AdobeNetBlock has already been started
+ try {
+ $localHostsContent = Get-Content $localHostsPath -ErrorAction Stop
+
+ # Check if AdobeNetBlock markers exist
+ $blockStartExists = $localHostsContent -like "*#AdobeNetBlock-start*"
+ if ($blockStartExists) {
+ Write-Output "AdobeNetBlock-start already exists. Skipping addition of new block."
+ } else {
+ # Load the new block from the downloaded file
+ $newBlockContent = Get-Content $tempHostsPath -ErrorAction Stop
+ $newBlockContent = $newBlockContent | Where-Object { $_ -notmatch "^\s*#" -and $_ -ne "" } # Exclude empty lines and comments
+ $newBlockHeader = "#AdobeNetBlock-start"
+ $newBlockFooter = "#AdobeNetBlock-end"
+
+ # Combine the contents, ensuring new block is properly formatted
+ $combinedContent = $localHostsContent + $newBlockHeader, $newBlockContent, $newBlockFooter | Out-String
+
+ # Write the combined content back to the original HOSTS file
+ $combinedContent | Set-Content $localHostsPath -Encoding ASCII
+ Write-Output "Successfully added the AdobeNetBlock."
+ }
+ } catch {
+ Write-Error "Error during processing: $_"
+ }
+
+ # Clean up temporary file
+ Remove-Item $tempHostsPath -ErrorAction Ignore
+
+ # Flush the DNS resolver cache
+ try {
+ Invoke-Expression "ipconfig /flushdns"
+ Write-Output "DNS cache flushed successfully."
+ } catch {
+ Write-Error "Failed to flush DNS cache. Error: $_"
+ }
+
+
+```
+## Undo Script
+
+```powershell
+
+ # Define the local path of the HOSTS file
+ $localHostsPath = "C:\Windows\System32\drivers\etc\hosts"
+
+ # Load the content of the HOSTS file
+ try {
+ $hostsContent = Get-Content $localHostsPath -ErrorAction Stop
+ } catch {
+ Write-Error "Failed to load the HOSTS file. Error: $_"
+ return
+ }
+
+ # Initialize flags and buffer for new content
+ $recording = $true
+ $newContent = @()
+
+ # Iterate over each line of the HOSTS file
+ foreach ($line in $hostsContent) {
+ if ($line -match "#AdobeNetBlock-start") {
+ $recording = $false
+ }
+ if ($recording) {
+ $newContent += $line
+ }
+ if ($line -match "#AdobeNetBlock-end") {
+ $recording = $true
+ }
+ }
+
+ # Write the filtered content back to the HOSTS file
+ try {
+ $newContent | Set-Content $localHostsPath -Encoding ASCII
+ Write-Output "Successfully removed the AdobeNetBlock section from the HOSTS file."
+ } catch {
+ Write-Error "Failed to write back to the HOSTS file. Error: $_"
+ }
+
+ # Flush the DNS resolver cache
+ try {
+ Invoke-Expression "ipconfig /flushdns"
+ Write-Output "DNS cache flushed successfully."
+ } catch {
+ Write-Error "Failed to flush DNS cache. Error: $_"
+ }
+
+
+```
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/DeBloat.md b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/DeBloat.md
new file mode 100644
index 00000000..c5b0e205
--- /dev/null
+++ b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/DeBloat.md
@@ -0,0 +1,189 @@
+# Remove ALL MS Store Apps - NOT RECOMMENDED
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+USE WITH CAUTION!!!!! This will remove ALL Microsoft store apps other than the essentials to make winget work. Games installed by MS Store ARE INCLUDED!
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Remove ALL MS Store Apps - NOT RECOMMENDED",
+ "Description": "USE WITH CAUTION!!!!! This will remove ALL Microsoft store apps other than the essentials to make winget work. Games installed by MS Store ARE INCLUDED!",
+ "category": "z__Advanced Tweaks - CAUTION",
+ "panel": "1",
+ "Order": "a028_",
+ "appx": [
+ "Microsoft.Microsoft3DViewer",
+ "Microsoft.AppConnector",
+ "Microsoft.BingFinance",
+ "Microsoft.BingNews",
+ "Microsoft.BingSports",
+ "Microsoft.BingTranslator",
+ "Microsoft.BingWeather",
+ "Microsoft.BingFoodAndDrink",
+ "Microsoft.BingHealthAndFitness",
+ "Microsoft.BingTravel",
+ "Microsoft.MinecraftUWP",
+ "Microsoft.GamingServices",
+ "Microsoft.GetHelp",
+ "Microsoft.Getstarted",
+ "Microsoft.Messaging",
+ "Microsoft.Microsoft3DViewer",
+ "Microsoft.MicrosoftSolitaireCollection",
+ "Microsoft.NetworkSpeedTest",
+ "Microsoft.News",
+ "Microsoft.Office.Lens",
+ "Microsoft.Office.Sway",
+ "Microsoft.Office.OneNote",
+ "Microsoft.OneConnect",
+ "Microsoft.People",
+ "Microsoft.Print3D",
+ "Microsoft.SkypeApp",
+ "Microsoft.Wallet",
+ "Microsoft.Whiteboard",
+ "Microsoft.WindowsAlarms",
+ "microsoft.windowscommunicationsapps",
+ "Microsoft.WindowsFeedbackHub",
+ "Microsoft.WindowsMaps",
+ "Microsoft.YourPhone",
+ "Microsoft.WindowsSoundRecorder",
+ "Microsoft.XboxApp",
+ "Microsoft.ConnectivityStore",
+ "Microsoft.ScreenSketch",
+ "Microsoft.Xbox.TCUI",
+ "Microsoft.XboxGameOverlay",
+ "Microsoft.XboxGameCallableUI",
+ "Microsoft.XboxSpeechToTextOverlay",
+ "Microsoft.MixedReality.Portal",
+ "Microsoft.XboxIdentityProvider",
+ "Microsoft.ZuneMusic",
+ "Microsoft.ZuneVideo",
+ "Microsoft.Getstarted",
+ "Microsoft.MicrosoftOfficeHub",
+ "*EclipseManager*",
+ "*ActiproSoftwareLLC*",
+ "*AdobeSystemsIncorporated.AdobePhotoshopExpress*",
+ "*Duolingo-LearnLanguagesforFree*",
+ "*PandoraMediaInc*",
+ "*CandyCrush*",
+ "*BubbleWitch3Saga*",
+ "*Wunderlist*",
+ "*Flipboard*",
+ "*Twitter*",
+ "*Facebook*",
+ "*Royal Revolt*",
+ "*Sway*",
+ "*Speed Test*",
+ "*Dolby*",
+ "*Viber*",
+ "*ACGMediaPlayer*",
+ "*Netflix*",
+ "*OneCalendar*",
+ "*LinkedInforWindows*",
+ "*HiddenCityMysteryofShadows*",
+ "*Hulu*",
+ "*HiddenCity*",
+ "*AdobePhotoshopExpress*",
+ "*HotspotShieldFreeVPN*",
+ "*Microsoft.Advertising.Xaml*"
+ ],
+ "InvokeScript": [
+ "
+ $TeamsPath = [System.IO.Path]::Combine($env:LOCALAPPDATA, 'Microsoft', 'Teams')
+ $TeamsUpdateExePath = [System.IO.Path]::Combine($TeamsPath, 'Update.exe')
+
+ Write-Host \"Stopping Teams process...\"
+ Stop-Process -Name \"*teams*\" -Force -ErrorAction SilentlyContinue
+
+ Write-Host \"Uninstalling Teams from AppData\\Microsoft\\Teams\"
+ if ([System.IO.File]::Exists($TeamsUpdateExePath)) {
+ # Uninstall app
+ $proc = Start-Process $TeamsUpdateExePath \"-uninstall -s\" -PassThru
+ $proc.WaitForExit()
+ }
+
+ Write-Host \"Removing Teams AppxPackage...\"
+ Get-AppxPackage \"*Teams*\" | Remove-AppxPackage -ErrorAction SilentlyContinue
+ Get-AppxPackage \"*Teams*\" -AllUsers | Remove-AppxPackage -AllUsers -ErrorAction SilentlyContinue
+
+ Write-Host \"Deleting Teams directory\"
+ if ([System.IO.Directory]::Exists($TeamsPath)) {
+ Remove-Item $TeamsPath -Force -Recurse -ErrorAction SilentlyContinue
+ }
+
+ Write-Host \"Deleting Teams uninstall registry key\"
+ # Uninstall from Uninstall registry key UninstallString
+ $us = (Get-ChildItem -Path HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall, HKLM:\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall | Get-ItemProperty | Where-Object { $_.DisplayName -like '*Teams*'}).UninstallString
+ if ($us.Length -gt 0) {
+ $us = ($us.Replace('/I', '/uninstall ') + ' /quiet').Replace(' ', ' ')
+ $FilePath = ($us.Substring(0, $us.IndexOf('.exe') + 4).Trim())
+ $ProcessArgs = ($us.Substring($us.IndexOf('.exe') + 5).Trim().replace(' ', ' '))
+ $proc = Start-Process -FilePath $FilePath -Args $ProcessArgs -PassThru
+ $proc.WaitForExit()
+ }
+ "
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/DeBloat"
+}
+```
+
+
+
+## Invoke Script
+
+```powershell
+
+ $TeamsPath = [System.IO.Path]::Combine($env:LOCALAPPDATA, 'Microsoft', 'Teams')
+ $TeamsUpdateExePath = [System.IO.Path]::Combine($TeamsPath, 'Update.exe')
+
+ Write-Host "Stopping Teams process..."
+ Stop-Process -Name "*teams*" -Force -ErrorAction SilentlyContinue
+
+ Write-Host "Uninstalling Teams from AppData\Microsoft\Teams"
+ if ([System.IO.File]::Exists($TeamsUpdateExePath)) {
+ # Uninstall app
+ $proc = Start-Process $TeamsUpdateExePath "-uninstall -s" -PassThru
+ $proc.WaitForExit()
+ }
+
+ Write-Host "Removing Teams AppxPackage..."
+ Get-AppxPackage "*Teams*" | Remove-AppxPackage -ErrorAction SilentlyContinue
+ Get-AppxPackage "*Teams*" -AllUsers | Remove-AppxPackage -AllUsers -ErrorAction SilentlyContinue
+
+ Write-Host "Deleting Teams directory"
+ if ([System.IO.Directory]::Exists($TeamsPath)) {
+ Remove-Item $TeamsPath -Force -Recurse -ErrorAction SilentlyContinue
+ }
+
+ Write-Host "Deleting Teams uninstall registry key"
+ # Uninstall from Uninstall registry key UninstallString
+ $us = (Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall, HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall | Get-ItemProperty | Where-Object { $_.DisplayName -like '*Teams*'}).UninstallString
+ if ($us.Length -gt 0) {
+ $us = ($us.Replace('/I', '/uninstall ') + ' /quiet').Replace(' ', ' ')
+ $FilePath = ($us.Substring(0, $us.IndexOf('.exe') + 4).Trim())
+ $ProcessArgs = ($us.Substring($us.IndexOf('.exe') + 5).Trim().replace(' ', ' '))
+ $proc = Start-Process -FilePath $FilePath -Args $ProcessArgs -PassThru
+ $proc.WaitForExit()
+ }
+
+
+```
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/DebloatAdobe.md b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/DebloatAdobe.md
new file mode 100644
index 00000000..ad05c612
--- /dev/null
+++ b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/DebloatAdobe.md
@@ -0,0 +1,342 @@
+# Adobe Debloat
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Manages Adobe Services, Adobe Desktop Service, and Acrobat Updates
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Adobe Debloat",
+ "Description": "Manages Adobe Services, Adobe Desktop Service, and Acrobat Updates",
+ "category": "z__Advanced Tweaks - CAUTION",
+ "panel": "1",
+ "Order": "a021_",
+ "InvokeScript": [
+ "
+ function CCStopper {
+ $path = \"C:\\Program Files (x86)\\Common Files\\Adobe\\Adobe Desktop Common\\ADS\\Adobe Desktop Service.exe\"
+
+ # Test if the path exists before proceeding
+ if (Test-Path $path) {
+ Takeown /f $path
+ $acl = Get-Acl $path
+ $acl.SetOwner([System.Security.Principal.NTAccount]\"Administrators\")
+ $acl | Set-Acl $path
+
+ Rename-Item -Path $path -NewName \"Adobe Desktop Service.exe.old\" -Force
+ } else {
+ Write-Host \"Adobe Desktop Service is not in the default location.\"
+ }
+ }
+
+
+ function AcrobatUpdates {
+ # Editing Acrobat Updates. The last folder before the key is dynamic, therefore using a script.
+ # Possible Values for the edited key:
+ # 0 = Do not download or install updates automatically
+ # 2 = Automatically download updates but let the user choose when to install them
+ # 3 = Automatically download and install updates (default value)
+ # 4 = Notify the user when an update is available but don't download or install it automatically
+ # = It notifies the user using Windows Notifications. It runs on startup without having to have a Service/Acrobat/Reader running, therefore 0 is the next best thing.
+
+ $rootPath = \"HKLM:\\SOFTWARE\\WOW6432Node\\Adobe\\Adobe ARM\\Legacy\\Acrobat\"
+
+ # Get all subkeys under the specified root path
+ $subKeys = Get-ChildItem -Path $rootPath | Where-Object { $_.PSChildName -like \"{*}\" }
+
+ # Loop through each subkey
+ foreach ($subKey in $subKeys) {
+ # Get the full registry path
+ $fullPath = Join-Path -Path $rootPath -ChildPath $subKey.PSChildName
+ try {
+ Set-ItemProperty -Path $fullPath -Name Mode -Value 0
+ Write-Host \"Acrobat Updates have been disabled.\"
+ } catch {
+ Write-Host \"Registry Key for changing Acrobat Updates does not exist in $fullPath\"
+ }
+ }
+ }
+
+ CCStopper
+ AcrobatUpdates
+ "
+ ],
+ "UndoScript": [
+ "
+ function RestoreCCService {
+ $originalPath = \"C:\\Program Files (x86)\\Common Files\\Adobe\\Adobe Desktop Common\\ADS\\Adobe Desktop Service.exe.old\"
+ $newPath = \"C:\\Program Files (x86)\\Common Files\\Adobe\\Adobe Desktop Common\\ADS\\Adobe Desktop Service.exe\"
+
+ if (Test-Path -Path $originalPath) {
+ Rename-Item -Path $originalPath -NewName \"Adobe Desktop Service.exe\" -Force
+ Write-Host \"Adobe Desktop Service has been restored.\"
+ } else {
+ Write-Host \"Backup file does not exist. No changes were made.\"
+ }
+ }
+
+ function AcrobatUpdates {
+ # Default Value:
+ # 3 = Automatically download and install updates
+
+ $rootPath = \"HKLM:\\SOFTWARE\\WOW6432Node\\Adobe\\Adobe ARM\\Legacy\\Acrobat\"
+
+ # Get all subkeys under the specified root path
+ $subKeys = Get-ChildItem -Path $rootPath | Where-Object { $_.PSChildName -like \"{*}\" }
+
+ # Loop through each subkey
+ foreach ($subKey in $subKeys) {
+ # Get the full registry path
+ $fullPath = Join-Path -Path $rootPath -ChildPath $subKey.PSChildName
+ try {
+ Set-ItemProperty -Path $fullPath -Name Mode -Value 3
+ } catch {
+ Write-Host \"Registry Key for changing Acrobat Updates does not exist in $fullPath\"
+ }
+ }
+ }
+
+ RestoreCCService
+ AcrobatUpdates
+ "
+ ],
+ "service": [
+ {
+ "Name": "AGSService",
+ "StartupType": "Disabled",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "AGMService",
+ "StartupType": "Disabled",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "AdobeUpdateService",
+ "StartupType": "Manual",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "Adobe Acrobat Update",
+ "StartupType": "Manual",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "Adobe Genuine Monitor Service",
+ "StartupType": "Disabled",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "AdobeARMservice",
+ "StartupType": "Manual",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "Adobe Licensing Console",
+ "StartupType": "Manual",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "CCXProcess",
+ "StartupType": "Manual",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "AdobeIPCBroker",
+ "StartupType": "Manual",
+ "OriginalType": "Automatic"
+ },
+ {
+ "Name": "CoreSync",
+ "StartupType": "Manual",
+ "OriginalType": "Automatic"
+ }
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/DebloatAdobe"
+}
+```
+
+
+
+## Invoke Script
+
+```powershell
+
+ function CCStopper {
+ $path = "C:\Program Files (x86)\Common Files\Adobe\Adobe Desktop Common\ADS\Adobe Desktop Service.exe"
+
+ # Test if the path exists before proceeding
+ if (Test-Path $path) {
+ Takeown /f $path
+ $acl = Get-Acl $path
+ $acl.SetOwner([System.Security.Principal.NTAccount]"Administrators")
+ $acl | Set-Acl $path
+
+ Rename-Item -Path $path -NewName "Adobe Desktop Service.exe.old" -Force
+ } else {
+ Write-Host "Adobe Desktop Service is not in the default location."
+ }
+ }
+
+
+ function AcrobatUpdates {
+ # Editing Acrobat Updates. The last folder before the key is dynamic, therefore using a script.
+ # Possible Values for the edited key:
+ # 0 = Do not download or install updates automatically
+ # 2 = Automatically download updates but let the user choose when to install them
+ # 3 = Automatically download and install updates (default value)
+ # 4 = Notify the user when an update is available but don't download or install it automatically
+ # = It notifies the user using Windows Notifications. It runs on startup without having to have a Service/Acrobat/Reader running, therefore 0 is the next best thing.
+
+ $rootPath = "HKLM:\SOFTWARE\WOW6432Node\Adobe\Adobe ARM\Legacy\Acrobat"
+
+ # Get all subkeys under the specified root path
+ $subKeys = Get-ChildItem -Path $rootPath | Where-Object { $_.PSChildName -like "{*}" }
+
+ # Loop through each subkey
+ foreach ($subKey in $subKeys) {
+ # Get the full registry path
+ $fullPath = Join-Path -Path $rootPath -ChildPath $subKey.PSChildName
+ try {
+ Set-ItemProperty -Path $fullPath -Name Mode -Value 0
+ Write-Host "Acrobat Updates have been disabled."
+ } catch {
+ Write-Host "Registry Key for changing Acrobat Updates does not exist in $fullPath"
+ }
+ }
+ }
+
+ CCStopper
+ AcrobatUpdates
+
+
+```
+## Undo Script
+
+```powershell
+
+ function RestoreCCService {
+ $originalPath = "C:\Program Files (x86)\Common Files\Adobe\Adobe Desktop Common\ADS\Adobe Desktop Service.exe.old"
+ $newPath = "C:\Program Files (x86)\Common Files\Adobe\Adobe Desktop Common\ADS\Adobe Desktop Service.exe"
+
+ if (Test-Path -Path $originalPath) {
+ Rename-Item -Path $originalPath -NewName "Adobe Desktop Service.exe" -Force
+ Write-Host "Adobe Desktop Service has been restored."
+ } else {
+ Write-Host "Backup file does not exist. No changes were made."
+ }
+ }
+
+ function AcrobatUpdates {
+ # Default Value:
+ # 3 = Automatically download and install updates
+
+ $rootPath = "HKLM:\SOFTWARE\WOW6432Node\Adobe\Adobe ARM\Legacy\Acrobat"
+
+ # Get all subkeys under the specified root path
+ $subKeys = Get-ChildItem -Path $rootPath | Where-Object { $_.PSChildName -like "{*}" }
+
+ # Loop through each subkey
+ foreach ($subKey in $subKeys) {
+ # Get the full registry path
+ $fullPath = Join-Path -Path $rootPath -ChildPath $subKey.PSChildName
+ try {
+ Set-ItemProperty -Path $fullPath -Name Mode -Value 3
+ } catch {
+ Write-Host "Registry Key for changing Acrobat Updates does not exist in $fullPath"
+ }
+ }
+ }
+
+ RestoreCCService
+ AcrobatUpdates
+
+
+```
+## Service Changes
+
+Windows services are background processes for system functions or applications. Setting some to manual optimizes performance by starting them only when needed.
+
+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).
+
+### Service Name: AGSService
+
+**Startup Type:** Disabled
+
+**Original Type:** Automatic
+
+### Service Name: AGMService
+
+**Startup Type:** Disabled
+
+**Original Type:** Automatic
+
+### Service Name: AdobeUpdateService
+
+**Startup Type:** Manual
+
+**Original Type:** Automatic
+
+### Service Name: Adobe Acrobat Update
+
+**Startup Type:** Manual
+
+**Original Type:** Automatic
+
+### Service Name: Adobe Genuine Monitor Service
+
+**Startup Type:** Disabled
+
+**Original Type:** Automatic
+
+### Service Name: AdobeARMservice
+
+**Startup Type:** Manual
+
+**Original Type:** Automatic
+
+### Service Name: Adobe Licensing Console
+
+**Startup Type:** Manual
+
+**Original Type:** Automatic
+
+### Service Name: CCXProcess
+
+**Startup Type:** Manual
+
+**Original Type:** Automatic
+
+### Service Name: AdobeIPCBroker
+
+**Startup Type:** Manual
+
+**Original Type:** Automatic
+
+### Service Name: CoreSync
+
+**Startup Type:** Manual
+
+**Original Type:** Automatic
+
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableBGapps.md b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableBGapps.md
new file mode 100644
index 00000000..10722d16
--- /dev/null
+++ b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableBGapps.md
@@ -0,0 +1,63 @@
+# Disable Background Apps
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Disables all Microsoft Store apps from running in the background, which has to be done individually since Win11
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Disable Background Apps",
+ "Description": "Disables all Microsoft Store apps from running in the background, which has to be done individually since Win11",
+ "category": "z__Advanced Tweaks - CAUTION",
+ "panel": "1",
+ "Order": "a024_",
+ "registry": [
+ {
+ "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\BackgroundAccessApplications",
+ "Name": "GlobalUserDisabled",
+ "Value": "1",
+ "OriginalValue": "0",
+ "Type": "DWord"
+ }
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableBGapps"
+}
+```
+
+
+
+## Registry Changes
+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.
+
+
+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).
+
+### Registry Key: GlobalUserDisabled
+
+**Type:** DWord
+
+**Original Value:** 0
+
+**New Value:** 1
+
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableFSO.md b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableFSO.md
new file mode 100644
index 00000000..367b1a3a
--- /dev/null
+++ b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableFSO.md
@@ -0,0 +1,63 @@
+# Disable Fullscreen Optimizations
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Disables FSO in all applications. NOTE: This will disable Color Management in Exclusive Fullscreen
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Disable Fullscreen Optimizations",
+ "Description": "Disables FSO in all applications. NOTE: This will disable Color Management in Exclusive Fullscreen",
+ "category": "z__Advanced Tweaks - CAUTION",
+ "panel": "1",
+ "Order": "a024_",
+ "registry": [
+ {
+ "Path": "HKCU:\\System\\GameConfigStore",
+ "Name": "GameDVR_DXGIHonorFSEWindowsCompatible",
+ "Value": "1",
+ "OriginalValue": "0",
+ "Type": "DWord"
+ }
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableFSO"
+}
+```
+
+
+
+## Registry Changes
+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.
+
+
+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).
+
+### Registry Key: GameDVR_DXGIHonorFSEWindowsCompatible
+
+**Type:** DWord
+
+**Original Value:** 0
+
+**New Value:** 1
+
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableLMS1.md b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableLMS1.md
new file mode 100644
index 00000000..834e0c0f
--- /dev/null
+++ b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableLMS1.md
@@ -0,0 +1,145 @@
+# Disable Intel MM (vPro LMS)
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Intel LMS service is always listening on all ports and could be a huge security risk. There is no need to run LMS on home machines and even in the Enterprise there are better solutions.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Disable Intel MM (vPro LMS)",
+ "Description": "Intel LMS service is always listening on all ports and could be a huge security risk. There is no need to run LMS on home machines and even in the Enterprise there are better solutions.",
+ "category": "z__Advanced Tweaks - CAUTION",
+ "panel": "1",
+ "Order": "a026_",
+ "InvokeScript": [
+ "
+ Write-Host \"Kill LMS\"
+ $serviceName = \"LMS\"
+ Write-Host \"Stopping and disabling service: $serviceName\"
+ Stop-Service -Name $serviceName -Force -ErrorAction SilentlyContinue;
+ Set-Service -Name $serviceName -StartupType Disabled -ErrorAction SilentlyContinue;
+
+ Write-Host \"Removing service: $serviceName\";
+ sc.exe delete $serviceName;
+
+ Write-Host \"Removing LMS driver packages\";
+ $lmsDriverPackages = Get-ChildItem -Path \"C:\\Windows\\System32\\DriverStore\\FileRepository\" -Recurse -Filter \"lms.inf*\";
+ foreach ($package in $lmsDriverPackages) {
+ Write-Host \"Removing driver package: $($package.Name)\";
+ pnputil /delete-driver $($package.Name) /uninstall /force;
+ }
+ if ($lmsDriverPackages.Count -eq 0) {
+ Write-Host \"No LMS driver packages found in the driver store.\";
+ } else {
+ Write-Host \"All found LMS driver packages have been removed.\";
+ }
+
+ Write-Host \"Searching and deleting LMS executable files\";
+ $programFilesDirs = @(\"C:\\Program Files\", \"C:\\Program Files (x86)\");
+ $lmsFiles = @();
+ foreach ($dir in $programFilesDirs) {
+ $lmsFiles += Get-ChildItem -Path $dir -Recurse -Filter \"LMS.exe\" -ErrorAction SilentlyContinue;
+ }
+ foreach ($file in $lmsFiles) {
+ Write-Host \"Taking ownership of file: $($file.FullName)\";
+ & icacls $($file.FullName) /grant Administrators:F /T /C /Q;
+ & takeown /F $($file.FullName) /A /R /D Y;
+ Write-Host \"Deleting file: $($file.FullName)\";
+ Remove-Item $($file.FullName) -Force -ErrorAction SilentlyContinue;
+ }
+ if ($lmsFiles.Count -eq 0) {
+ Write-Host \"No LMS.exe files found in Program Files directories.\";
+ } else {
+ Write-Host \"All found LMS.exe files have been deleted.\";
+ }
+ Write-Host 'Intel LMS vPro service has been disabled, removed, and blocked.';
+ "
+ ],
+ "UndoScript": [
+ "
+ Write-Host \"LMS vPro needs to be redownloaded from intel.com\"
+
+ "
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableLMS1"
+}
+```
+
+
+
+## Invoke Script
+
+```powershell
+
+ Write-Host "Kill LMS"
+ $serviceName = "LMS"
+ Write-Host "Stopping and disabling service: $serviceName"
+ Stop-Service -Name $serviceName -Force -ErrorAction SilentlyContinue;
+ Set-Service -Name $serviceName -StartupType Disabled -ErrorAction SilentlyContinue;
+
+ Write-Host "Removing service: $serviceName";
+ sc.exe delete $serviceName;
+
+ Write-Host "Removing LMS driver packages";
+ $lmsDriverPackages = Get-ChildItem -Path "C:\Windows\System32\DriverStore\FileRepository" -Recurse -Filter "lms.inf*";
+ foreach ($package in $lmsDriverPackages) {
+ Write-Host "Removing driver package: $($package.Name)";
+ pnputil /delete-driver $($package.Name) /uninstall /force;
+ }
+ if ($lmsDriverPackages.Count -eq 0) {
+ Write-Host "No LMS driver packages found in the driver store.";
+ } else {
+ Write-Host "All found LMS driver packages have been removed.";
+ }
+
+ Write-Host "Searching and deleting LMS executable files";
+ $programFilesDirs = @("C:\Program Files", "C:\Program Files (x86)");
+ $lmsFiles = @();
+ foreach ($dir in $programFilesDirs) {
+ $lmsFiles += Get-ChildItem -Path $dir -Recurse -Filter "LMS.exe" -ErrorAction SilentlyContinue;
+ }
+ foreach ($file in $lmsFiles) {
+ Write-Host "Taking ownership of file: $($file.FullName)";
+ & icacls $($file.FullName) /grant Administrators:F /T /C /Q;
+ & takeown /F $($file.FullName) /A /R /D Y;
+ Write-Host "Deleting file: $($file.FullName)";
+ Remove-Item $($file.FullName) -Force -ErrorAction SilentlyContinue;
+ }
+ if ($lmsFiles.Count -eq 0) {
+ Write-Host "No LMS.exe files found in Program Files directories.";
+ } else {
+ Write-Host "All found LMS.exe files have been deleted.";
+ }
+ Write-Host 'Intel LMS vPro service has been disabled, removed, and blocked.';
+
+
+```
+## Undo Script
+
+```powershell
+
+ Write-Host "LMS vPro needs to be redownloaded from intel.com"
+
+
+
+```
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableNotifications.md b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableNotifications.md
new file mode 100644
index 00000000..c633ac61
--- /dev/null
+++ b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableNotifications.md
@@ -0,0 +1,78 @@
+# Disable Notification Tray/Calendar
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Disables all Notifications INCLUDING Calendar
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Disable Notification Tray/Calendar",
+ "Description": "Disables all Notifications INCLUDING Calendar",
+ "category": "z__Advanced Tweaks - CAUTION",
+ "panel": "1",
+ "Order": "a026_",
+ "registry": [
+ {
+ "Path": "HKCU:\\Software\\Policies\\Microsoft\\Windows\\Explorer",
+ "Name": "DisableNotificationCenter",
+ "Type": "DWord",
+ "Value": "1",
+ "OriginalValue": "0"
+ },
+ {
+ "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\PushNotifications",
+ "Name": "ToastEnabled",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ }
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableNotifications"
+}
+```
+
+
+
+## Registry Changes
+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.
+
+
+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).
+
+### Registry Key: DisableNotificationCenter
+
+**Type:** DWord
+
+**Original Value:** 0
+
+**New Value:** 1
+
+### Registry Key: ToastEnabled
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/Disableipsix.md b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/Disableipsix.md
new file mode 100644
index 00000000..f71affcf
--- /dev/null
+++ b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/Disableipsix.md
@@ -0,0 +1,81 @@
+# Disable IPv6
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Disables IPv6.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Disable IPv6",
+ "Description": "Disables IPv6.",
+ "category": "z__Advanced Tweaks - CAUTION",
+ "panel": "1",
+ "Order": "a023_",
+ "registry": [
+ {
+ "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters",
+ "Name": "DisabledComponents",
+ "Value": "255",
+ "OriginalValue": "0",
+ "Type": "DWord"
+ }
+ ],
+ "InvokeScript": [
+ "Disable-NetAdapterBinding -Name \"*\" -ComponentID ms_tcpip6"
+ ],
+ "UndoScript": [
+ "Enable-NetAdapterBinding -Name \"*\" -ComponentID ms_tcpip6"
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/Disableipsix"
+}
+```
+
+
+
+## Invoke Script
+
+```powershell
+Disable-NetAdapterBinding -Name "*" -ComponentID ms_tcpip6
+
+```
+## Undo Script
+
+```powershell
+Enable-NetAdapterBinding -Name "*" -ComponentID ms_tcpip6
+
+```
+## Registry Changes
+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.
+
+
+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).
+
+### Registry Key: DisabledComponents
+
+**Type:** DWord
+
+**Original Value:** 0
+
+**New Value:** 255
+
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/Display.md b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/Display.md
new file mode 100644
index 00000000..e81d6891
--- /dev/null
+++ b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/Display.md
@@ -0,0 +1,261 @@
+# Set Display for Performance
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Sets the system preferences to performance. You can do this manually with sysdm.cpl as well.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Set Display for Performance",
+ "Description": "Sets the system preferences to performance. You can do this manually with sysdm.cpl as well.",
+ "category": "z__Advanced Tweaks - CAUTION",
+ "panel": "1",
+ "Order": "a027_",
+ "registry": [
+ {
+ "Path": "HKCU:\\Control Panel\\Desktop",
+ "OriginalValue": "1",
+ "Name": "DragFullWindows",
+ "Value": "0",
+ "Type": "String"
+ },
+ {
+ "Path": "HKCU:\\Control Panel\\Desktop",
+ "OriginalValue": "1",
+ "Name": "MenuShowDelay",
+ "Value": "200",
+ "Type": "String"
+ },
+ {
+ "Path": "HKCU:\\Control Panel\\Desktop\\WindowMetrics",
+ "OriginalValue": "1",
+ "Name": "MinAnimate",
+ "Value": "0",
+ "Type": "String"
+ },
+ {
+ "Path": "HKCU:\\Control Panel\\Keyboard",
+ "OriginalValue": "1",
+ "Name": "KeyboardDelay",
+ "Value": "0",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
+ "OriginalValue": "1",
+ "Name": "ListviewAlphaSelect",
+ "Value": "0",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
+ "OriginalValue": "1",
+ "Name": "ListviewShadow",
+ "Value": "0",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
+ "OriginalValue": "1",
+ "Name": "TaskbarAnimations",
+ "Value": "0",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\VisualEffects",
+ "OriginalValue": "1",
+ "Name": "VisualFXSetting",
+ "Value": "3",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\Software\\Microsoft\\Windows\\DWM",
+ "OriginalValue": "1",
+ "Name": "EnableAeroPeek",
+ "Value": "0",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
+ "OriginalValue": "1",
+ "Name": "TaskbarMn",
+ "Value": "0",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
+ "OriginalValue": "1",
+ "Name": "TaskbarDa",
+ "Value": "0",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
+ "OriginalValue": "1",
+ "Name": "ShowTaskViewButton",
+ "Value": "0",
+ "Type": "DWord"
+ },
+ {
+ "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Search",
+ "OriginalValue": "1",
+ "Name": "SearchboxTaskbarMode",
+ "Value": "0",
+ "Type": "DWord"
+ }
+ ],
+ "InvokeScript": [
+ "Set-ItemProperty -Path \"HKCU:\\Control Panel\\Desktop\" -Name \"UserPreferencesMask\" -Type Binary -Value ([byte[]](144,18,3,128,16,0,0,0))"
+ ],
+ "UndoScript": [
+ "Remove-ItemProperty -Path \"HKCU:\\Control Panel\\Desktop\" -Name \"UserPreferencesMask\""
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/Display"
+}
+```
+
+
+
+## Invoke Script
+
+```powershell
+Set-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name "UserPreferencesMask" -Type Binary -Value ([byte[]](144,18,3,128,16,0,0,0))
+
+```
+## Undo Script
+
+```powershell
+Remove-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name "UserPreferencesMask"
+
+```
+## Registry Changes
+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.
+
+
+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).
+
+### Registry Key: DragFullWindows
+
+**Type:** String
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: MenuShowDelay
+
+**Type:** String
+
+**Original Value:** 1
+
+**New Value:** 200
+
+### Registry Key: MinAnimate
+
+**Type:** String
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: KeyboardDelay
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: ListviewAlphaSelect
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: ListviewShadow
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: TaskbarAnimations
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: VisualFXSetting
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 3
+
+### Registry Key: EnableAeroPeek
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: TaskbarMn
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: TaskbarDa
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: ShowTaskViewButton
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+### Registry Key: SearchboxTaskbarMode
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/OOSUbutton.md b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/OOSUbutton.md
new file mode 100644
index 00000000..b0caa5f4
--- /dev/null
+++ b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/OOSUbutton.md
@@ -0,0 +1,62 @@
+# Run OO Shutup 10
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Run OO Shutup 10",
+ "category": "z__Advanced Tweaks - CAUTION",
+ "panel": "1",
+ "Order": "a039_",
+ "Type": "Button",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/OOSUbutton"
+}
+```
+
+
+
+## Function: Invoke-WPFOOSU
+
+```powershell
+function Invoke-WPFOOSU {
+ <#
+ .SYNOPSIS
+ Downloads and runs OO Shutup 10
+ #>
+ try {
+ $OOSU_filepath = "$ENV:temp\OOSU10.exe"
+ $Initial_ProgressPreference = $ProgressPreference
+ $ProgressPreference = "SilentlyContinue" # Disables the Progress Bar to drasticly speed up Invoke-WebRequest
+ Invoke-WebRequest -Uri "https://dl5.oo-software.com/files/ooshutup10/OOSU10.exe" -OutFile $OOSU_filepath
+ Write-Host "Starting OO Shutup 10 ..."
+ Start-Process $OOSU_filepath
+ } catch {
+ Write-Host "Error Downloading and Running OO Shutup 10" -ForegroundColor Red
+ }
+ finally {
+ $ProgressPreference = $Initial_ProgressPreference
+ }
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/RemoveCopilot.md b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/RemoveCopilot.md
new file mode 100644
index 00000000..7ed43cfa
--- /dev/null
+++ b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/RemoveCopilot.md
@@ -0,0 +1,123 @@
+# Disable Microsoft Copilot
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Disables MS Copilot AI built into Windows since 23H2.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Disable Microsoft Copilot",
+ "Description": "Disables MS Copilot AI built into Windows since 23H2.",
+ "category": "z__Advanced Tweaks - CAUTION",
+ "panel": "1",
+ "Order": "a025_",
+ "registry": [
+ {
+ "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsCopilot",
+ "Name": "TurnOffWindowsCopilot",
+ "Type": "DWord",
+ "Value": "1",
+ "OriginalValue": "0"
+ },
+ {
+ "Path": "HKCU:\\Software\\Policies\\Microsoft\\Windows\\WindowsCopilot",
+ "Name": "TurnOffWindowsCopilot",
+ "Type": "DWord",
+ "Value": "1",
+ "OriginalValue": "0"
+ },
+ {
+ "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
+ "Name": "ShowCopilotButton",
+ "Type": "DWord",
+ "Value": "0",
+ "OriginalValue": "1"
+ }
+ ],
+ "InvokeScript": [
+ "
+ Write-Host \"Remove Copilot\"
+ dism /online /remove-package /package-name:Microsoft.Windows.Copilot
+ "
+ ],
+ "UndoScript": [
+ "
+ Write-Host \"Install Copilot\"
+ dism /online /add-package /package-name:Microsoft.Windows.Copilot
+ "
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/RemoveCopilot"
+}
+```
+
+
+
+## Invoke Script
+
+```powershell
+
+ Write-Host "Remove Copilot"
+ dism /online /remove-package /package-name:Microsoft.Windows.Copilot
+
+
+```
+## Undo Script
+
+```powershell
+
+ Write-Host "Install Copilot"
+ dism /online /add-package /package-name:Microsoft.Windows.Copilot
+
+
+```
+## Registry Changes
+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.
+
+
+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).
+
+### Registry Key: TurnOffWindowsCopilot
+
+**Type:** DWord
+
+**Original Value:** 0
+
+**New Value:** 1
+
+### Registry Key: TurnOffWindowsCopilot
+
+**Type:** DWord
+
+**Original Value:** 0
+
+**New Value:** 1
+
+### Registry Key: ShowCopilotButton
+
+**Type:** DWord
+
+**Original Value:** 1
+
+**New Value:** 0
+
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/RemoveEdge.md b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/RemoveEdge.md
new file mode 100644
index 00000000..6662face
--- /dev/null
+++ b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/RemoveEdge.md
@@ -0,0 +1,225 @@
+# Remove Microsoft Edge
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Removes MS Edge when it gets reinstalled by updates. Credit: Techie Jack
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Remove Microsoft Edge",
+ "Description": "Removes MS Edge when it gets reinstalled by updates. Credit: Techie Jack",
+ "category": "z__Advanced Tweaks - CAUTION",
+ "panel": "1",
+ "Order": "a029_",
+ "InvokeScript": [
+ "
+ Uninstall-WinUtilEdgeBrowser
+ "
+ ],
+ "UndoScript": [
+ "
+ Write-Host \"Install Microsoft Edge\"
+ Start-Process -FilePath winget -ArgumentList \"install --force -e --accept-source-agreements --accept-package-agreements --silent Microsoft.Edge \" -NoNewWindow -Wait
+ "
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/RemoveEdge"
+}
+```
+
+
+
+## Invoke Script
+
+```powershell
+
+ Uninstall-WinUtilEdgeBrowser
+
+
+```
+## Undo Script
+
+```powershell
+
+ Write-Host "Install Microsoft Edge"
+ Start-Process -FilePath winget -ArgumentList "install --force -e --accept-source-agreements --accept-package-agreements --silent Microsoft.Edge " -NoNewWindow -Wait
+
+
+```
+## Function: Uninstall-WinUtilEdgeBrowser
+
+```powershell
+Function Uninstall-WinUtilEdgeBrowser {
+
+ <#
+
+ .SYNOPSIS
+ This will uninstall edge by changing the region to Ireland and uninstalling edge the changing it back
+
+ #>
+
+$msedgeProcess = Get-Process -Name "msedge" -ErrorAction SilentlyContinue
+$widgetsProcess = Get-Process -Name "widgets" -ErrorAction SilentlyContinue
+# Checking if Microsoft Edge is running
+if ($msedgeProcess) {
+ Stop-Process -Name "msedge" -Force
+} else {
+ Write-Output "msedge process is not running."
+}
+# Checking if Widgets is running
+if ($widgetsProcess) {
+ Stop-Process -Name "widgets" -Force
+} else {
+ Write-Output "widgets process is not running."
+}
+
+function Uninstall-Process {
+ param (
+ [Parameter(Mandatory = $true)]
+ [string]$Key
+ )
+
+ $originalNation = [microsoft.win32.registry]::GetValue('HKEY_USERS\.DEFAULT\Control Panel\International\Geo', 'Nation', [Microsoft.Win32.RegistryValueKind]::String)
+
+ # Set Nation to 84 (France) temporarily
+ [microsoft.win32.registry]::SetValue('HKEY_USERS\.DEFAULT\Control Panel\International\Geo', 'Nation', 68, [Microsoft.Win32.RegistryValueKind]::String) | Out-Null
+
+ # credits to he3als for the Acl commands
+ $fileName = "IntegratedServicesRegionPolicySet.json"
+ $pathISRPS = [Environment]::SystemDirectory + "\" + $fileName
+ $aclISRPS = Get-Acl -Path $pathISRPS
+ $aclISRPSBackup = [System.Security.AccessControl.FileSecurity]::new()
+ $aclISRPSBackup.SetSecurityDescriptorSddlForm($acl.Sddl)
+ if (Test-Path -Path $pathISRPS) {
+ try {
+ $admin = [System.Security.Principal.NTAccount]$(New-Object System.Security.Principal.SecurityIdentifier('S-1-5-32-544')).Translate([System.Security.Principal.NTAccount]).Value
+
+ $aclISRPS.SetOwner($admin)
+ $rule = New-Object System.Security.AccessControl.FileSystemAccessRule($admin, 'FullControl', 'Allow')
+ $aclISRPS.AddAccessRule($rule)
+ Set-Acl -Path $pathISRPS -AclObject $aclISRPS
+
+ Rename-Item -Path $pathISRPS -NewName ($fileName + '.bak') -Force
+ }
+ catch {
+ Write-Error "[$Mode] Failed to set owner for $pathISRPS"
+ }
+ }
+
+ $baseKey = 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate'
+ $registryPath = $baseKey + '\ClientState\' + $Key
+
+ if (!(Test-Path -Path $registryPath)) {
+ Write-Host "[$Mode] Registry key not found: $registryPath"
+ return
+ }
+
+ Remove-ItemProperty -Path $registryPath -Name "experiment_control_labels" -ErrorAction SilentlyContinue | Out-Null
+
+ $uninstallString = (Get-ItemProperty -Path $registryPath).UninstallString
+ $uninstallArguments = (Get-ItemProperty -Path $registryPath).UninstallArguments
+
+ if ([string]::IsNullOrEmpty($uninstallString) -or [string]::IsNullOrEmpty($uninstallArguments)) {
+ Write-Host "[$Mode] Cannot find uninstall methods for $Mode"
+ return
+ }
+
+ $uninstallArguments += " --force-uninstall --delete-profile"
+
+ # $uninstallCommand = "`"$uninstallString`"" + $uninstallArguments
+ if (!(Test-Path -Path $uninstallString)) {
+ Write-Host "[$Mode] setup.exe not found at: $uninstallString"
+ return
+ }
+ Start-Process -FilePath $uninstallString -ArgumentList $uninstallArguments -Wait -NoNewWindow -Verbose
+
+ # Restore Acl
+ if (Test-Path -Path ($pathISRPS + '.bak')) {
+ Rename-Item -Path ($pathISRPS + '.bak') -NewName $fileName -Force
+ Set-Acl -Path $pathISRPS -AclObject $aclISRPSBackup
+ }
+
+ # Restore Nation
+ [microsoft.win32.registry]::SetValue('HKEY_USERS\.DEFAULT\Control Panel\International\Geo', 'Nation', $originalNation, [Microsoft.Win32.RegistryValueKind]::String) | Out-Null
+
+ if ((Get-ItemProperty -Path $baseKey).IsEdgeStableUninstalled -eq 1) {
+ Write-Host "[$Mode] Edge Stable has been successfully uninstalled"
+ }
+}
+
+function Uninstall-Edge {
+ Remove-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge" -Name "NoRemove" -ErrorAction SilentlyContinue | Out-Null
+
+ [microsoft.win32.registry]::SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdateDev", "AllowUninstall", 1, [Microsoft.Win32.RegistryValueKind]::DWord) | Out-Null
+
+ Uninstall-Process -Key '{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}'
+
+ @( "$env:ProgramData\Microsoft\Windows\Start Menu\Programs",
+ "$env:PUBLIC\Desktop",
+ "$env:USERPROFILE\Desktop" ) | ForEach-Object {
+ $shortcutPath = Join-Path -Path $_ -ChildPath "Microsoft Edge.lnk"
+ if (Test-Path -Path $shortcutPath) {
+ Remove-Item -Path $shortcutPath -Force
+ }
+ }
+
+}
+
+function Uninstall-WebView {
+ Remove-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft EdgeWebView" -Name "NoRemove" -ErrorAction SilentlyContinue | Out-Null
+
+ # Force to use system-wide WebView2
+ # [microsoft.win32.registry]::SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge\WebView2\BrowserExecutableFolder", "*", "%%SystemRoot%%\System32\Microsoft-Edge-WebView")
+
+ Uninstall-Process -Key '{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}'
+}
+
+function Uninstall-EdgeUpdate {
+ Remove-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge Update" -Name "NoRemove" -ErrorAction SilentlyContinue | Out-Null
+
+ $registryPath = 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate'
+ if (!(Test-Path -Path $registryPath)) {
+ Write-Host "Registry key not found: $registryPath"
+ return
+ }
+ $uninstallCmdLine = (Get-ItemProperty -Path $registryPath).UninstallCmdLine
+
+ if ([string]::IsNullOrEmpty($uninstallCmdLine)) {
+ Write-Host "Cannot find uninstall methods for $Mode"
+ return
+ }
+
+ Write-Output "Uninstalling: $uninstallCmdLine"
+ Start-Process cmd.exe "/c $uninstallCmdLine" -WindowStyle Hidden -Wait
+}
+
+Uninstall-Edge
+ # "WebView" { Uninstall-WebView }
+ # "EdgeUpdate" { Uninstall-EdgeUpdate }
+
+
+
+
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/RemoveHomeGallery.md b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/RemoveHomeGallery.md
new file mode 100644
index 00000000..25fd7090
--- /dev/null
+++ b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/RemoveHomeGallery.md
@@ -0,0 +1,73 @@
+# Remove Home and Gallery from explorer
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Removes the Home and Gallery from explorer and sets This PC as default
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Remove Home and Gallery from explorer",
+ "Description": "Removes the Home and Gallery from explorer and sets This PC as default",
+ "category": "z__Advanced Tweaks - CAUTION",
+ "panel": "1",
+ "Order": "a029_",
+ "InvokeScript": [
+ "
+ REG DELETE \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Desktop\\NameSpace\\{e88865ea-0e1c-4e20-9aa6-edcd0212c87c}\" /f
+ REG DELETE \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Desktop\\NameSpace\\{f874310e-b6b7-47dc-bc84-b9e6b38f5903}\" /f
+ REG ADD \"HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\" /f /v \"LaunchTo\" /t REG_DWORD /d \"1\"
+ "
+ ],
+ "UndoScript": [
+ "
+ REG ADD \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Desktop\\NameSpace\\{e88865ea-0e1c-4e20-9aa6-edcd0212c87c}\" /f /ve /t REG_SZ /d \"{e88865ea-0e1c-4e20-9aa6-edcd0212c87c}\"
+ REG ADD \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Desktop\\NameSpace\\{f874310e-b6b7-47dc-bc84-b9e6b38f5903}\" /f /ve /t REG_SZ /d \"CLSID_MSGraphHomeFolder\"
+ REG DELETE \"HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\" /f /v \"LaunchTo\"
+ "
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/RemoveHomeGallery"
+}
+```
+
+
+
+## Invoke Script
+
+```powershell
+
+ REG DELETE "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\{e88865ea-0e1c-4e20-9aa6-edcd0212c87c}" /f
+ REG DELETE "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\{f874310e-b6b7-47dc-bc84-b9e6b38f5903}" /f
+ REG ADD "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /f /v "LaunchTo" /t REG_DWORD /d "1"
+
+
+```
+## Undo Script
+
+```powershell
+
+ REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\{e88865ea-0e1c-4e20-9aa6-edcd0212c87c}" /f /ve /t REG_SZ /d "{e88865ea-0e1c-4e20-9aa6-edcd0212c87c}"
+ REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\{f874310e-b6b7-47dc-bc84-b9e6b38f5903}" /f /ve /t REG_SZ /d "CLSID_MSGraphHomeFolder"
+ REG DELETE "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /f /v "LaunchTo"
+
+
+```
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/RemoveOnedrive.md b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/RemoveOnedrive.md
new file mode 100644
index 00000000..9bfada63
--- /dev/null
+++ b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/RemoveOnedrive.md
@@ -0,0 +1,219 @@
+# Remove OneDrive
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Moves OneDrive files to Default Home Folders and Uninstalls it.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Remove OneDrive",
+ "Description": "Moves OneDrive files to Default Home Folders and Uninstalls it.",
+ "category": "z__Advanced Tweaks - CAUTION",
+ "panel": "1",
+ "Order": "a030_",
+ "InvokeScript": [
+ "
+ $OneDrivePath = $($env:OneDrive)
+ Write-Host \"Removing OneDrive\"
+ $regPath = \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OneDriveSetup.exe\"
+ if (Test-Path $regPath) {
+ $OneDriveUninstallString = Get-ItemPropertyValue \"$regPath\" -Name \"UninstallString\"
+ $OneDriveExe, $OneDriveArgs = $OneDriveUninstallString.Split(\" \")
+ Start-Process -FilePath $OneDriveExe -ArgumentList \"$OneDriveArgs /silent\" -NoNewWindow -Wait
+ } else {
+ Write-Host \"Onedrive dosn't seem to be installed anymore\" -ForegroundColor Red
+ return
+ }
+ # Check if OneDrive got Uninstalled
+ if (-not (Test-Path $regPath)) {
+ Write-Host \"Copy downloaded Files from the OneDrive Folder to Root UserProfile\"
+ Start-Process -FilePath powershell -ArgumentList \"robocopy '$($OneDrivePath)' '$($env:USERPROFILE.TrimEnd())\\' /mov /e /xj\" -NoNewWindow -Wait
+
+ Write-Host \"Removing OneDrive leftovers\"
+ Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$env:localappdata\\Microsoft\\OneDrive\"
+ Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$env:localappdata\\OneDrive\"
+ Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$env:programdata\\Microsoft OneDrive\"
+ Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$env:systemdrive\\OneDriveTemp\"
+ reg delete \"HKEY_CURRENT_USER\\Software\\Microsoft\\OneDrive\" -f
+ # check if directory is empty before removing:
+ If ((Get-ChildItem \"$OneDrivePath\" -Recurse | Measure-Object).Count -eq 0) {
+ Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$OneDrivePath\"
+ }
+
+ Write-Host \"Remove Onedrive from explorer sidebar\"
+ Set-ItemProperty -Path \"HKCR:\\CLSID\\{018D5C66-4533-4307-9B53-224DE2ED1FE6}\" -Name \"System.IsPinnedToNameSpaceTree\" -Value 0
+ Set-ItemProperty -Path \"HKCR:\\Wow6432Node\\CLSID\\{018D5C66-4533-4307-9B53-224DE2ED1FE6}\" -Name \"System.IsPinnedToNameSpaceTree\" -Value 0
+
+ Write-Host \"Removing run hook for new users\"
+ reg load \"hku\\Default\" \"C:\\Users\\Default\\NTUSER.DAT\"
+ reg delete \"HKEY_USERS\\Default\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\" /v \"OneDriveSetup\" /f
+ reg unload \"hku\\Default\"
+
+ Write-Host \"Removing startmenu entry\"
+ Remove-Item -Force -ErrorAction SilentlyContinue \"$env:userprofile\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\OneDrive.lnk\"
+
+ Write-Host \"Removing scheduled task\"
+ Get-ScheduledTask -TaskPath '\\' -TaskName 'OneDrive*' -ea SilentlyContinue | Unregister-ScheduledTask -Confirm:$false
+
+ # Add Shell folders restoring default locations
+ Write-Host \"Shell Fixing\"
+ Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"AppData\" -Value \"$env:userprofile\\AppData\\Roaming\" -Type ExpandString
+ Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Cache\" -Value \"$env:userprofile\\AppData\\Local\\Microsoft\\Windows\\INetCache\" -Type ExpandString
+ Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Cookies\" -Value \"$env:userprofile\\AppData\\Local\\Microsoft\\Windows\\INetCookies\" -Type ExpandString
+ Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Favorites\" -Value \"$env:userprofile\\Favorites\" -Type ExpandString
+ Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"History\" -Value \"$env:userprofile\\AppData\\Local\\Microsoft\\Windows\\History\" -Type ExpandString
+ Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Local AppData\" -Value \"$env:userprofile\\AppData\\Local\" -Type ExpandString
+ Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"My Music\" -Value \"$env:userprofile\\Music\" -Type ExpandString
+ Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"My Video\" -Value \"$env:userprofile\\Videos\" -Type ExpandString
+ Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"NetHood\" -Value \"$env:userprofile\\AppData\\Roaming\\Microsoft\\Windows\\Network Shortcuts\" -Type ExpandString
+ Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"PrintHood\" -Value \"$env:userprofile\\AppData\\Roaming\\Microsoft\\Windows\\Printer Shortcuts\" -Type ExpandString
+ Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Programs\" -Value \"$env:userprofile\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\" -Type ExpandString
+ Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Recent\" -Value \"$env:userprofile\\AppData\\Roaming\\Microsoft\\Windows\\Recent\" -Type ExpandString
+ Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"SendTo\" -Value \"$env:userprofile\\AppData\\Roaming\\Microsoft\\Windows\\SendTo\" -Type ExpandString
+ Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Start Menu\" -Value \"$env:userprofile\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\" -Type ExpandString
+ Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Startup\" -Value \"$env:userprofile\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\" -Type ExpandString
+ Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Templates\" -Value \"$env:userprofile\\AppData\\Roaming\\Microsoft\\Windows\\Templates\" -Type ExpandString
+ Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"{374DE290-123F-4565-9164-39C4925E467B}\" -Value \"$env:userprofile\\Downloads\" -Type ExpandString
+ Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Desktop\" -Value \"$env:userprofile\\Desktop\" -Type ExpandString
+ Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"My Pictures\" -Value \"$env:userprofile\\Pictures\" -Type ExpandString
+ Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Personal\" -Value \"$env:userprofile\\Documents\" -Type ExpandString
+ Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"{F42EE2D3-909F-4907-8871-4C22FC0BF756}\" -Value \"$env:userprofile\\Documents\" -Type ExpandString
+ Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"{0DDD015D-B06C-45D5-8C4C-F59713854639}\" -Value \"$env:userprofile\\Pictures\" -Type ExpandString
+ Write-Host \"Restarting explorer\"
+ taskkill.exe /F /IM \"explorer.exe\"
+ Start-Process \"explorer.exe\"
+
+ Write-Host \"Waiting for explorer to complete loading\"
+ Write-Host \"Please Note - The OneDrive folder at $OneDrivePath may still have items in it. You must manually delete it, but all the files should already be copied to the base user folder.\"
+ Write-Host \"If there are Files missing afterwards, please Login to Onedrive.com and Download them manually\" -ForegroundColor Yellow
+ Start-Sleep 5
+ } else {
+ Write-Host \"Something went Wrong during the Unistallation of OneDrive\" -ForegroundColor Red
+ }
+ "
+ ],
+ "UndoScript": [
+ "
+ Write-Host \"Install OneDrive\"
+ Start-Process -FilePath winget -ArgumentList \"install -e --accept-source-agreements --accept-package-agreements --silent Microsoft.OneDrive \" -NoNewWindow -Wait
+ "
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/RemoveOnedrive"
+}
+```
+
+
+
+## Invoke Script
+
+```powershell
+
+ $OneDrivePath = $($env:OneDrive)
+ Write-Host "Removing OneDrive"
+ $regPath = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall\OneDriveSetup.exe"
+ if (Test-Path $regPath) {
+ $OneDriveUninstallString = Get-ItemPropertyValue "$regPath" -Name "UninstallString"
+ $OneDriveExe, $OneDriveArgs = $OneDriveUninstallString.Split(" ")
+ Start-Process -FilePath $OneDriveExe -ArgumentList "$OneDriveArgs /silent" -NoNewWindow -Wait
+ } else {
+ Write-Host "Onedrive dosn't seem to be installed anymore" -ForegroundColor Red
+ return
+ }
+ # Check if OneDrive got Uninstalled
+ if (-not (Test-Path $regPath)) {
+ Write-Host "Copy downloaded Files from the OneDrive Folder to Root UserProfile"
+ Start-Process -FilePath powershell -ArgumentList "robocopy '$($OneDrivePath)' '$($env:USERPROFILE.TrimEnd())\' /mov /e /xj" -NoNewWindow -Wait
+
+ Write-Host "Removing OneDrive leftovers"
+ Remove-Item -Recurse -Force -ErrorAction SilentlyContinue "$env:localappdata\Microsoft\OneDrive"
+ Remove-Item -Recurse -Force -ErrorAction SilentlyContinue "$env:localappdata\OneDrive"
+ Remove-Item -Recurse -Force -ErrorAction SilentlyContinue "$env:programdata\Microsoft OneDrive"
+ Remove-Item -Recurse -Force -ErrorAction SilentlyContinue "$env:systemdrive\OneDriveTemp"
+ reg delete "HKEY_CURRENT_USER\Software\Microsoft\OneDrive" -f
+ # check if directory is empty before removing:
+ If ((Get-ChildItem "$OneDrivePath" -Recurse | Measure-Object).Count -eq 0) {
+ Remove-Item -Recurse -Force -ErrorAction SilentlyContinue "$OneDrivePath"
+ }
+
+ Write-Host "Remove Onedrive from explorer sidebar"
+ Set-ItemProperty -Path "HKCR:\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}" -Name "System.IsPinnedToNameSpaceTree" -Value 0
+ Set-ItemProperty -Path "HKCR:\Wow6432Node\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}" -Name "System.IsPinnedToNameSpaceTree" -Value 0
+
+ Write-Host "Removing run hook for new users"
+ reg load "hku\Default" "C:\Users\Default\NTUSER.DAT"
+ reg delete "HKEY_USERS\Default\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "OneDriveSetup" /f
+ reg unload "hku\Default"
+
+ Write-Host "Removing startmenu entry"
+ Remove-Item -Force -ErrorAction SilentlyContinue "$env:userprofile\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\OneDrive.lnk"
+
+ Write-Host "Removing scheduled task"
+ Get-ScheduledTask -TaskPath '\' -TaskName 'OneDrive*' -ea SilentlyContinue | Unregister-ScheduledTask -Confirm:$false
+
+ # Add Shell folders restoring default locations
+ Write-Host "Shell Fixing"
+ Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "AppData" -Value "$env:userprofile\AppData\Roaming" -Type ExpandString
+ Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "Cache" -Value "$env:userprofile\AppData\Local\Microsoft\Windows\INetCache" -Type ExpandString
+ Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "Cookies" -Value "$env:userprofile\AppData\Local\Microsoft\Windows\INetCookies" -Type ExpandString
+ Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "Favorites" -Value "$env:userprofile\Favorites" -Type ExpandString
+ Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "History" -Value "$env:userprofile\AppData\Local\Microsoft\Windows\History" -Type ExpandString
+ Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "Local AppData" -Value "$env:userprofile\AppData\Local" -Type ExpandString
+ Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "My Music" -Value "$env:userprofile\Music" -Type ExpandString
+ Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "My Video" -Value "$env:userprofile\Videos" -Type ExpandString
+ Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "NetHood" -Value "$env:userprofile\AppData\Roaming\Microsoft\Windows\Network Shortcuts" -Type ExpandString
+ Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "PrintHood" -Value "$env:userprofile\AppData\Roaming\Microsoft\Windows\Printer Shortcuts" -Type ExpandString
+ Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "Programs" -Value "$env:userprofile\AppData\Roaming\Microsoft\Windows\Start Menu\Programs" -Type ExpandString
+ Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "Recent" -Value "$env:userprofile\AppData\Roaming\Microsoft\Windows\Recent" -Type ExpandString
+ Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "SendTo" -Value "$env:userprofile\AppData\Roaming\Microsoft\Windows\SendTo" -Type ExpandString
+ Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "Start Menu" -Value "$env:userprofile\AppData\Roaming\Microsoft\Windows\Start Menu" -Type ExpandString
+ Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "Startup" -Value "$env:userprofile\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup" -Type ExpandString
+ Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "Templates" -Value "$env:userprofile\AppData\Roaming\Microsoft\Windows\Templates" -Type ExpandString
+ Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "{374DE290-123F-4565-9164-39C4925E467B}" -Value "$env:userprofile\Downloads" -Type ExpandString
+ Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "Desktop" -Value "$env:userprofile\Desktop" -Type ExpandString
+ Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "My Pictures" -Value "$env:userprofile\Pictures" -Type ExpandString
+ Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "Personal" -Value "$env:userprofile\Documents" -Type ExpandString
+ Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "{F42EE2D3-909F-4907-8871-4C22FC0BF756}" -Value "$env:userprofile\Documents" -Type ExpandString
+ Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "{0DDD015D-B06C-45D5-8C4C-F59713854639}" -Value "$env:userprofile\Pictures" -Type ExpandString
+ Write-Host "Restarting explorer"
+ taskkill.exe /F /IM "explorer.exe"
+ Start-Process "explorer.exe"
+
+ Write-Host "Waiting for explorer to complete loading"
+ Write-Host "Please Note - The OneDrive folder at $OneDrivePath may still have items in it. You must manually delete it, but all the files should already be copied to the base user folder."
+ Write-Host "If there are Files missing afterwards, please Login to Onedrive.com and Download them manually" -ForegroundColor Yellow
+ Start-Sleep 5
+ } else {
+ Write-Host "Something went Wrong during the Unistallation of OneDrive" -ForegroundColor Red
+ }
+
+
+```
+## Undo Script
+
+```powershell
+
+ Write-Host "Install OneDrive"
+ Start-Process -FilePath winget -ArgumentList "install -e --accept-source-agreements --accept-package-agreements --silent Microsoft.OneDrive " -NoNewWindow -Wait
+
+
+```
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/RightClickMenu.md b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/RightClickMenu.md
new file mode 100644
index 00000000..34cbb569
--- /dev/null
+++ b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/RightClickMenu.md
@@ -0,0 +1,79 @@
+# Set Classic Right-Click Menu
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Great Windows 11 tweak to bring back good context menus when right clicking things in explorer.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Set Classic Right-Click Menu ",
+ "Description": "Great Windows 11 tweak to bring back good context menus when right clicking things in explorer.",
+ "category": "z__Advanced Tweaks - CAUTION",
+ "panel": "1",
+ "Order": "a027_",
+ "InvokeScript": [
+ "
+ New-Item -Path \"HKCU:\\Software\\Classes\\CLSID\\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\" -Name \"InprocServer32\" -force -value \"\"
+ Write-Host Restarting explorer.exe ...
+ $process = Get-Process -Name \"explorer\"
+ Stop-Process -InputObject $process
+ "
+ ],
+ "UndoScript": [
+ "
+ Remove-Item -Path \"HKCU:\\Software\\Classes\\CLSID\\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\" -Recurse -Confirm:$false -Force
+ # Restarting Explorer in the Undo Script might not be necessary, as the Registry change without restarting Explorer does work, but just to make sure.
+ Write-Host Restarting explorer.exe ...
+ $process = Get-Process -Name \"explorer\"
+ Stop-Process -InputObject $process
+ "
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/RightClickMenu"
+}
+```
+
+
+
+## Invoke Script
+
+```powershell
+
+ New-Item -Path "HKCU:\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}" -Name "InprocServer32" -force -value ""
+ Write-Host Restarting explorer.exe ...
+ $process = Get-Process -Name "explorer"
+ Stop-Process -InputObject $process
+
+
+```
+## Undo Script
+
+```powershell
+
+ Remove-Item -Path "HKCU:\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}" -Recurse -Confirm:$false -Force
+ # Restarting Explorer in the Undo Script might not be necessary, as the Registry change without restarting Explorer does work, but just to make sure.
+ Write-Host Restarting explorer.exe ...
+ $process = Get-Process -Name "explorer"
+ Stop-Process -InputObject $process
+
+
+```
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/UTC.md b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/UTC.md
new file mode 100644
index 00000000..3cdf8da3
--- /dev/null
+++ b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/UTC.md
@@ -0,0 +1,63 @@
+# Set Time to UTC (Dual Boot)
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+## Description
+
+Essential for computers that are dual booting. Fixes the time sync with Linux Systems.
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Set Time to UTC (Dual Boot)",
+ "Description": "Essential for computers that are dual booting. Fixes the time sync with Linux Systems.",
+ "category": "z__Advanced Tweaks - CAUTION",
+ "panel": "1",
+ "Order": "a027_",
+ "registry": [
+ {
+ "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\TimeZoneInformation",
+ "Name": "RealTimeIsUniversal",
+ "Type": "DWord",
+ "Value": "1",
+ "OriginalValue": "0"
+ }
+ ],
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/UTC"
+}
+```
+
+
+
+## Registry Changes
+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.
+
+
+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).
+
+### Registry Key: RealTimeIsUniversal
+
+**Type:** DWord
+
+**Original Value:** 0
+
+**New Value:** 1
+
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/Undoall.md b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/Undoall.md
new file mode 100644
index 00000000..fb027484
--- /dev/null
+++ b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/Undoall.md
@@ -0,0 +1,91 @@
+# Undo Selected Tweaks
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Undo Selected Tweaks",
+ "category": "z__Advanced Tweaks - CAUTION",
+ "panel": "1",
+ "Order": "a042_",
+ "Type": "Button",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/Undoall"
+}
+```
+
+
+
+## Function: Invoke-WPFundoall
+
+```powershell
+function Invoke-WPFundoall {
+ <#
+
+ .SYNOPSIS
+ Undoes every selected tweak
+
+ #>
+
+ if($sync.ProcessRunning) {
+ $msg = "[Invoke-WPFundoall] Install process is currently running."
+ [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
+ return
+ }
+
+ $tweaks = (Get-WinUtilCheckBoxes)["WPFtweaks"]
+
+ if ($tweaks.count -eq 0) {
+ $msg = "Please check the tweaks you wish to undo."
+ [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
+ return
+ }
+
+ Invoke-WPFRunspace -ArgumentList $tweaks -DebugPreference $DebugPreference -ScriptBlock {
+ param($tweaks, $DebugPreference)
+
+ $sync.ProcessRunning = $true
+ if ($tweaks.count -eq 1) {
+ $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" })
+ } else {
+ $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" })
+ }
+
+
+ for ($i = 0; $i -lt $tweaks.Count; $i++) {
+ Set-WinUtilProgressBar -Label "Undoing $($tweaks[$i])" -Percent ($i / $tweaks.Count * 100)
+ Invoke-WinUtiltweaks $tweaks[$i] -undo $true
+ $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -value ($i/$tweaks.Count) })
+ }
+
+ Set-WinUtilProgressBar -Label "Undo Tweaks Finished" -Percent 100
+ $sync.ProcessRunning = $false
+ $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" })
+ Write-Host "=================================="
+ Write-Host "--- Undo Tweaks are Finished ---"
+ Write-Host "=================================="
+
+ }
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/button.md b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/button.md
new file mode 100644
index 00000000..4a9d3105
--- /dev/null
+++ b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/button.md
@@ -0,0 +1,100 @@
+# Run Tweaks
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "Run Tweaks",
+ "category": "z__Advanced Tweaks - CAUTION",
+ "panel": "1",
+ "Order": "a041_",
+ "Type": "Button",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/button"
+}
+```
+
+
+
+## Function: Invoke-WPFtweaksbutton
+
+```powershell
+function Invoke-WPFtweaksbutton {
+ <#
+
+ .SYNOPSIS
+ Invokes the functions associated with each group of checkboxes
+
+ #>
+
+ if($sync.ProcessRunning) {
+ $msg = "[Invoke-WPFtweaksbutton] Install process is currently running."
+ [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
+ return
+ }
+
+ $Tweaks = (Get-WinUtilCheckBoxes)["WPFTweaks"]
+
+ Set-WinUtilDNS -DNSProvider $sync["WPFchangedns"].text
+
+ if ($tweaks.count -eq 0 -and $sync["WPFchangedns"].text -eq "Default") {
+ $msg = "Please check the tweaks you wish to perform."
+ [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
+ return
+ }
+
+ Write-Debug "Number of tweaks to process: $($Tweaks.Count)"
+
+ Invoke-WPFRunspace -ArgumentList $Tweaks -DebugPreference $DebugPreference -ScriptBlock {
+ param($Tweaks, $DebugPreference)
+ Write-Debug "Inside Number of tweaks to process: $($Tweaks.Count)"
+
+ $sync.ProcessRunning = $true
+
+ if ($Tweaks.count -eq 1) {
+ $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" })
+ } else {
+ $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" })
+ }
+ # Execute other selected tweaks
+
+ for ($i = 0; $i -lt $Tweaks.Count; $i++) {
+ Set-WinUtilProgressBar -Label "Applying $($tweaks[$i])" -Percent ($i / $Tweaks.Count * 100)
+ Invoke-WinUtilTweaks $tweaks[$i]$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -value ($i/$Tweaks.Count) })
+ }
+ Set-WinUtilProgressBar -Label "Tweaks finished" -Percent 100
+ $sync.ProcessRunning = $false
+ $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" })
+ Write-Host "================================="
+ Write-Host "-- Tweaks are Finished ---"
+ Write-Host "================================="
+
+ # $ButtonType = [System.Windows.MessageBoxButton]::OK
+ # $MessageboxTitle = "Tweaks are Finished "
+ # $Messageboxbody = ("Done")
+ # $MessageIcon = [System.Windows.MessageBoxImage]::Information
+ # [System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon)
+ }
+}
+
+```
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/changedns.md b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/changedns.md
new file mode 100644
index 00000000..cddb13ab
--- /dev/null
+++ b/docs/dev/tweaks/z--Advanced-Tweaks---CAUTION/changedns.md
@@ -0,0 +1,38 @@
+# DNS
+
+Last Updated: 2024-08-07
+
+
+!!! info
+ 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.**
+
+
+
+
+
+
+
+Preview Code
+
+```json
+{
+ "Content": "DNS",
+ "category": "z__Advanced Tweaks - CAUTION",
+ "panel": "1",
+ "Order": "a040_",
+ "Type": "Combobox",
+ "ComboItems": "Default DHCP Google Cloudflare Cloudflare_Malware Cloudflare_Malware_Adult Open_DNS Quad9 AdGuard_Ads_Trackers AdGuard_Ads_Trackers_Malware_Adult",
+ "link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/changedns"
+}
+```
+
+
+
+
+
+
+
+
+
+[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
+
diff --git a/docs/devdocs.md b/docs/devdocs.md
new file mode 100644
index 00000000..9a73d996
--- /dev/null
+++ b/docs/devdocs.md
@@ -0,0 +1,108 @@
+# Table of Contents
+
+
+## Tweaks
+
+### z--Advanced-Tweaks---CAUTION
+
+- [Adobe Debloat](dev/tweaks/z--Advanced-Tweaks---CAUTION/DebloatAdobe.md)
+- [Adobe Network Block](dev/tweaks/z--Advanced-Tweaks---CAUTION/BlockAdobeNet.md)
+- [Disable Background Apps](dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableBGapps.md)
+- [Disable Fullscreen Optimizations](dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableFSO.md)
+- [Disable Intel MM (vPro LMS)](dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableLMS1.md)
+- [Disable IPv6](dev/tweaks/z--Advanced-Tweaks---CAUTION/Disableipsix.md)
+- [Disable Microsoft Copilot](dev/tweaks/z--Advanced-Tweaks---CAUTION/RemoveCopilot.md)
+- [Disable Notification Tray/Calendar](dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableNotifications.md)
+- [DNS](dev/tweaks/z--Advanced-Tweaks---CAUTION/changedns.md)
+- [Remove ALL MS Store Apps - NOT RECOMMENDED](dev/tweaks/z--Advanced-Tweaks---CAUTION/DeBloat.md)
+- [Remove Home and Gallery from explorer](dev/tweaks/z--Advanced-Tweaks---CAUTION/RemoveHomeGallery.md)
+- [Remove Microsoft Edge](dev/tweaks/z--Advanced-Tweaks---CAUTION/RemoveEdge.md)
+- [Remove OneDrive](dev/tweaks/z--Advanced-Tweaks---CAUTION/RemoveOnedrive.md)
+- [Run OO Shutup 10](dev/tweaks/z--Advanced-Tweaks---CAUTION/OOSUbutton.md)
+- [Run Tweaks](dev/tweaks/z--Advanced-Tweaks---CAUTION/button.md)
+- [Set Classic Right-Click Menu ](dev/tweaks/z--Advanced-Tweaks---CAUTION/RightClickMenu.md)
+- [Set Display for Performance](dev/tweaks/z--Advanced-Tweaks---CAUTION/Display.md)
+- [Set Time to UTC (Dual Boot)](dev/tweaks/z--Advanced-Tweaks---CAUTION/UTC.md)
+- [Undo Selected Tweaks](dev/tweaks/z--Advanced-Tweaks---CAUTION/Undoall.md)
+### Essential-Tweaks
+
+- [Change Windows Terminal default: PowerShell 5 -> PowerShell 7](dev/tweaks/Essential-Tweaks/Powershell7.md)
+- [Create Restore Point](dev/tweaks/Essential-Tweaks/RestorePoint.md)
+- [Debloat Edge](dev/tweaks/Essential-Tweaks/EdgeDebloat.md)
+- [Delete Temporary Files](dev/tweaks/Essential-Tweaks/DeleteTempFiles.md)
+- [Disable Activity History](dev/tweaks/Essential-Tweaks/AH.md)
+- [Disable ConsumerFeatures](dev/tweaks/Essential-Tweaks/ConsumerFeatures.md)
+- [Disable GameDVR](dev/tweaks/Essential-Tweaks/DVR.md)
+- [Disable Hibernation](dev/tweaks/Essential-Tweaks/Hiber.md)
+- [Disable Homegroup](dev/tweaks/Essential-Tweaks/Home.md)
+- [Disable Location Tracking](dev/tweaks/Essential-Tweaks/Loc.md)
+- [Disable Powershell 7 Telemetry](dev/tweaks/Essential-Tweaks/Powershell7Tele.md)
+- [Disable Storage Sense](dev/tweaks/Essential-Tweaks/Storage.md)
+- [Disable Telemetry](dev/tweaks/Essential-Tweaks/Tele.md)
+- [Disable Teredo](dev/tweaks/Essential-Tweaks/Teredo.md)
+- [Disable Wifi-Sense](dev/tweaks/Essential-Tweaks/Wifi.md)
+- [Enable End Task With Right Click](dev/tweaks/Essential-Tweaks/EndTaskOnTaskbar.md)
+- [Run Disk Cleanup](dev/tweaks/Essential-Tweaks/DiskCleanup.md)
+- [Set Hibernation as default (good for laptops)](dev/tweaks/Essential-Tweaks/LaptopHibernation.md)
+- [Set Services to Manual](dev/tweaks/Essential-Tweaks/Services.md)
+### Shortcuts
+
+- [Create WinUtil Shortcut](dev/tweaks/Shortcuts/Shortcut.md)
+### Customize-Preferences
+
+- [Bing Search in Start Menu](dev/tweaks/Customize-Preferences/BingSearch.md)
+- [Center Taskbar Items](dev/tweaks/Customize-Preferences/TaskbarAlignment.md)
+- [Dark Theme for Windows](dev/tweaks/Customize-Preferences/DarkMode.md)
+- [Detailed BSoD](dev/tweaks/Customize-Preferences/DetailedBSoD.md)
+- [Mouse Acceleration](dev/tweaks/Customize-Preferences/MouseAcceleration.md)
+- [NumLock on Startup](dev/tweaks/Customize-Preferences/NumLock.md)
+- [Search Button in Taskbar](dev/tweaks/Customize-Preferences/TaskbarSearch.md)
+- [Show File Extensions](dev/tweaks/Customize-Preferences/ShowExt.md)
+- [Show Hidden Files](dev/tweaks/Customize-Preferences/HiddenFiles.md)
+- [Snap Assist Flyout](dev/tweaks/Customize-Preferences/SnapFlyout.md)
+- [Snap Assist Suggestion](dev/tweaks/Customize-Preferences/SnapSuggestion.md)
+- [Snap Window](dev/tweaks/Customize-Preferences/SnapWindow.md)
+- [Sticky Keys](dev/tweaks/Customize-Preferences/StickyKeys.md)
+- [Task View Button in Taskbar](dev/tweaks/Customize-Preferences/TaskView.md)
+- [Verbose Messages During Logon](dev/tweaks/Customize-Preferences/VerboseLogon.md)
+- [Widgets Button in Taskbar](dev/tweaks/Customize-Preferences/TaskbarWidgets.md)
+### Performance-Plans
+
+- [Add and Activate Ultimate Performance Profile](dev/tweaks/Performance-Plans/AddUltPerf.md)
+- [Remove Ultimate Performance Profile](dev/tweaks/Performance-Plans/RemoveUltPerf.md)
+
+## Features
+
+### Legacy-Windows-Panels
+
+- [Control Panel](dev/features/Legacy-Windows-Panels/control.md)
+- [Network Connections](dev/features/Legacy-Windows-Panels/network.md)
+- [Power Panel](dev/features/Legacy-Windows-Panels/power.md)
+- [Region](dev/features/Legacy-Windows-Panels/region.md)
+- [Sound Settings](dev/features/Legacy-Windows-Panels/sound.md)
+- [System Properties](dev/features/Legacy-Windows-Panels/system.md)
+- [User Accounts](dev/features/Legacy-Windows-Panels/user.md)
+### Fixes
+
+- [Remove Adobe Creative Cloud](dev/features/Fixes/RunAdobeCCCleanerTool.md)
+- [Reset Network](dev/features/Fixes/Network.md)
+- [Reset Windows Update](dev/features/Fixes/Update.md)
+- [Set Up Autologin](dev/features/Fixes/Autologin.md)
+- [System Corruption Scan](dev/features/Fixes/DISM.md)
+- [WinGet Reinstall](dev/features/Fixes/Winget.md)
+### Features
+
+- [All .Net Framework (2,3,4)](dev/features/Features/dotnet.md)
+- [Disable Legacy F8 Boot Recovery](dev/features/Features/DisableLegacyRecovery.md)
+- [Disable Search Box Web Suggestions in Registry(explorer restart)](dev/features/Features/DisableSearchSuggestions.md)
+- [Enable Daily Registry Backup Task 12.30am](dev/features/Features/RegBackup.md)
+- [Enable Legacy F8 Boot Recovery](dev/features/Features/EnableLegacyRecovery.md)
+- [Enable Search Box Web Suggestions in Registry(explorer restart)](dev/features/Features/EnableSearchSuggestions.md)
+- [HyperV Virtualization](dev/features/Features/hyperv.md)
+- [Install Features](dev/features/Features/Install.md)
+- [Legacy Media (WMP, DirectPlay)](dev/features/Features/legacymedia.md)
+- [NFS - Network File System](dev/features/Features/nfs.md)
+- [Windows Sandbox](dev/features/Features/Sandbox.md)
+- [Windows Subsystem for Linux](dev/features/Features/wsl.md)
+
+
diff --git a/docs/index.md b/docs/index.md
index 24e21ab1..02ddf349 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -2,7 +2,6 @@
[![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)
![GitHub Downloads (specific asset, all releases)](https://img.shields.io/github/downloads/ChrisTitusTech/winutil/winutil.ps1?label=Total%20Downloads&style=for-the-badge)
-
[![Discord Community Server](https://dcbadge.limes.pink/api/server/https://discord.gg/RUbZUZyByQ)](https://discord.gg/RUbZUZyByQ)
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.
@@ -17,4 +16,4 @@ Welcome to the official documentation for WinUtil, your go-to utility for optimi
!!! info
- 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.
\ No newline at end of file
+ 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.
diff --git a/docs/userguide.md b/docs/userguide.md
index 9800ed59..7dac8c9a 100644
--- a/docs/userguide.md
+++ b/docs/userguide.md
@@ -198,26 +198,7 @@ The utility provides three distinct settings for managing Windows updates: Defau
* Selecting a scratch directory will copy the contents of the ISO file to the directory you specify instead of an automatically generated folder in the `%TEMP%` directory.
* You can select an edition of Windows to debloat (**SKU**) using the convenient drop-down menu.
- By default, MicroWin will debloat the Pro edition, but you can choose any edition you want.
-
-
-##### Customization options
-
-* **Keep Provisioned Packages**: leaving this option unticked (default) will try to remove every operating system package.
-
- Some packages may remain after processing. This can happen if the packages in question are permanent or have been superseded by newer versions.
-
-* **Keep Appx Packages**: leaving this option unticked (default) will try to remove every Microsoft Store app from the Windows image.
-
- This option will exclude some applications that are essential in the event that you want or need to add a Store app later on.
-
-* **Keep Defender**: leaving this option unticked will try to remove every part of Windows Defender, including the Windows Security app.
-
- Leaving this option unticked is **NOT recommended** unless you plan to use a third-party antivirus solution on your MicroWin installation. In that regard, don't install AVs with bad reputations or rogueware.
-
-* **Keep Edge**: leaving this option unticked will try to remove every part of the Microsoft Edge browser using the best methods available.
-
- Leaving this option unticked is not recommended because it might break some applications that might depend on the `Edge WebView2` runtime. However, if that happens, you can easily [reinstall it](https://developer.microsoft.com/en-us/microsoft-edge/webview2)
+By default, MicroWin will debloat the Pro edition, but you can choose any edition you want.
##### Driver integration options
@@ -225,7 +206,15 @@ The utility provides three distinct settings for managing Windows updates: Defau
* **Inject drivers** will add the drivers in the folder that you specify to the target Windows image.
* **Import drivers from the current system** will add every third-party driver that is present in your active installation.
- This makes the target image have the same hardware compatibility as the active installation. However, this means that you will only be able to install the target Windows image and take full advantage of it on computers with **the same hardware**. To avoid this, you'll need to customize the `install.wim` file of the target ISO in the 'sources` folder.
+This makes the target image have the same hardware compatibility as the active installation. However, this means that you will only be able to install the target Windows image and take full advantage of it on computers with **the same hardware**. To avoid this, you'll need to customize the `install.wim` file of the target ISO in the 'sources` folder.
+
+##### Custom user settings
+
+With MicroWin, you can also configure your user before proceeding if you don't want to use the default `User` account. To do this, simply type the account name (20 characters maximum), and a password. Then, let MicroWin do the rest.
+
+!!! info
+
+ Please make sure that you remember your password. MicroWin will configure auto-login settings, so you won't have to enter your password. However, if you are required to enter your password, it's best that you don't forget it.
##### Ventoy options
diff --git a/edgeremoval.bat b/edgeremoval.bat
deleted file mode 100644
index ff8556c4..00000000
--- a/edgeremoval.bat
+++ /dev/null
@@ -1,236 +0,0 @@
-@(set "0=%~f0"^)#) & powershell -nop -c iex([io.file]::ReadAllText($env:0)) & exit /b
-#:: made by AveYo source: https://raw.githubusercontent.com/AveYo/fox/main/Edge_Removal.bat
-sp 'HKCU:\Volatile Environment' 'Edge_Removal' @'
-
-$also_remove_webview = 0
-
-$host.ui.RawUI.WindowTitle = 'Edge Removal - AveYo, 2023.09.09'
-$remove_win32 = @("Microsoft Edge","Microsoft Edge Update"); $remove_appx = @("MicrosoftEdge"); $skip = @() # @("DevTools")
-if ($also_remove_webview -eq 1) {$remove_win32 += "Microsoft EdgeWebView"; $remove_appx += "WebExperience","Win32WebViewHost"}
-
-## 1 bonus! enter into powershell console: firefox / edge / webview to install a browser / reinstall edge or webview after removal
-function global:firefox { $url = 'https://download.mozilla.org/?product=firefox-stub'
- $setup = "$((new-object -ComObject Shell.Application).NameSpace('shell:Downloads').Self.Path)\Firefox Installer.exe"
- write-host $url; Invoke-WebRequest $url -OutFile $setup; start $setup
-}
-function global:edge { $url = 'https://go.microsoft.com/fwlink/?linkid=2108834&Channel=Stable&language=en'
- $setup = "$((new-object -ComObject Shell.Application).NameSpace('shell:Downloads').Self.Path)\MicrosoftEdgeSetup.exe"
- write-host $url; Invoke-WebRequest $url -OutFile $setup; prepare_edge; start $setup
-}
-function global:webview { $url = 'https://go.microsoft.com/fwlink/p/?LinkId=2124703'
- $setup = "$((new-object -ComObject Shell.Application).NameSpace('shell:Downloads').Self.Path)\MicrosoftEdgeWebview2Setup.exe"
- write-host $url; Invoke-WebRequest $url -OutFile $setup; prepare_webview; start $setup
-}
-## helper for set-itemproperty remove-itemproperty new-item remove-item with auto test-path
-function global:sp_test_path { if (test-path $args[0]) {Microsoft.PowerShell.Management\Set-ItemProperty @args} else {
- Microsoft.PowerShell.Management\New-Item $args[0] -force -ea 0 >''; Microsoft.PowerShell.Management\Set-ItemProperty @args} }
-function global:rp_test_path { if (test-path $args[0]) {Microsoft.PowerShell.Management\Remove-ItemProperty @args} }
-function global:ni_test_path { if (-not (test-path $args[0])) {Microsoft.PowerShell.Management\New-Item @args} }
-function global:ri_test_path { if (test-path $args[0]) {Microsoft.PowerShell.Management\Remove-Item @args} }
-foreach ($f in 'sp','rp','ni','ri') {set-alias -Name $f -Value "${f}_test_path" -Scope Local -Option AllScope -force -ea 0}
-## helper for edge reinstall - remove bundled OpenWebSearch redirector and edgeupdate policies
-function global:prepare_edge {
- foreach ($f in 'ni','ri','sp','rp') {set-alias -Name $f -Value "${f}_test_path" -Scope Local -Option AllScope -force -ea 0}
- $MS=($env:ProgramFiles,${env:ProgramFiles(x86)})[[Environment]::Is64BitOperatingSystem]+'\Microsoft\Edge\Application\msedge.exe'
- ri "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\msedge.exe" -recurse -force -ea 0
- ri "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ie_to_edge_stub.exe" -recurse -force -ea 0
- ri 'Registry::HKEY_Users\S-1-5-21*\Software\Classes\microsoft-edge' -recurse -force -ea 0
- ri 'Registry::HKEY_Users\S-1-5-21*\Software\Classes\MSEdgeHTM' -recurse -force -ea 0
- ni "HKLM:\SOFTWARE\Classes\microsoft-edge\shell\open\command" -force -ea 0 >''
- sp "HKLM:\SOFTWARE\Classes\microsoft-edge\shell\open\command" '(Default)' "`"$MS`" --single-argument %%1" -force -ea 0
- ni "HKLM:\SOFTWARE\Classes\MSEdgeHTM\shell\open\command" -force -ea 0 >''
- sp "HKLM:\SOFTWARE\Classes\MSEdgeHTM\shell\open\command" '(Default)' "`"$MS`" --single-argument %%1" -force -ea 0
- foreach ($p in 'HKLM:\SOFTWARE\Policies','HKLM:\SOFTWARE','HKLM:\SOFTWARE\WOW6432Node') {
- rp "$p\Microsoft\EdgeUpdate" 'InstallDefault' -force -ea 0
- rp "$p\Microsoft\EdgeUpdate" 'Install{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}' -force -ea 0
- rp "$p\Microsoft\EdgeUpdate" 'Install{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}' -force -ea 0
- }
- $edgeupdate='Microsoft\EdgeUpdate\Clients\{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}'
- $webvupdate='Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}'
- $on_actions='on-os-upgrade','on-logon','on-logon-autolaunch','on-logon-startup-boost'
- foreach ($p in 'HKLM:\SOFTWARE','HKLM:\SOFTWARE\Wow6432Node') { foreach ($launch in $on_actions) {
- ri "$p\$edgeupdate\Commands\$launch" -force -ea 0; ri "$p\$webvupdate\Commands\$launch" -force -ea 0
- }}
-}
-## helper for webview reinstall - restore webexperience (widgets) if available
-function global:prepare_webview {
- $cfg = @{Register=$true; ForceApplicationShutdown=$true; ForceUpdateFromAnyVersion=$true; DisableDevelopmentMode=$true}
- dir "$env:ProgramFiles\WindowsApps\MicrosoftWindows.Client.WebExperience*\AppxManifest.xml" -rec -ea 0 | Add-AppxPackage @cfg
- dir "$env:SystemRoot\SystemApps\Microsoft.Win32WebViewHost*\AppxManifest.xml" -rec -ea 0 | Add-AppxPackage @cfg
- kill -name explorer -ea 0; if ((get-process -name 'explorer' -ea 0) -eq $null) {start explorer}
-}
-
-## 2 enable admin privileges
-$D1=[uri].module.gettype('System.Diagnostics.Process')."GetM`ethods"(42) |where {$_.Name -eq 'SetPrivilege'} #`:no-ev-warn
-'SeSecurityPrivilege','SeTakeOwnershipPrivilege','SeBackupPrivilege','SeRestorePrivilege'|foreach {$D1.Invoke($null, @("$_",2))}
-
-## 3 shut edge & webview clone stuff down and gather install paths
-$shut = 'explorer','Widgets','widgetservice','msedgewebview2','MicrosoftEdge*','chredge','msedge','edge'
-$shut+= 'msteams','msfamily','WebViewHost','Clipchamp'
-cd $env:systemdrive; taskkill /im explorer.exe /f 2>&1 >''; foreach ($p in $shut) {kill -name $p -force -ea 0}
-prepare_edge
-## clear win32 uninstall block
-foreach ($hk in 'HKCU:','HKLM:') { foreach ($wow in '','\Wow6432Node') { foreach ($i in $remove_win32) {
- rp "$hk\SOFTWARE${wow}\Microsoft\Windows\CurrentVersion\Uninstall\$i" 'NoRemove' -force -ea 0
- ni "$hk\SOFTWARE${wow}\Microsoft\EdgeUpdateDev" -force >''
- sp "$hk\SOFTWARE${wow}\Microsoft\EdgeUpdateDev" 'AllowUninstall' 1 -type Dword -force
-}}}
-## find all Edge setup.exe and gather BHO paths for OpenWebSearch / MSEdgeRedirect usage
-$edges = @(); $bho = @(); 'LocalApplicationData','ProgramFilesX86','ProgramFiles' |foreach {
- $folder = [Environment]::GetFolderPath($_); $bho += dir "$folder\Microsoft\Edge*\ie_to_edge_stub.exe" -rec -ea 0
- if ($also_remove_webview -eq 1) {$edges += dir "$folder\Microsoft\Edge*\setup.exe" -rec -ea 0 |where {$_ -like '*EdgeWebView*'}}
- $edges += dir "$folder\Microsoft\Edge*\setup.exe" -rec -ea 0 |where {$_ -notlike '*EdgeWebView*'}
-}
-## use dedicated C:\Scripts path to save OpenWebSearch (due to Sigma rules FUD)
-$DIR = "$env:SystemDrive\Scripts"; mkdir $DIR -ea 0 >''
-## export OpenWebSearch innovative redirector - used by MSEdgeRedirect as well
-foreach ($b in $bho) { if (test-path $b) { try {copy $b "$DIR\ie_to_edge_stub.exe" -force -ea 0} catch{} } }
-
-## 4 remove found *Edge* appx packages with unblock tricks
-$provisioned = get-appxprovisionedpackage -online; $appxpackage = get-appxpackage -allusers; $eol = @()
-$store = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore'
-$users = @('S-1-5-18'); if (test-path $store) {$users += $((dir $store -ea 0 |where {$_ -like '*S-1-5-21*'}).PSChildName)}
-foreach ($choice in $remove_appx) { if ('' -eq $choice.Trim()) {continue}
- foreach ($appx in $($provisioned |where {$_.PackageName -like "*$choice*"})) {
- $next = !1; foreach ($no in $skip) {if ($appx.PackageName -like "*$no*") {$next = !0}} ; if ($next) {continue}
- $PackageName = $appx.PackageName; $PackageFamilyName = ($appxpackage |where {$_.Name -eq $appx.DisplayName}).PackageFamilyName
- ni "$store\Deprovisioned\$PackageFamilyName" -force >''; $PackageFamilyName
- foreach ($sid in $users) {ni "$store\EndOfLife\$sid\$PackageName" -force >''} ; $eol += $PackageName
- dism /online /set-nonremovableapppolicy /packagefamily:$PackageFamilyName /nonremovable:0 >''
- remove-appxprovisionedpackage -packagename $PackageName -online -allusers >''
- }
- foreach ($appx in $($appxpackage |where {$_.PackageFullName -like "*$choice*"})) {
- $next = !1; foreach ($no in $skip) {if ($appx.PackageFullName -like "*$no*") {$next = !0}} ; if ($next) {continue}
- $PackageFullName = $appx.PackageFullName;
- ni "$store\Deprovisioned\$appx.PackageFamilyName" -force >''; $PackageFullName
- foreach ($sid in $users) {ni "$store\EndOfLife\$sid\$PackageFullName" -force >''} ; $eol += $PackageFullName
- dism /online /set-nonremovableapppolicy /packagefamily:$PackageFamilyName /nonremovable:0 >''
- remove-appxpackage -package $PackageFullName -allusers >''
- }
-}
-
-## 5 run found *Edge* setup.exe with uninstall args and wait in-between
-foreach ($setup in $edges) { if (test-path $setup) {
- if ($setup -like '*EdgeWebView*') {$target = "--msedgewebview"} else {$target = "--msedge"}
- $removal = "--uninstall $target --system-level --verbose-logging --force-uninstall"
- try {write-host $setup $removal; start -wait $setup -args $removal} catch {}
- do {sleep 3} while ((get-process -name 'setup','MicrosoftEdge*' -ea 0).Path -like '*\Microsoft\Edge*')
-}}
-
-## 6 extra cleanup
-foreach ($PF in $env:ProgramFiles,${env:ProgramFiles(x86)}) { if (test-path "$PF\Microsoft\EdgeUpdate\MicrosoftEdgeUpdate.exe") {
- write-host "$PF\Microsoft\EdgeUpdate\MicrosoftEdgeUpdate.exe /uninstall"
- start -wait "$PF\Microsoft\EdgeUpdate\MicrosoftEdgeUpdate.exe" -args '/uninstall'
- do {sleep 3} while ((get-process -name 'setup','MicrosoftEdge*' -ea 0).Path -like '*\Microsoft\Edge*')
- if ($also_remove_webview -eq 1) { foreach ($hk in 'HKCU:','HKLM:') { foreach ($wow in '','\Wow6432Node') {
- ri "$hk\SOFTWARE${wow}\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge Update" -rec -force -ea 0 }}
- ri "$PF\Microsoft\EdgeUpdate" -rec -force -ea 0; Unregister-ScheduledTask -TaskName MicrosoftEdgeUpdate* -Confirm:$false -ea 0
- }
-}}
-$appdata = $([Environment]::GetFolderPath('ApplicationData'))
-ri "$appdata\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Tombstones\Microsoft Edge.lnk" -force
-ri "$appdata\Microsoft\Internet Explorer\Quick Launch\Microsoft Edge.lnk" -force
-
-## undo eol unblock trick to prevent latest cumulative update (LCU) failing
-foreach ($sid in $users) { foreach ($PackageName in $eol) {ri "$store\EndOfLife\$sid\$PackageName" -force >''} }
-
-## set (almost) useless policies to prevent unsolicited reinstalls
-foreach ($p in 'HKLM:\SOFTWARE\Policies','HKLM:\SOFTWARE','HKLM:\SOFTWARE\WOW6432Node') {
- ni "$p\Microsoft\EdgeUpdate" -force >''
- sp "$p\Microsoft\EdgeUpdate" 'InstallDefault' 0 -type Dword -force
- sp "$p\Microsoft\EdgeUpdate" 'Install{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}' 0 -type Dword -force
- sp "$p\Microsoft\EdgeUpdate" 'Install{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}' 1 -type Dword -force
- sp "$p\Microsoft\EdgeUpdate" 'DoNotUpdateToEdgeWithChromium' 1 -type Dword -force
-}
-$edgeupdate='Microsoft\EdgeUpdate\Clients\{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}'
-$webvupdate='Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}'
-$on_actions='on-os-upgrade','on-logon','on-logon-autolaunch','on-logon-startup-boost'
-foreach ($p in 'HKLM:\SOFTWARE','HKLM:\SOFTWARE\Wow6432Node') { foreach ($launch in $on_actions) {
- ni "$p\$edgeupdate\Commands\$launch" -force >''; sp "$p\$edgeupdate\Commands\$launch" 'CommandLine' 'systray.exe' -force
- ni "$p\$webvupdate\Commands\$launch" -force >''; sp "$p\$webvupdate\Commands\$launch" 'CommandLine' 'systray.exe' -force
-}}
-
-## 7 add bundled OpenWebSearch script to redirect microsoft-edge: anti-competitive links to the default browser
-$MSEP = ($env:ProgramFiles,${env:ProgramFiles(x86)})[[Environment]::Is64BitOperatingSystem] + '\Microsoft\Edge\Application'
-$IFEO = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options'
-$MIN = ('--headless','--width 1 --height 1')[([environment]::OSVersion.Version.Build) -gt 25179]
-$CMD = "$env:systemroot\system32\conhost.exe $MIN" # AveYo: minimize prompt - see Terminal issue #13914
-ni "HKLM:\SOFTWARE\Classes\microsoft-edge\shell\open\command" -force >''
-sp "HKLM:\SOFTWARE\Classes\microsoft-edge" '(Default)' 'URL:microsoft-edge' -force
-sp "HKLM:\SOFTWARE\Classes\microsoft-edge" 'URL Protocol' '' -force
-sp "HKLM:\SOFTWARE\Classes\microsoft-edge" 'NoOpenWith' '' -force
-sp "HKLM:\SOFTWARE\Classes\microsoft-edge\shell\open\command" '(Default)' "`"$DIR\ie_to_edge_stub.exe`" %1" -force
-ni "HKLM:\SOFTWARE\Classes\MSEdgeHTM\shell\open\command" -force >''
-sp "HKLM:\SOFTWARE\Classes\MSEdgeHTM" 'NoOpenWith' '' -force
-sp "HKLM:\SOFTWARE\Classes\MSEdgeHTM\shell\open\command" '(Default)' "`"$DIR\ie_to_edge_stub.exe`" %1" -force
-ni "$IFEO\ie_to_edge_stub.exe\0" -force >''
-sp "$IFEO\ie_to_edge_stub.exe" 'UseFilter' 1 -type Dword -force
-sp "$IFEO\ie_to_edge_stub.exe\0" 'FilterFullPath' "$DIR\ie_to_edge_stub.exe" -force
-sp "$IFEO\ie_to_edge_stub.exe\0" 'Debugger' "$CMD $DIR\OpenWebSearch.cmd" -force
-ni "$IFEO\msedge.exe\0" -force >''
-sp "$IFEO\msedge.exe" 'UseFilter' 1 -type Dword -force
-sp "$IFEO\msedge.exe\0" 'FilterFullPath' "$MSEP\msedge.exe" -force
-sp "$IFEO\msedge.exe\0" 'Debugger' "$CMD $DIR\OpenWebSearch.cmd" -force
-
-$OpenWebSearch = @$
-@title OpenWebSearch Redux & echo off & set ?= open start menu web search, widgets links or help in your chosen browser - by AveYo
-for /f %%E in ('"prompt $E$S& for %%e in (1) do rem"') do echo;%%E[2t 2>nul & rem AveYo: minimize prompt
-call :reg_var "HKCU\SOFTWARE\Microsoft\Windows\Shell\Associations\UrlAssociations\https\UserChoice" ProgID ProgID
-if /i "%ProgID%" equ "MSEdgeHTM" echo;Default browser is set to Edge! Change it or remove OpenWebSearch script. & pause & exit /b
-call :reg_var "HKCR\%ProgID%\shell\open\command" "" Browser
-set Choice=& for %%. in (%Browser%) do if not defined Choice set "Choice=%%~."
-call :reg_var "HKCR\MSEdgeMHT\shell\open\command" "" FallBack
-set "Edge=" & for %%. in (%FallBack%) do if not defined Edge set "Edge=%%~."
-set "URI=" & set "URL=" & set "NOOP=" & set "PassTrough=%Edge:msedge=edge%"
-set "CLI=%CMDCMDLINE:"=``% "
-if defined CLI set "CLI=%CLI:*ie_to_edge_stub.exe`` =%"
-if defined CLI set "CLI=%CLI:*ie_to_edge_stub.exe =%"
-if defined CLI set "CLI=%CLI:*msedge.exe`` =%"
-if defined CLI set "CLI=%CLI:*msedge.exe =%"
-set "FIX=%CLI:~-1%"
-if defined CLI if "%FIX%"==" " set "CLI=%CLI:~0,-1%"
-if defined CLI set "RED=%CLI:microsoft-edge=%"
-if defined CLI set "URL=%CLI:http=%"
-if defined CLI set "ARG=%CLI:``="%"
-if "%CLI%" equ "%RED%" (set NOOP=1) else if "%CLI%" equ "%URL%" (set NOOP=1)
-if defined NOOP if exist "%PassTrough%" start "" "%PassTrough%" %ARG%
-if defined NOOP exit /b
-set "URL=%CLI:*microsoft-edge=%"
-set "URL=http%URL:*http=%"
-set "FIX=%URL:~-2%"
-if defined URL if "%FIX%"=="``" set "URL=%URL:~0,-2%"
-call :dec_url
-start "" "%Choice%" "%URL%"
-exit
-
-:reg_var [USAGE] call :reg_var "HKCU\Volatile Environment" value-or-"" variable [extra options]
-set {var}=& set {reg}=reg query "%~1" /v %2 /z /se "," /f /e& if %2=="" set {reg}=reg query "%~1" /ve /z /se "," /f /e
-for /f "skip=2 tokens=* delims=" %%V in ('%{reg}% %4 %5 %6 %7 %8 %9 2^>nul') do if not defined {var} set "{var}=%%V"
-if not defined {var} (set {reg}=& set "%~3="& exit /b) else if %2=="" set "{var}=%{var}:*) =%"& rem AveYo: v3
-if not defined {var} (set {reg}=& set "%~3="& exit /b) else set {reg}=& set "%~3=%{var}:*) =%"& set {var}=& exit /b
-
-:dec_url brute url percent decoding by AveYo
-set ".=%URL:!=}%"&setlocal enabledelayedexpansion& rem brute url percent decoding
-set ".=!.:%%={!" &set ".=!.:{3A=:!" &set ".=!.:{2F=/!" &set ".=!.:{3F=?!" &set ".=!.:{23=#!" &set ".=!.:{5B=[!" &set ".=!.:{5D=]!"
-set ".=!.:{40=@!"&set ".=!.:{21=}!" &set ".=!.:{24=$!" &set ".=!.:{26=&!" &set ".=!.:{27='!" &set ".=!.:{28=(!" &set ".=!.:{29=)!"
-set ".=!.:{2A=*!"&set ".=!.:{2B=+!" &set ".=!.:{2C=,!" &set ".=!.:{3B=;!" &set ".=!.:{3D==!" &set ".=!.:{25=%%!"&set ".=!.:{20= !"
-set ".=!.:{=%%!" &rem set ",=!.:%%=!" & if "!,!" neq "!.!" endlocal& set "URL=%.:}=!%" & call :dec_url
-endlocal& set "URL=%.:}=!%" & exit /b
-rem done
-
-$@
-[io.file]::WriteAllText("$DIR\OpenWebSearch.cmd", $OpenWebSearch)
-
-## 8 done
-$done = gp 'Registry::HKEY_Users\S-1-5-21*\Volatile*' Edge_Removal -ea 0; if ($done) {rp $done.PSPath Edge_Removal -force -ea 0}
-if ((get-process -name 'explorer' -ea 0) -eq $null) {start explorer}
-
-## 9 bonus enter into powershell console: firefox / edge / webview to install a browser / reinstall edge or webview after removal
-${.} = [char]27; $firefox = "${.}[38;2;255;165;0m firefox"; $edge = "${.}[94m edge${.}[97m"; $webview = "${.}[94mwebview ${.}[97m"
-write-host "`n${.}[40;32m EDGE REMOVED! ${.}[97m -GET-ANOTHER-BROWSER? ENTER:$firefox ${.}[97m -REINSTALL? ENTER:$edge / $webview"
-
-## 0 ask to run script as admin
-'@.replace("$@","'@").replace("@$","@'") -force -ea 0; $code='gp ''Registry::HKEY_Users\S-1-5-21*\Volatile*'' Edge_Removal -ea 0'
-start powershell -args "-nop -noe -c & {iex(($code)[0].Edge_Removal)}" -verb runas
-$_Press_Enter
-#::
diff --git a/edgeremoval.ps1 b/edgeremoval.ps1
deleted file mode 100644
index 5f3a7a3c..00000000
--- a/edgeremoval.ps1
+++ /dev/null
@@ -1,253 +0,0 @@
-# Script Metadata
-# Created by AveYo, source: https://raw.githubusercontent.com/AveYo/fox/main/Edge_Removal.bat
-# Powershell Conversion and Refactor done by Chris Titus Tech
-
-# Initial Configuration
-$host.ui.RawUI.WindowTitle = 'Edge Removal - Chris Titus Tech 2023.05.10'
-$remove_win32 = @("Microsoft Edge", "Microsoft Edge Update")
-$remove_appx = @("MicrosoftEdge")
-$skip = @() # Optional: @("DevTools")
-
-$also_remove_webview = 0
-if ($also_remove_webview -eq 1) {
- $remove_win32 += "Microsoft EdgeWebView"
- $remove_appx += "WebExperience", "Win32WebViewHost"
-}
-
-# Administrative Privileges Check
-$privileges = @(
- 'SeSecurityPrivilege',
- 'SeTakeOwnershipPrivilege',
- 'SeBackupPrivilege',
- 'SeRestorePrivilege'
-)
-
-foreach ($privilege in $privileges) {
- [System.Diagnostics.Process]::SetPrivilege($privilege, 2)
-}
-
-# Edge Removal Procedures
-$processesToShutdown = @(
- 'explorer', 'Widgets', 'widgetservice', 'msedgewebview2', 'MicrosoftEdge*', 'chredge',
- 'msedge', 'edge', 'msteams', 'msfamily', 'WebViewHost', 'Clipchamp'
-)
-
-Stop-Process -Name "explorer" -Force -ErrorAction SilentlyContinue
-$processesToShutdown | ForEach-Object {
- Stop-Process -Name $_ -Force -ErrorAction SilentlyContinue
-}
-
-$MS = ($env:ProgramFiles, ${env:ProgramFiles(x86)})[[Environment]::Is64BitOperatingSystem] + '\Microsoft\Edge\Application\msedge.exe'
-
-Remove-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\msedge.exe" -Recurse -ErrorAction SilentlyContinue
-Remove-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ie_to_edge_stub.exe" -Recurse -ErrorAction SilentlyContinue
-Remove-Item -Path 'Registry::HKEY_Users\S-1-5-21*\Software\Classes\microsoft-edge' -Recurse -ErrorAction SilentlyContinue
-Remove-Item -Path 'Registry::HKEY_Users\S-1-5-21*\Software\Classes\MSEdgeHTM' -Recurse -ErrorAction SilentlyContinue
-
-New-Item -Path "HKLM:\SOFTWARE\Classes\microsoft-edge\shell\open\command" -Force -ErrorAction SilentlyContinue
-Set-ItemProperty -Path "HKLM:\SOFTWARE\Classes\microsoft-edge\shell\open\command" -Name '(Default)' -Value "`"$MS`" --single-argument %%1" -Force -ErrorAction SilentlyContinue
-
-New-Item -Path "HKLM:\SOFTWARE\Classes\MSEdgeHTM\shell\open\command" -Force -ErrorAction SilentlyContinue
-Set-ItemProperty -Path "HKLM:\SOFTWARE\Classes\MSEdgeHTM\shell\open\command" -Name '(Default)' -Value "`"$MS`" --single-argument %%1" -Force -ErrorAction SilentlyContinue
-
-$registryPaths = @('HKLM:\SOFTWARE\Policies', 'HKLM:\SOFTWARE', 'HKLM:\SOFTWARE\WOW6432Node')
-$edgeProperties = @('InstallDefault', 'Install{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}', 'Install{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}')
-foreach ($path in $registryPaths) {
- foreach ($prop in $edgeProperties) {
- Remove-ItemProperty -Path "$path\Microsoft\EdgeUpdate" -Name $prop -Force -ErrorAction SilentlyContinue
- }
-}
-
-$edgeupdate = 'Microsoft\EdgeUpdate\Clients\{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}'
-$webvupdate = 'Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}'
-$on_actions = @('on-os-upgrade', 'on-logon', 'on-logon-autolaunch', 'on-logon-startup-boost')
-$registryBases = @('HKLM:\SOFTWARE', 'HKLM:\SOFTWARE\Wow6432Node')
-foreach ($base in $registryBases) {
- foreach ($launch in $on_actions) {
- Remove-Item -Path "$base\$edgeupdate\Commands\$launch" -Force -ErrorAction SilentlyContinue
- Remove-Item -Path "$base\$webvupdate\Commands\$launch" -Force -ErrorAction SilentlyContinue
- }
-}
-
-$registryPaths = @('HKCU:', 'HKLM:')
-$nodes = @('', '\Wow6432Node')
-foreach ($regPath in $registryPaths) {
- foreach ($node in $nodes) {
- foreach ($i in $remove_win32) {
- Remove-ItemProperty -Path "$regPath\SOFTWARE${node}\Microsoft\Windows\CurrentVersion\Uninstall\$i" -Name 'NoRemove' -Force -ErrorAction SilentlyContinue
- New-Item -Path "$regPath\SOFTWARE${node}\Microsoft\EdgeUpdateDev" -Force | Out-Null
- Set-ItemProperty -Path "$regPath\SOFTWARE${node}\Microsoft\EdgeUpdateDev" -Name 'AllowUninstall' -Value 1 -Type Dword -Force
- }
- }
-}
-
-$foldersToSearch = @('LocalApplicationData', 'ProgramFilesX86', 'ProgramFiles') | ForEach-Object {
- [Environment]::GetFolderPath($_)
-}
-
-$edges = @()
-$bhoFiles = @()
-
-foreach ($folder in $foldersToSearch) {
- $bhoFiles += Get-ChildItem -Path "$folder\Microsoft\Edge*\ie_to_edge_stub.exe" -Recurse -ErrorAction SilentlyContinue
-
- $edges += Get-ChildItem -Path "$folder\Microsoft\Edge*\setup.exe" -Recurse -ErrorAction SilentlyContinue |
- Where-Object { $_.FullName -notlike '*EdgeWebView*' }
-}
-
-$destinationDir = "$env:SystemDrive\Scripts"
-New-Item -Path $destinationDir -ItemType Directory -ErrorAction SilentlyContinue | Out-Null
-
-foreach ($bhoFile in $bhoFiles) {
- if (Test-Path $bhoFile) {
- try {
- Copy-Item -Path $bhoFile -Destination "$destinationDir\ie_to_edge_stub.exe" -Force
- } catch { }
- }
-}
-
-## Work on Appx Removals
-$provisioned = Get-AppxProvisionedPackage -Online
-$appxpackage = Get-AppxPackage -AllUsers
-$eol = @()
-
-$store = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Store'
-$storeP = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Store\InstalledApplications'
-foreach ($app in $appxpackage) {
- $name = $app.Name
- if ($app.Name -eq "Microsoft.Edge") {
- $eol += $name
- } elseif ($app.Name -eq "Microsoft.EdgeBeta" -or $app.Name -eq "Microsoft.EdgeDev" -or $app.Name -eq "Microsoft.EdgeCanary" -or $app.Name -eq "Microsoft.MicrosoftEdge") {
- $eol += $name
- }
-}
-
-$eolApps = $provisioned | Where-Object { $eol -contains $_.DisplayName }
-
-foreach ($edge in $eolApps) {
- $edgeName = $edge.DisplayName
- if (-not ($skip -contains $edgeName)) {
- try {
- Remove-AppxProvisionedPackage -Online -PackageName $edgeName -ErrorAction SilentlyContinue
- } catch { }
- }
-}
-
-foreach ($edge in $appxpackage) {
- $edgeName = $edge.Name
- if ($eol -contains $edgeName) {
- if (-not ($skip -contains $edgeName)) {
- try {
- Remove-AppxPackage -Package $edgeName -AllUsers -ErrorAction SilentlyContinue
- } catch { }
- }
- }
-}
-
-## Redirect shortcuts
-$shortcut_path = "$env:Public\Desktop"
-$shortcut_file = 'Microsoft Edge.lnk'
-$full_path = Join-Path -Path $shortcut_path -ChildPath $shortcut_file
-
-if (Test-Path $full_path) {
- Remove-Item -Path $full_path -Force -ErrorAction SilentlyContinue
-}
-
-$shortcut_path = "$env:ProgramData\Microsoft\Windows\Start Menu\Programs"
-$shortcut_file = 'Microsoft Edge.lnk'
-$full_path = Join-Path -Path $shortcut_path -ChildPath $shortcut_file
-
-if (Test-Path $full_path) {
- Remove-Item -Path $full_path -Force -ErrorAction SilentlyContinue
-}
-
-$edgePolicy = 'HKLM:\SOFTWARE\Policies\Microsoft\Edge'
-if (-not (Test-Path $edgePolicy)) {
- New-Item -Path $edgePolicy -Force | Out-Null
-}
-
-$edgePrefs = @{
- 'Dword' = @{
- 'BrowserReplacementEnabled' = 1
- 'HideFirstRunExperience' = 1
- 'HideImportEdgeFavoritesPrompt' = 1
- 'HideSyncSetupExperience' = 1
- 'FavoritesBarVisibility' = 1
- }
- 'String' = @{
- 'AutoplayAllowed' = 'AllowOnce'
- }
-}
-
-foreach ($entryType in $edgePrefs.Keys) {
- foreach ($prefName in $edgePrefs[$entryType].Keys) {
- Set-ItemProperty -Path $edgePolicy -Name $prefName -Value $edgePrefs[$entryType][$prefName] -Type $entryType -Force
- }
-}
-
-# Output Results
-Write-Host "Edge Removal Complete" -ForegroundColor Green
-
-# Define constants and initial configuration
-$ScriptVersion = "2023.05.10"
-$EdgeProcessesToShutdown = @('explorer', 'Widgets', 'widgetservice', 'msedgewebview2', 'MicrosoftEdge*', 'chredge', 'msedge', 'edge', 'msteams', 'msfamily', 'WebViewHost', 'Clipchamp')
-$EdgeRemovalOptions = @{
- RemoveWin32 = @("Microsoft Edge", "Microsoft Edge Update")
- RemoveAppx = @("MicrosoftEdge")
- Skip = @() # Optional: @("DevTools")
- AlsoRemoveWebView = $false
-}
-
-# Define main function to remove Microsoft Edge components
-function Remove-MicrosoftEdge {
- [CmdletBinding()]
- param()
-
- # Function to shutdown processes related to Microsoft Edge
- function Stop-EdgeProcesses {
- $EdgeProcessesToShutdown | ForEach-Object {
- Stop-Process -Name $_ -Force -ErrorAction SilentlyContinue
- }
- }
-
- # Function to remove registry entries related to Microsoft Edge
- function Remove-EdgeRegistryEntries {
- # Clean up certain registry entries
- Remove-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\msedge.exe" -Recurse -ErrorAction SilentlyContinue
- Remove-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ie_to_edge_stub.exe" -Recurse -ErrorAction SilentlyContinue
- Remove-Item -Path 'Registry::HKEY_Users\S-1-5-21*\Software\Classes\microsoft-edge' -Recurse -ErrorAction SilentlyContinue
- Remove-Item -Path 'Registry::HKEY_Users\S-1-5-21*\Software\Classes\MSEdgeHTM' -Recurse -ErrorAction SilentlyContinue
-
- # Create new registry entries
- $EdgeExecutablePath = ($env:ProgramFiles, ${env:ProgramFiles(x86)})[[Environment]::Is64BitOperatingSystem] + '\Microsoft\Edge\Application\msedge.exe'
- New-Item -Path "HKLM:\SOFTWARE\Classes\microsoft-edge\shell\open\command" -Force -ErrorAction SilentlyContinue
- Set-ItemProperty -Path "HKLM:\SOFTWARE\Classes\microsoft-edge\shell\open\command" -Name '(Default)' -Value "`"$EdgeExecutablePath`" --single-argument %%1" -Force -ErrorAction SilentlyContinue
-
- New-Item -Path "HKLM:\SOFTWARE\Classes\MSEdgeHTM\shell\open\command" -Force -ErrorAction SilentlyContinue
- Set-ItemProperty -Path "HKLM:\SOFTWARE\Classes\MSEdgeHTM\shell\open\command" -Name '(Default)' -Value "`"$EdgeExecutablePath`" --single-argument %%1" -Force -ErrorAction SilentlyContinue
- }
-
- # Function to remove Microsoft Edge AppX packages
- function Remove-EdgeAppxPackages {
- $EdgeRemovalOptions.RemoveAppx | ForEach-Object {
- # Remove provisioned packages
- Get-AppxProvisionedPackage -Online | Where-Object { $_.PackageName -like "*$_*" -and $EdgeRemovalOptions.Skip -notcontains $_.PackageName } | Remove-AppxProvisionedPackage -Online -AllUsers -ErrorAction SilentlyContinue
-
- # Remove installed packages
- Get-AppxPackage -AllUsers | Where-Object { $_.PackageFullName -like "*$_*" -and $EdgeRemovalOptions.Skip -notcontains $_.PackageFullName } | Remove-AppxPackage -AllUsers -ErrorAction SilentlyContinue
- }
- }
-
- # Function to remove Microsoft Edge processes, registry entries, and AppX packages
- try {
- Stop-EdgeProcesses
- Remove-EdgeRegistryEntries
- Remove-EdgeAppxPackages
- Write-Output "Microsoft Edge components have been successfully removed."
- } catch {
- Write-Error "Failed to remove Microsoft Edge components: $_"
- }
-}
-
-# Execute the main function
-Remove-MicrosoftEdge
\ No newline at end of file
diff --git a/functions/private/ConvertTo-Icon.ps1 b/functions/private/ConvertTo-Icon.ps1
index 44f4d6be..a4017755 100644
--- a/functions/private/ConvertTo-Icon.ps1
+++ b/functions/private/ConvertTo-Icon.ps1
@@ -51,15 +51,15 @@ function ConvertTo-Icon {
# Handle the thrown exception here...
}
- This Example make use of '-overrideIconFile' Optional Parameter, the default for this paramter is $true.
+ This Example make use of '-overrideIconFile' Optional Parameter, the default for this parameter is $true.
By doing '-overrideIconFile $false', the 'ConvertTo-Icon' function will raise an exception that needs to be catched throw a 'catch' Code Block,
otherwise it'll crash the running PowerShell instance/process.
#>
param(
- [Parameter(Mandatory=$true, position=0)]
+ [Parameter(Mandatory, position=0)]
[string]$bitmapPath,
- [Parameter(Mandatory=$true, position=1)]
+ [Parameter(Mandatory, position=1)]
[string]$iconPath,
[Parameter(position=2)]
[bool]$overrideIconFile = $true
@@ -86,8 +86,7 @@ function ConvertTo-Icon {
$icon.Save($file)
$file.Close()
$icon.Dispose()
- }
- else {
+ } else {
throw [System.IO.FileNotFoundException] "[ConvertTo-Icon] The provided bitmap File Path is not found at '$bitmapPath'."
}
}
diff --git a/functions/private/Copy-Files.ps1 b/functions/private/Copy-Files.ps1
index 447df38c..33342916 100644
--- a/functions/private/Copy-Files.ps1
+++ b/functions/private/Copy-Files.ps1
@@ -10,39 +10,34 @@ function Copy-Files {
#>
param (
- [string] $Path,
- [string] $Destination,
- [switch] $Recurse = $false,
- [switch] $Force = $false
+ [string]$Path,
+ [string]$Destination,
+ [switch]$Recurse = $false,
+ [switch]$Force = $false
)
try {
- $files = Get-ChildItem -Path $path -Recurse:$recurse
- Write-Host "Copy $($files.Count)(s) from $path to $destination"
+ $files = Get-ChildItem -Path $path -Recurse:$recurse
+ Write-Host "Copy $($files.Count)(s) from $path to $destination"
- foreach($file in $files)
- {
+ foreach ($file in $files) {
$status = "Copy files {0} on {1}: {2}" -f $counter, $files.Count, $file.Name
Write-Progress -Activity "Copy Windows files" -Status $status -PercentComplete ($counter++/$files.count*100)
$restpath = $file.FullName -Replace $path, ''
- if($file.PSIsContainer -eq $true)
- {
+ if ($file.PSIsContainer -eq $true) {
Write-Debug "Creating $($destination + $restpath)"
New-Item ($destination+$restpath) -Force:$force -Type Directory -ErrorAction SilentlyContinue
- }
- else
- {
+ } else {
Write-Debug "Copy from $($file.FullName) to $($destination+$restpath)"
Copy-Item $file.FullName ($destination+$restpath) -ErrorAction SilentlyContinue -Force:$force
Set-ItemProperty -Path ($destination+$restpath) -Name IsReadOnly -Value $false
}
}
Write-Progress -Activity "Copy Windows files" -Status "Ready" -Completed
- }
- Catch{
+ } catch {
Write-Warning "Unable to Copy all the files due to unhandled exception"
Write-Warning $psitem.Exception.StackTrace
}
-}
\ No newline at end of file
+}
diff --git a/functions/private/Get-LocalizedYesNo.ps1 b/functions/private/Get-LocalizedYesNo.ps1
index 227bf8dd..0c8e9390 100644
--- a/functions/private/Get-LocalizedYesNo.ps1
+++ b/functions/private/Get-LocalizedYesNo.ps1
@@ -31,4 +31,4 @@ function Get-LocalizedYesNo {
# Return the array of characters
return $charactersArray
- }
\ No newline at end of file
+ }
diff --git a/functions/private/Get-Oscdimg.ps1 b/functions/private/Get-Oscdimg.ps1
index 38ea3b2c..4680a39b 100644
--- a/functions/private/Get-Oscdimg.ps1
+++ b/functions/private/Get-Oscdimg.ps1
@@ -1,15 +1,17 @@
function Get-Oscdimg {
<#
-
.DESCRIPTION
This function will download oscdimg file from github Release folders and put it into env:temp folder
.EXAMPLE
Get-Oscdimg
#>
- param( [Parameter(Mandatory=$true)]
+
+ param(
+ [Parameter(Mandatory, position=0)]
[string]$oscdimgPath
)
+
$oscdimgPath = "$env:TEMP\oscdimg.exe"
$downloadUrl = "https://github.com/ChrisTitusTech/winutil/raw/main/releases/oscdimg.exe"
Invoke-RestMethod -Uri $downloadUrl -OutFile $oscdimgPath
diff --git a/functions/private/Get-TabXaml.ps1 b/functions/private/Get-TabXaml.ps1
index 1f393932..3dc674fd 100644
--- a/functions/private/Get-TabXaml.ps1
+++ b/functions/private/Get-TabXaml.ps1
@@ -1,19 +1,23 @@
function Get-TabXaml {
<#
- .SYNOPSIS
- Generates XAML for a tab in the WinUtil GUI
- This function is used to generate the XAML for the applications tab in the WinUtil GUI
- It takes the tabname and the number of columns to display the applications in as input and returns the XAML for the tab as output
- .PARAMETER tabname
- The name of the tab to generate XAML for
- Note: the 'tabname' parameter must equal one of the json files found in $sync.configs variable
- Otherwise, it'll throw an exception
- .PARAMETER columncount
- The number of columns to display the applications in, default is 0
- .OUTPUTS
- The XAML for the tab
- .EXAMPLE
- Get-TabXaml "applications" 3
+ .SYNOPSIS
+ Generates XAML for a tab in the WinUtil GUI
+ This function is used to generate the XAML for the applications tab in the WinUtil GUI
+ It takes the tabname and the number of columns to display the applications in as input and returns the XAML for the tab as output
+
+ .PARAMETER tabname
+ The name of the tab to generate XAML for
+ Note: the 'tabname' parameter must equal one of the json files found in $sync.configs variable
+ Otherwise, it'll throw an exception
+
+ .PARAMETER columncount
+ The number of columns to display the applications in, default is 0
+
+ .OUTPUTS
+ The XAML for the tab
+
+ .EXAMPLE
+ Get-TabXaml "applications" 3
#>
@@ -115,7 +119,7 @@ function Get-TabXaml {
}
# Dot-source the Get-WPFObjectName function
- . .\functions\private\Get-WPFObjectName
+ . "$($sync.PSScriptRoot)\functions\private\Get-WPFObjectName.ps1"
$categorycontent = $($category -replace '^.__', '')
$categoryname = Get-WPFObjectName -type "Label" -name $categorycontent
@@ -187,7 +191,7 @@ function Get-TabXaml {
# else it's a checkbox
default {
- $checkedStatus = If ($appInfo.Checked -eq $null) {""} Else {" IsChecked=""$($appInfo.Checked)"""}
+ $checkedStatus = If ($appInfo.Checked -eq $null) {""} else {" IsChecked=""$($appInfo.Checked)"""}
if ($appInfo.Link -eq $null) {
$blockXml += $precal_indent +
"
- param( [Parameter(Mandatory=$true)]
- $type,
- $name
-)
+ param(
+ [Parameter(Mandatory, position=0)]
+ [string]$type,
-$Output = $("WPF"+$type+$name) -replace '[^a-zA-Z0-9]', ''
+ [Parameter(position=1)]
+ [string]$name
+ )
-return $Output
-
-}
\ No newline at end of file
+ $Output = $("WPF"+$type+$name) -replace '[^a-zA-Z0-9]', ''
+ return $Output
+}
diff --git a/functions/private/Get-WinUtilInstallerProcess.ps1 b/functions/private/Get-WinUtilInstallerProcess.ps1
index eae26476..c1103697 100644
--- a/functions/private/Get-WinUtilInstallerProcess.ps1
+++ b/functions/private/Get-WinUtilInstallerProcess.ps1
@@ -14,11 +14,11 @@ function Get-WinUtilInstallerProcess {
param($Process)
- if ($Null -eq $Process){
+ if ($Null -eq $Process) {
return $false
}
- if (Get-Process -Id $Process.Id -ErrorAction SilentlyContinue){
+ if (Get-Process -Id $Process.Id -ErrorAction SilentlyContinue) {
return $true
}
return $false
-}
\ No newline at end of file
+}
diff --git a/functions/private/Get-WinUtilToggleStatus.ps1 b/functions/private/Get-WinUtilToggleStatus.ps1
index 56d8d14d..ea349779 100644
--- a/functions/private/Get-WinUtilToggleStatus.ps1
+++ b/functions/private/Get-WinUtilToggleStatus.ps1
@@ -13,125 +13,112 @@ Function Get-WinUtilToggleStatus {
#>
Param($ToggleSwitch)
- if($ToggleSwitch -eq "WPFToggleDarkMode"){
+ if($ToggleSwitch -eq "WPFToggleDarkMode") {
$app = (Get-ItemProperty -path 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize').AppsUseLightTheme
$system = (Get-ItemProperty -path 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize').SystemUsesLightTheme
- if($app -eq 0 -and $system -eq 0){
+ if($app -eq 0 -and $system -eq 0) {
return $true
- }
- else{
+ } else {
return $false
}
}
- if($ToggleSwitch -eq "WPFToggleBingSearch"){
+ if($ToggleSwitch -eq "WPFToggleBingSearch") {
$bingsearch = (Get-ItemProperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Search').BingSearchEnabled
- if($bingsearch -eq 0){
+ if($bingsearch -eq 0) {
return $false
- }
- else{
+ } else {
return $true
}
}
- if($ToggleSwitch -eq "WPFToggleNumLock"){
+ if($ToggleSwitch -eq "WPFToggleNumLock") {
$numlockvalue = (Get-ItemProperty -path 'HKCU:\Control Panel\Keyboard').InitialKeyboardIndicators
- if($numlockvalue -eq 2){
+ if($numlockvalue -eq 2) {
return $true
- }
- else{
+ } else {
return $false
}
}
- if($ToggleSwitch -eq "WPFToggleVerboseLogon"){
+ if($ToggleSwitch -eq "WPFToggleVerboseLogon") {
$VerboseStatusvalue = (Get-ItemProperty -path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System').VerboseStatus
- if($VerboseStatusvalue -eq 1){
+ if($VerboseStatusvalue -eq 1) {
return $true
- }
- else{
+ } else {
return $false
}
}
- if($ToggleSwitch -eq "WPFToggleShowExt"){
+ if($ToggleSwitch -eq "WPFToggleShowExt") {
$hideextvalue = (Get-ItemProperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced').HideFileExt
- if($hideextvalue -eq 0){
+ if($hideextvalue -eq 0) {
return $true
- }
- else{
+ } else {
return $false
}
}
- if($ToggleSwitch -eq "WPFToggleSnapWindow"){
+ if($ToggleSwitch -eq "WPFToggleSnapWindow") {
$hidesnap = (Get-ItemProperty -path 'HKCU:\Control Panel\Desktop').WindowArrangementActive
- if($hidesnap -eq 0){
+ if($hidesnap -eq 0) {
return $false
- }
- else{
+ } else {
return $true
}
}
- if($ToggleSwitch -eq "WPFToggleSnapFlyout"){
+ if($ToggleSwitch -eq "WPFToggleSnapFlyout") {
$hidesnap = (Get-ItemProperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced').EnableSnapAssistFlyout
- if($hidesnap -eq 0){
+ if($hidesnap -eq 0) {
return $false
- }
- else{
+ } else {
return $true
}
}
- if($ToggleSwitch -eq "WPFToggleSnapSuggestion"){
+ if($ToggleSwitch -eq "WPFToggleSnapSuggestion") {
$hidesnap = (Get-ItemProperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced').SnapAssist
- if($hidesnap -eq 0){
+ if($hidesnap -eq 0) {
return $false
- }
- else{
+ } else {
return $true
}
}
- if($ToggleSwitch -eq "WPFToggleMouseAcceleration"){
+ if($ToggleSwitch -eq "WPFToggleMouseAcceleration") {
$MouseSpeed = (Get-ItemProperty -path 'HKCU:\Control Panel\Mouse').MouseSpeed
$MouseThreshold1 = (Get-ItemProperty -path 'HKCU:\Control Panel\Mouse').MouseThreshold1
$MouseThreshold2 = (Get-ItemProperty -path 'HKCU:\Control Panel\Mouse').MouseThreshold2
- if($MouseSpeed -eq 1 -and $MouseThreshold1 -eq 6 -and $MouseThreshold2 -eq 10){
+ if($MouseSpeed -eq 1 -and $MouseThreshold1 -eq 6 -and $MouseThreshold2 -eq 10) {
return $true
- }
- else{
+ } else {
return $false
}
}
- if($ToggleSwitch -eq "WPFToggleTaskbarSearch"){
+ if($ToggleSwitch -eq "WPFToggleTaskbarSearch") {
$SearchButton = (Get-ItemProperty -path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Search").SearchboxTaskbarMode
- if($SearchButton -eq 0){
+ if($SearchButton -eq 0) {
return $false
- }
- else{
+ } else {
return $true
}
}
if ($ToggleSwitch -eq "WPFToggleStickyKeys") {
$StickyKeys = (Get-ItemProperty -path 'HKCU:\Control Panel\Accessibility\StickyKeys').Flags
- if($StickyKeys -eq 58){
+ if($StickyKeys -eq 58) {
return $false
- }
- else{
+ } else {
return $true
}
}
if ($ToggleSwitch -eq "WPFToggleTaskView") {
$TaskView = (Get-ItemProperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced').ShowTaskViewButton
- if($TaskView -eq 0){
+ if($TaskView -eq 0) {
return $false
- }
- else{
+ } else {
return $true
}
}
if ($ToggleSwitch -eq "WPFToggleHiddenFiles") {
$HiddenFiles = (Get-ItemProperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced').Hidden
- if($HiddenFiles -eq 0){
+ if($HiddenFiles -eq 0) {
return $false
- }
- else{
+ } else {
return $true
}
}
@@ -140,8 +127,7 @@ Function Get-WinUtilToggleStatus {
$TaskbarWidgets = (Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced").TaskBarDa
if($TaskbarWidgets -eq 0) {
return $false
- }
- else{
+ } else {
return $true
}
}
@@ -149,17 +135,16 @@ Function Get-WinUtilToggleStatus {
$TaskbarAlignment = (Get-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced").TaskbarAl
if($TaskbarAlignment -eq 0) {
return $false
- }
- else{
+ } else {
return $true
}
}
if ($ToggleSwitch -eq "WPFToggleDetailedBSoD") {
- $DetailedBSoD = (Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl').DisplayParameters
- if($DetailedBSoD -eq 0) {
+ $DetailedBSoD1 = (Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl').DisplayParameters
+ $DetailedBSoD2 = (Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl').DisableEmoticon
+ if (($DetailedBSoD1 -eq 0) -or ($DetailedBSoD2 -eq 0) -or !$DetailedBSoD1 -or !$DetailedBSoD2) {
return $false
- }
- else{
+ } else {
return $true
}
}
diff --git a/functions/private/Get-WinUtilVariables.ps1 b/functions/private/Get-WinUtilVariables.ps1
index 56f36eb9..17d25393 100644
--- a/functions/private/Get-WinUtilVariables.ps1
+++ b/functions/private/Get-WinUtilVariables.ps1
@@ -14,13 +14,12 @@ function Get-WinUtilVariables {
$keys = ($sync.keys).where{ $_ -like "WPF*" }
if ($Type) {
$output = $keys | ForEach-Object {
- Try {
+ try {
$objType = $sync["$psitem"].GetType().Name
if ($Type -contains $objType) {
Write-Output $psitem
}
- }
- Catch {
+ } catch {
<#I am here so errors don't get outputted for a couple variables that don't have the .GetType() attribute#>
}
}
diff --git a/functions/private/Get-WinUtilWingetLatest.ps1 b/functions/private/Get-WinUtilWingetLatest.ps1
index 7a860e64..6555386e 100644
--- a/functions/private/Get-WinUtilWingetLatest.ps1
+++ b/functions/private/Get-WinUtilWingetLatest.ps1
@@ -8,7 +8,7 @@ function Get-WinUtilWingetLatest {
# Invoke-WebRequest is notoriously slow when the byte progress is displayed. The following lines disable the progress bar and reset them at the end of the function
$PreviousProgressPreference = $ProgressPreference
$ProgressPreference = "silentlyContinue"
- Try{
+ try {
# Grabs the latest release of Winget from the Github API for the install process.
$response = Invoke-RestMethod -Uri "https://api.github.com/repos/microsoft/Winget-cli/releases/latest" -Method Get -ErrorAction Stop
$latestVersion = $response.tag_name #Stores version number of latest release.
@@ -19,8 +19,7 @@ function Get-WinUtilWingetLatest {
Invoke-WebRequest -Uri $licenseWingetUrl -OutFile $ENV:TEMP\License1.xml
# The only pain is that the msixbundle for winget-cli is 246MB. In some situations this can take a bit, with slower connections.
Invoke-WebRequest -Uri $assetUrl -OutFile $ENV:TEMP\Microsoft.DesktopAppInstaller.msixbundle
- }
- Catch{
+ } catch {
throw [WingetFailedInstall]::new('Failed to get latest Winget release and license')
}
$ProgressPreference = $PreviousProgressPreference
diff --git a/functions/private/Get-WinUtilWingetPrerequisites.ps1 b/functions/private/Get-WinUtilWingetPrerequisites.ps1
index 4949d191..6c886702 100644
--- a/functions/private/Get-WinUtilWingetPrerequisites.ps1
+++ b/functions/private/Get-WinUtilWingetPrerequisites.ps1
@@ -17,13 +17,12 @@ function Get-WinUtilWingetPrerequisites {
$fileUIXaml = "https://github.com/microsoft/microsoft-ui-xaml/releases/download/v${versionUIXamlPatch}/Microsoft.UI.Xaml.${versionUIXamlMinor}.x64.appx"
# Write-Host "$fileUIXaml"
- Try{
+ try {
Write-Host "Downloading Microsoft.VCLibs Dependency..."
Invoke-WebRequest -Uri $fileVCLibs -OutFile $ENV:TEMP\Microsoft.VCLibs.x64.Desktop.appx
Write-Host "Downloading Microsoft.UI.Xaml Dependency...`n"
Invoke-WebRequest -Uri $fileUIXaml -OutFile $ENV:TEMP\Microsoft.UI.Xaml.x64.appx
- }
- Catch{
+ } catch {
throw [WingetFailedInstall]::new('Failed to install prerequsites')
}
}
diff --git a/functions/private/Install-WinUtilChoco.ps1 b/functions/private/Install-WinUtilChoco.ps1
index 24716bb1..37655b9c 100644
--- a/functions/private/Install-WinUtilChoco.ps1
+++ b/functions/private/Install-WinUtilChoco.ps1
@@ -18,8 +18,7 @@ function Install-WinUtilChoco {
Set-ExecutionPolicy Bypass -Scope Process -Force; Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) -ErrorAction Stop
powershell choco feature enable -n allowGlobalConfirmation
- }
- Catch {
+ } catch {
Write-Host "===========================================" -Foregroundcolor Red
Write-Host "-- Chocolatey failed to install ---" -Foregroundcolor Red
Write-Host "===========================================" -Foregroundcolor Red
diff --git a/functions/private/Install-WinUtilProgramChoco.ps1 b/functions/private/Install-WinUtilProgramChoco.ps1
index 029398f5..b66c88b9 100644
--- a/functions/private/Install-WinUtilProgramChoco.ps1
+++ b/functions/private/Install-WinUtilProgramChoco.ps1
@@ -33,26 +33,26 @@ function Install-WinUtilProgramChoco {
Write-Host "==========================================="
Write-Host "-- Configuring Chocolatey pacakages ---"
Write-Host "==========================================="
- Foreach ($Program in $ProgramsToInstall){
+ Foreach ($Program in $ProgramsToInstall) {
Write-Progress -Activity "$manage Applications" -Status "$manage $($Program.choco) $($x + 1) of $count" -PercentComplete $($x/$count*100)
- if($manage -eq "Installing"){
+ if($manage -eq "Installing") {
write-host "Starting install of $($Program.choco) with Chocolatey."
- try{
+ try {
$tryUpgrade = $false
- $installOutputFilePath = "$env:TEMP\Install-WinUtilProgramChoco.install-command.output.txt"
+ $installOutputFilePath = "$env:TEMP\Install-WinUtilProgramChoco.install-command.output.txt"
New-Item -ItemType File -Path $installOutputFilePath
- $chocoInstallStatus = $(Start-Process -FilePath "choco" -ArgumentList "install $($Program.choco) -y" -Wait -PassThru -RedirectStandardOutput $installOutputFilePath).ExitCode
+ $chocoInstallStatus = $(Start-Process -FilePath "choco" -ArgumentList "install $($Program.choco) -y" -Wait -PassThru -RedirectStandardOutput $installOutputFilePath).ExitCode
if(($chocoInstallStatus -eq 0) -AND (Test-Path -Path $installOutputFilePath)) {
$keywordsFound = Get-Content -Path $installOutputFilePath | Where-Object {$_ -match "reinstall" -OR $_ -match "already installed"}
- if ($keywordsFound) {
- $tryUpgrade = $true
- }
+ if ($keywordsFound) {
+ $tryUpgrade = $true
+ }
}
- # TODO: Implement the Upgrade part using 'choco upgrade' command, this will make choco consistent with WinGet, as WinGet tries to Upgrade when you use the install command.
- if ($tryUpgrade) {
- throw "Automatic Upgrade for Choco isn't implemented yet, a feature to make it consistent with WinGet, the install command using choco simply failed because $($Program.choco) is already installed."
- }
- if(($chocoInstallStatus -eq 0) -AND ($tryUpgrade -eq $false)){
+ # TODO: Implement the Upgrade part using 'choco upgrade' command, this will make choco consistent with WinGet, as WinGet tries to Upgrade when you use the install command.
+ if ($tryUpgrade) {
+ throw "Automatic Upgrade for Choco isn't implemented yet, a feature to make it consistent with WinGet, the install command using choco simply failed because $($Program.choco) is already installed."
+ }
+ if(($chocoInstallStatus -eq 0) -AND ($tryUpgrade -eq $false)) {
Write-Host "$($Program.choco) installed successfully using Chocolatey."
$X++
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value ($x/$count) })
@@ -69,13 +69,13 @@ function Install-WinUtilProgramChoco {
}
}
- if($manage -eq "Uninstalling"){
+ if($manage -eq "Uninstalling") {
write-host "Starting uninstall of $($Program.choco) with Chocolatey."
- try{
- $uninstallOutputFilePath = "$env:TEMP\Install-WinUtilProgramChoco.uninstall-command.output.txt"
+ try {
+ $uninstallOutputFilePath = "$env:TEMP\Install-WinUtilProgramChoco.uninstall-command.output.txt"
New-Item -ItemType File -Path $uninstallOutputFilePath
- $chocoUninstallStatus = $(Start-Process -FilePath "choco" -ArgumentList "uninstall $($Program.choco) -y" -Wait -PassThru).ExitCode
- if($chocoUninstallStatus -eq 0){
+ $chocoUninstallStatus = $(Start-Process -FilePath "choco" -ArgumentList "uninstall $($Program.choco) -y" -Wait -PassThru).ExitCode
+ if($chocoUninstallStatus -eq 0) {
Write-Host "$($Program.choco) uninstalled successfully using Chocolatey."
$x++
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value ($x/$count) })
@@ -90,13 +90,13 @@ function Install-WinUtilProgramChoco {
$x++
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Error" -value ($x/$count) })
}
- }
+ }
}
Write-Progress -Activity "$manage Applications" -Status "Finished" -Completed
# Cleanup leftovers files
- if(Test-Path -Path $installOutputFilePath){ Remove-Item -Path $installOutputFilePath }
- if(Test-Path -Path $uninstallOutputFilePath){ Remove-Item -Path $uninstallOutputFilePath }
+ if(Test-Path -Path $installOutputFilePath) { Remove-Item -Path $installOutputFilePath }
+ if(Test-Path -Path $uninstallOutputFilePath) { Remove-Item -Path $uninstallOutputFilePath }
return;
}
diff --git a/functions/private/Install-WinUtilWinget.ps1 b/functions/private/Install-WinUtilWinget.ps1
index 881a138f..dd561118 100644
--- a/functions/private/Install-WinUtilWinget.ps1
+++ b/functions/private/Install-WinUtilWinget.ps1
@@ -9,7 +9,7 @@ function Install-WinUtilWinget {
#>
$isWingetInstalled = Test-WinUtilPackageManager -winget
- Try {
+ try {
if ($isWingetInstalled -eq "installed") {
Write-Host "`nWinget is already installed.`r" -ForegroundColor Green
return
@@ -21,7 +21,7 @@ function Install-WinUtilWinget {
# Gets the computer's information
- if ($null -eq $sync.ComputerInfo){
+ if ($null -eq $sync.ComputerInfo) {
$ComputerInfo = Get-ComputerInfo -ErrorAction Stop
} else {
$ComputerInfo = $sync.ComputerInfo
@@ -41,8 +41,8 @@ function Install-WinUtilWinget {
Get-WinUtilWingetLatest
Write-Host "Installing Winget w/ Prerequsites`r"
Add-AppxProvisionedPackage -Online -PackagePath $ENV:TEMP\Microsoft.DesktopAppInstaller.msixbundle -DependencyPackagePath $ENV:TEMP\Microsoft.VCLibs.x64.Desktop.appx, $ENV:TEMP\Microsoft.UI.Xaml.x64.appx -LicensePath $ENV:TEMP\License1.xml
- Write-Host "Manually adding Winget Sources, from Winget CDN."
- Add-AppxPackage -Path https://cdn.winget.microsoft.com/cache/source.msix #Seems some installs of Winget don't add the repo source, this should makes sure that it's installed every time.
+ Write-Host "Manually adding Winget Sources, from Winget CDN."
+ Add-AppxPackage -Path https://cdn.winget.microsoft.com/cache/source.msix #Seems some installs of Winget don't add the repo source, this should makes sure that it's installed every time.
Write-Host "Winget Installed" -ForegroundColor Green
Write-Host "Enabling NuGet and Module..."
Install-PackageProvider -Name NuGet -Force
@@ -50,17 +50,17 @@ function Install-WinUtilWinget {
# Winget only needs a refresh of the environment variables to be used.
Write-Output "Refreshing Environment Variables...`n"
$ENV:PATH = [System.Environment]::GetEnvironmentVariable("Path", "Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path", "User")
- } Catch {
+ } catch {
Write-Host "Failure detected while installing via GitHub method. Continuing with Chocolatey method as fallback." -ForegroundColor Red
# In case install fails via GitHub method.
- Try {
+ try {
# Install Choco if not already present
Install-WinUtilChoco
Start-Process -Verb runas -FilePath powershell.exe -ArgumentList "choco install winget-cli"
Write-Host "Winget Installed" -ForegroundColor Green
Write-Output "Refreshing Environment Variables...`n"
$ENV:PATH = [System.Environment]::GetEnvironmentVariable("Path", "Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path", "User")
- } Catch {
+ } catch {
throw [WingetFailedInstall]::new('Failed to install!')
}
}
diff --git a/functions/private/Invoke-MicroWin-Helper.ps1 b/functions/private/Invoke-MicroWin-Helper.ps1
deleted file mode 100644
index ace66cf7..00000000
--- a/functions/private/Invoke-MicroWin-Helper.ps1
+++ /dev/null
@@ -1,668 +0,0 @@
-function Test-CompatibleImage() {
-<#
-
- .SYNOPSIS
- Checks the version of a Windows image and determines whether or not it is compatible with a specific feature depending on a desired version
-
- .PARAMETER Name
- imgVersion - The version of the Windows image
- desiredVersion - The version to compare the image version with
-
-#>
-
- param
- (
- [Parameter(Mandatory = $true, Position=0)] [string] $imgVersion,
- [Parameter(Mandatory = $true, Position=1)] [Version] $desiredVersion
- )
-
- try {
- $version = [Version]$imgVersion
- return $version -ge $desiredVersion
- } catch {
- return $False
- }
-}
-
-function Remove-Features([switch] $dumpFeatures = $false, [switch] $keepDefender = $false) {
-<#
-
- .SYNOPSIS
- Removes certain features from ISO image
-
- .PARAMETER Name
- dumpFeatures - Dumps all features found in the ISO into a file called allfeaturesdump.txt. This file can be examined and used to decide what to remove.
- keepDefender - Should Defender be removed from the ISO?
-
- .EXAMPLE
- Remove-Features -keepDefender:$false
-
-#>
- try
- {
- $featlist = (Get-WindowsOptionalFeature -Path $scratchDir).FeatureName
- if ($dumpFeatures)
- {
- $featlist > allfeaturesdump.txt
- }
-
- $featlist = $featlist | Where-Object {
- $_ -NotLike "*Printing*" -AND
- $_ -NotLike "*TelnetClient*" -AND
- $_ -NotLike "*PowerShell*" -AND
- $_ -NotLike "*NetFx*" -AND
- $_ -NotLike "*Media*" -AND
- $_ -NotLike "*NFS*"
- }
-
- if ($keepDefender) { $featlist = $featlist | Where-Object { $_ -NotLike "*Defender*" }}
-
- foreach($feature in $featlist)
- {
- $status = "Removing feature $feature"
- Write-Progress -Activity "Removing features" -Status $status -PercentComplete ($counter++/$featlist.Count*100)
- Write-Debug "Removing feature $feature"
- Disable-WindowsOptionalFeature -Path "$scratchDir" -FeatureName $feature -Remove -ErrorAction SilentlyContinue -NoRestart
- }
- Write-Progress -Activity "Removing features" -Status "Ready" -Completed
- Write-Host "You can re-enable the disabled features at any time, using either Windows Update or the SxS folder in \Sources."
- }
- catch
- {
- Write-Host "Unable to get information about the features. MicroWin processing will continue, but features will not be processed"
- }
-}
-
-function Remove-Packages
-{
- try
- {
- $pkglist = (Get-WindowsPackage -Path "$scratchDir").PackageName
-
- $pkglist = $pkglist | Where-Object {
- $_ -NotLike "*ApplicationModel*" -AND
- $_ -NotLike "*indows-Client-LanguagePack*" -AND
- $_ -NotLike "*LanguageFeatures-Basic*" -AND
- $_ -NotLike "*Package_for_ServicingStack*" -AND
- $_ -NotLike "*.NET*" -AND
- $_ -NotLike "*Store*" -AND
- $_ -NotLike "*VCLibs*" -AND
- $_ -NotLike "*AAD.BrokerPlugin",
- $_ -NotLike "*LockApp*" -AND
- $_ -NotLike "*Notepad*" -AND
- $_ -NotLike "*immersivecontrolpanel*" -AND
- $_ -NotLike "*ContentDeliveryManager*" -AND
- $_ -NotLike "*PinningConfirMationDialog*" -AND
- $_ -NotLike "*SecHealthUI*" -AND
- $_ -NotLike "*SecureAssessmentBrowser*" -AND
- $_ -NotLike "*PrintDialog*" -AND
- $_ -NotLike "*AssignedAccessLockApp*" -AND
- $_ -NotLike "*OOBENetworkConnectionFlow*" -AND
- $_ -NotLike "*Apprep.ChxApp*" -AND
- $_ -NotLike "*CBS*" -AND
- $_ -NotLike "*OOBENetworkCaptivePortal*" -AND
- $_ -NotLike "*PeopleExperienceHost*" -AND
- $_ -NotLike "*ParentalControls*" -AND
- $_ -NotLike "*Win32WebViewHost*" -AND
- $_ -NotLike "*InputApp*" -AND
- $_ -NotLike "*AccountsControl*" -AND
- $_ -NotLike "*AsyncTextService*" -AND
- $_ -NotLike "*CapturePicker*" -AND
- $_ -NotLike "*CredDialogHost*" -AND
- $_ -NotLike "*BioEnrollMent*" -AND
- $_ -NotLike "*ShellExperienceHost*" -AND
- $_ -NotLike "*DesktopAppInstaller*" -AND
- $_ -NotLike "*WebMediaExtensions*" -AND
- $_ -NotLike "*WMIC*" -AND
- $_ -NotLike "*UI.XaML*"
- }
-
- foreach ($pkg in $pkglist)
- {
- try {
- $status = "Removing $pkg"
- Write-Progress -Activity "Removing Apps" -Status $status -PercentComplete ($counter++/$pkglist.Count*100)
- Remove-WindowsPackage -Path "$scratchDir" -PackageName $pkg -NoRestart -ErrorAction SilentlyContinue
- }
- catch {
- # This can happen if the package that is being removed is a permanent one, like FodMetadata
- Write-Host "Could not remove OS package $($pkg)"
- continue
- }
- }
- Write-Progress -Activity "Removing Apps" -Status "Ready" -Completed
- }
- catch
- {
- Write-Host "Unable to get information about the packages. MicroWin processing will continue, but packages will not be processed"
- }
-}
-
-function Remove-ProvisionedPackages([switch] $keepSecurity = $false)
-{
-<#
-
- .SYNOPSIS
- Removes AppX packages from a Windows image during MicroWin processing
-
- .PARAMETER Name
- keepSecurity - Boolean that determines whether to keep "Microsoft.SecHealthUI" (Windows Security) in the Windows image
-
- .EXAMPLE
- Remove-ProvisionedPackages -keepSecurity:$false
-
-#>
- $appxProvisionedPackages = Get-AppxProvisionedPackage -Path "$($scratchDir)" | Where-Object {
- $_.PackageName -NotLike "*AppInstaller*" -AND
- $_.PackageName -NotLike "*Store*" -and
- $_.PackageName -NotLike "*dism*" -and
- $_.PackageName -NotLike "*Foundation*" -and
- $_.PackageName -NotLike "*FodMetadata*" -and
- $_.PackageName -NotLike "*LanguageFeatures*" -and
- $_.PackageName -NotLike "*Notepad*" -and
- $_.PackageName -NotLike "*Printing*" -and
- $_.PackageName -NotLike "*Wifi*" -and
- $_.PackageName -NotLike "*Foundation*"
- }
-
- if ($?)
- {
- if ($keepSecurity) { $appxProvisionedPackages = $appxProvisionedPackages | Where-Object { $_.PackageName -NotLike "*SecHealthUI*" }}
- $counter = 0
- foreach ($appx in $appxProvisionedPackages)
- {
- $status = "Removing Provisioned $($appx.PackageName)"
- Write-Progress -Activity "Removing Provisioned Apps" -Status $status -PercentComplete ($counter++/$appxProvisionedPackages.Count*100)
- try {
- Remove-AppxProvisionedPackage -Path $scratchDir -PackageName $appx.PackageName -ErrorAction SilentlyContinue
- }
- catch {
- Write-Host "Application $($appx.PackageName) could not be removed"
- continue
- }
- }
- Write-Progress -Activity "Removing Provisioned Apps" -Status "Ready" -Completed
- }
- else
- {
- Write-Host "Could not get Provisioned App information. Skipping process..."
- }
-}
-
-function Copy-ToUSB([string] $fileToCopy)
-{
- foreach ($volume in Get-Volume) {
- if ($volume -and $volume.FileSystemLabel -ieq "ventoy") {
- $destinationPath = "$($volume.DriveLetter):\"
- #Copy-Item -Path $fileToCopy -Destination $destinationPath -Force
- # Get the total size of the file
- $totalSize = (Get-Item $fileToCopy).length
-
- Copy-Item -Path $fileToCopy -Destination $destinationPath -Verbose -Force -Recurse -Container -PassThru |
- ForEach-Object {
- # Calculate the percentage completed
- $completed = ($_.BytesTransferred / $totalSize) * 100
-
- # Display the progress bar
- Write-Progress -Activity "Copying File" -Status "Progress" -PercentComplete $completed -CurrentOperation ("{0:N2} MB / {1:N2} MB" -f ($_.BytesTransferred / 1MB), ($totalSize / 1MB))
- }
-
- Write-Host "File copied to Ventoy drive $($volume.DriveLetter)"
- return
- }
- }
- Write-Host "Ventoy USB Key is not inserted"
-}
-
-function Remove-FileOrDirectory([string] $pathToDelete, [string] $mask = "", [switch] $Directory = $false)
-{
- if(([string]::IsNullOrEmpty($pathToDelete))) { return }
- if (-not (Test-Path -Path "$($pathToDelete)")) { return }
-
- $yesNo = Get-LocalizedYesNo
- Write-Host "[INFO] In Your local takeown expects '$($yesNo[0])' as a Yes answer."
-
- # Specify the path to the directory
- # $directoryPath = "$($scratchDir)\Windows\System32\LogFiles\WMI\RtBackup"
- # takeown /a /r /d $yesNo[0] /f "$($directoryPath)" > $null
- # icacls "$($directoryPath)" /q /c /t /reset > $null
- # icacls $directoryPath /setowner "*S-1-5-32-544"
- # icacls $directoryPath /grant "*S-1-5-32-544:(OI)(CI)F" /t /c /q
- # Remove-Item -Path $directoryPath -Recurse -Force
-
- # # Grant full control to BUILTIN\Administrators using icacls
- # $directoryPath = "$($scratchDir)\Windows\System32\WebThreatDefSvc"
- # takeown /a /r /d $yesNo[0] /f "$($directoryPath)" > $null
- # icacls "$($directoryPath)" /q /c /t /reset > $null
- # icacls $directoryPath /setowner "*S-1-5-32-544"
- # icacls $directoryPath /grant "*S-1-5-32-544:(OI)(CI)F" /t /c /q
- # Remove-Item -Path $directoryPath -Recurse -Force
-
- $itemsToDelete = [System.Collections.ArrayList]::new()
-
- if ($mask -eq "")
- {
- Write-Debug "Adding $($pathToDelete) to array."
- [void]$itemsToDelete.Add($pathToDelete)
- }
- else
- {
- Write-Debug "Adding $($pathToDelete) to array and mask is $($mask)"
- if ($Directory) { $itemsToDelete = Get-ChildItem $pathToDelete -Include $mask -Recurse -Directory }
- else { $itemsToDelete = Get-ChildItem $pathToDelete -Include $mask -Recurse }
- }
-
- foreach($itemToDelete in $itemsToDelete)
- {
- $status = "Deleting $($itemToDelete)"
- Write-Progress -Activity "Removing Items" -Status $status -PercentComplete ($counter++/$itemsToDelete.Count*100)
-
- if (Test-Path -Path "$($itemToDelete)" -PathType Container)
- {
- $status = "Deleting directory: $($itemToDelete)"
-
- takeown /r /d $yesNo[0] /a /f "$($itemToDelete)"
- icacls "$($itemToDelete)" /q /c /t /reset
- icacls $itemToDelete /setowner "*S-1-5-32-544"
- icacls $itemToDelete /grant "*S-1-5-32-544:(OI)(CI)F" /t /c /q
- Remove-Item -Force -Recurse "$($itemToDelete)"
- }
- elseif (Test-Path -Path "$($itemToDelete)" -PathType Leaf)
- {
- $status = "Deleting file: $($itemToDelete)"
-
- takeown /a /f "$($itemToDelete)"
- icacls "$($itemToDelete)" /q /c /t /reset
- icacls "$($itemToDelete)" /setowner "*S-1-5-32-544"
- icacls "$($itemToDelete)" /grant "*S-1-5-32-544:(OI)(CI)F" /t /c /q
- Remove-Item -Force "$($itemToDelete)"
- }
- }
- Write-Progress -Activity "Removing Items" -Status "Ready" -Completed
-}
-
-function New-Unattend {
-
- # later if we wont to remove even more bloat EU requires MS to remove everything from English(world)
- # Below is an example how to do it we probably should create a drop down with common locals
- #
- #
- #
- #
- # en-US
- #
- # en-US
- # en-US
- # en-US
- # en-US
- #
- #
-
- #
- #
- #
- # en-US
- # en-US
- # en-US
- # en-US
- #
- #
- # using here string to embedd unattend
- #
- # 1
- # net user administrator /active:yes
- #
-
- # this section doesn't work in win10/????
-#
-#
-# 0
-#
-#
-# false
-#
-#
-
- $unattend = @'
-
-
- <#REPLACEME#>
-
-
-
-
- 1
- CMD /C echo LAU GG>C:\Windows\LogAuditUser.txt
- StartMenu
-
-
-
-
-
-
-
- true
- false
- false
- true
- true
- true
- 3
-
-
-
- 1
- cmd.exe /c echo 23>c:\windows\csup.txt
-
-
- 2
- CMD /C echo GG>C:\Windows\LogOobeSystem.txt
-
-
- 3
- powershell -ExecutionPolicy Bypass -File c:\windows\FirstStartup.ps1
-
-
-
-
-
-'@
- $specPass = @'
-
-
- 0
-
-
- false
-
-
-'@
- if ((Test-CompatibleImage $imgVersion $([System.Version]::new(10,0,22000,1))) -eq $false)
- {
- # Replace the placeholder text with an empty string to make it valid for Windows 10 Setup
- $unattend = $unattend.Replace("<#REPLACEME#>", "").Trim()
- }
- else
- {
- # Replace the placeholder text with the Specialize pass
- $unattend = $unattend.Replace("<#REPLACEME#>", $specPass).Trim()
- }
- $unattend | Out-File -FilePath "$env:temp\unattend.xml" -Force -Encoding utf8
-}
-
-function New-CheckInstall {
-
- # using here string to embedd firstrun
- $checkInstall = @'
- @echo off
- if exist "C:\windows\cpu.txt" (
- echo C:\windows\cpu.txt exists
- ) else (
- echo C:\windows\cpu.txt does not exist
- )
- if exist "C:\windows\SerialNumber.txt" (
- echo C:\windows\SerialNumber.txt exists
- ) else (
- echo C:\windows\SerialNumber.txt does not exist
- )
- if exist "C:\unattend.xml" (
- echo C:\unattend.xml exists
- ) else (
- echo C:\unattend.xml does not exist
- )
- if exist "C:\Windows\Setup\Scripts\SetupComplete.cmd" (
- echo C:\Windows\Setup\Scripts\SetupComplete.cmd exists
- ) else (
- echo C:\Windows\Setup\Scripts\SetupComplete.cmd does not exist
- )
- if exist "C:\Windows\Panther\unattend.xml" (
- echo C:\Windows\Panther\unattend.xml exists
- ) else (
- echo C:\Windows\Panther\unattend.xml does not exist
- )
- if exist "C:\Windows\System32\Sysprep\unattend.xml" (
- echo C:\Windows\System32\Sysprep\unattend.xml exists
- ) else (
- echo C:\Windows\System32\Sysprep\unattend.xml does not exist
- )
- if exist "C:\Windows\FirstStartup.ps1" (
- echo C:\Windows\FirstStartup.ps1 exists
- ) else (
- echo C:\Windows\FirstStartup.ps1 does not exist
- )
- if exist "C:\Windows\winutil.ps1" (
- echo C:\Windows\winutil.ps1 exists
- ) else (
- echo C:\Windows\winutil.ps1 does not exist
- )
- if exist "C:\Windows\LogSpecialize.txt" (
- echo C:\Windows\LogSpecialize.txt exists
- ) else (
- echo C:\Windows\LogSpecialize.txt does not exist
- )
- if exist "C:\Windows\LogAuditUser.txt" (
- echo C:\Windows\LogAuditUser.txt exists
- ) else (
- echo C:\Windows\LogAuditUser.txt does not exist
- )
- if exist "C:\Windows\LogOobeSystem.txt" (
- echo C:\Windows\LogOobeSystem.txt exists
- ) else (
- echo C:\Windows\LogOobeSystem.txt does not exist
- )
- if exist "c:\windows\csup.txt" (
- echo c:\windows\csup.txt exists
- ) else (
- echo c:\windows\csup.txt does not exist
- )
- if exist "c:\windows\LogFirstRun.txt" (
- echo c:\windows\LogFirstRun.txt exists
- ) else (
- echo c:\windows\LogFirstRun.txt does not exist
- )
-'@
- $checkInstall | Out-File -FilePath "$env:temp\checkinstall.cmd" -Force -Encoding Ascii
-}
-
-function New-FirstRun {
-
- # using here string to embedd firstrun
- $firstRun = @'
- # Set the global error action preference to continue
- $ErrorActionPreference = "Continue"
- function Remove-RegistryValue
- {
- param (
- [Parameter(Mandatory = $true)]
- [string]$RegistryPath,
-
- [Parameter(Mandatory = $true)]
- [string]$ValueName
- )
-
- # Check if the registry path exists
- if (Test-Path -Path $RegistryPath)
- {
- $registryValue = Get-ItemProperty -Path $RegistryPath -Name $ValueName -ErrorAction SilentlyContinue
-
- # Check if the registry value exists
- if ($registryValue)
- {
- # Remove the registry value
- Remove-ItemProperty -Path $RegistryPath -Name $ValueName -Force
- Write-Host "Registry value '$ValueName' removed from '$RegistryPath'."
- }
- else
- {
- Write-Host "Registry value '$ValueName' not found in '$RegistryPath'."
- }
- }
- else
- {
- Write-Host "Registry path '$RegistryPath' not found."
- }
- }
-
- function Stop-UnnecessaryServices
- {
- $servicesToExclude = @(
- "AudioSrv",
- "AudioEndpointBuilder",
- "BFE",
- "BITS",
- "BrokerInfrastructure",
- "CDPSvc",
- "CDPUserSvc_dc2a4",
- "CoreMessagingRegistrar",
- "CryptSvc",
- "DPS",
- "DcomLaunch",
- "Dhcp",
- "DispBrokerDesktopSvc",
- "Dnscache",
- "DoSvc",
- "DusmSvc",
- "EventLog",
- "EventSystem",
- "FontCache",
- "LSM",
- "LanmanServer",
- "LanmanWorkstation",
- "MapsBroker",
- "MpsSvc",
- "OneSyncSvc_dc2a4",
- "Power",
- "ProfSvc",
- "RpcEptMapper",
- "RpcSs",
- "SCardSvr",
- "SENS",
- "SamSs",
- "Schedule",
- "SgrmBroker",
- "ShellHWDetection",
- "Spooler",
- "SysMain",
- "SystemEventsBroker",
- "TextInputManagementService",
- "Themes",
- "TrkWks",
- "UserManager",
- "VGAuthService",
- "VMTools",
- "WSearch",
- "Wcmsvc",
- "WinDefend",
- "Winmgmt",
- "WlanSvc",
- "WpnService",
- "WpnUserService_dc2a4",
- "cbdhsvc_dc2a4",
- "edgeupdate",
- "gpsvc",
- "iphlpsvc",
- "mpssvc",
- "nsi",
- "sppsvc",
- "tiledatamodelsvc",
- "vm3dservice",
- "webthreatdefusersvc_dc2a4",
- "wscsvc"
-)
-
- $runningServices = Get-Service | Where-Object { $servicesToExclude -notcontains $_.Name }
- foreach($service in $runningServices)
- {
- Stop-Service -Name $service.Name -PassThru
- Set-Service $service.Name -StartupType Manual
- "Stopping service $($service.Name)" | Out-File -FilePath c:\windows\LogFirstRun.txt -Append -NoClobber
- }
- }
-
- "FirstStartup has worked" | Out-File -FilePath c:\windows\LogFirstRun.txt -Append -NoClobber
-
- $Theme = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize"
- Set-ItemProperty -Path $Theme -Name AppsUseLightTheme -Value 1
- Set-ItemProperty -Path $Theme -Name SystemUsesLightTheme -Value 1
-
- # figure this out later how to set updates to security only
- #Import-Module -Name PSWindowsUpdate;
- #Stop-Service -Name wuauserv
- #Set-WUSettings -MicrosoftUpdateEnabled -AutoUpdateOption 'Never'
- #Start-Service -Name wuauserv
-
- Stop-UnnecessaryServices
-
- $taskbarPath = "$env:AppData\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar"
- # Delete all files on the Taskbar
- Get-ChildItem -Path $taskbarPath -File | Remove-Item -Force
- Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "FavoritesRemovedChanges"
- Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "FavoritesChanges"
- Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "Favorites"
-
- # Stop-Process -Name explorer -Force
-
- $process = Get-Process -Name "explorer"
- Stop-Process -InputObject $process
- # Wait for the process to exit
- Wait-Process -InputObject $process
- Start-Sleep -Seconds 3
-
- # Delete Edge Icon from the desktop
- $edgeShortcutFiles = Get-ChildItem -Path $desktopPath -Filter "*Edge*.lnk"
- # Check if Edge shortcuts exist on the desktop
- if ($edgeShortcutFiles)
- {
- foreach ($shortcutFile in $edgeShortcutFiles)
- {
- # Remove each Edge shortcut
- Remove-Item -Path $shortcutFile.FullName -Force
- Write-Host "Edge shortcut '$($shortcutFile.Name)' removed from the desktop."
- }
- }
- Remove-Item -Path "$env:USERPROFILE\Desktop\*.lnk"
- Remove-Item -Path "C:\Users\Default\Desktop\*.lnk"
-
- # ************************************************
- # Create WinUtil shortcut on the desktop
- #
- $desktopPath = "$($env:USERPROFILE)\Desktop"
- # Specify the target PowerShell command
- $command = "powershell.exe -NoProfile -ExecutionPolicy Bypass -Command 'irm https://christitus.com/win | iex'"
- # Specify the path for the shortcut
- $shortcutPath = Join-Path $desktopPath 'winutil.lnk'
- # Create a shell object
- $shell = New-Object -ComObject WScript.Shell
-
- # Create a shortcut object
- $shortcut = $shell.CreateShortcut($shortcutPath)
-
- if (Test-Path -Path "c:\Windows\cttlogo.png")
- {
- $shortcut.IconLocation = "c:\Windows\cttlogo.png"
- }
-
- # Set properties of the shortcut
- $shortcut.TargetPath = "powershell.exe"
- $shortcut.Arguments = "-NoProfile -ExecutionPolicy Bypass -Command `"$command`""
- # Save the shortcut
- $shortcut.Save()
-
- # Make the shortcut have 'Run as administrator' property on
- $bytes = [System.IO.File]::ReadAllBytes($shortcutPath)
- # Set byte value at position 0x15 in hex, or 21 in decimal, from the value 0x00 to 0x20 in hex
- $bytes[0x15] = $bytes[0x15] -bor 0x20
- [System.IO.File]::WriteAllBytes($shortcutPath, $bytes)
-
- Write-Host "Shortcut created at: $shortcutPath"
- #
- # Done create WinUtil shortcut on the desktop
- # ************************************************
-
- Start-Process explorer
-
-'@
- $firstRun | Out-File -FilePath "$env:temp\FirstStartup.ps1" -Force
-}
diff --git a/functions/private/Invoke-WinUtilBingSearch.ps1 b/functions/private/Invoke-WinUtilBingSearch.ps1
index 21574b68..b7527bcb 100644
--- a/functions/private/Invoke-WinUtilBingSearch.ps1
+++ b/functions/private/Invoke-WinUtilBingSearch.ps1
@@ -9,26 +9,22 @@ function Invoke-WinUtilBingSearch {
#>
Param($Enabled)
- Try{
- if ($Enabled -eq $false){
+ try {
+ if ($Enabled -eq $false) {
Write-Host "Enabling Bing Search"
$value = 1
- }
- else {
+ } else {
Write-Host "Disabling Bing Search"
$value = 0
}
$Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Search"
Set-ItemProperty -Path $Path -Name BingSearchEnabled -Value $value
- }
- Catch [System.Security.SecurityException] {
+ } catch [System.Security.SecurityException] {
Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
+ } catch [System.Management.Automation.ItemNotFoundException] {
Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
+ } catch {
Write-Warning "Unable to set $Name due to unhandled exception"
Write-Warning $psitem.Exception.StackTrace
}
-}
\ No newline at end of file
+}
diff --git a/functions/private/Invoke-WinUtilCurrentSystem.ps1 b/functions/private/Invoke-WinUtilCurrentSystem.ps1
index a65ef60c..505942b5 100644
--- a/functions/private/Invoke-WinUtilCurrentSystem.ps1
+++ b/functions/private/Invoke-WinUtilCurrentSystem.ps1
@@ -14,7 +14,7 @@ Function Invoke-WinUtilCurrentSystem {
$CheckBox
)
- if ($checkbox -eq "winget"){
+ if ($checkbox -eq "winget") {
$originalEncoding = [Console]::OutputEncoding
[Console]::OutputEncoding = [System.Text.UTF8Encoding]::new()
@@ -31,9 +31,9 @@ Function Invoke-WinUtilCurrentSystem {
}
}
- if($CheckBox -eq "tweaks"){
+ if($CheckBox -eq "tweaks") {
- if(!(Test-Path 'HKU:\')){New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS}
+ if(!(Test-Path 'HKU:\')) {New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS}
$ScheduledTasks = Get-ScheduledTask
$sync.configs.tweaks | Get-Member -MemberType NoteProperty | ForEach-Object {
@@ -44,59 +44,57 @@ Function Invoke-WinUtilCurrentSystem {
$scheduledtaskKeys = $sync.configs.tweaks.$Config.scheduledtask
$serviceKeys = $sync.configs.tweaks.$Config.service
- if($registryKeys -or $scheduledtaskKeys -or $serviceKeys){
+ if($registryKeys -or $scheduledtaskKeys -or $serviceKeys) {
$Values = @()
- Foreach ($tweaks in $registryKeys){
- Foreach($tweak in $tweaks){
+ Foreach ($tweaks in $registryKeys) {
+ Foreach($tweak in $tweaks) {
- if(test-path $tweak.Path){
+ if(test-path $tweak.Path) {
$actualValue = Get-ItemProperty -Name $tweak.Name -Path $tweak.Path -ErrorAction SilentlyContinue | Select-Object -ExpandProperty $($tweak.Name)
$expectedValue = $tweak.Value
- if ($expectedValue -notlike $actualValue){
+ if ($expectedValue -notlike $actualValue) {
$values += $False
}
- }
- else {
+ } else {
$values += $False
}
}
}
- Foreach ($tweaks in $scheduledtaskKeys){
- Foreach($tweak in $tweaks){
+ Foreach ($tweaks in $scheduledtaskKeys) {
+ Foreach($tweak in $tweaks) {
$task = $ScheduledTasks | Where-Object {$($psitem.TaskPath + $psitem.TaskName) -like "\$($tweak.name)"}
- if($task){
+ if($task) {
$actualValue = $task.State
$expectedValue = $tweak.State
- if ($expectedValue -ne $actualValue){
+ if ($expectedValue -ne $actualValue) {
$values += $False
}
}
}
}
- Foreach ($tweaks in $serviceKeys){
- Foreach($tweak in $tweaks){
+ Foreach ($tweaks in $serviceKeys) {
+ Foreach($tweak in $tweaks) {
$Service = Get-Service -Name $tweak.Name
- if($Service){
+ if($Service) {
$actualValue = $Service.StartType
$expectedValue = $tweak.StartupType
- if ($expectedValue -ne $actualValue){
+ if ($expectedValue -ne $actualValue) {
$values += $False
}
}
}
}
- if($values -notcontains $false){
+ if($values -notcontains $false) {
Write-Output $Config
}
}
}
}
}
-
diff --git a/functions/private/Invoke-WinUtilDarkMode.ps1 b/functions/private/Invoke-WinUtilDarkMode.ps1
index 590da6eb..8ce369d3 100644
--- a/functions/private/Invoke-WinUtilDarkMode.ps1
+++ b/functions/private/Invoke-WinUtilDarkMode.ps1
@@ -9,12 +9,11 @@ Function Invoke-WinUtilDarkMode {
#>
Param($DarkMoveEnabled)
- Try{
- if ($DarkMoveEnabled -eq $false){
+ try {
+ if ($DarkMoveEnabled -eq $false) {
Write-Host "Enabling Dark Mode"
$DarkMoveValue = 0
- }
- else {
+ } else {
Write-Host "Disabling Dark Mode"
$DarkMoveValue = 1
}
@@ -22,15 +21,12 @@ Function Invoke-WinUtilDarkMode {
$Path = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize"
Set-ItemProperty -Path $Path -Name AppsUseLightTheme -Value $DarkMoveValue
Set-ItemProperty -Path $Path -Name SystemUsesLightTheme -Value $DarkMoveValue
- }
- Catch [System.Security.SecurityException] {
+ } catch [System.Security.SecurityException] {
Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
+ } catch [System.Management.Automation.ItemNotFoundException] {
Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
+ } catch {
Write-Warning "Unable to set $Name due to unhandled exception"
Write-Warning $psitem.Exception.StackTrace
}
-}
\ No newline at end of file
+}
diff --git a/functions/private/Invoke-WinUtilDetailedBSoD.ps1 b/functions/private/Invoke-WinUtilDetailedBSoD.ps1
index ad871558..efe4f624 100644
--- a/functions/private/Invoke-WinUtilDetailedBSoD.ps1
+++ b/functions/private/Invoke-WinUtilDetailedBSoD.ps1
@@ -4,31 +4,31 @@ Function Invoke-WinUtilDetailedBSoD {
.SYNOPSIS
Enables/Disables Detailed BSoD
(Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl' -Name 'DisplayParameters').DisplayParameters
-
+
#>
Param($Enabled)
- Try{
- if ($Enabled -eq $false){
+ try {
+ if ($Enabled -eq $false) {
Write-Host "Enabling Detailed BSoD"
$value = 1
- }
- else {
+ } else {
Write-Host "Disabling Detailed BSoD"
$value =0
}
$Path = "HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl"
+ $dwords = ("DisplayParameters", "DisableEmoticon")
+ foreach ($name in $dwords) {
+ Set-ItemProperty -Path $Path -Name $name -Value $value
+ }
Set-ItemProperty -Path $Path -Name DisplayParameters -Value $value
- }
- Catch [System.Security.SecurityException] {
+ } catch [System.Security.SecurityException] {
Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
+ } catch [System.Management.Automation.ItemNotFoundException] {
Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
+ } catch {
Write-Warning "Unable to set $Name due to unhandled exception"
Write-Warning $psitem.Exception.StackTrace
}
-}
\ No newline at end of file
+}
diff --git a/functions/private/Invoke-WinUtilFeatureInstall.ps1 b/functions/private/Invoke-WinUtilFeatureInstall.ps1
index 4b3a0f65..72a22d9a 100644
--- a/functions/private/Invoke-WinUtilFeatureInstall.ps1
+++ b/functions/private/Invoke-WinUtilFeatureInstall.ps1
@@ -13,19 +13,16 @@ function Invoke-WinUtilFeatureInstall {
$x = 0
$CheckBox | ForEach-Object {
- if($sync.configs.feature.$psitem.feature){
- Foreach( $feature in $sync.configs.feature.$psitem.feature ){
- Try{
+ if($sync.configs.feature.$psitem.feature) {
+ Foreach( $feature in $sync.configs.feature.$psitem.feature ) {
+ try {
Write-Host "Installing $feature"
Enable-WindowsOptionalFeature -Online -FeatureName $feature -All -NoRestart
- }
- Catch{
- if ($psitem.Exception.Message -like "*requires elevation*"){
+ } catch {
+ if ($psitem.Exception.Message -like "*requires elevation*") {
Write-Warning "Unable to Install $feature due to permissions. Are you running as admin?"
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Error" })
- }
-
- else{
+ } else {
Write-Warning "Unable to Install $feature due to unhandled exception"
Write-Warning $psitem.Exception.StackTrace
@@ -33,21 +30,18 @@ function Invoke-WinUtilFeatureInstall {
}
}
}
- if($sync.configs.feature.$psitem.InvokeScript){
- Foreach( $script in $sync.configs.feature.$psitem.InvokeScript ){
- Try{
+ if($sync.configs.feature.$psitem.InvokeScript) {
+ Foreach( $script in $sync.configs.feature.$psitem.InvokeScript ) {
+ try {
$Scriptblock = [scriptblock]::Create($script)
Write-Host "Running Script for $psitem"
Invoke-Command $scriptblock -ErrorAction stop
- }
- Catch{
- if ($psitem.Exception.Message -like "*requires elevation*"){
+ } catch {
+ if ($psitem.Exception.Message -like "*requires elevation*") {
Write-Warning "Unable to Install $feature due to permissions. Are you running as admin?"
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Error" })
- }
-
- else{
+ } else {
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Error" })
Write-Warning "Unable to Install $feature due to unhandled exception"
Write-Warning $psitem.Exception.StackTrace
diff --git a/functions/private/Invoke-WinUtilGPU.ps1 b/functions/private/Invoke-WinUtilGPU.ps1
index 13e4fb76..926f2794 100644
--- a/functions/private/Invoke-WinUtilGPU.ps1
+++ b/functions/private/Invoke-WinUtilGPU.ps1
@@ -11,11 +11,11 @@ function Invoke-WinUtilGPU {
)
foreach ($gpu in $gpuInfo) {
- foreach ($gpuPattern in $lowPowerGPUs){
+ foreach ($gpuPattern in $lowPowerGPUs) {
if ($gpu.Name -like $gpuPattern) {
return $false
}
}
}
return $true
-}
\ No newline at end of file
+}
diff --git a/functions/private/Invoke-WinUtilHiddenFiles.ps1 b/functions/private/Invoke-WinUtilHiddenFiles.ps1
index 81b3d6bb..5309d2c3 100644
--- a/functions/private/Invoke-WinUtilHiddenFiles.ps1
+++ b/functions/private/Invoke-WinUtilHiddenFiles.ps1
@@ -9,25 +9,21 @@ function Invoke-WinUtilHiddenFiles {
#>
Param($Enabled)
- Try{
- if ($Enabled -eq $false){
+ try {
+ if ($Enabled -eq $false) {
Write-Host "Enabling Hidden Files"
$value = 1
- }
- else {
+ } else {
Write-Host "Disabling Hidden Files"
$value = 0
}
$Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
Set-ItemProperty -Path $Path -Name Hidden -Value $value
- }
- Catch [System.Security.SecurityException] {
+ } catch [System.Security.SecurityException] {
Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
+ } catch [System.Management.Automation.ItemNotFoundException] {
Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
+ } catch {
Write-Warning "Unable to set $Name due to unhandled exception"
Write-Warning $psitem.Exception.StackTrace
}
diff --git a/functions/private/Invoke-WinUtilMicroWin-Helper.ps1 b/functions/private/Invoke-WinUtilMicroWin-Helper.ps1
new file mode 100644
index 00000000..b568b839
--- /dev/null
+++ b/functions/private/Invoke-WinUtilMicroWin-Helper.ps1
@@ -0,0 +1,726 @@
+function Test-CompatibleImage() {
+ <#
+ .SYNOPSIS
+ Checks the version of a Windows image and determines whether or not it is compatible with a specific feature depending on a desired version
+
+ .PARAMETER Name
+ imgVersion - The version of the Windows image
+ desiredVersion - The version to compare the image version with
+ #>
+
+ param
+ (
+ [Parameter(Mandatory, position=0)]
+ [string]$imgVersion,
+
+ [Parameter(Mandatory, position=1)]
+ [Version]$desiredVersion
+ )
+
+ try {
+ $version = [Version]$imgVersion
+ return $version -ge $desiredVersion
+ } catch {
+ return $False
+ }
+}
+
+function Remove-Features() {
+ <#
+ .SYNOPSIS
+ Removes certain features from ISO image
+
+ .PARAMETER Name
+ No Params
+
+ .EXAMPLE
+ Remove-Features
+ #>
+ try {
+ $featlist = (Get-WindowsOptionalFeature -Path $scratchDir).FeatureName
+
+ $featlist = $featlist | Where-Object {
+ $_ -NotLike "*Defender*" -AND
+ $_ -NotLike "*Printing*" -AND
+ $_ -NotLike "*TelnetClient*" -AND
+ $_ -NotLike "*PowerShell*" -AND
+ $_ -NotLike "*NetFx*" -AND
+ $_ -NotLike "*Media*" -AND
+ $_ -NotLike "*NFS*"
+ }
+
+ foreach($feature in $featlist) {
+ $status = "Removing feature $feature"
+ Write-Progress -Activity "Removing features" -Status $status -PercentComplete ($counter++/$featlist.Count*100)
+ Write-Debug "Removing feature $feature"
+ Disable-WindowsOptionalFeature -Path "$scratchDir" -FeatureName $feature -Remove -ErrorAction SilentlyContinue -NoRestart
+ }
+ Write-Progress -Activity "Removing features" -Status "Ready" -Completed
+ Write-Host "You can re-enable the disabled features at any time, using either Windows Update or the SxS folder in \Sources."
+ } catch {
+ Write-Host "Unable to get information about the features. MicroWin processing will continue, but features will not be processed"
+ }
+}
+
+function Remove-Packages {
+ try {
+ $pkglist = (Get-WindowsPackage -Path "$scratchDir").PackageName
+
+ $pkglist = $pkglist | Where-Object {
+ $_ -NotLike "*ApplicationModel*" -AND
+ $_ -NotLike "*indows-Client-LanguagePack*" -AND
+ $_ -NotLike "*LanguageFeatures-Basic*" -AND
+ $_ -NotLike "*Package_for_ServicingStack*" -AND
+ $_ -NotLike "*.NET*" -AND
+ $_ -NotLike "*Store*" -AND
+ $_ -NotLike "*VCLibs*" -AND
+ $_ -NotLike "*AAD.BrokerPlugin",
+ $_ -NotLike "*LockApp*" -AND
+ $_ -NotLike "*Notepad*" -AND
+ $_ -NotLike "*immersivecontrolpanel*" -AND
+ $_ -NotLike "*ContentDeliveryManager*" -AND
+ $_ -NotLike "*PinningConfirMationDialog*" -AND
+ $_ -NotLike "*SecHealthUI*" -AND
+ $_ -NotLike "*SecureAssessmentBrowser*" -AND
+ $_ -NotLike "*PrintDialog*" -AND
+ $_ -NotLike "*AssignedAccessLockApp*" -AND
+ $_ -NotLike "*OOBENetworkConnectionFlow*" -AND
+ $_ -NotLike "*Apprep.ChxApp*" -AND
+ $_ -NotLike "*CBS*" -AND
+ $_ -NotLike "*OOBENetworkCaptivePortal*" -AND
+ $_ -NotLike "*PeopleExperienceHost*" -AND
+ $_ -NotLike "*ParentalControls*" -AND
+ $_ -NotLike "*Win32WebViewHost*" -AND
+ $_ -NotLike "*InputApp*" -AND
+ $_ -NotLike "*AccountsControl*" -AND
+ $_ -NotLike "*AsyncTextService*" -AND
+ $_ -NotLike "*CapturePicker*" -AND
+ $_ -NotLike "*CredDialogHost*" -AND
+ $_ -NotLike "*BioEnrollMent*" -AND
+ $_ -NotLike "*ShellExperienceHost*" -AND
+ $_ -NotLike "*DesktopAppInstaller*" -AND
+ $_ -NotLike "*WebMediaExtensions*" -AND
+ $_ -NotLike "*WMIC*" -AND
+ $_ -NotLike "*UI.XaML*" -AND
+ $_ -NotLike "*Ethernet*" -AND
+ $_ -NotLike "*Wifi*"
+ }
+
+ foreach ($pkg in $pkglist) {
+ try {
+ $status = "Removing $pkg"
+ Write-Progress -Activity "Removing Apps" -Status $status -PercentComplete ($counter++/$pkglist.Count*100)
+ Remove-WindowsPackage -Path "$scratchDir" -PackageName $pkg -NoRestart -ErrorAction SilentlyContinue
+ } catch {
+ # This can happen if the package that is being removed is a permanent one, like FodMetadata
+ Write-Host "Could not remove OS package $($pkg)"
+ continue
+ }
+ }
+ Write-Progress -Activity "Removing Apps" -Status "Ready" -Completed
+ } catch {
+ Write-Host "Unable to get information about the packages. MicroWin processing will continue, but packages will not be processed"
+ }
+}
+
+function Remove-ProvisionedPackages() {
+ <#
+ .SYNOPSIS
+ Removes AppX packages from a Windows image during MicroWin processing
+
+ .PARAMETER Name
+ No Params
+
+ .EXAMPLE
+ Remove-ProvisionedPackages
+ #>
+ try
+ {
+ $appxProvisionedPackages = Get-AppxProvisionedPackage -Path "$($scratchDir)" | Where-Object {
+ $_.PackageName -NotLike "*AppInstaller*" -AND
+ $_.PackageName -NotLike "*Store*" -and
+ $_.PackageName -NotLike "*dism*" -and
+ $_.PackageName -NotLike "*Foundation*" -and
+ $_.PackageName -NotLike "*FodMetadata*" -and
+ $_.PackageName -NotLike "*LanguageFeatures*" -and
+ $_.PackageName -NotLike "*Notepad*" -and
+ $_.PackageName -NotLike "*Printing*" -and
+ $_.PackageName -NotLike "*Foundation*" -and
+ $_.PackageName -NotLike "*YourPhone*" -and
+ $_.PackageName -NotLike "*Xbox*" -and
+ $_.PackageName -NotLike "*WindowsTerminal*" -and
+ $_.PackageName -NotLike "*Calculator*" -and
+ $_.PackageName -NotLike "*Photos*" -and
+ $_.PackageName -NotLike "*VCLibs*" -and
+ $_.PackageName -NotLike "*Paint*" -and
+ $_.PackageName -NotLike "*Gaming*" -and
+ $_.PackageName -NotLike "*Extension*" -and
+ $_.PackageName -NotLike "*SecHealthUI*"
+ }
+
+ $counter = 0
+ foreach ($appx in $appxProvisionedPackages) {
+ $status = "Removing Provisioned $($appx.PackageName)"
+ Write-Progress -Activity "Removing Provisioned Apps" -Status $status -PercentComplete ($counter++/$appxProvisionedPackages.Count*100)
+ try {
+ Remove-AppxProvisionedPackage -Path "$scratchDir" -PackageName $appx.PackageName -ErrorAction SilentlyContinue
+ } catch {
+ Write-Host "Application $($appx.PackageName) could not be removed"
+ continue
+ }
+ }
+ Write-Progress -Activity "Removing Provisioned Apps" -Status "Ready" -Completed
+ }
+ catch
+ {
+ # This can happen if getting AppX packages fails
+ Write-Host "Unable to get information about the AppX packages. MicroWin processing will continue, but AppX packages will not be processed"
+ }
+}
+
+function Copy-ToUSB([string]$fileToCopy) {
+ foreach ($volume in Get-Volume) {
+ if ($volume -and $volume.FileSystemLabel -ieq "ventoy") {
+ $destinationPath = "$($volume.DriveLetter):\"
+ #Copy-Item -Path $fileToCopy -Destination $destinationPath -Force
+ # Get the total size of the file
+ $totalSize = (Get-Item "$fileToCopy").length
+
+ Copy-Item -Path "$fileToCopy" -Destination "$destinationPath" -Verbose -Force -Recurse -Container -PassThru |
+ ForEach-Object {
+ # Calculate the percentage completed
+ $completed = ($_.BytesTransferred / $totalSize) * 100
+
+ # Display the progress bar
+ Write-Progress -Activity "Copying File" -Status "Progress" -PercentComplete $completed -CurrentOperation ("{0:N2} MB / {1:N2} MB" -f ($_.BytesTransferred / 1MB), ($totalSize / 1MB))
+ }
+
+ Write-Host "File copied to Ventoy drive $($volume.DriveLetter)"
+ return
+ }
+ }
+ Write-Host "Ventoy USB Key is not inserted"
+}
+
+function Remove-FileOrDirectory([string]$pathToDelete, [string]$mask = "", [switch]$Directory = $false) {
+ if(([string]::IsNullOrEmpty($pathToDelete))) { return }
+ if (-not (Test-Path -Path "$($pathToDelete)")) { return }
+
+ $yesNo = Get-LocalizedYesNo
+ Write-Host "[INFO] In Your local takeown expects '$($yesNo[0])' as a Yes answer."
+
+ $itemsToDelete = [System.Collections.ArrayList]::new()
+
+ if ($mask -eq "") {
+ Write-Debug "Adding $($pathToDelete) to array."
+ [void]$itemsToDelete.Add($pathToDelete)
+ } else {
+ Write-Debug "Adding $($pathToDelete) to array and mask is $($mask)"
+ if ($Directory) { $itemsToDelete = Get-ChildItem $pathToDelete -Include $mask -Recurse -Directory } else { $itemsToDelete = Get-ChildItem $pathToDelete -Include $mask -Recurse }
+ }
+
+ foreach($itemToDelete in $itemsToDelete) {
+ $status = "Deleting $($itemToDelete)"
+ Write-Progress -Activity "Removing Items" -Status $status -PercentComplete ($counter++/$itemsToDelete.Count*100)
+
+ if (Test-Path -Path "$($itemToDelete)" -PathType Container) {
+ $status = "Deleting directory: $($itemToDelete)"
+
+ takeown /r /d $yesNo[0] /a /f "$($itemToDelete)"
+ icacls "$($itemToDelete)" /q /c /t /reset
+ icacls $itemToDelete /setowner "*S-1-5-32-544"
+ icacls $itemToDelete /grant "*S-1-5-32-544:(OI)(CI)F" /t /c /q
+ Remove-Item -Force -Recurse "$($itemToDelete)"
+ }
+ elseif (Test-Path -Path "$($itemToDelete)" -PathType Leaf) {
+ $status = "Deleting file: $($itemToDelete)"
+
+ takeown /a /f "$($itemToDelete)"
+ icacls "$($itemToDelete)" /q /c /t /reset
+ icacls "$($itemToDelete)" /setowner "*S-1-5-32-544"
+ icacls "$($itemToDelete)" /grant "*S-1-5-32-544:(OI)(CI)F" /t /c /q
+ Remove-Item -Force "$($itemToDelete)"
+ }
+ }
+ Write-Progress -Activity "Removing Items" -Status "Ready" -Completed
+}
+
+function New-Unattend {
+
+ param (
+ [Parameter(Mandatory, Position = 0)] [string] $userName,
+ [Parameter(Position = 1)] [string] $userPassword
+ )
+
+ $unattend = @'
+
+
+ <#REPLACEME#>
+
+
+
+
+ 1
+ CMD /C echo LAU GG>C:\Windows\LogAuditUser.txt
+ StartMenu
+
+
+
+
+
+
+
+
+
+ USER-REPLACEME
+ Administrators
+
+ PW-REPLACEME
+ true
+
+
+
+
+
+ USER-REPLACEME
+ true
+ 1
+
+ PW-REPLACEME
+ true
+
+
+
+ true
+ true
+ true
+ true
+ true
+ true
+ 3
+
+
+
+ 1
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f
+
+
+ 2
+ cmd.exe /c echo 23>c:\windows\csup.txt
+
+
+ 3
+ CMD /C echo GG>C:\Windows\LogOobeSystem.txt
+
+
+ 4
+ powershell -ExecutionPolicy Bypass -File c:\windows\FirstStartup.ps1
+
+
+
+
+
+'@
+ $specPass = @'
+
+
+ 0
+
+
+ false
+
+
+
+
+ 1
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v BypassNRO /t REG_DWORD /d 1 /f
+
+
+ 2
+ reg.exe load "HKU\DefaultUser" "C:\Users\Default\NTUSER.DAT"
+
+
+ 3
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\Runonce" /v "UninstallCopilot" /t REG_SZ /d "powershell.exe -NoProfile -Command \"Get-AppxPackage -Name 'Microsoft.Windows.Ai.Copilot.Provider' | Remove-AppxPackage;\"" /f
+
+
+ 4
+ reg.exe add "HKU\DefaultUser\Software\Policies\Microsoft\Windows\WindowsCopilot" /v TurnOffWindowsCopilot /t REG_DWORD /d 1 /f
+
+
+ 5
+ reg.exe unload "HKU\DefaultUser"
+
+
+ 6
+ reg.exe delete "HKLM\SOFTWARE\Microsoft\WindowsUpdate\Orchestrator\UScheduler_Oobe\DevHomeUpdate" /f
+
+
+ 7
+ reg.exe load "HKU\DefaultUser" "C:\Users\Default\NTUSER.DAT"
+
+
+ 8
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Notepad" /v ShowStoreBanner /t REG_DWORD /d 0 /f
+
+
+ 9
+ reg.exe unload "HKU\DefaultUser"
+
+
+ 10
+ cmd.exe /c "del "C:\Users\Default\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\OneDrive.lnk""
+
+
+ 11
+ cmd.exe /c "del "C:\Windows\System32\OneDriveSetup.exe""
+
+
+ 12
+ cmd.exe /c "del "C:\Windows\SysWOW64\OneDriveSetup.exe""
+
+
+ 13
+ reg.exe load "HKU\DefaultUser" "C:\Users\Default\NTUSER.DAT"
+
+
+ 14
+ reg.exe delete "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\Run" /v OneDriveSetup /f
+
+
+ 15
+ reg.exe unload "HKU\DefaultUser"
+
+
+ 16
+ reg.exe delete "HKLM\SOFTWARE\Microsoft\WindowsUpdate\Orchestrator\UScheduler_Oobe\OutlookUpdate" /f
+
+
+ 17
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Communications" /v ConfigureChatAutoInstall /t REG_DWORD /d 0 /f
+
+
+ 18
+ powershell.exe -NoProfile -Command "$xml = [xml]::new(); $xml.Load('C:\Windows\Panther\unattend.xml'); $sb = [scriptblock]::Create( $xml.unattend.Extensions.ExtractScript ); Invoke-Command -ScriptBlock $sb -ArgumentList $xml;"
+
+
+ 19
+ powershell.exe -NoProfile -Command "Get-Content -LiteralPath 'C:\Windows\Temp\remove-packages.ps1' -Raw | Invoke-Expression;"
+
+
+ 20
+ powershell.exe -NoProfile -Command "Get-Content -LiteralPath 'C:\Windows\Temp\remove-caps.ps1' -Raw | Invoke-Expression;"
+
+
+ 21
+ reg.exe add "HKLM\SOFTWARE\Microsoft\PolicyManager\current\device\Start" /v ConfigureStartPins /t REG_SZ /d "{ \"pinnedList\": [] }" /f
+
+
+ 22
+ reg.exe add "HKLM\SOFTWARE\Microsoft\PolicyManager\current\device\Start" /v ConfigureStartPins_ProviderSet /t REG_DWORD /d 1 /f
+
+
+ 23
+ reg.exe add "HKLM\SOFTWARE\Microsoft\PolicyManager\current\device\Start" /v ConfigureStartPins_WinningProvider /t REG_SZ /d B5292708-1619-419B-9923-E5D9F3925E71 /f
+
+
+ 24
+ reg.exe add "HKLM\SOFTWARE\Microsoft\PolicyManager\providers\B5292708-1619-419B-9923-E5D9F3925E71\default\Device\Start" /v ConfigureStartPins /t REG_SZ /d "{ \"pinnedList\": [] }" /f
+
+
+ 25
+ reg.exe add "HKLM\SOFTWARE\Microsoft\PolicyManager\providers\B5292708-1619-419B-9923-E5D9F3925E71\default\Device\Start" /v ConfigureStartPins_LastWrite /t REG_DWORD /d 1 /f
+
+
+ 26
+ net.exe accounts /maxpwage:UNLIMITED
+
+
+ 27
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\FileSystem" /v LongPathsEnabled /t REG_DWORD /d 1 /f
+
+
+ 28
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Power" /v HiberbootEnabled /t REG_DWORD /d 0 /f
+
+
+ 29
+ reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Dsh" /v AllowNewsAndInterests /t REG_DWORD /d 0 /f
+
+
+ 30
+ reg.exe load "HKU\DefaultUser" "C:\Users\Default\NTUSER.DAT"
+
+
+ 31
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "ContentDeliveryAllowed" /t REG_DWORD /d 0 /f
+
+
+ 32
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "FeatureManagementEnabled" /t REG_DWORD /d 0 /f
+
+
+ 33
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "OEMPreInstalledAppsEnabled" /t REG_DWORD /d 0 /f
+
+
+ 34
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEnabled" /t REG_DWORD /d 0 /f
+
+
+ 35
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEverEnabled" /t REG_DWORD /d 0 /f
+
+
+ 36
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SilentInstalledAppsEnabled" /t REG_DWORD /d 0 /f
+
+
+ 37
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SoftLandingEnabled" /t REG_DWORD /d 0 /f
+
+
+ 38
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContentEnabled" /t REG_DWORD /d 0 /f
+
+
+ 39
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-310093Enabled" /t REG_DWORD /d 0 /f
+
+
+ 40
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338387Enabled" /t REG_DWORD /d 0 /f
+
+
+ 41
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338388Enabled" /t REG_DWORD /d 0 /f
+
+
+ 42
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338389Enabled" /t REG_DWORD /d 0 /f
+
+
+ 43
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338393Enabled" /t REG_DWORD /d 0 /f
+
+
+ 44
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-353698Enabled" /t REG_DWORD /d 0 /f
+
+
+ 45
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SystemPaneSuggestionsEnabled" /t REG_DWORD /d 0 /f
+
+
+ 46
+ reg.exe unload "HKU\DefaultUser"
+
+
+ 47
+ reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 0 /f
+
+
+ 48
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\BitLocker" /v "PreventDeviceEncryption" /t REG_DWORD /d 1 /f
+
+
+ 49
+ reg.exe load "HKU\DefaultUser" "C:\Users\Default\NTUSER.DAT"
+
+
+ 50
+ reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\Runonce" /v "ClassicContextMenu" /t REG_SZ /d "reg.exe add \"HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32\" /ve /f" /f
+
+
+ 51
+ reg.exe unload "HKU\DefaultUser"
+
+
+
+
+'@
+ if ((Test-CompatibleImage $imgVersion $([System.Version]::new(10,0,22000,1))) -eq $false) {
+ # Replace the placeholder text with an empty string to make it valid for Windows 10 Setup
+ $unattend = $unattend.Replace("<#REPLACEME#>", "").Trim()
+ } else {
+ # Replace the placeholder text with the Specialize pass
+ $unattend = $unattend.Replace("<#REPLACEME#>", $specPass).Trim()
+ }
+ # Replace default User and Password values with the provided parameters
+ $unattend = $unattend.Replace("USER-REPLACEME", $userName).Trim()
+ $unattend = $unattend.Replace("PW-REPLACEME", $userPassword).Trim()
+
+ # Save unattended answer file with UTF-8 encoding
+ $unattend | Out-File -FilePath "$env:temp\unattend.xml" -Force -Encoding utf8
+}
+
+function New-CheckInstall {
+
+ # using here string to embedd firstrun
+ $checkInstall = @'
+ @echo off
+ if exist "C:\windows\cpu.txt" (
+ echo C:\windows\cpu.txt exists
+ ) else (
+ echo C:\windows\cpu.txt does not exist
+ )
+ if exist "C:\windows\SerialNumber.txt" (
+ echo C:\windows\SerialNumber.txt exists
+ ) else (
+ echo C:\windows\SerialNumber.txt does not exist
+ )
+ if exist "C:\unattend.xml" (
+ echo C:\unattend.xml exists
+ ) else (
+ echo C:\unattend.xml does not exist
+ )
+ if exist "C:\Windows\Setup\Scripts\SetupComplete.cmd" (
+ echo C:\Windows\Setup\Scripts\SetupComplete.cmd exists
+ ) else (
+ echo C:\Windows\Setup\Scripts\SetupComplete.cmd does not exist
+ )
+ if exist "C:\Windows\Panther\unattend.xml" (
+ echo C:\Windows\Panther\unattend.xml exists
+ ) else (
+ echo C:\Windows\Panther\unattend.xml does not exist
+ )
+ if exist "C:\Windows\System32\Sysprep\unattend.xml" (
+ echo C:\Windows\System32\Sysprep\unattend.xml exists
+ ) else (
+ echo C:\Windows\System32\Sysprep\unattend.xml does not exist
+ )
+ if exist "C:\Windows\FirstStartup.ps1" (
+ echo C:\Windows\FirstStartup.ps1 exists
+ ) else (
+ echo C:\Windows\FirstStartup.ps1 does not exist
+ )
+ if exist "C:\Windows\winutil.ps1" (
+ echo C:\Windows\winutil.ps1 exists
+ ) else (
+ echo C:\Windows\winutil.ps1 does not exist
+ )
+ if exist "C:\Windows\LogSpecialize.txt" (
+ echo C:\Windows\LogSpecialize.txt exists
+ ) else (
+ echo C:\Windows\LogSpecialize.txt does not exist
+ )
+ if exist "C:\Windows\LogAuditUser.txt" (
+ echo C:\Windows\LogAuditUser.txt exists
+ ) else (
+ echo C:\Windows\LogAuditUser.txt does not exist
+ )
+ if exist "C:\Windows\LogOobeSystem.txt" (
+ echo C:\Windows\LogOobeSystem.txt exists
+ ) else (
+ echo C:\Windows\LogOobeSystem.txt does not exist
+ )
+ if exist "c:\windows\csup.txt" (
+ echo c:\windows\csup.txt exists
+ ) else (
+ echo c:\windows\csup.txt does not exist
+ )
+ if exist "c:\windows\LogFirstRun.txt" (
+ echo c:\windows\LogFirstRun.txt exists
+ ) else (
+ echo c:\windows\LogFirstRun.txt does not exist
+ )
+'@
+ $checkInstall | Out-File -FilePath "$env:temp\checkinstall.cmd" -Force -Encoding Ascii
+}
+
+function New-FirstRun {
+
+ # using here string to embedd firstrun
+ $firstRun = @'
+ # Set the global error action preference to continue
+ $ErrorActionPreference = "Continue"
+ function Remove-RegistryValue {
+ param (
+ [Parameter(Mandatory = $true)]
+ [string]$RegistryPath,
+
+ [Parameter(Mandatory = $true)]
+ [string]$ValueName
+ )
+
+ # Check if the registry path exists
+ if (Test-Path -Path $RegistryPath) {
+ $registryValue = Get-ItemProperty -Path $RegistryPath -Name $ValueName -ErrorAction SilentlyContinue
+
+ # Check if the registry value exists
+ if ($registryValue) {
+ # Remove the registry value
+ Remove-ItemProperty -Path $RegistryPath -Name $ValueName -Force
+ Write-Host "Registry value '$ValueName' removed from '$RegistryPath'."
+ } else {
+ Write-Host "Registry value '$ValueName' not found in '$RegistryPath'."
+ }
+ } else {
+ Write-Host "Registry path '$RegistryPath' not found."
+ }
+ }
+
+ "FirstStartup has worked" | Out-File -FilePath c:\windows\LogFirstRun.txt -Append -NoClobber
+
+ $taskbarPath = "$env:AppData\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar"
+ # Delete all files on the Taskbar
+ Get-ChildItem -Path $taskbarPath -File | Remove-Item -Force
+ Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "FavoritesRemovedChanges"
+ Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "FavoritesChanges"
+ Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "Favorites"
+
+ # Delete Edge Icon from the desktop
+ $edgeShortcutFiles = Get-ChildItem -Path $desktopPath -Filter "*Edge*.lnk"
+ # Check if Edge shortcuts exist on the desktop
+ if ($edgeShortcutFiles) {
+ foreach ($shortcutFile in $edgeShortcutFiles) {
+ # Remove each Edge shortcut
+ Remove-Item -Path $shortcutFile.FullName -Force
+ Write-Host "Edge shortcut '$($shortcutFile.Name)' removed from the desktop."
+ }
+ }
+ Remove-Item -Path "$env:USERPROFILE\Desktop\*.lnk"
+ Remove-Item -Path "C:\Users\Default\Desktop\*.lnk"
+
+ # ************************************************
+ # Create WinUtil shortcut on the desktop
+ #
+ $desktopPath = "$($env:USERPROFILE)\Desktop"
+ # Specify the target PowerShell command
+ $command = "powershell.exe -NoProfile -ExecutionPolicy Bypass -Command 'irm https://christitus.com/win | iex'"
+ # Specify the path for the shortcut
+ $shortcutPath = Join-Path $desktopPath 'winutil.lnk'
+ # Create a shell object
+ $shell = New-Object -ComObject WScript.Shell
+
+ # Create a shortcut object
+ $shortcut = $shell.CreateShortcut($shortcutPath)
+
+ if (Test-Path -Path "c:\Windows\cttlogo.png") {
+ $shortcut.IconLocation = "c:\Windows\cttlogo.png"
+ }
+
+ # Set properties of the shortcut
+ $shortcut.TargetPath = "powershell.exe"
+ $shortcut.Arguments = "-NoProfile -ExecutionPolicy Bypass -Command `"$command`""
+ # Save the shortcut
+ $shortcut.Save()
+
+ # Make the shortcut have 'Run as administrator' property on
+ $bytes = [System.IO.File]::ReadAllBytes($shortcutPath)
+ # Set byte value at position 0x15 in hex, or 21 in decimal, from the value 0x00 to 0x20 in hex
+ $bytes[0x15] = $bytes[0x15] -bor 0x20
+ [System.IO.File]::WriteAllBytes($shortcutPath, $bytes)
+
+ Write-Host "Shortcut created at: $shortcutPath"
+ #
+ # Done create WinUtil shortcut on the desktop
+ # ************************************************
+
+ Start-Process explorer
+
+'@
+ $firstRun | Out-File -FilePath "$env:temp\FirstStartup.ps1" -Force
+}
diff --git a/functions/private/Invoke-WinUtilMouseAcceleration.ps1 b/functions/private/Invoke-WinUtilMouseAcceleration.ps1
index 34375170..f29bdeee 100644
--- a/functions/private/Invoke-WinUtilMouseAcceleration.ps1
+++ b/functions/private/Invoke-WinUtilMouseAcceleration.ps1
@@ -9,14 +9,13 @@ Function Invoke-WinUtilMouseAcceleration {
#>
Param($MouseAccelerationEnabled)
- Try{
- if ($MouseAccelerationEnabled -eq $false){
+ try {
+ if ($MouseAccelerationEnabled -eq $false) {
Write-Host "Enabling Mouse Acceleration"
$MouseSpeed = 1
$MouseThreshold1 = 6
$MouseThreshold2 = 10
- }
- else {
+ } else {
Write-Host "Disabling Mouse Acceleration"
$MouseSpeed = 0
$MouseThreshold1 = 0
@@ -28,15 +27,12 @@ Function Invoke-WinUtilMouseAcceleration {
Set-ItemProperty -Path $Path -Name MouseSpeed -Value $MouseSpeed
Set-ItemProperty -Path $Path -Name MouseThreshold1 -Value $MouseThreshold1
Set-ItemProperty -Path $Path -Name MouseThreshold2 -Value $MouseThreshold2
- }
- Catch [System.Security.SecurityException] {
+ } catch [System.Security.SecurityException] {
Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
+ } catch [System.Management.Automation.ItemNotFoundException] {
Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
+ } catch {
Write-Warning "Unable to set $Name due to unhandled exception"
Write-Warning $psitem.Exception.StackTrace
}
-}
\ No newline at end of file
+}
diff --git a/functions/private/Invoke-WinUtilNumLock.ps1 b/functions/private/Invoke-WinUtilNumLock.ps1
index 97b36a94..fd7eb969 100644
--- a/functions/private/Invoke-WinUtilNumLock.ps1
+++ b/functions/private/Invoke-WinUtilNumLock.ps1
@@ -6,27 +6,26 @@ function Invoke-WinUtilNumLock {
Indicates whether to enable or disable Numlock on startup
#>
Param($Enabled)
- Try{
- if ($Enabled -eq $false){
+ try {
+ if ($Enabled -eq $false) {
Write-Host "Enabling Numlock on startup"
$value = 2
- }
- else {
+ } else {
Write-Host "Disabling Numlock on startup"
$value = 0
}
New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS
- $Path = "HKU:\.Default\Control Panel\Keyboard"
- Set-ItemProperty -Path $Path -Name InitialKeyboardIndicators -Value $value
+ $HKUPath = "HKU:\.Default\Control Panel\Keyboard"
+ $HKCUPath = "HKCU:\Control Panel\Keyboard"
+ Set-ItemProperty -Path $HKUPath -Name InitialKeyboardIndicators -Value $value
+ Set-ItemProperty -Path $HKCUPath -Name InitialKeyboardIndicators -Value $value
}
Catch [System.Security.SecurityException] {
Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
+ } catch [System.Management.Automation.ItemNotFoundException] {
Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
+ } catch {
Write-Warning "Unable to set $Name due to unhandled exception"
Write-Warning $psitem.Exception.StackTrace
}
-}
\ No newline at end of file
+}
diff --git a/functions/private/Invoke-WinUtilScript.ps1 b/functions/private/Invoke-WinUtilScript.ps1
index 4059f917..05cef26a 100644
--- a/functions/private/Invoke-WinUtilScript.ps1
+++ b/functions/private/Invoke-WinUtilScript.ps1
@@ -20,30 +20,25 @@ function Invoke-WinUtilScript {
[scriptblock]$scriptblock
)
- Try {
+ try {
Write-Host "Running Script for $name"
Invoke-Command $scriptblock -ErrorAction Stop
- }
- Catch [System.Management.Automation.CommandNotFoundException] {
+ } catch [System.Management.Automation.CommandNotFoundException] {
Write-Warning "The specified command was not found."
Write-Warning $PSItem.Exception.message
- }
- Catch [System.Management.Automation.RuntimeException] {
+ } catch [System.Management.Automation.RuntimeException] {
Write-Warning "A runtime exception occurred."
Write-Warning $PSItem.Exception.message
- }
- Catch [System.Security.SecurityException] {
+ } catch [System.Security.SecurityException] {
Write-Warning "A security exception occurred."
Write-Warning $PSItem.Exception.message
- }
- Catch [System.UnauthorizedAccessException] {
+ } catch [System.UnauthorizedAccessException] {
Write-Warning "Access denied. You do not have permission to perform this operation."
Write-Warning $PSItem.Exception.message
- }
- Catch {
+ } catch {
# Generic catch block to handle any other type of exception
Write-Warning "Unable to run script for $name due to unhandled exception"
Write-Warning $psitem.Exception.StackTrace
}
-}
\ No newline at end of file
+}
diff --git a/functions/private/Invoke-WinUtilShowExt.ps1 b/functions/private/Invoke-WinUtilShowExt.ps1
index 0b5dee6e..c90265a8 100644
--- a/functions/private/Invoke-WinUtilShowExt.ps1
+++ b/functions/private/Invoke-WinUtilShowExt.ps1
@@ -6,26 +6,22 @@ function Invoke-WinUtilShowExt {
Indicates whether to enable or disable Show file extentions
#>
Param($Enabled)
- Try{
- if ($Enabled -eq $false){
+ try {
+ if ($Enabled -eq $false) {
Write-Host "Showing file extentions"
$value = 0
- }
- else {
+ } else {
Write-Host "hiding file extensions"
$value = 1
}
$Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
Set-ItemProperty -Path $Path -Name HideFileExt -Value $value
- }
- Catch [System.Security.SecurityException] {
+ } catch [System.Security.SecurityException] {
Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
+ } catch [System.Management.Automation.ItemNotFoundException] {
Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
+ } catch {
Write-Warning "Unable to set $Name due to unhandled exception"
Write-Warning $psitem.Exception.StackTrace
}
-}
\ No newline at end of file
+}
diff --git a/functions/private/Invoke-WinUtilSnapFlyout.ps1 b/functions/private/Invoke-WinUtilSnapFlyout.ps1
index fb317ec9..bfb83c31 100644
--- a/functions/private/Invoke-WinUtilSnapFlyout.ps1
+++ b/functions/private/Invoke-WinUtilSnapFlyout.ps1
@@ -6,12 +6,11 @@ function Invoke-WinUtilSnapFlyout {
Indicates whether to enable or disable Snap Assist Flyout on startup
#>
Param($Enabled)
- Try{
- if ($Enabled -eq $false){
+ try {
+ if ($Enabled -eq $false) {
Write-Host "Enabling Snap Assist Flyout On startup"
$value = 1
- }
- else {
+ } else {
Write-Host "Disabling Snap Assist Flyout On startup"
$value = 0
}
@@ -20,15 +19,12 @@ function Invoke-WinUtilSnapFlyout {
taskkill.exe /F /IM "explorer.exe"
Set-ItemProperty -Path $Path -Name EnableSnapAssistFlyout -Value $value
Start-Process "explorer.exe"
- }
- Catch [System.Security.SecurityException] {
+ } catch [System.Security.SecurityException] {
Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
+ } catch [System.Management.Automation.ItemNotFoundException] {
Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
+ } catch {
Write-Warning "Unable to set $Name due to unhandled exception"
Write-Warning $psitem.Exception.StackTrace
}
-}
\ No newline at end of file
+}
diff --git a/functions/private/Invoke-WinUtilSnapSuggestion.ps1 b/functions/private/Invoke-WinUtilSnapSuggestion.ps1
index 6fd35a14..f2358c73 100644
--- a/functions/private/Invoke-WinUtilSnapSuggestion.ps1
+++ b/functions/private/Invoke-WinUtilSnapSuggestion.ps1
@@ -6,12 +6,11 @@ function Invoke-WinUtilSnapSuggestion {
Indicates whether to enable or disable Snap Assist Suggestions on startup
#>
Param($Enabled)
- Try{
- if ($Enabled -eq $false){
+ try {
+ if ($Enabled -eq $false) {
Write-Host "Enabling Snap Assist Suggestion On startup"
$value = 1
- }
- else {
+ } else {
Write-Host "Disabling Snap Assist Suggestion On startup"
$value = 0
}
@@ -20,15 +19,12 @@ function Invoke-WinUtilSnapSuggestion {
taskkill.exe /F /IM "explorer.exe"
Set-ItemProperty -Path $Path -Name SnapAssist -Value $value
Start-Process "explorer.exe"
- }
- Catch [System.Security.SecurityException] {
+ } catch [System.Security.SecurityException] {
Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
+ } catch [System.Management.Automation.ItemNotFoundException] {
Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
+ } catch {
Write-Warning "Unable to set $Name due to unhandled exception"
Write-Warning $psitem.Exception.StackTrace
}
-}
\ No newline at end of file
+}
diff --git a/functions/private/Invoke-WinUtilSnapWindow.ps1 b/functions/private/Invoke-WinUtilSnapWindow.ps1
index a52950d4..c76e1c7d 100644
--- a/functions/private/Invoke-WinUtilSnapWindow.ps1
+++ b/functions/private/Invoke-WinUtilSnapWindow.ps1
@@ -6,26 +6,22 @@ function Invoke-WinUtilSnapWindow {
Indicates whether to enable or disable Snapping Windows on startup
#>
Param($Enabled)
- Try{
- if ($Enabled -eq $false){
+ try {
+ if ($Enabled -eq $false) {
Write-Host "Enabling Snap Windows On startup | Relogin Required"
$value = 1
- }
- else {
+ } else {
Write-Host "Disabling Snap Windows On startup | Relogin Required"
$value = 0
}
$Path = "HKCU:\Control Panel\Desktop"
Set-ItemProperty -Path $Path -Name WindowArrangementActive -Value $value
- }
- Catch [System.Security.SecurityException] {
+ } catch [System.Security.SecurityException] {
Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
+ } catch [System.Management.Automation.ItemNotFoundException] {
Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
+ } catch {
Write-Warning "Unable to set $Name due to unhandled exception"
Write-Warning $psitem.Exception.StackTrace
}
-}
\ No newline at end of file
+}
diff --git a/functions/private/Invoke-WinUtilSponsors.ps1 b/functions/private/Invoke-WinUtilSponsors.ps1
index cf75dc27..54484500 100644
--- a/functions/private/Invoke-WinUtilSponsors.ps1
+++ b/functions/private/Invoke-WinUtilSponsors.ps1
@@ -37,9 +37,8 @@ Function Invoke-WinUtilSponsors {
# Return the sponsors
return $sponsors
- }
- catch {
+ } catch {
Write-Error "An error occurred while fetching or processing the sponsors: $_"
return $null
}
-}
\ No newline at end of file
+}
diff --git a/functions/private/Invoke-WinUtilStickyKeys.ps1 b/functions/private/Invoke-WinUtilStickyKeys.ps1
index 69689f9f..b7d8860f 100644
--- a/functions/private/Invoke-WinUtilStickyKeys.ps1
+++ b/functions/private/Invoke-WinUtilStickyKeys.ps1
@@ -6,26 +6,22 @@ Function Invoke-WinUtilStickyKeys {
Indicates whether to enable or disable Sticky Keys on startup
#>
Param($Enabled)
- Try {
- if ($Enabled -eq $false){
+ try {
+ if ($Enabled -eq $false) {
Write-Host "Enabling Sticky Keys On startup"
$value = 510
- }
- else {
+ } else {
Write-Host "Disabling Sticky Keys On startup"
$value = 58
}
$Path = "HKCU:\Control Panel\Accessibility\StickyKeys"
Set-ItemProperty -Path $Path -Name Flags -Value $value
- }
- Catch [System.Security.SecurityException] {
+ } catch [System.Security.SecurityException] {
Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
+ } catch [System.Management.Automation.ItemNotFoundException] {
Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
+ } catch {
Write-Warning "Unable to set $Name due to unhandled exception"
Write-Warning $psitem.Exception.StackTrace
}
-}
\ No newline at end of file
+}
diff --git a/functions/private/Invoke-WinUtilTaskView.ps1 b/functions/private/Invoke-WinUtilTaskView.ps1
index b9963294..3af1beb6 100644
--- a/functions/private/Invoke-WinUtilTaskView.ps1
+++ b/functions/private/Invoke-WinUtilTaskView.ps1
@@ -9,25 +9,21 @@ function Invoke-WinUtilTaskView {
#>
Param($Enabled)
- Try{
- if ($Enabled -eq $false){
+ try {
+ if ($Enabled -eq $false) {
Write-Host "Enabling Task View"
$value = 1
- }
- else {
+ } else {
Write-Host "Disabling Task View"
$value = 0
}
$Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
Set-ItemProperty -Path $Path -Name ShowTaskViewButton -Value $value
- }
- Catch [System.Security.SecurityException] {
+ } catch [System.Security.SecurityException] {
Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
+ } catch [System.Management.Automation.ItemNotFoundException] {
Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
+ } catch {
Write-Warning "Unable to set $Name due to unhandled exception"
Write-Warning $psitem.Exception.StackTrace
}
diff --git a/functions/private/Invoke-WinUtilTaskbarAlignment.ps1 b/functions/private/Invoke-WinUtilTaskbarAlignment.ps1
index 0c5e0dfa..e3f512f7 100644
--- a/functions/private/Invoke-WinUtilTaskbarAlignment.ps1
+++ b/functions/private/Invoke-WinUtilTaskbarAlignment.ps1
@@ -9,25 +9,21 @@ function Invoke-WinUtilTaskbarAlignment {
#>
Param($Enabled)
- Try{
- if ($Enabled -eq $false){
+ try {
+ if ($Enabled -eq $false) {
Write-Host "Making Taskbar Alignment to the Center"
$value = 1
- }
- else {
+ } else {
Write-Host "Making Taskbar Alignment to the Left"
$value = 0
}
$Path = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
Set-ItemProperty -Path $Path -Name "TaskbarAl" -Value $value
- }
- Catch [System.Security.SecurityException] {
+ } catch [System.Security.SecurityException] {
Write-Warning "Unable to set $Path\$Name to $value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
+ } catch [System.Management.Automation.ItemNotFoundException] {
Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
+ } catch {
Write-Warning "Unable to set $Name due to unhandled exception"
Write-Warning $psitem.Exception.StackTrace
}
diff --git a/functions/private/Invoke-WinUtilTaskbarSearch.ps1 b/functions/private/Invoke-WinUtilTaskbarSearch.ps1
index b297c023..b35d4816 100644
--- a/functions/private/Invoke-WinUtilTaskbarSearch.ps1
+++ b/functions/private/Invoke-WinUtilTaskbarSearch.ps1
@@ -9,25 +9,21 @@ function Invoke-WinUtilTaskbarSearch {
#>
Param($Enabled)
- Try{
- if ($Enabled -eq $false){
+ try {
+ if ($Enabled -eq $false) {
Write-Host "Enabling Search Button"
$value = 1
- }
- else {
+ } else {
Write-Host "Disabling Search Button"
$value = 0
}
$Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Search\"
Set-ItemProperty -Path $Path -Name SearchboxTaskbarMode -Value $value
- }
- Catch [System.Security.SecurityException] {
+ } catch [System.Security.SecurityException] {
Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
+ } catch [System.Management.Automation.ItemNotFoundException] {
Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
+ } catch {
Write-Warning "Unable to set $Name due to unhandled exception"
Write-Warning $psitem.Exception.StackTrace
}
diff --git a/functions/private/Invoke-WinUtilTaskbarWidgets.ps1 b/functions/private/Invoke-WinUtilTaskbarWidgets.ps1
index 27077f55..f8b2ce3a 100644
--- a/functions/private/Invoke-WinUtilTaskbarWidgets.ps1
+++ b/functions/private/Invoke-WinUtilTaskbarWidgets.ps1
@@ -9,25 +9,21 @@ function Invoke-WinUtilTaskbarWidgets {
#>
Param($Enabled)
- Try{
- if ($Enabled -eq $false){
+ try {
+ if ($Enabled -eq $false) {
Write-Host "Enabling Taskbar Widgets"
$value = 1
- }
- else {
+ } else {
Write-Host "Disabling Taskbar Widgets"
$value = 0
}
$Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
Set-ItemProperty -Path $Path -Name TaskbarDa -Value $value
- }
- Catch [System.Security.SecurityException] {
+ } catch [System.Security.SecurityException] {
Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
+ } catch [System.Management.Automation.ItemNotFoundException] {
Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
+ } catch {
Write-Warning "Unable to set $Name due to unhandled exception"
Write-Warning $psitem.Exception.StackTrace
}
diff --git a/functions/private/Invoke-WinUtilTweaks.ps1 b/functions/private/Invoke-WinUtilTweaks.ps1
index 90dee507..8bb06faf 100644
--- a/functions/private/Invoke-WinUtilTweaks.ps1
+++ b/functions/private/Invoke-WinUtilTweaks.ps1
@@ -22,7 +22,7 @@ function Invoke-WinUtilTweaks {
)
Write-Debug "Tweaks: $($CheckBox)"
- if($undo){
+ if($undo) {
$Values = @{
Registry = "OriginalValue"
ScheduledTask = "OriginalState"
@@ -30,8 +30,7 @@ function Invoke-WinUtilTweaks {
ScriptType = "UndoScript"
}
- }
- Else{
+ } else {
$Values = @{
Registry = "Value"
ScheduledTask = "State"
@@ -40,18 +39,18 @@ function Invoke-WinUtilTweaks {
ScriptType = "InvokeScript"
}
}
- if($sync.configs.tweaks.$CheckBox.ScheduledTask){
+ if($sync.configs.tweaks.$CheckBox.ScheduledTask) {
$sync.configs.tweaks.$CheckBox.ScheduledTask | ForEach-Object {
Write-Debug "$($psitem.Name) and state is $($psitem.$($values.ScheduledTask))"
Set-WinUtilScheduledTask -Name $psitem.Name -State $psitem.$($values.ScheduledTask)
}
}
- if($sync.configs.tweaks.$CheckBox.service){
+ if($sync.configs.tweaks.$CheckBox.service) {
Write-Debug "KeepServiceStartup is $KeepServiceStartup"
$sync.configs.tweaks.$CheckBox.service | ForEach-Object {
$changeservice = $true
- # The check for !($undo) is required, without it the script will throw an error for accessing unavailable memeber, which's the 'OriginalService' Property
+ # The check for !($undo) is required, without it the script will throw an error for accessing unavailable memeber, which's the 'OriginalService' Property
if($KeepServiceStartup -AND !($undo)) {
try {
# Check if the service exists
@@ -60,8 +59,7 @@ function Invoke-WinUtilTweaks {
Write-Debug "Service $($service.Name) was changed in the past to $($service.StartType.ToString()) from it's original type of $($psitem.$($values.OriginalService)), will not change it to $($psitem.$($values.service))"
$changeservice = $false
}
- }
- catch [System.ServiceProcess.ServiceNotFoundException] {
+ } catch [System.ServiceProcess.ServiceNotFoundException] {
Write-Warning "Service $($psitem.Name) was not found"
}
}
@@ -72,13 +70,13 @@ function Invoke-WinUtilTweaks {
}
}
}
- if($sync.configs.tweaks.$CheckBox.registry){
+ if($sync.configs.tweaks.$CheckBox.registry) {
$sync.configs.tweaks.$CheckBox.registry | ForEach-Object {
Write-Debug "$($psitem.Name) and state is $($psitem.$($values.registry))"
Set-WinUtilRegistry -Name $psitem.Name -Path $psitem.Path -Type $psitem.Type -Value $psitem.$($values.registry)
}
}
- if($sync.configs.tweaks.$CheckBox.$($values.ScriptType)){
+ if($sync.configs.tweaks.$CheckBox.$($values.ScriptType)) {
$sync.configs.tweaks.$CheckBox.$($values.ScriptType) | ForEach-Object {
Write-Debug "$($psitem) and state is $($psitem.$($values.ScriptType))"
$Scriptblock = [scriptblock]::Create($psitem)
@@ -86,8 +84,8 @@ function Invoke-WinUtilTweaks {
}
}
- if(!$undo){
- if($sync.configs.tweaks.$CheckBox.appx){
+ if(!$undo) {
+ if($sync.configs.tweaks.$CheckBox.appx) {
$sync.configs.tweaks.$CheckBox.appx | ForEach-Object {
Write-Debug "UNDO $($psitem.Name)"
Remove-WinUtilAPPX -Name $psitem
diff --git a/functions/private/Invoke-WinUtilVerboseLogon.ps1 b/functions/private/Invoke-WinUtilVerboseLogon.ps1
index 997050f9..9bed241c 100644
--- a/functions/private/Invoke-WinUtilVerboseLogon.ps1
+++ b/functions/private/Invoke-WinUtilVerboseLogon.ps1
@@ -6,26 +6,22 @@ function Invoke-WinUtilVerboseLogon {
Indicates whether to enable or disable VerboseLogon messages
#>
Param($Enabled)
- Try{
- if ($Enabled -eq $false){
+ try {
+ if ($Enabled -eq $false) {
Write-Host "Enabling Verbose Logon Messages"
$value = 1
- }
- else {
+ } else {
Write-Host "Disabling Verbose Logon Messages"
$value = 0
}
$Path = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"
Set-ItemProperty -Path $Path -Name VerboseStatus -Value $value
- }
- Catch [System.Security.SecurityException] {
+ } catch [System.Security.SecurityException] {
Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
+ } catch [System.Management.Automation.ItemNotFoundException] {
Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
+ } catch {
Write-Warning "Unable to set $Name due to unhandled exception"
Write-Warning $psitem.Exception.StackTrace
}
-}
\ No newline at end of file
+}
diff --git a/functions/private/Invoke-WinUtilWingetProgram.ps1 b/functions/private/Invoke-WinUtilWingetProgram.ps1
index 4b915677..f3d495f7 100644
--- a/functions/private/Invoke-WinUtilWingetProgram.ps1
+++ b/functions/private/Invoke-WinUtilWingetProgram.ps1
@@ -15,9 +15,8 @@ Function Invoke-WinUtilWingetProgram {
#>
param(
- [Parameter(Mandatory, Position=0)]
- $Programs,
-
+ [Parameter(Mandatory, Position=0)]$Programs,
+
[Parameter(Mandatory, Position=1)]
[ValidateSet("Install", "Uninstall")]
[String]$Action
@@ -36,7 +35,7 @@ Function Invoke-WinUtilWingetProgram {
.PARAMETER credential
The PSCredential Object of the user that should be used to run winget
-
+
.NOTES
Invoke Winget uses the public variable $Action defined outside the function to determine if a Program should be installed or removed
#>
@@ -47,10 +46,9 @@ Function Invoke-WinUtilWingetProgram {
)
$commonArguments = "--id $wingetId --silent"
- $arguments = if ($Action -eq "Install"){
- "install $commonArguments --accept-source-agreements --accept-package-agreements $(if ($scope) {" --scope $scope"})"
- }
- else {
+ $arguments = if ($Action -eq "Install") {
+ "install $commonArguments --accept-source-agreements --accept-package-agreements $(if ($scope) {" --scope $scope"})"
+ } else {
"uninstall $commonArguments"
}
@@ -65,15 +63,15 @@ Function Invoke-WinUtilWingetProgram {
if ($credential) {
$processParams.credential = $credential
}
-
- return (Start-Process @processParams).ExitCode
+
+ return (Start-Process @processParams).ExitCode
}
Function Invoke-Install {
<#
.SYNOPSIS
Contains the Install Logic and return code handling from winget
-
+
.PARAMETER Program
The Winget ID of the Program that should be installed
#>
@@ -119,14 +117,14 @@ Function Invoke-WinUtilWingetProgram {
<#
.SYNOPSIS
Contains the Uninstall Logic and return code handling from winget
-
+
.PARAMETER Program
The Winget ID of the Program that should be uninstalled
#>
param (
[psobject]$Program
)
-
+
try {
$status = Invoke-Winget -wingetId $Program
if ($status -eq 0) {
@@ -144,21 +142,21 @@ Function Invoke-WinUtilWingetProgram {
$count = $Programs.Count
$failedPackages = @()
-
+
Write-Host "==========================================="
Write-Host "-- Configuring winget packages ---"
Write-Host "==========================================="
-
+
for ($i = 0; $i -lt $count; $i++) {
$Program = $Programs[$i]
$result = $false
Set-WinUtilProgressBar -label "$Action $($Program)" -percent ($i / $count * 100)
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -value ($i / $count)})
-
+
$result = switch ($Action) {
"Install" {Invoke-Install -Program $Program}
"Uninstall" {Invoke-Uninstall -Program $Program}
- default {throw "[Install-WinUtilProgramWinget] Invalid action: $Action"}
+ default {throw "[Install-WinUtilProgramWinget] Invalid action: $Action"}
}
if (-not $result) {
diff --git a/functions/private/Remove-WinUtilAPPX.ps1 b/functions/private/Remove-WinUtilAPPX.ps1
index e54a3475..e90a101b 100644
--- a/functions/private/Remove-WinUtilAPPX.ps1
+++ b/functions/private/Remove-WinUtilAPPX.ps1
@@ -15,22 +15,19 @@ function Remove-WinUtilAPPX {
$Name
)
- Try {
+ try {
Write-Host "Removing $Name"
Get-AppxPackage "*$Name*" | Remove-AppxPackage -ErrorAction SilentlyContinue
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like "*$Name*" | Remove-AppxProvisionedPackage -Online -ErrorAction SilentlyContinue
- }
- Catch [System.Exception] {
+ } catch [System.Exception] {
if ($psitem.Exception.Message -like "*The requested operation requires elevation*") {
Write-Warning "Unable to uninstall $name due to a Security Exception"
- }
- else {
+ } else {
Write-Warning "Unable to uninstall $name due to unhandled exception"
Write-Warning $psitem.Exception.StackTrace
}
- }
- Catch{
+ } catch {
Write-Warning "Unable to uninstall $name due to unhandled exception"
Write-Warning $psitem.Exception.StackTrace
}
-}
\ No newline at end of file
+}
diff --git a/functions/private/Set-WinUtilDNS.ps1 b/functions/private/Set-WinUtilDNS.ps1
index 0810e6d2..3aa4f157 100644
--- a/functions/private/Set-WinUtilDNS.ps1
+++ b/functions/private/Set-WinUtilDNS.ps1
@@ -12,24 +12,22 @@ function Set-WinUtilDNS {
#>
param($DNSProvider)
- if($DNSProvider -eq "Default"){return}
- Try{
+ if($DNSProvider -eq "Default") {return}
+ try {
$Adapters = Get-NetAdapter | Where-Object {$_.Status -eq "Up"}
Write-Host "Ensuring DNS is set to $DNSProvider on the following interfaces"
Write-Host $($Adapters | Out-String)
- Foreach ($Adapter in $Adapters){
- if($DNSProvider -eq "DHCP"){
+ Foreach ($Adapter in $Adapters) {
+ if($DNSProvider -eq "DHCP") {
Set-DnsClientServerAddress -InterfaceIndex $Adapter.ifIndex -ResetServerAddresses
- }
- Else{
+ } else {
Set-DnsClientServerAddress -InterfaceIndex $Adapter.ifIndex -ServerAddresses ("$($sync.configs.dns.$DNSProvider.Primary)", "$($sync.configs.dns.$DNSProvider.Secondary)")
Set-DnsClientServerAddress -InterfaceIndex $Adapter.ifIndex -ServerAddresses ("$($sync.configs.dns.$DNSProvider.Primary6)", "$($sync.configs.dns.$DNSProvider.Secondary6)")
}
}
- }
- Catch{
+ } catch {
Write-Warning "Unable to set DNS Provider due to an unhandled exception"
Write-Warning $psitem.Exception.StackTrace
}
-}
\ No newline at end of file
+}
diff --git a/functions/private/Set-WinUtilProgressbar.ps1 b/functions/private/Set-WinUtilProgressbar.ps1
index 9ca0e0a1..e63bd202 100644
--- a/functions/private/Set-WinUtilProgressbar.ps1
+++ b/functions/private/Set-WinUtilProgressbar.ps1
@@ -1,12 +1,12 @@
function Set-WinUtilProgressbar{
<#
.SYNOPSIS
- This function is used to Update the Progress Bar displayed in the winutil GUI.
- It will be automatically hidden if the user clicks something and no process is running
+ This function is used to Update the Progress Bar displayed in the winutil GUI.
+ It will be automatically hidden if the user clicks something and no process is running
.PARAMETER Label
The Text to be overlayed onto the Progress Bar
.PARAMETER PERCENT
- The percentage of the Progress Bar that should be filled (0-100)
+ The percentage of the Progress Bar that should be filled (0-100)
.PARAMETER Hide
If provided, the Progress Bar and the label will be hidden
#>
@@ -16,16 +16,15 @@ function Set-WinUtilProgressbar{
[int]$Percent,
$Hide
)
- if ($hide){
- $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBarLabel.Visibility = "Collapsed"})
- $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBar.Visibility = "Collapsed"})
+ if ($hide) {
+ $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBarLabel.Visibility = "Collapsed"})
+ $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBar.Visibility = "Collapsed"})
+ } else {
+ $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBarLabel.Visibility = "Visible"})
+ $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBar.Visibility = "Visible"})
}
- else{
- $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBarLabel.Visibility = "Visible"})
- $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBar.Visibility = "Visible"})
- }
- $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBarLabel.Content.Text = $label})
- $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBarLabel.Content.ToolTip = $label})
+ $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBarLabel.Content.Text = $label})
+ $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBarLabel.Content.ToolTip = $label})
$sync.form.Dispatcher.Invoke([action]{ $sync.ProgressBar.Value = $percent})
-
-}
\ No newline at end of file
+
+}
diff --git a/functions/private/Set-WinUtilRegistry.ps1 b/functions/private/Set-WinUtilRegistry.ps1
index a5c67fbc..e3f66e2e 100644
--- a/functions/private/Set-WinUtilRegistry.ps1
+++ b/functions/private/Set-WinUtilRegistry.ps1
@@ -27,8 +27,8 @@ function Set-WinUtilRegistry {
$Value
)
- Try{
- if(!(Test-Path 'HKU:\')){New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS}
+ try {
+ if(!(Test-Path 'HKU:\')) {New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS}
If (!(Test-Path $Path)) {
Write-Host "$Path was not found, Creating..."
@@ -37,14 +37,11 @@ function Set-WinUtilRegistry {
Write-Host "Set $Path\$Name to $Value"
Set-ItemProperty -Path $Path -Name $Name -Type $Type -Value $Value -Force -ErrorAction Stop | Out-Null
- }
- Catch [System.Security.SecurityException] {
+ } catch [System.Security.SecurityException] {
Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
+ } catch [System.Management.Automation.ItemNotFoundException] {
Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
+ } catch {
Write-Warning "Unable to set $Name due to unhandled exception"
Write-Warning $psitem.Exception.StackTrace
}
diff --git a/functions/private/Set-WinUtilScheduledTask.ps1 b/functions/private/Set-WinUtilScheduledTask.ps1
index 453f7793..e6ee2bef 100644
--- a/functions/private/Set-WinUtilScheduledTask.ps1
+++ b/functions/private/Set-WinUtilScheduledTask.ps1
@@ -19,27 +19,24 @@ function Set-WinUtilScheduledTask {
$State
)
- Try{
- if($State -eq "Disabled"){
+ try {
+ if($State -eq "Disabled") {
Write-Host "Disabling Scheduled Task $Name"
Disable-ScheduledTask -TaskName $Name -ErrorAction Stop
}
- if($State -eq "Enabled"){
+ if($State -eq "Enabled") {
Write-Host "Enabling Scheduled Task $Name"
Enable-ScheduledTask -TaskName $Name -ErrorAction Stop
}
- }
- Catch [System.Exception]{
- if($psitem.Exception.Message -like "*The system cannot find the file specified*"){
+ } catch [System.Exception] {
+ if($psitem.Exception.Message -like "*The system cannot find the file specified*") {
Write-Warning "Scheduled Task $name was not Found"
- }
- Else{
+ } else {
Write-Warning "Unable to set $Name due to unhandled exception"
Write-Warning $psitem.Exception.Message
}
- }
- Catch{
+ } catch {
Write-Warning "Unable to run script for $name due to unhandled exception"
Write-Warning $psitem.Exception.StackTrace
}
-}
\ No newline at end of file
+}
diff --git a/functions/private/Set-WinUtilService.ps1 b/functions/private/Set-WinUtilService.ps1
index e16b2597..d2a7d459 100644
--- a/functions/private/Set-WinUtilService.ps1
+++ b/functions/private/Set-WinUtilService.ps1
@@ -26,11 +26,9 @@ Function Set-WinUtilService {
# Service exists, proceed with changing properties
$service | Set-Service -StartupType $StartupType -ErrorAction Stop
- }
- catch [System.ServiceProcess.ServiceNotFoundException] {
+ } catch [System.ServiceProcess.ServiceNotFoundException] {
Write-Warning "Service $Name was not found"
- }
- catch {
+ } catch {
Write-Warning "Unable to set $Name due to unhandled exception"
Write-Warning $_.Exception.Message
}
diff --git a/functions/private/Set-WinUtilTaskbarItem.ps1 b/functions/private/Set-WinUtilTaskbarItem.ps1
index 7f290fac..465ca4c3 100644
--- a/functions/private/Set-WinUtilTaskbarItem.ps1
+++ b/functions/private/Set-WinUtilTaskbarItem.ps1
@@ -83,4 +83,4 @@ function Set-WinUtilTaskbaritem {
if ($description) {
$sync["Form"].taskbarItemInfo.Description = $description
}
-}
\ No newline at end of file
+}
diff --git a/functions/private/Set-WinUtilUiTheme.ps1 b/functions/private/Set-WinUtilUiTheme.ps1
index 8e890d08..9f42faef 100644
--- a/functions/private/Set-WinUtilUiTheme.ps1
+++ b/functions/private/Set-WinUtilUiTheme.ps1
@@ -1,24 +1,24 @@
function Set-WinUtilUITheme {
<#
+ .SYNOPSIS
+ Sets the theme of the XAML file
- .SYNOPSIS
- Sets the theme of the XAML file
+ .PARAMETER inputXML
+ A string representing the XAML object to modify
- .PARAMETER inputXML
- A string representing the XAML object to modify
-
- .PARAMETER themeName
- The name of the theme to set the XAML to. Defaults to 'matrix'
-
- .EXAMPLE
- Set-WinUtilUITheme -inputXAML $inputXAML
+ .PARAMETER themeName
+ The name of the theme to set the XAML to. Defaults to 'matrix'
+ .EXAMPLE
+ Set-WinUtilUITheme -inputXAML $inputXAML
#>
- param (
+
+ param
+ (
[Parameter(Mandatory, position=0)]
- [string] $inputXML,
+ [string]$inputXML,
[Parameter(position=1)]
- [string] $themeName = 'matrix'
+ [string]$themeName = 'matrix'
)
function Invoke-Theming {
diff --git a/functions/private/Show-CustomDialog.ps1 b/functions/private/Show-CustomDialog.ps1
index 236a3d62..7180b60c 100644
--- a/functions/private/Show-CustomDialog.ps1
+++ b/functions/private/Show-CustomDialog.ps1
@@ -44,13 +44,14 @@ function Show-CustomDialog {
Add-Type -AssemblyName PresentationFramework
# Define theme colors
- $foregroundColor = [Windows.Media.Brushes]::White
- $backgroundColor = [Windows.Media.Brushes]::Black
+ $foregroundColor = $sync.configs.themes.$ctttheme.MainForegroundColor
+ $backgroundColor = $sync.configs.themes.$ctttheme.MainBackgroundColor
$font = New-Object Windows.Media.FontFamily("Consolas")
- $borderColor = [Windows.Media.Brushes]::Green
- $buttonBackgroundColor = [Windows.Media.Brushes]::Black
- $buttonForegroundColor = [Windows.Media.Brushes]::White
+ $borderColor = $sync.configs.themes.$ctttheme.BorderColor # ButtonInstallBackgroundColor
+ $buttonBackgroundColor = $sync.configs.themes.$ctttheme.ButtonInstallBackgroundColor
+ $buttonForegroundColor = $sync.configs.themes.$ctttheme.ButtonInstallForegroundColor
$shadowColor = [Windows.Media.ColorConverter]::ConvertFromString("#AAAAAAAA")
+ $logocolor = $sync.configs.themes.$ctttheme.ButtonBackgroundPressedColor
# Create a custom dialog window
$dialog = New-Object Windows.Window
@@ -180,7 +181,7 @@ $cttLogoPath = @"
# Add SVG path
$svgPath = New-Object Windows.Shapes.Path
$svgPath.Data = [Windows.Media.Geometry]::Parse($cttLogoPath)
- $svgPath.Fill = $foregroundColor # Set fill color to white
+ $svgPath.Fill = $logocolor # Set fill color to white
# Add SVG path to Viewbox
$viewbox.Child = $svgPath
@@ -192,7 +193,7 @@ $cttLogoPath = @"
$winutilTextBlock = New-Object Windows.Controls.TextBlock
$winutilTextBlock.Text = "Winutil"
$winutilTextBlock.FontSize = $HeaderFontSize
- $winutilTextBlock.Foreground = $foregroundColor
+ $winutilTextBlock.Foreground = $logocolor
$winutilTextBlock.Margin = New-Object Windows.Thickness(10, 5, 10, 5) # Add margins around the text block
$stackPanel.Children.Add($winutilTextBlock)
# Add TextBlock for information with text wrapping and margins
@@ -219,18 +220,19 @@ $cttLogoPath = @"
$hyperlink.NavigateUri = New-Object System.Uri($match.Groups[1].Value)
$hyperlink.Inlines.Add($match.Groups[2].Value)
$hyperlink.TextDecorations = [Windows.TextDecorations]::None # Remove underline
- $hyperlink.Foreground = $foregroundColor
+ $hyperlink.Foreground = $sync.configs.themes.$ctttheme.LinkForegroundColor
+
$hyperlink.Add_Click({
param($sender, $args)
Start-Process $sender.NavigateUri.AbsoluteUri
})
$hyperlink.Add_MouseEnter({
param($sender, $args)
- $sender.Foreground = [Windows.Media.Brushes]::LightGray
+ $sender.Foreground = $sync.configs.themes.$ctttheme.LinkHoverForegroundColor
})
$hyperlink.Add_MouseLeave({
param($sender, $args)
- $sender.Foreground = $foregroundColor
+ $sender.Foreground = $sync.configs.themes.$ctttheme.LinkForegroundColor
})
$messageTextBlock.Inlines.Add($hyperlink)
diff --git a/functions/private/Test-WinUtilPackageManager.ps1 b/functions/private/Test-WinUtilPackageManager.ps1
index 290d8adc..04feb83c 100644
--- a/functions/private/Test-WinUtilPackageManager.ps1
+++ b/functions/private/Test-WinUtilPackageManager.ps1
@@ -30,12 +30,12 @@ function Test-WinUtilPackageManager {
} catch {
Write-Warning "Winget was not found due to un-known reasons, The Stack Trace is:`n$($psitem.Exception.StackTrace)"
$wingetExists = $false
- }
+ }
# If Winget is available, Parse it's Version and give proper information to Terminal Output.
- # If it isn't available, the return of this funtion will be "not-installed", indicating that
+ # If it isn't available, the return of this funtion will be "not-installed", indicating that
# Winget isn't installed/available on The System.
- if ($wingetExists) {
+ if ($wingetExists) {
# Check if Preview Version
if ($wingetVersionFull.Contains("-preview")) {
$wingetVersion = $wingetVersionFull.Trim("-preview")
@@ -65,8 +65,7 @@ function Test-WinUtilPackageManager {
if (!$wingetOutdated) {
Write-Host " - Winget is Up to Date" -ForegroundColor Green
$status = "installed"
- }
- else {
+ } else {
Write-Host " - Winget is Out of Date" -ForegroundColor Red
$status = "outdated"
}
diff --git a/functions/private/Uninstall-WinUtilEdgeBrowser.ps1 b/functions/private/Uninstall-WinUtilEdgeBrowser.ps1
new file mode 100644
index 00000000..f090e95f
--- /dev/null
+++ b/functions/private/Uninstall-WinUtilEdgeBrowser.ps1
@@ -0,0 +1,138 @@
+Function Uninstall-WinUtilEdgeBrowser {
+ <#
+ .SYNOPSIS
+ Uninstall the Edge Browser (Chromium) from the system in an elegant way.
+ .DESCRIPTION
+ This will switch up the region to one of the EEA countries temporarily and uninstall the Edge Browser (Chromium).
+ #>
+
+ param (
+ [Parameter(Mandatory = $true)]
+ [ValidateSet("install", "uninstall")]
+ [string]$action
+ )
+
+ function Uninstall-EdgeClient {
+ param (
+ [Parameter(Mandatory = $true)]
+ [string]$Key
+ )
+
+ $originalNation = [microsoft.win32.registry]::GetValue('HKEY_USERS\.DEFAULT\Control Panel\International\Geo', 'Nation', [Microsoft.Win32.RegistryValueKind]::String)
+
+ # Set Nation to any of the EEA regions temporarily
+ # Refer: https://learn.microsoft.com/en-us/windows/win32/intl/table-of-geographical-locations
+ $tmpNation = 68 # Ireland
+ [microsoft.win32.registry]::SetValue('HKEY_USERS\.DEFAULT\Control Panel\International\Geo', 'Nation', $tmpNation, [Microsoft.Win32.RegistryValueKind]::String) | Out-Null
+
+ $baseKey = 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate'
+ $registryPath = $baseKey + '\ClientState\' + $Key
+
+ if (!(Test-Path -Path $registryPath)) {
+ Write-Host "[$Mode] Registry key not found: $registryPath"
+ return
+ }
+
+ # Remove the status flag
+ Remove-ItemProperty -Path $baseKey -Name "IsEdgeStableUninstalled" -ErrorAction SilentlyContinue | Out-Null
+
+ Remove-ItemProperty -Path $registryPath -Name "experiment_control_labels" -ErrorAction SilentlyContinue | Out-Null
+
+ $uninstallString = (Get-ItemProperty -Path $registryPath).UninstallString
+ $uninstallArguments = (Get-ItemProperty -Path $registryPath).UninstallArguments
+
+ if ([string]::IsNullOrEmpty($uninstallString) -or [string]::IsNullOrEmpty($uninstallArguments)) {
+ Write-Host "[$Mode] Cannot find uninstall methods for $Mode"
+ return
+ }
+
+ # Extra arguments to nuke it
+ $uninstallArguments += " --force-uninstall --delete-profile"
+
+ # $uninstallCommand = "`"$uninstallString`"" + $uninstallArguments
+ if (!(Test-Path -Path $uninstallString)) {
+ Write-Host "[$Mode] setup.exe not found at: $uninstallString"
+ return
+ }
+ Start-Process -FilePath $uninstallString -ArgumentList $uninstallArguments -Wait -NoNewWindow -Verbose
+
+ # Restore Nation back to the original
+ [microsoft.win32.registry]::SetValue('HKEY_USERS\.DEFAULT\Control Panel\International\Geo', 'Nation', $originalNation, [Microsoft.Win32.RegistryValueKind]::String) | Out-Null
+
+ # might not exist in some cases
+ if ((Get-ItemProperty -Path $baseKey).IsEdgeStableUninstalled -eq 1) {
+ Write-Host "[$Mode] Edge Stable has been successfully uninstalled"
+ }
+ }
+
+ function Uninstall-Edge {
+ Remove-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge" -Name "NoRemove" -ErrorAction SilentlyContinue | Out-Null
+
+ [microsoft.win32.registry]::SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdateDev", "AllowUninstall", 1, [Microsoft.Win32.RegistryValueKind]::DWord) | Out-Null
+
+ Uninstall-EdgeClient -Key '{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}'
+
+ Remove-Item -Path "Computer\\HKEY_CLASSES_ROOT\\MSEdgePDF" -ErrorAction SilentlyContinue | Out-Null
+ Remove-Item -Path "Computer\\HKEY_CLASSES_ROOT\\MSEdgeHTM" -ErrorAction SilentlyContinue | Out-Null
+ Remove-Item -Path "Computer\\HKEY_CLASSES_ROOT\\MSEdgeMHT" -ErrorAction SilentlyContinue | Out-Null
+
+ # Remove Edge Polocy reg keys
+ Remove-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Edge" -Recurse -ErrorAction SilentlyContinue | Out-Null
+
+ # Remove Edge reg keys
+ Remove-Item -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Edge" -Recurse -ErrorAction SilentlyContinue | Out-Null
+ }
+
+ function Uninstall-WebView {
+ # FIXME: might not work on some systems
+
+ Remove-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft EdgeWebView" -Name "NoRemove" -ErrorAction SilentlyContinue | Out-Null
+
+ Uninstall-EdgeClient -Key '{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}'
+ }
+
+ function Uninstall-EdgeUpdate {
+ # FIXME: might not work on some systems
+
+ Remove-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge Update" -Name "NoRemove" -ErrorAction SilentlyContinue | Out-Null
+
+ $registryPath = 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate'
+ if (!(Test-Path -Path $registryPath)) {
+ Write-Host "Registry key not found: $registryPath"
+ return
+ }
+ $uninstallCmdLine = (Get-ItemProperty -Path $registryPath).UninstallCmdLine
+
+ if ([string]::IsNullOrEmpty($uninstallCmdLine)) {
+ Write-Host "Cannot find uninstall methods for $Mode"
+ return
+ }
+
+ Start-Process cmd.exe "/c $uninstallCmdLine" -WindowStyle Hidden -Wait
+
+ # Remove EdgeUpdate reg keys
+ Remove-Item -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate" -Recurse -ErrorAction SilentlyContinue | Out-Null
+ }
+
+ function Install-Edge {
+ $tempEdgePath = "$env:TEMP\MicrosoftEdgeSetup.exe"
+
+ try {
+ write-host "Installing Edge ..."
+ Invoke-WebRequest -Uri "https://go.microsoft.com/fwlink/?linkid=2109047&Channel=Stable&language=en&consent=1" -OutFile $tempEdgePath
+ Start-Process -FilePath $tempEdgePath -ArgumentList "/silent /install" -Wait
+ Remove-item $tempEdgePath
+ write-host "Edge Installed Successfully"
+ } catch {
+ write-host "Failed to install Edge"
+ }
+ }
+
+ if ($action -eq "Install") {
+ Install-Edge
+ } elseif ($action -eq "Uninstall") {
+ Uninstall-Edge
+ Uninstall-EdgeUpdate
+ # Uninstall-WebView - WebView is needed for Visual Studio and some MS Store Games like Forza
+ }
+}
diff --git a/functions/private/Update-WinUtilProgramWinget.ps1 b/functions/private/Update-WinUtilProgramWinget.ps1
index 6fac6741..0784657d 100644
--- a/functions/private/Update-WinUtilProgramWinget.ps1
+++ b/functions/private/Update-WinUtilProgramWinget.ps1
@@ -18,4 +18,4 @@ Function Update-WinUtilProgramWinget {
$global:WinGetInstall = Start-Process -Verb runas powershell -ArgumentList "-command invoke-command -scriptblock {$wingetinstall} -argumentlist '$($ProgramsToInstall -join ",")'" -PassThru
-}
\ No newline at end of file
+}
diff --git a/functions/public/Invoke-ScratchDialog.ps1 b/functions/public/Invoke-ScratchDialog.ps1
index 9cf4ba90..53ffc8fd 100644
--- a/functions/public/Invoke-ScratchDialog.ps1
+++ b/functions/public/Invoke-ScratchDialog.ps1
@@ -18,8 +18,7 @@ function Invoke-ScratchDialog {
$filePath = $Dialog.SelectedPath
Write-Host "No ISO is chosen+ $filePath"
- if ([string]::IsNullOrEmpty($filePath))
- {
+ if ([string]::IsNullOrEmpty($filePath)) {
Write-Host "No Folder had chosen"
return
}
diff --git a/functions/public/Invoke-WPFButton.ps1 b/functions/public/Invoke-WPFButton.ps1
index ff9210dd..ac5b2f8c 100644
--- a/functions/public/Invoke-WPFButton.ps1
+++ b/functions/public/Invoke-WPFButton.ps1
@@ -14,12 +14,12 @@ function Invoke-WPFButton {
# Use this to get the name of the button
#[System.Windows.MessageBox]::Show("$Button","Chris Titus Tech's Windows Utility","OK","Info")
- if (-not $sync.ProcessRunning){
+ if (-not $sync.ProcessRunning) {
Set-WinUtilProgressBar -label "" -percent 0 -hide $true
}
-
- Switch -Wildcard ($Button){
-
+
+ Switch -Wildcard ($Button) {
+
"WPFTab?BT" {Invoke-WPFTab $Button}
"WPFinstall" {Invoke-WPFInstall}
"WPFuninstall" {Invoke-WPFUnInstall}
@@ -58,4 +58,4 @@ function Invoke-WPFButton {
"WPFCloseButton" {Invoke-WPFCloseButton}
"MicrowinScratchDirBT" {Invoke-ScratchDialog}
}
-}
\ No newline at end of file
+}
diff --git a/functions/public/Invoke-WPFCloseButton.ps1 b/functions/public/Invoke-WPFCloseButton.ps1
index 8a784fc0..5ffff15a 100644
--- a/functions/public/Invoke-WPFCloseButton.ps1
+++ b/functions/public/Invoke-WPFCloseButton.ps1
@@ -9,4 +9,4 @@ function Invoke-WPFCloseButton {
#>
$sync["Form"].Close()
Write-Host "Bye bye!"
-}
\ No newline at end of file
+}
diff --git a/functions/public/Invoke-WPFControlPanel.ps1 b/functions/public/Invoke-WPFControlPanel.ps1
index f5574a11..eb0fdb2a 100644
--- a/functions/public/Invoke-WPFControlPanel.ps1
+++ b/functions/public/Invoke-WPFControlPanel.ps1
@@ -10,7 +10,7 @@ function Invoke-WPFControlPanel {
#>
param($Panel)
- switch ($Panel){
+ switch ($Panel) {
"WPFPanelcontrol" {cmd /c control}
"WPFPanelnetwork" {cmd /c ncpa.cpl}
"WPFPanelpower" {cmd /c powercfg.cpl}
@@ -19,4 +19,4 @@ function Invoke-WPFControlPanel {
"WPFPanelsystem" {cmd /c sysdm.cpl}
"WPFPaneluser" {cmd /c "control userpasswords2"}
}
-}
\ No newline at end of file
+}
diff --git a/functions/public/Invoke-WPFFeatureInstall.ps1 b/functions/public/Invoke-WPFFeatureInstall.ps1
index 57cbc38e..dd9995d2 100644
--- a/functions/public/Invoke-WPFFeatureInstall.ps1
+++ b/functions/public/Invoke-WPFFeatureInstall.ps1
@@ -6,7 +6,7 @@ function Invoke-WPFFeatureInstall {
#>
- if($sync.ProcessRunning){
+ if($sync.ProcessRunning) {
$msg = "[Invoke-WPFFeatureInstall] Install process is currently running."
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
return
@@ -17,7 +17,7 @@ function Invoke-WPFFeatureInstall {
Invoke-WPFRunspace -ArgumentList $Features -DebugPreference $DebugPreference -ScriptBlock {
param($Features, $DebugPreference)
$sync.ProcessRunning = $true
- if ($Features.count -eq 1){
+ if ($Features.count -eq 1) {
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" })
} else {
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" })
@@ -33,4 +33,4 @@ function Invoke-WPFFeatureInstall {
Write-Host "--- A Reboot may be required ---"
Write-Host "==================================="
}
-}
\ No newline at end of file
+}
diff --git a/functions/public/Invoke-WPFFixesNetwork.ps1 b/functions/public/Invoke-WPFFixesNetwork.ps1
index 94ba11bd..d7417528 100644
--- a/functions/public/Invoke-WPFFixesNetwork.ps1
+++ b/functions/public/Invoke-WPFFixesNetwork.ps1
@@ -26,4 +26,4 @@ function Invoke-WPFFixesNetwork {
Write-Host "=========================================="
Write-Host "-- Network Configuration has been Reset --"
Write-Host "=========================================="
-}
\ No newline at end of file
+}
diff --git a/functions/public/Invoke-WPFFixesUpdate.ps1 b/functions/public/Invoke-WPFFixesUpdate.ps1
index 27bd7406..ab3012c9 100644
--- a/functions/public/Invoke-WPFFixesUpdate.ps1
+++ b/functions/public/Invoke-WPFFixesUpdate.ps1
@@ -66,7 +66,7 @@ function Invoke-WPFFixesUpdate {
).Trim()} catch {0}) `
<# And the current percentage is greater than the previous one #>`
-and $percent -gt $oldpercent
- ){
+ ) {
# Update the progress bar
$oldpercent = $percent
Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running chkdsk... ($percent%)" -PercentComplete $percent
@@ -93,7 +93,7 @@ function Invoke-WPFFixesUpdate {
) -join ''
).TrimStart()} catch {0}
) -and $percent -gt $oldpercent
- ){
+ ) {
# Update the progress bar
$oldpercent = $percent
Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running SFC... ($percent%)" -PercentComplete $percent
@@ -112,7 +112,7 @@ function Invoke-WPFFixesUpdate {
[int]($_ -replace "\[" -replace "=" -replace " " -replace "%" -replace "\]")
} catch {0}) `
-and $percent -gt $oldpercent
- ){
+ ) {
# Update the progress bar
$oldpercent = $percent
Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running DISM... ($percent%)" -PercentComplete $percent
@@ -137,7 +137,7 @@ function Invoke-WPFFixesUpdate {
) -join ''
).TrimStart()} catch {0}
) -and $percent -gt $oldpercent
- ){
+ ) {
# Update the progress bar
$oldpercent = $percent
Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running SFC... ($percent%)" -PercentComplete $percent
@@ -289,4 +289,4 @@ function Invoke-WPFFixesUpdate {
Write-Progress -Id 8 -Activity "Deleting BITS jobs" -Completed
Write-Progress -Id 9 -Activity "Starting Windows Update Services" -Completed
Write-Progress -Id 10 -Activity "Forcing discovery" -Completed
-}
\ No newline at end of file
+}
diff --git a/functions/public/Invoke-WPFFixesWinget.ps1 b/functions/public/Invoke-WPFFixesWinget.ps1
index d52b8141..f380c2ab 100644
--- a/functions/public/Invoke-WPFFixesWinget.ps1
+++ b/functions/public/Invoke-WPFFixesWinget.ps1
@@ -11,4 +11,4 @@ function Invoke-WPFFixesWinget {
Install-WinUtilChoco
Start-Process -FilePath "choco" -ArgumentList "install winget -y --force" -NoNewWindow -Wait
-}
\ No newline at end of file
+}
diff --git a/functions/public/Invoke-WPFGetInstalled.ps1 b/functions/public/Invoke-WPFGetInstalled.ps1
index 9ef1c3ac..6f5a326a 100644
--- a/functions/public/Invoke-WPFGetInstalled.ps1
+++ b/functions/public/Invoke-WPFGetInstalled.ps1
@@ -10,13 +10,13 @@ function Invoke-WPFGetInstalled {
#>
param($checkbox)
- if($sync.ProcessRunning){
+ if($sync.ProcessRunning) {
$msg = "[Invoke-WPFGetInstalled] Install process is currently running."
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
return
}
- if(((Test-WinUtilPackageManager -winget) -eq "not-installed") -and $checkbox -eq "winget"){
+ if(((Test-WinUtilPackageManager -winget) -eq "not-installed") -and $checkbox -eq "winget") {
return
}
@@ -26,17 +26,17 @@ function Invoke-WPFGetInstalled {
$sync.ProcessRunning = $true
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" })
- if($checkbox -eq "winget"){
+ if($checkbox -eq "winget") {
Write-Host "Getting Installed Programs..."
}
- if($checkbox -eq "tweaks"){
+ if($checkbox -eq "tweaks") {
Write-Host "Getting Installed Tweaks..."
}
$Checkboxes = Invoke-WinUtilCurrentSystem -CheckBox $checkbox
$sync.form.Dispatcher.invoke({
- foreach($checkbox in $Checkboxes){
+ foreach($checkbox in $Checkboxes) {
$sync.$checkbox.ischecked = $True
}
})
diff --git a/functions/public/Invoke-WPFGetIso.ps1 b/functions/public/Invoke-WPFGetIso.ps1
index 01390dc1..9a0b7455 100644
--- a/functions/public/Invoke-WPFGetIso.ps1
+++ b/functions/public/Invoke-WPFGetIso.ps1
@@ -6,7 +6,7 @@ function Invoke-WPFGetIso {
Write-Host "Invoking WPFGetIso"
- if($sync.ProcessRunning){
+ if($sync.ProcessRunning) {
$msg = "GetIso process is currently running."
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
return
@@ -18,22 +18,20 @@ function Invoke-WPFGetIso {
Write-Host " _ __ __ _ "
- Write-Host " /\/\ (_) ___ _ __ ___ / / /\ \ \(_) _ __ "
- Write-Host " / \ | | / __|| '__| / _ \ \ \/ \/ /| || '_ \ "
- Write-Host "/ /\/\ \| || (__ | | | (_) | \ /\ / | || | | | "
- Write-Host "\/ \/|_| \___||_| \___/ \/ \/ |_||_| |_| "
+ Write-Host " /\/\ (_) ___ _ __ ___ / / /\ \ \(_) _ __ "
+ Write-Host " / \ | | / __|| '__| / _ \ \ \/ \/ /| || '_ \ "
+ Write-Host "/ /\/\ \| || (__ | | | (_) | \ /\ / | || | | | "
+ Write-Host "\/ \/|_| \___||_| \___/ \/ \/ |_||_| |_| "
$oscdimgPath = Join-Path $env:TEMP 'oscdimg.exe'
$oscdImgFound = [bool] (Get-Command -ErrorAction Ignore -Type Application oscdimg.exe) -or (Test-Path $oscdimgPath -PathType Leaf)
Write-Host "oscdimg.exe on system: $oscdImgFound"
- if (!$oscdImgFound)
- {
+ if (!$oscdImgFound) {
$downloadFromGitHub = $sync.WPFMicrowinDownloadFromGitHub.IsChecked
$sync.BusyMessage.Visibility="Hidden"
- if (!$downloadFromGitHub)
- {
+ if (!$downloadFromGitHub) {
# only show the message to people who did check the box to download from github, if you check the box
# you consent to downloading it, no need to show extra dialogs
[System.Windows.MessageBox]::Show("oscdimge.exe is not found on the system, winutil will now attempt do download and install it using choco. This might take a long time.")
@@ -42,8 +40,7 @@ function Invoke-WPFGetIso {
Install-WinUtilChoco
$chocoFound = [bool] (Get-Command -ErrorAction Ignore -Type Application choco)
Write-Host "choco on system: $chocoFound"
- if (!$chocoFound)
- {
+ if (!$chocoFound) {
[System.Windows.MessageBox]::Show("choco.exe is not found on the system, you need choco to download oscdimg.exe")
return
}
@@ -51,8 +48,7 @@ function Invoke-WPFGetIso {
Start-Process -Verb runas -FilePath powershell.exe -ArgumentList "choco install windows-adk-oscdimg"
[System.Windows.MessageBox]::Show("oscdimg is installed, now close, reopen PowerShell terminal and re-launch winutil.ps1")
return
- }
- else {
+ } else {
[System.Windows.MessageBox]::Show("oscdimge.exe is not found on the system, winutil will now attempt do download and install it from github. This might take a long time.")
Get-Oscdimg -oscdimgPath $oscdimgPath
$oscdImgFound = Test-Path $oscdimgPath -PathType Leaf
@@ -60,8 +56,7 @@ function Invoke-WPFGetIso {
$msg = "oscdimg was not downloaded can not proceed"
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error)
return
- }
- else {
+ } else {
Write-Host "oscdimg.exe was successfully downloaded from github"
}
}
@@ -74,16 +69,14 @@ function Invoke-WPFGetIso {
$openFileDialog.ShowDialog() | Out-Null
$filePath = $openFileDialog.FileName
- if ([string]::IsNullOrEmpty($filePath))
- {
+ if ([string]::IsNullOrEmpty($filePath)) {
Write-Host "No ISO is chosen"
$sync.BusyMessage.Visibility="Hidden"
return
}
Write-Host "File path $($filePath)"
- if (-not (Test-Path -Path $filePath -PathType Leaf))
- {
+ if (-not (Test-Path -Path "$filePath" -PathType Leaf)) {
$msg = "File you've chosen doesn't exist"
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error)
return
@@ -92,26 +85,22 @@ function Invoke-WPFGetIso {
Set-WinUtilTaskbaritem -state "Indeterminate" -overlay "logo"
# Detect the file size of the ISO and compare it with the free space of the system drive
- $isoSize = (Get-Item -Path $filePath).Length
+ $isoSize = (Get-Item -Path "$filePath").Length
Write-Debug "Size of ISO file: $($isoSize) bytes"
# Use this procedure to get the free space of the drive depending on where the user profile folder is stored.
# This is done to guarantee a dynamic solution, as the installation drive may be mounted to a letter different than C
$driveSpace = (Get-Volume -DriveLetter ([IO.Path]::GetPathRoot([Environment]::GetFolderPath([Environment+SpecialFolder]::UserProfile)).Replace(":\", "").Trim())).SizeRemaining
Write-Debug "Free space on installation drive: $($driveSpace) bytes"
- if ($driveSpace -lt ($isoSize * 2))
- {
+ if ($driveSpace -lt ($isoSize * 2)) {
# It's not critical and we _may_ continue. Output a warning
Write-Warning "You may not have enough space for this operation. Proceed at your own risk."
}
- elseif ($driveSpace -lt $isoSize)
- {
+ elseif ($driveSpace -lt $isoSize) {
# It's critical and we can't continue. Output an error
Write-Host "You don't have enough space for this operation. You need at least $([Math]::Round(($isoSize / ([Math]::Pow(1024, 2))) * 2, 2)) MB of free space to copy the ISO files to a temp directory and to be able to perform additional operations."
Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning"
return
- }
- else
- {
+ } else {
Write-Host "You have enough space for this operation."
}
@@ -133,7 +122,7 @@ function Invoke-WPFGetIso {
# there is probably a better way of doing this, I don't have time to figure this out
$sync.MicrowinIsoDrive.Text = $driveLetter
- $mountedISOPath = (Split-Path -Path $filePath)
+ $mountedISOPath = (Split-Path -Path "$filePath")
if ($sync.MicrowinScratchDirBox.Text.Trim() -eq "Scratch") {
$sync.MicrowinScratchDirBox.Text =""
}
@@ -151,14 +140,12 @@ function Invoke-WPFGetIso {
}
# Detect if the folders already exist and remove them
- if (($sync.MicrowinMountDir.Text -ne "") -and (Test-Path -Path $sync.MicrowinMountDir.Text))
- {
+ if (($sync.MicrowinMountDir.Text -ne "") -and (Test-Path -Path $sync.MicrowinMountDir.Text)) {
try {
Write-Host "Deleting temporary files from previous run. Please wait..."
Remove-Item -Path $sync.MicrowinMountDir.Text -Recurse -Force
Remove-Item -Path $sync.MicrowinScratchDir.Text -Recurse -Force
- }
- catch {
+ } catch {
Write-Host "Could not delete temporary files. You need to delete those manually."
}
}
@@ -199,16 +186,14 @@ function Invoke-WPFGetIso {
$wimFile = "$mountDir\sources\install.wim"
Write-Host "Getting image information $wimFile"
- if ((-not (Test-Path -Path $wimFile -PathType Leaf)) -and (-not (Test-Path -Path $wimFile.Replace(".wim", ".esd").Trim() -PathType Leaf)))
- {
+ if ((-not (Test-Path -Path "$wimFile" -PathType Leaf)) -and (-not (Test-Path -Path "$($wimFile.Replace(".wim", ".esd").Trim())" -PathType Leaf))) {
$msg = "Neither install.wim nor install.esd exist in the image, this could happen if you use unofficial Windows images. Please don't use shady images from the internet, use only official images. Here are instructions how to download ISO images if the Microsoft website is not showing the link to download and ISO. https://www.techrepublic.com/article/how-to-download-a-windows-10-iso-file-without-using-the-media-creation-tool/"
Write-Host $msg
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error)
Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning"
throw
}
- elseif ((-not (Test-Path -Path $wimFile -PathType Leaf)) -and (Test-Path -Path $wimFile.Replace(".wim", ".esd").Trim() -PathType Leaf))
- {
+ elseif ((-not (Test-Path -Path $wimFile -PathType Leaf)) -and (Test-Path -Path $wimFile.Replace(".wim", ".esd").Trim() -PathType Leaf)) {
Write-Host "Install.esd found on the image. It needs to be converted to a WIM file in order to begin processing"
$wimFile = $wimFile.Replace(".wim", ".esd").Trim()
}
@@ -221,8 +206,7 @@ function Invoke-WPFGetIso {
$sync.MicrowinWindowsFlavors.SelectedIndex = 0
Write-Host "Finding suitable Pro edition. This can take some time. Do note that this is an automatic process that might not select the edition you want."
Get-WindowsImage -ImagePath $wimFile | ForEach-Object {
- if ((Get-WindowsImage -ImagePath $wimFile -Index $_.ImageIndex).EditionId -eq "Professional")
- {
+ if ((Get-WindowsImage -ImagePath $wimFile -Index $_.ImageIndex).EditionId -eq "Professional") {
# We have found the Pro edition
$sync.MicrowinWindowsFlavors.SelectedIndex = $_.ImageIndex - 1
}
@@ -247,5 +231,3 @@ function Invoke-WPFGetIso {
$sync.ProcessRunning = $false
Set-WinUtilTaskbaritem -state "None" -overlay "checkmark"
}
-
-
diff --git a/functions/public/Invoke-WPFImpex.ps1 b/functions/public/Invoke-WPFImpex.ps1
index bbac24eb..9b03cc13 100644
--- a/functions/public/Invoke-WPFImpex.ps1
+++ b/functions/public/Invoke-WPFImpex.ps1
@@ -19,31 +19,30 @@ function Invoke-WPFImpex {
$Config = $null
)
- if ($type -eq "export"){
+ if ($type -eq "export") {
$FileBrowser = New-Object System.Windows.Forms.SaveFileDialog
}
- if ($type -eq "import"){
+ if ($type -eq "import") {
$FileBrowser = New-Object System.Windows.Forms.OpenFileDialog
}
- if (-not $Config){
+ if (-not $Config) {
$FileBrowser.InitialDirectory = [Environment]::GetFolderPath('Desktop')
$FileBrowser.Filter = "JSON Files (*.json)|*.json"
$FileBrowser.ShowDialog() | Out-Null
- if($FileBrowser.FileName -eq ""){
+ if($FileBrowser.FileName -eq "") {
return
- }
- else{
+ } else {
$Config = $FileBrowser.FileName
}
}
- if ($type -eq "export"){
+ if ($type -eq "export") {
$jsonFile = Get-WinUtilCheckBoxes -unCheck $false
$jsonFile | ConvertTo-Json | Out-File $FileBrowser.FileName -Force
}
- if ($type -eq "import"){
+ if ($type -eq "import") {
$jsonFile = Get-Content $Config | ConvertFrom-Json
$flattenedJson = @()
diff --git a/functions/public/Invoke-WPFInstall.ps1 b/functions/public/Invoke-WPFInstall.ps1
index ce0ffdeb..0d880c93 100644
--- a/functions/public/Invoke-WPFInstall.ps1
+++ b/functions/public/Invoke-WPFInstall.ps1
@@ -6,7 +6,7 @@ function Invoke-WPFInstall {
#>
- if($sync.ProcessRunning){
+ if($sync.ProcessRunning) {
$msg = "[Invoke-WPFInstall] An Install process is currently running."
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
return
@@ -23,7 +23,7 @@ function Invoke-WPFInstall {
Invoke-WPFRunspace -ArgumentList $PackagesToInstall -DebugPreference $DebugPreference -ScriptBlock {
param($PackagesToInstall, $DebugPreference)
- if ($PackagesToInstall.count -eq 1){
+ if ($PackagesToInstall.count -eq 1) {
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" })
} else {
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" })
@@ -43,15 +43,15 @@ function Invoke-WPFInstall {
return $packagesWinget, $packagesChoco
}.Invoke($PackagesToInstall)
- try{
+ try {
$sync.ProcessRunning = $true
$errorPackages = @()
- if($packagesWinget.Count -gt 0){
+ if($packagesWinget.Count -gt 0) {
Install-WinUtilWinget
- $errorPackages += Invoke-WinUtilWingetProgram -Action Install -Programs $packagesWinget
+ $errorPackages += Invoke-WinUtilWingetProgram -Action Install -Programs $packagesWinget
$errorPackages| ForEach-Object {if($_.choco -ne "na") {$packagesChoco += $_}}
}
- if($packagesChoco.Count -gt 0){
+ if($packagesChoco.Count -gt 0) {
Install-WinUtilChoco
Install-WinUtilProgramChoco -ProgramsToInstall $packagesChoco
}
@@ -59,8 +59,7 @@ function Invoke-WPFInstall {
Write-Host "-- Installs have finished ---"
Write-Host "==========================================="
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" })
- }
- Catch {
+ } catch {
Write-Host "==========================================="
Write-Host "Error: $_"
Write-Host "==========================================="
diff --git a/functions/public/Invoke-WPFInstallUpgrade.ps1 b/functions/public/Invoke-WPFInstallUpgrade.ps1
index c62dfe1d..e30f5f1f 100644
--- a/functions/public/Invoke-WPFInstallUpgrade.ps1
+++ b/functions/public/Invoke-WPFInstallUpgrade.ps1
@@ -5,11 +5,11 @@ function Invoke-WPFInstallUpgrade {
Invokes the function that upgrades all installed programs using winget
#>
- if((Test-WinUtilPackageManager -winget) -eq "not-installed"){
+ if((Test-WinUtilPackageManager -winget) -eq "not-installed") {
return
}
- if(Get-WinUtilInstallerProcess -Process $global:WinGetInstall){
+ if(Get-WinUtilInstallerProcess -Process $global:WinGetInstall) {
$msg = "[Invoke-WPFInstallUpgrade] Install process is currently running. Please check for a powershell window labeled 'Winget Install'"
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
return
diff --git a/functions/public/Invoke-WPFMicrowin.ps1 b/functions/public/Invoke-WPFMicrowin.ps1
index 277f42bf..78cced29 100644
--- a/functions/public/Invoke-WPFMicrowin.ps1
+++ b/functions/public/Invoke-WPFMicrowin.ps1
@@ -5,32 +5,32 @@ function Invoke-WPFMicrowin {
#>
- if($sync.ProcessRunning) {
+ if($sync.ProcessRunning) {
$msg = "GetIso process is currently running."
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
return
}
- # Define the constants for Windows API
+ # Define the constants for Windows API
Add-Type @"
using System;
using System.Runtime.InteropServices;
public class PowerManagement {
- [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
- public static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags);
+ [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
+ public static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags);
- [FlagsAttribute]
- public enum EXECUTION_STATE : uint {
- ES_SYSTEM_REQUIRED = 0x00000001,
- ES_DISPLAY_REQUIRED = 0x00000002,
- ES_CONTINUOUS = 0x80000000,
- }
+ [FlagsAttribute]
+ public enum EXECUTION_STATE : uint {
+ ES_SYSTEM_REQUIRED = 0x00000001,
+ ES_DISPLAY_REQUIRED = 0x00000002,
+ ES_CONTINUOUS = 0x80000000,
+ }
}
"@
- # Prevent the machine from sleeping
- [PowerManagement]::SetThreadExecutionState([PowerManagement]::EXECUTION_STATE::ES_CONTINUOUS -bor [PowerManagement]::EXECUTION_STATE::ES_SYSTEM_REQUIRED -bor [PowerManagement]::EXECUTION_STATE::ES_DISPLAY_REQUIRED)
+ # Prevent the machine from sleeping
+ [PowerManagement]::SetThreadExecutionState([PowerManagement]::EXECUTION_STATE::ES_CONTINUOUS -bor [PowerManagement]::EXECUTION_STATE::ES_SYSTEM_REQUIRED -bor [PowerManagement]::EXECUTION_STATE::ES_DISPLAY_REQUIRED)
# Ask the user where to save the file
$SaveDialog = New-Object System.Windows.Forms.SaveFileDialog
@@ -40,470 +40,392 @@ public class PowerManagement {
if ($SaveDialog.FileName -eq "") {
Write-Host "No file name for the target image was specified"
- Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning"
+ Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning"
return
}
- Set-WinUtilTaskbaritem -state "Indeterminate" -overlay "logo"
+ Set-WinUtilTaskbaritem -state "Indeterminate" -overlay "logo"
Write-Host "Target ISO location: $($SaveDialog.FileName)"
- $index = $sync.MicrowinWindowsFlavors.SelectedValue.Split(":")[0].Trim()
- Write-Host "Index chosen: '$index' from $($sync.MicrowinWindowsFlavors.SelectedValue)"
+ $index = $sync.MicrowinWindowsFlavors.SelectedValue.Split(":")[0].Trim()
+ Write-Host "Index chosen: '$index' from $($sync.MicrowinWindowsFlavors.SelectedValue)"
- $keepPackages = $sync.WPFMicrowinKeepProvisionedPackages.IsChecked
- $keepProvisionedPackages = $sync.WPFMicrowinKeepAppxPackages.IsChecked
- $keepDefender = $sync.WPFMicrowinKeepDefender.IsChecked
- $keepEdge = $sync.WPFMicrowinKeepEdge.IsChecked
- $copyToUSB = $sync.WPFMicrowinCopyToUsb.IsChecked
- $injectDrivers = $sync.MicrowinInjectDrivers.IsChecked
- $importDrivers = $sync.MicrowinImportDrivers.IsChecked
+ $keepPackages = $sync.WPFMicrowinKeepProvisionedPackages.IsChecked
+ $keepProvisionedPackages = $sync.WPFMicrowinKeepAppxPackages.IsChecked
+ $keepDefender = $sync.WPFMicrowinKeepDefender.IsChecked
+ $keepEdge = $sync.WPFMicrowinKeepEdge.IsChecked
+ $copyToUSB = $sync.WPFMicrowinCopyToUsb.IsChecked
+ $injectDrivers = $sync.MicrowinInjectDrivers.IsChecked
+ $importDrivers = $sync.MicrowinImportDrivers.IsChecked
$mountDir = $sync.MicrowinMountDir.Text
$scratchDir = $sync.MicrowinScratchDir.Text
- # Detect if the Windows image is an ESD file and convert it to WIM
- if (-not (Test-Path -Path $mountDir\sources\install.wim -PathType Leaf) -and (Test-Path -Path $mountDir\sources\install.esd -PathType Leaf))
- {
- Write-Host "Exporting Windows image to a WIM file, keeping the index we want to work on. This can take several minutes, depending on the performance of your computer..."
- Export-WindowsImage -SourceImagePath $mountDir\sources\install.esd -SourceIndex $index -DestinationImagePath $mountDir\sources\install.wim -CompressionType "Max"
- if ($?)
- {
- Remove-Item -Path $mountDir\sources\install.esd -Force
- # Since we've already exported the image index we wanted, switch to the first one
- $index = 1
- }
- else
- {
+ # Detect if the Windows image is an ESD file and convert it to WIM
+ if (-not (Test-Path -Path "$mountDir\sources\install.wim" -PathType Leaf) -and (Test-Path -Path "$mountDir\sources\install.esd" -PathType Leaf)) {
+ Write-Host "Exporting Windows image to a WIM file, keeping the index we want to work on. This can take several minutes, depending on the performance of your computer..."
+ Export-WindowsImage -SourceImagePath $mountDir\sources\install.esd -SourceIndex $index -DestinationImagePath $mountDir\sources\install.wim -CompressionType "Max"
+ if ($?) {
+ Remove-Item -Path "$mountDir\sources\install.esd" -Force
+ # Since we've already exported the image index we wanted, switch to the first one
+ $index = 1
+ } else {
$msg = "The export process has failed and MicroWin processing cannot continue"
Write-Host "Failed to export the image"
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error)
- Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning"
+ Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning"
return
- }
- }
+ }
+ }
$imgVersion = (Get-WindowsImage -ImagePath $mountDir\sources\install.wim -Index $index).Version
# Detect image version to avoid performing MicroWin processing on Windows 8 and earlier
- if ((Test-CompatibleImage $imgVersion $([System.Version]::new(10,0,10240,0))) -eq $false)
- {
- $msg = "This image is not compatible with MicroWin processing. Make sure it isn't a Windows 8 or earlier image."
+ if ((Test-CompatibleImage $imgVersion $([System.Version]::new(10,0,10240,0))) -eq $false) {
+ $msg = "This image is not compatible with MicroWin processing. Make sure it isn't a Windows 8 or earlier image."
$dlg_msg = $msg + "`n`nIf you want more information, the version of the image selected is $($imgVersion)`n`nIf an image has been incorrectly marked as incompatible, report an issue to the developers."
- Write-Host $msg
- [System.Windows.MessageBox]::Show($dlg_msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Exclamation)
- Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning"
+ Write-Host $msg
+ [System.Windows.MessageBox]::Show($dlg_msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Exclamation)
+ Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning"
return
}
- $mountDirExists = Test-Path $mountDir
+ $mountDirExists = Test-Path $mountDir
$scratchDirExists = Test-Path $scratchDir
- if (-not $mountDirExists -or -not $scratchDirExists)
- {
+ if (-not $mountDirExists -or -not $scratchDirExists) {
Write-Error "Required directories '$mountDirExists' '$scratchDirExists' and do not exist."
- Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning"
+ Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning"
return
}
- try {
+ try {
- Write-Host "Mounting Windows image. This may take a while."
+ Write-Host "Mounting Windows image. This may take a while."
Mount-WindowsImage -ImagePath "$mountDir\sources\install.wim" -Index $index -Path "$scratchDir"
- if ($?)
- {
- Write-Host "Mounting complete! Performing removal of applications..."
- }
- else
- {
+ if ($?) {
+ Write-Host "Mounting complete! Performing removal of applications..."
+ } else {
Write-Host "Could not mount image. Exiting..."
- Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning"
+ Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning"
return
}
- if ($importDrivers)
- {
- Write-Host "Exporting drivers from active installation..."
- if (Test-Path "$env:TEMP\DRV_EXPORT")
- {
- Remove-Item "$env:TEMP\DRV_EXPORT" -Recurse -Force
- }
- if (($injectDrivers -and (Test-Path $sync.MicrowinDriverLocation.Text)))
- {
- Write-Host "Using specified driver source..."
- dism /english /online /export-driver /destination="$($sync.MicrowinDriverLocation.Text)" | Out-Host
- if ($?)
- {
- # Don't add exported drivers yet, that is run later
- Write-Host "Drivers have been exported successfully."
- }
- else
- {
- Write-Host "Failed to export drivers."
- }
- }
- else
- {
- New-Item -Path "$env:TEMP\DRV_EXPORT" -ItemType Directory -Force
- dism /english /online /export-driver /destination="$env:TEMP\DRV_EXPORT" | Out-Host
- if ($?)
- {
- Write-Host "Adding exported drivers..."
- dism /english /image="$scratchDir" /add-driver /driver="$env:TEMP\DRV_EXPORT" /recurse | Out-Host
- }
- else
- {
- Write-Host "Failed to export drivers. Continuing without importing them..."
- }
- if (Test-Path "$env:TEMP\DRV_EXPORT")
- {
- Remove-Item "$env:TEMP\DRV_EXPORT" -Recurse -Force
- }
- }
- }
+ if ($importDrivers) {
+ Write-Host "Exporting drivers from active installation..."
+ if (Test-Path "$env:TEMP\DRV_EXPORT") {
+ Remove-Item "$env:TEMP\DRV_EXPORT" -Recurse -Force
+ }
+ if (($injectDrivers -and (Test-Path "$($sync.MicrowinDriverLocation.Text)"))) {
+ Write-Host "Using specified driver source..."
+ dism /english /online /export-driver /destination="$($sync.MicrowinDriverLocation.Text)" | Out-Host
+ if ($?) {
+ # Don't add exported drivers yet, that is run later
+ Write-Host "Drivers have been exported successfully."
+ } else {
+ Write-Host "Failed to export drivers."
+ }
+ } else {
+ New-Item -Path "$env:TEMP\DRV_EXPORT" -ItemType Directory -Force
+ dism /english /online /export-driver /destination="$env:TEMP\DRV_EXPORT" | Out-Host
+ if ($?) {
+ Write-Host "Adding exported drivers..."
+ dism /english /image="$scratchDir" /add-driver /driver="$env:TEMP\DRV_EXPORT" /recurse | Out-Host
+ } else {
+ Write-Host "Failed to export drivers. Continuing without importing them..."
+ }
+ if (Test-Path "$env:TEMP\DRV_EXPORT") {
+ Remove-Item "$env:TEMP\DRV_EXPORT" -Recurse -Force
+ }
+ }
+ }
- if ($injectDrivers)
- {
- $driverPath = $sync.MicrowinDriverLocation.Text
- if (Test-Path $driverPath)
- {
- Write-Host "Adding Windows Drivers image($scratchDir) drivers($driverPath) "
- dism /English /image:$scratchDir /add-driver /driver:$driverPath /recurse | Out-Host
- }
- else
- {
- Write-Host "Path to drivers is invalid continuing without driver injection"
- }
- }
+ if ($injectDrivers) {
+ $driverPath = $sync.MicrowinDriverLocation.Text
+ if (Test-Path $driverPath) {
+ Write-Host "Adding Windows Drivers image($scratchDir) drivers($driverPath) "
+ dism /English /image:$scratchDir /add-driver /driver:$driverPath /recurse | Out-Host
+ } else {
+ Write-Host "Path to drivers is invalid continuing without driver injection"
+ }
+ }
- Write-Host "Remove Features from the image"
- Remove-Features -keepDefender:$keepDefender
- Write-Host "Removing features complete!"
+ Write-Host "Remove Features from the image"
+ Remove-Features
+ Write-Host "Removing features complete!"
+ Write-Host "Removing OS packages"
+ Remove-Packages
+ Write-Host "Removing Appx Bloat"
+ Remove-ProvisionedPackages
- if (!$keepPackages)
- {
- Write-Host "Removing OS packages"
- Remove-Packages
- }
- if (!$keepProvisionedPackages)
- {
- Write-Host "Removing Appx Bloat"
- Remove-ProvisionedPackages -keepSecurity:$keepDefender
- }
+ Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\LogFiles\WMI\RtBackup" -Directory
+ Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\DiagTrack" -Directory
+ Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\InboxApps" -Directory
+ Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\LocationNotificationWindows.exe"
+ Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Windows Photo Viewer" -Directory
+ Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Windows Photo Viewer" -Directory
+ Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Windows Media Player" -Directory
+ Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Windows Media Player" -Directory
+ Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Windows Mail" -Directory
+ Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Windows Mail" -Directory
+ Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Internet Explorer" -Directory
+ Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Internet Explorer" -Directory
+ Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\GameBarPresenceWriter"
+ Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\OneDriveSetup.exe"
+ Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\OneDrive.ico"
+ Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*narratorquickstart*" -Directory
+ Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*ParentalControls*" -Directory
+ Write-Host "Removal complete!"
- # special code, for some reason when you try to delete some inbox apps
- # we have to get and delete log files directory.
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\LogFiles\WMI\RtBackup" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\WebThreatDefSvc" -Directory
+ Write-Host "Create unattend.xml"
+ #New-Unattend
+ if ($sync.MicrowinUserName.Text -eq "")
+ {
+ New-Unattend -userName "User"
+ }
+ else
+ {
+ if ($sync.MicrowinUserPassword.Password -eq "")
+ {
+ New-Unattend -userName "$($sync.MicrowinUserName.Text)"
+ }
+ else
+ {
+ New-Unattend -userName "$($sync.MicrowinUserName.Text)" -userPassword "$($sync.MicrowinUserPassword.Password)"
+ }
+ }
+ Write-Host "Done Create unattend.xml"
+ Write-Host "Copy unattend.xml file into the ISO"
+ New-Item -ItemType Directory -Force -Path "$($scratchDir)\Windows\Panther"
+ Copy-Item "$env:temp\unattend.xml" "$($scratchDir)\Windows\Panther\unattend.xml" -force
+ New-Item -ItemType Directory -Force -Path "$($scratchDir)\Windows\System32\Sysprep"
+ Copy-Item "$env:temp\unattend.xml" "$($scratchDir)\Windows\System32\Sysprep\unattend.xml" -force
+ Copy-Item "$env:temp\unattend.xml" "$($scratchDir)\unattend.xml" -force
+ Write-Host "Done Copy unattend.xml"
- # Defender is hidden in 2 places we removed a feature above now need to remove it from the disk
- if (!$keepDefender)
- {
- Write-Host "Removing Defender"
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Windows Defender" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Windows Defender"
- }
- if (!$keepEdge)
- {
- Write-Host "Removing Edge"
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Microsoft" -mask "*edge*" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Microsoft" -mask "*edge*" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*edge*" -Directory
- }
+ Write-Host "Create FirstRun"
+ New-FirstRun
+ Write-Host "Done create FirstRun"
+ Write-Host "Copy FirstRun.ps1 into the ISO"
+ Copy-Item "$env:temp\FirstStartup.ps1" "$($scratchDir)\Windows\FirstStartup.ps1" -force
+ Write-Host "Done copy FirstRun.ps1"
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\DiagTrack" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\InboxApps" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\SecurityHealthSystray.exe"
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\LocationNotificationWindows.exe"
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Windows Photo Viewer" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Windows Photo Viewer" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Windows Media Player" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Windows Media Player" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Windows Mail" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Windows Mail" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Internet Explorer" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Internet Explorer" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\GameBarPresenceWriter"
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\OneDriveSetup.exe"
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\OneDrive.ico"
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*Windows.Search*" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*narratorquickstart*" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*Xbox*" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*ParentalControls*" -Directory
- Write-Host "Removal complete!"
+ Write-Host "Copy link to winutil.ps1 into the ISO"
+ $desktopDir = "$($scratchDir)\Windows\Users\Default\Desktop"
+ New-Item -ItemType Directory -Force -Path "$desktopDir"
+ dism /English /image:$($scratchDir) /set-profilepath:"$($scratchDir)\Windows\Users\Default"
- Write-Host "Create unattend.xml"
- New-Unattend
- Write-Host "Done Create unattend.xml"
- Write-Host "Copy unattend.xml file into the ISO"
- New-Item -ItemType Directory -Force -Path "$($scratchDir)\Windows\Panther"
- Copy-Item "$env:temp\unattend.xml" "$($scratchDir)\Windows\Panther\unattend.xml" -force
- New-Item -ItemType Directory -Force -Path "$($scratchDir)\Windows\System32\Sysprep"
- Copy-Item "$env:temp\unattend.xml" "$($scratchDir)\Windows\System32\Sysprep\unattend.xml" -force
- Copy-Item "$env:temp\unattend.xml" "$($scratchDir)\unattend.xml" -force
- Write-Host "Done Copy unattend.xml"
+ Write-Host "Copy checkinstall.cmd into the ISO"
+ New-CheckInstall
+ Copy-Item "$env:temp\checkinstall.cmd" "$($scratchDir)\Windows\checkinstall.cmd" -force
+ Write-Host "Done copy checkinstall.cmd"
- Write-Host "Create FirstRun"
- New-FirstRun
- Write-Host "Done create FirstRun"
- Write-Host "Copy FirstRun.ps1 into the ISO"
- Copy-Item "$env:temp\FirstStartup.ps1" "$($scratchDir)\Windows\FirstStartup.ps1" -force
- Write-Host "Done copy FirstRun.ps1"
+ Write-Host "Creating a directory that allows to bypass Wifi setup"
+ New-Item -ItemType Directory -Force -Path "$($scratchDir)\Windows\System32\OOBE\BYPASSNRO"
- Write-Host "Copy link to winutil.ps1 into the ISO"
- $desktopDir = "$($scratchDir)\Windows\Users\Default\Desktop"
- New-Item -ItemType Directory -Force -Path "$desktopDir"
- dism /English /image:$($scratchDir) /set-profilepath:"$($scratchDir)\Windows\Users\Default"
+ Write-Host "Loading registry"
+ reg load HKLM\zCOMPONENTS "$($scratchDir)\Windows\System32\config\COMPONENTS"
+ reg load HKLM\zDEFAULT "$($scratchDir)\Windows\System32\config\default"
+ reg load HKLM\zNTUSER "$($scratchDir)\Users\Default\ntuser.dat"
+ reg load HKLM\zSOFTWARE "$($scratchDir)\Windows\System32\config\SOFTWARE"
+ reg load HKLM\zSYSTEM "$($scratchDir)\Windows\System32\config\SYSTEM"
- # $command = "powershell.exe -NoProfile -ExecutionPolicy Bypass -Command 'irm https://christitus.com/win | iex'"
- # $shortcutPath = "$desktopDir\WinUtil.lnk"
- # $shell = New-Object -ComObject WScript.Shell
- # $shortcut = $shell.CreateShortcut($shortcutPath)
+ Write-Host "Disabling Teams"
+ reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Communications" /v "ConfigureChatAutoInstall" /t REG_DWORD /d 0 /f >$null 2>&1
+ reg add "HKLM\zSOFTWARE\Policies\Microsoft\Windows\Windows Chat" /v ChatIcon /t REG_DWORD /d 2 /f >$null 2>&1
+ reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f >$null 2>&1
+ reg query "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Communications" /v "ConfigureChatAutoInstall" >$null 2>&1
+ # Write-Host Error code $LASTEXITCODE
+ Write-Host "Done disabling Teams"
- # if (Test-Path -Path "$env:TEMP\cttlogo.png")
- # {
- # $pngPath = "$env:TEMP\cttlogo.png"
- # $icoPath = "$env:TEMP\cttlogo.ico"
- # ConvertTo-Icon -bitmapPath $pngPath -iconPath $icoPath
- # Write-Host "ICO file created at: $icoPath"
- # Copy-Item "$env:TEMP\cttlogo.png" "$($scratchDir)\Windows\cttlogo.png" -force
- # Copy-Item "$env:TEMP\cttlogo.ico" "$($scratchDir)\Windows\cttlogo.ico" -force
- # $shortcut.IconLocation = "c:\Windows\cttlogo.ico"
- # }
+ Write-Host "Bypassing system requirements (system image)"
+ reg add "HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f
+ reg add "HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f
+ reg add "HKLM\zNTUSER\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f
+ reg add "HKLM\zNTUSER\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f
+ reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassCPUCheck" /t REG_DWORD /d 1 /f
+ reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassRAMCheck" /t REG_DWORD /d 1 /f
+ reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassSecureBootCheck" /t REG_DWORD /d 1 /f
+ reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassStorageCheck" /t REG_DWORD /d 1 /f
+ reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassTPMCheck" /t REG_DWORD /d 1 /f
+ reg add "HKLM\zSYSTEM\Setup\MoSetup" /v "AllowUpgradesWithUnsupportedTPMOrCPU" /t REG_DWORD /d 1 /f
- # $shortcut.TargetPath = "powershell.exe"
- # $shortcut.Arguments = "-NoProfile -ExecutionPolicy Bypass -Command `"$command`""
- # $shortcut.Save()
- # Write-Host "Shortcut to winutil created at: $shortcutPath"
- # *************************** Automation black ***************************
+ # Prevent Windows Update Installing so called Expedited Apps
+ @(
+ 'EdgeUpdate',
+ 'DevHomeUpdate',
+ 'OutlookUpdate',
+ 'CrossDeviceUpdate'
+ ) | ForEach-Object {
+ Write-Host "Removing Windows Expedited App: $_"
- Write-Host "Copy checkinstall.cmd into the ISO"
- New-CheckInstall
- Copy-Item "$env:temp\checkinstall.cmd" "$($scratchDir)\Windows\checkinstall.cmd" -force
- Write-Host "Done copy checkinstall.cmd"
+ # Copied here After Installation (Online)
+ # reg delete "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Orchestrator\UScheduler\$_" /f | Out-Null
- Write-Host "Creating a directory that allows to bypass Wifi setup"
- New-Item -ItemType Directory -Force -Path "$($scratchDir)\Windows\System32\OOBE\BYPASSNRO"
+ # When in Offline Image
+ reg delete "HKLM\zSOFTWARE\Microsoft\WindowsUpdate\Orchestrator\UScheduler_Oobe\$_" /f | Out-Null
+ }
- Write-Host "Loading registry"
- reg load HKLM\zCOMPONENTS "$($scratchDir)\Windows\System32\config\COMPONENTS"
- reg load HKLM\zDEFAULT "$($scratchDir)\Windows\System32\config\default"
- reg load HKLM\zNTUSER "$($scratchDir)\Users\Default\ntuser.dat"
- reg load HKLM\zSOFTWARE "$($scratchDir)\Windows\System32\config\SOFTWARE"
- reg load HKLM\zSYSTEM "$($scratchDir)\Windows\System32\config\SYSTEM"
+ reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
+ Write-Host "Setting all services to start manually"
+ reg add "HKLM\zSOFTWARE\CurrentControlSet\Services" /v Start /t REG_DWORD /d 3 /f
+ # Write-Host $LASTEXITCODE
- Write-Host "Disabling Teams"
- reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Communications" /v "ConfigureChatAutoInstall" /t REG_DWORD /d 0 /f >$null 2>&1
- reg add "HKLM\zSOFTWARE\Policies\Microsoft\Windows\Windows Chat" /v ChatIcon /t REG_DWORD /d 2 /f >$null 2>&1
- reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f >$null 2>&1
- reg query "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Communications" /v "ConfigureChatAutoInstall" >$null 2>&1
- # Write-Host Error code $LASTEXITCODE
- Write-Host "Done disabling Teams"
+ Write-Host "Enabling Local Accounts on OOBE"
+ reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v "BypassNRO" /t REG_DWORD /d "1" /f
- Write-Host "Bypassing system requirements (system image)"
- reg add "HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f
- reg add "HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f
- reg add "HKLM\zNTUSER\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f
- reg add "HKLM\zNTUSER\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f
- reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassCPUCheck" /t REG_DWORD /d 1 /f
- reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassRAMCheck" /t REG_DWORD /d 1 /f
- reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassSecureBootCheck" /t REG_DWORD /d 1 /f
- reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassStorageCheck" /t REG_DWORD /d 1 /f
- reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassTPMCheck" /t REG_DWORD /d 1 /f
- reg add "HKLM\zSYSTEM\Setup\MoSetup" /v "AllowUpgradesWithUnsupportedTPMOrCPU" /t REG_DWORD /d 1 /f
+ Write-Host "Disabling Sponsored Apps"
+ reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "OemPreInstalledAppsEnabled" /t REG_DWORD /d 0 /f
+ reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEnabled" /t REG_DWORD /d 0 /f
+ reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SilentInstalledAppsEnabled" /t REG_DWORD /d 0 /f
+ reg add "HKLM\zSOFTWARE\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 1 /f
+ reg add "HKLM\zSOFTWARE\Microsoft\PolicyManager\current\device\Start" /v "ConfigureStartPins" /t REG_SZ /d '{\"pinnedList\": [{}]}' /f
+ Write-Host "Done removing Sponsored Apps"
- if (!$keepEdge)
- {
- Write-Host "Removing Edge icon from taskbar"
- reg delete "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Taskband" /v "Favorites" /f >$null 2>&1
- reg delete "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Taskband" /v "FavoritesChanges" /f >$null 2>&1
- reg delete "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Taskband" /v "Pinned" /f >$null 2>&1
- reg delete "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Taskband" /v "LayoutCycle" /f >$null 2>&1
- Write-Host "Edge icon removed from taskbar"
- if (Test-Path "HKLM:\zSOFTWARE\WOW6432Node")
- {
- # Remove leftovers of 64-bit installations
- # ---
- # Remove registry values first...
- reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge" /va /f > $null 2>&1
- reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge Update" /va /f > $null 2>&1
- reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft EdgeWebView" /va /f > $null 2>&1
- # ...then the registry keys
- reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge" /f > $null 2>&1
- reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge Update" /f > $null 2>&1
- reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft EdgeWebView" /f > $null 2>&1
- }
- }
+ Write-Host "Disabling Reserved Storage"
+ reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\ReserveManager" /v "ShippedWithReserves" /t REG_DWORD /d 0 /f
- reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
- Write-Host "Setting all services to start manually"
- reg add "HKLM\zSOFTWARE\CurrentControlSet\Services" /v Start /t REG_DWORD /d 3 /f
- # Write-Host $LASTEXITCODE
+ Write-Host "Changing theme to dark. This only works on Activated Windows"
+ reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize" /v "AppsUseLightTheme" /t REG_DWORD /d 0 /f
+ reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize" /v "SystemUsesLightTheme" /t REG_DWORD /d 0 /f
- Write-Host "Enabling Local Accounts on OOBE"
- reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v "BypassNRO" /t REG_DWORD /d "1" /f
-
- Write-Host "Disabling Sponsored Apps"
- reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "OemPreInstalledAppsEnabled" /t REG_DWORD /d 0 /f
- reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEnabled" /t REG_DWORD /d 0 /f
- reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SilentInstalledAppsEnabled" /t REG_DWORD /d 0 /f
- reg add "HKLM\zSOFTWARE\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 1 /f
- reg add "HKLM\zSOFTWARE\Microsoft\PolicyManager\current\device\Start" /v "ConfigureStartPins" /t REG_SZ /d '{\"pinnedList\": [{}]}' /f
- Write-Host "Done removing Sponsored Apps"
-
- Write-Host "Disabling Reserved Storage"
- reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\ReserveManager" /v "ShippedWithReserves" /t REG_DWORD /d 0 /f
-
- Write-Host "Changing theme to dark. This only works on Activated Windows"
- reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize" /v "AppsUseLightTheme" /t REG_DWORD /d 0 /f
- reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize" /v "SystemUsesLightTheme" /t REG_DWORD /d 0 /f
-
- } catch {
+ } catch {
Write-Error "An unexpected error occurred: $_"
} finally {
- Write-Host "Unmounting Registry..."
- reg unload HKLM\zCOMPONENTS
- reg unload HKLM\zDEFAULT
- reg unload HKLM\zNTUSER
- reg unload HKLM\zSOFTWARE
- reg unload HKLM\zSYSTEM
+ Write-Host "Unmounting Registry..."
+ reg unload HKLM\zCOMPONENTS
+ reg unload HKLM\zDEFAULT
+ reg unload HKLM\zNTUSER
+ reg unload HKLM\zSOFTWARE
+ reg unload HKLM\zSYSTEM
- Write-Host "Cleaning up image..."
- dism /English /image:$scratchDir /Cleanup-Image /StartComponentCleanup /ResetBase
- Write-Host "Cleanup complete."
+ Write-Host "Cleaning up image..."
+ dism /English /image:$scratchDir /Cleanup-Image /StartComponentCleanup /ResetBase
+ Write-Host "Cleanup complete."
- Write-Host "Unmounting image..."
- Dismount-WindowsImage -Path $scratchDir -Save
- }
+ Write-Host "Unmounting image..."
+ Dismount-WindowsImage -Path "$scratchDir" -Save
+ }
- try {
+ try {
- Write-Host "Exporting image into $mountDir\sources\install2.wim"
+ Write-Host "Exporting image into $mountDir\sources\install2.wim"
Export-WindowsImage -SourceImagePath "$mountDir\sources\install.wim" -SourceIndex $index -DestinationImagePath "$mountDir\sources\install2.wim" -CompressionType "Max"
- Write-Host "Remove old '$mountDir\sources\install.wim' and rename $mountDir\sources\install2.wim"
- Remove-Item "$mountDir\sources\install.wim"
- Rename-Item "$mountDir\sources\install2.wim" "$mountDir\sources\install.wim"
+ Write-Host "Remove old '$mountDir\sources\install.wim' and rename $mountDir\sources\install2.wim"
+ Remove-Item "$mountDir\sources\install.wim"
+ Rename-Item "$mountDir\sources\install2.wim" "$mountDir\sources\install.wim"
- if (-not (Test-Path -Path "$mountDir\sources\install.wim"))
- {
- Write-Error "Something went wrong and '$mountDir\sources\install.wim' doesn't exist. Please report this bug to the devs"
- Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning"
- return
- }
- Write-Host "Windows image completed. Continuing with boot.wim."
+ if (-not (Test-Path -Path "$mountDir\sources\install.wim")) {
+ Write-Error "Something went wrong and '$mountDir\sources\install.wim' doesn't exist. Please report this bug to the devs"
+ Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning"
+ return
+ }
+ Write-Host "Windows image completed. Continuing with boot.wim."
- # Next step boot image
- Write-Host "Mounting boot image $mountDir\sources\boot.wim into $scratchDir"
+ # Next step boot image
+ Write-Host "Mounting boot image $mountDir\sources\boot.wim into $scratchDir"
Mount-WindowsImage -ImagePath "$mountDir\sources\boot.wim" -Index 2 -Path "$scratchDir"
- if ($injectDrivers)
- {
- $driverPath = $sync.MicrowinDriverLocation.Text
- if (Test-Path $driverPath)
- {
- Write-Host "Adding Windows Drivers image($scratchDir) drivers($driverPath) "
- dism /English /image:$scratchDir /add-driver /driver:$driverPath /recurse | Out-Host
- }
- else
- {
- Write-Host "Path to drivers is invalid continuing without driver injection"
- }
- }
+ if ($injectDrivers) {
+ $driverPath = $sync.MicrowinDriverLocation.Text
+ if (Test-Path $driverPath) {
+ Write-Host "Adding Windows Drivers image($scratchDir) drivers($driverPath) "
+ dism /English /image:$scratchDir /add-driver /driver:$driverPath /recurse | Out-Host
+ } else {
+ Write-Host "Path to drivers is invalid continuing without driver injection"
+ }
+ }
- Write-Host "Loading registry..."
- reg load HKLM\zCOMPONENTS "$($scratchDir)\Windows\System32\config\COMPONENTS" >$null
- reg load HKLM\zDEFAULT "$($scratchDir)\Windows\System32\config\default" >$null
- reg load HKLM\zNTUSER "$($scratchDir)\Users\Default\ntuser.dat" >$null
- reg load HKLM\zSOFTWARE "$($scratchDir)\Windows\System32\config\SOFTWARE" >$null
- reg load HKLM\zSYSTEM "$($scratchDir)\Windows\System32\config\SYSTEM" >$null
- Write-Host "Bypassing system requirements on the setup image"
- reg add "HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f
- reg add "HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f
- reg add "HKLM\zNTUSER\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f
- reg add "HKLM\zNTUSER\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f
- reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassCPUCheck" /t REG_DWORD /d 1 /f
- reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassRAMCheck" /t REG_DWORD /d 1 /f
- reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassSecureBootCheck" /t REG_DWORD /d 1 /f
- reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassStorageCheck" /t REG_DWORD /d 1 /f
- reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassTPMCheck" /t REG_DWORD /d 1 /f
- reg add "HKLM\zSYSTEM\Setup\MoSetup" /v "AllowUpgradesWithUnsupportedTPMOrCPU" /t REG_DWORD /d 1 /f
- # Fix Computer Restarted Unexpectedly Error on New Bare Metal Install
- reg add "HKLM\zSYSTEM\Setup\Status\ChildCompletion" /v "setup.exe" /t REG_DWORD /d 3 /f
- } catch {
+ Write-Host "Loading registry..."
+ reg load HKLM\zCOMPONENTS "$($scratchDir)\Windows\System32\config\COMPONENTS" >$null
+ reg load HKLM\zDEFAULT "$($scratchDir)\Windows\System32\config\default" >$null
+ reg load HKLM\zNTUSER "$($scratchDir)\Users\Default\ntuser.dat" >$null
+ reg load HKLM\zSOFTWARE "$($scratchDir)\Windows\System32\config\SOFTWARE" >$null
+ reg load HKLM\zSYSTEM "$($scratchDir)\Windows\System32\config\SYSTEM" >$null
+ Write-Host "Bypassing system requirements on the setup image"
+ reg add "HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f
+ reg add "HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f
+ reg add "HKLM\zNTUSER\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f
+ reg add "HKLM\zNTUSER\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f
+ reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassCPUCheck" /t REG_DWORD /d 1 /f
+ reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassRAMCheck" /t REG_DWORD /d 1 /f
+ reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassSecureBootCheck" /t REG_DWORD /d 1 /f
+ reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassStorageCheck" /t REG_DWORD /d 1 /f
+ reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassTPMCheck" /t REG_DWORD /d 1 /f
+ reg add "HKLM\zSYSTEM\Setup\MoSetup" /v "AllowUpgradesWithUnsupportedTPMOrCPU" /t REG_DWORD /d 1 /f
+ # Fix Computer Restarted Unexpectedly Error on New Bare Metal Install
+ reg add "HKLM\zSYSTEM\Setup\Status\ChildCompletion" /v "setup.exe" /t REG_DWORD /d 3 /f
+ } catch {
Write-Error "An unexpected error occurred: $_"
} finally {
- Write-Host "Unmounting Registry..."
- reg unload HKLM\zCOMPONENTS
- reg unload HKLM\zDEFAULT
- reg unload HKLM\zNTUSER
- reg unload HKLM\zSOFTWARE
- reg unload HKLM\zSYSTEM
+ Write-Host "Unmounting Registry..."
+ reg unload HKLM\zCOMPONENTS
+ reg unload HKLM\zDEFAULT
+ reg unload HKLM\zNTUSER
+ reg unload HKLM\zSOFTWARE
+ reg unload HKLM\zSYSTEM
- Write-Host "Unmounting image..."
- Dismount-WindowsImage -Path $scratchDir -Save
+ Write-Host "Unmounting image..."
+ Dismount-WindowsImage -Path "$scratchDir" -Save
- Write-Host "Creating ISO image"
+ Write-Host "Creating ISO image"
- # if we downloaded oscdimg from github it will be in the temp directory so use it
- # if it is not in temp it is part of ADK and is in global PATH so just set it to oscdimg.exe
- $oscdimgPath = Join-Path $env:TEMP 'oscdimg.exe'
- $oscdImgFound = Test-Path $oscdimgPath -PathType Leaf
- if (!$oscdImgFound)
- {
- $oscdimgPath = "oscdimg.exe"
- }
+ # if we downloaded oscdimg from github it will be in the temp directory so use it
+ # if it is not in temp it is part of ADK and is in global PATH so just set it to oscdimg.exe
+ $oscdimgPath = Join-Path $env:TEMP 'oscdimg.exe'
+ $oscdImgFound = Test-Path $oscdimgPath -PathType Leaf
+ if (!$oscdImgFound) {
+ $oscdimgPath = "oscdimg.exe"
+ }
- Write-Host "[INFO] Using oscdimg.exe from: $oscdimgPath"
-
- $oscdimgProc = Start-Process -FilePath "$oscdimgPath" -ArgumentList "-m -o -u2 -udfver102 -bootdata:2#p0,e,b$mountDir\boot\etfsboot.com#pEF,e,b$mountDir\efi\microsoft\boot\efisys.bin `"$mountDir`" `"$($SaveDialog.FileName)`"" -Wait -PassThru -NoNewWindow
-
- $LASTEXITCODE = $oscdimgProc.ExitCode
-
- Write-Host "OSCDIMG Error Level : $($oscdimgProc.ExitCode)"
+ Write-Host "[INFO] Using oscdimg.exe from: $oscdimgPath"
- if ($copyToUSB)
- {
- Write-Host "Copying target ISO to the USB drive"
- Copy-ToUSB("$($SaveDialog.FileName)")
- if ($?) { Write-Host "Done Copying target ISO to USB drive!" } else { Write-Host "ISO copy failed." }
- }
+ $oscdimgProc = Start-Process -FilePath "$oscdimgPath" -ArgumentList "-m -o -u2 -udfver102 -bootdata:2#p0,e,b`"$mountDir\boot\etfsboot.com`"#pEF,e,b`"$mountDir\efi\microsoft\boot\efisys.bin`" `"$mountDir`" `"$($SaveDialog.FileName)`"" -Wait -PassThru -NoNewWindow
- Write-Host " _____ "
- Write-Host "(____ \ "
- Write-Host " _ \ \ ___ ____ ____ "
- Write-Host "| | | / _ \| _ \ / _ ) "
- Write-Host "| |__/ / |_| | | | ( (/ / "
- Write-Host "|_____/ \___/|_| |_|\____) "
+ $LASTEXITCODE = $oscdimgProc.ExitCode
- # Check if the ISO was successfully created - CTT edit
- if ($LASTEXITCODE -eq 0) {
- Write-Host "`n`nPerforming Cleanup..."
- Remove-Item -Recurse -Force "$($scratchDir)"
- Remove-Item -Recurse -Force "$($mountDir)"
- $msg = "Done. ISO image is located here: $($SaveDialog.FileName)"
- Write-Host $msg
- Set-WinUtilTaskbaritem -state "None" -overlay "checkmark"
- [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Information)
- } else {
- Write-Host "ISO creation failed. The "$($mountDir)" directory has not been removed."
- try
- {
- # This creates a new Win32 exception from which we can extract a message in the system language.
- # Now, this will NOT throw an exception
- $exitCode = New-Object System.ComponentModel.Win32Exception($LASTEXITCODE)
- Write-Host "Reason: $($exitCode.Message)"
- }
- catch
- {
- # Could not get error description from Windows APIs
- }
- }
+ Write-Host "OSCDIMG Error Level : $($oscdimgProc.ExitCode)"
- $sync.MicrowinOptionsPanel.Visibility = 'Collapsed'
+ if ($copyToUSB) {
+ Write-Host "Copying target ISO to the USB drive"
+ Copy-ToUSB("$($SaveDialog.FileName)")
+ if ($?) { Write-Host "Done Copying target ISO to USB drive!" } else { Write-Host "ISO copy failed." }
+ }
- #$sync.MicrowinFinalIsoLocation.Text = "$env:temp\microwin.iso"
+ Write-Host " _____ "
+ Write-Host "(____ \ "
+ Write-Host " _ \ \ ___ ____ ____ "
+ Write-Host "| | | / _ \| _ \ / _ ) "
+ Write-Host "| |__/ / |_| | | | ( (/ / "
+ Write-Host "|_____/ \___/|_| |_|\____) "
+
+ # Check if the ISO was successfully created - CTT edit
+ if ($LASTEXITCODE -eq 0) {
+ Write-Host "`n`nPerforming Cleanup..."
+ Remove-Item -Recurse -Force "$($scratchDir)"
+ Remove-Item -Recurse -Force "$($mountDir)"
+ $msg = "Done. ISO image is located here: $($SaveDialog.FileName)"
+ Write-Host $msg
+ Set-WinUtilTaskbaritem -state "None" -overlay "checkmark"
+ [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Information)
+ } else {
+ Write-Host "ISO creation failed. The "$($mountDir)" directory has not been removed."
+ try {
+ # This creates a new Win32 exception from which we can extract a message in the system language.
+ # Now, this will NOT throw an exception
+ $exitCode = New-Object System.ComponentModel.Win32Exception($LASTEXITCODE)
+ Write-Host "Reason: $($exitCode.Message)"
+ } catch {
+ # Could not get error description from Windows APIs
+ }
+ }
+
+ $sync.MicrowinOptionsPanel.Visibility = 'Collapsed'
+
+ #$sync.MicrowinFinalIsoLocation.Text = "$env:temp\microwin.iso"
$sync.MicrowinFinalIsoLocation.Text = "$($SaveDialog.FileName)"
- # Allow the machine to sleep again (optional)
- [PowerManagement]::SetThreadExecutionState(0)
- $sync.ProcessRunning = $false
- }
-}
\ No newline at end of file
+ # Allow the machine to sleep again (optional)
+ [PowerManagement]::SetThreadExecutionState(0)
+ $sync.ProcessRunning = $false
+ }
+}
diff --git a/functions/public/Invoke-WPFOOSU.ps1 b/functions/public/Invoke-WPFOOSU.ps1
index 4d61c83f..e2522d3d 100644
--- a/functions/public/Invoke-WPFOOSU.ps1
+++ b/functions/public/Invoke-WPFOOSU.ps1
@@ -10,11 +10,10 @@ function Invoke-WPFOOSU {
Invoke-WebRequest -Uri "https://dl5.oo-software.com/files/ooshutup10/OOSU10.exe" -OutFile $OOSU_filepath
Write-Host "Starting OO Shutup 10 ..."
Start-Process $OOSU_filepath
- }
- catch {
+ } catch {
Write-Host "Error Downloading and Running OO Shutup 10" -ForegroundColor Red
}
finally {
$ProgressPreference = $Initial_ProgressPreference
}
-}
\ No newline at end of file
+}
diff --git a/functions/public/Invoke-WPFPanelDISM.ps1 b/functions/public/Invoke-WPFPanelDISM.ps1
index a1d266cf..31b36364 100644
--- a/functions/public/Invoke-WPFPanelDISM.ps1
+++ b/functions/public/Invoke-WPFPanelDISM.ps1
@@ -27,4 +27,4 @@ function Invoke-WPFPanelDISM {
Write-Host '`n(3/4) DISM' -ForegroundColor Green; DISM /Online /Cleanup-Image /Restorehealth;
Write-Host '`n(4/4) SFC - 2nd scan' -ForegroundColor Green; sfc /scannow;
Read-Host '`nPress Enter to Continue'" -verb runas
-}
\ No newline at end of file
+}
diff --git a/functions/public/Invoke-WPFPresets.ps1 b/functions/public/Invoke-WPFPresets.ps1
index dde2ce78..1595a8f1 100644
--- a/functions/public/Invoke-WPFPresets.ps1
+++ b/functions/public/Invoke-WPFPresets.ps1
@@ -20,10 +20,9 @@ function Invoke-WPFPresets {
[bool]$imported = $false
)
- if($imported -eq $true){
+ if($imported -eq $true) {
$CheckBoxesToCheck = $preset
- }
- Else{
+ } else {
$CheckBoxesToCheck = $sync.configs.preset.$preset
}
@@ -39,8 +38,7 @@ function Invoke-WPFPresets {
foreach ($CheckBox in $CheckBoxes) {
$checkboxName = $CheckBox.Key
- if (-not $CheckBoxesToCheck)
- {
+ if (-not $CheckBoxesToCheck) {
$sync.$checkboxName.IsChecked = $false
continue
}
diff --git a/functions/public/Invoke-WPFRunspace.ps1 b/functions/public/Invoke-WPFRunspace.ps1
index cb624ef3..dfb3a6cd 100644
--- a/functions/public/Invoke-WPFRunspace.ps1
+++ b/functions/public/Invoke-WPFRunspace.ps1
@@ -38,12 +38,11 @@ function Invoke-WPFRunspace {
$script:handle = $script:powershell.BeginInvoke()
# Clean up the RunspacePool threads when they are complete, and invoke the garbage collector to clean up the memory
- if ($script:handle.IsCompleted)
- {
+ if ($script:handle.IsCompleted) {
$script:powershell.EndInvoke($script:handle)
$script:powershell.Dispose()
$sync.runspace.Dispose()
$sync.runspace.Close()
[System.GC]::Collect()
}
-}
\ No newline at end of file
+}
diff --git a/functions/public/Invoke-WPFShortcut.ps1 b/functions/public/Invoke-WPFShortcut.ps1
index 513ede95..6b25bdfe 100644
--- a/functions/public/Invoke-WPFShortcut.ps1
+++ b/functions/public/Invoke-WPFShortcut.ps1
@@ -1,4 +1,3 @@
-
function Invoke-WPFShortcut {
<#
@@ -22,17 +21,15 @@ function Invoke-WPFShortcut {
Switch ($ShortcutToAdd) {
"WinUtil" {
# Use Powershell 7 if installed and fallback to PS5 if not
- if (Get-Command "pwsh" -ErrorAction SilentlyContinue){
+ if (Get-Command "pwsh" -ErrorAction SilentlyContinue) {
$shell = "pwsh.exe"
- }
- else{
+ } else {
$shell = "powershell.exe"
}
$shellArgs = "-ExecutionPolicy Bypass -Command `"Start-Process $shell -verb runas -ArgumentList `'-Command `"irm https://github.com/ChrisTitusTech/winutil/releases/latest/download/winutil.ps1 | iex`"`'"
$DestinationName = "WinUtil.lnk"
-
}
}
@@ -52,8 +49,8 @@ function Invoke-WPFShortcut {
# Prepare the Shortcut paramter
$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut($FileBrowser.FileName)
- $Shortcut.TargetPath = $SourceExe
- $Shortcut.Arguments = $ArgumentsToSourceExe
+ $Shortcut.TargetPath = $shell
+ $Shortcut.Arguments = $shellArgs
if (Test-Path -Path $winutildir["logo.ico"]) {
$shortcut.IconLocation = $winutildir["logo.ico"]
}
diff --git a/functions/public/Invoke-WPFTab.ps1 b/functions/public/Invoke-WPFTab.ps1
index 644348d9..7333467f 100644
--- a/functions/public/Invoke-WPFTab.ps1
+++ b/functions/public/Invoke-WPFTab.ps1
@@ -21,8 +21,7 @@ function Invoke-WPFTab {
$sync[$PSItem.Name].IsChecked = $false
# $tabNumber = [int]($PSItem.Name -replace "WPFTab","" -replace "BT","") - 1
# $sync.$tabNav.Items[$tabNumber].IsSelected = $false
- }
- else {
+ } else {
$sync["$ClickedTab"].IsChecked = $true
$tabNumber = [int]($ClickedTab-replace "WPFTab","" -replace "BT","") - 1
$sync.$tabNav.Items[$tabNumber].IsSelected = $true
diff --git a/functions/public/Invoke-WPFToggle.ps1 b/functions/public/Invoke-WPFToggle.ps1
index fa1868f2..d0b79da1 100644
--- a/functions/public/Invoke-WPFToggle.ps1
+++ b/functions/public/Invoke-WPFToggle.ps1
@@ -15,7 +15,7 @@ function Invoke-WPFToggle {
# Use this to get the name of the button
#[System.Windows.MessageBox]::Show("$Button","Chris Titus Tech's Windows Utility","OK","Info")
- Switch -Wildcard ($Button){
+ Switch -Wildcard ($Button) {
"WPFToggleDarkMode" {Invoke-WinUtilDarkMode -DarkMoveEnabled $(Get-WinUtilToggleStatus WPFToggleDarkMode)}
"WPFToggleBingSearch" {Invoke-WinUtilBingSearch $(Get-WinUtilToggleStatus WPFToggleBingSearch)}
diff --git a/functions/public/Invoke-WPFTweakPS7.ps1 b/functions/public/Invoke-WPFTweakPS7.ps1
index ac37e652..3e291c4c 100644
--- a/functions/public/Invoke-WPFTweakPS7.ps1
+++ b/functions/public/Invoke-WPFTweakPS7.ps1
@@ -26,13 +26,13 @@ function Invoke-WPFTweakPS7{
}
}
# Check if the Windows Terminal is installed and return if not (Prerequisite for the following code)
- if (-not (Get-Command "wt" -ErrorAction SilentlyContinue)){
+ if (-not (Get-Command "wt" -ErrorAction SilentlyContinue)) {
Write-Host "Windows Terminal not installed. Skipping Terminal preference"
return
}
# Check if the Windows Terminal settings.json file exists and return if not (Prereqisite for the following code)
$settingsPath = "$env:LOCALAPPDATA\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json"
- if (-not (Test-Path -Path $settingsPath)){
+ if (-not (Test-Path -Path $settingsPath)) {
Write-Host "Windows Terminal Settings file not found at $settingsPath"
return
}
diff --git a/functions/public/Invoke-WPFUltimatePerformance.ps1 b/functions/public/Invoke-WPFUltimatePerformance.ps1
index d1a12780..8000b420 100644
--- a/functions/public/Invoke-WPFUltimatePerformance.ps1
+++ b/functions/public/Invoke-WPFUltimatePerformance.ps1
@@ -9,10 +9,10 @@ Function Invoke-WPFUltimatePerformance {
#>
param($State)
- Try{
+ try {
# Check if Ultimate Performance plan is installed
$ultimatePlan = powercfg -list | Select-String -Pattern "Ultimate Performance"
- if($state -eq "Enable"){
+ if($state -eq "Enable") {
if ($ultimatePlan) {
Write-Host "Ultimate Performance plan is already installed."
} else {
@@ -29,7 +29,7 @@ Function Invoke-WPFUltimatePerformance {
}
- elseif($state -eq "Disable"){
+ elseif($state -eq "Disable") {
if ($ultimatePlan) {
# Extract the GUID of the Ultimate Performance plan
$ultimatePlanGUID = $ultimatePlan.Line.Split()[3]
@@ -47,7 +47,7 @@ Function Invoke-WPFUltimatePerformance {
Write-Host "Ultimate Performance plan is not installed."
}
}
- } Catch{
+ } catch {
Write-Warning $psitem.Exception.Message
}
-}
\ No newline at end of file
+}
diff --git a/functions/public/Invoke-WPFUnInstall.ps1 b/functions/public/Invoke-WPFUnInstall.ps1
index ff8ff94e..19aec2d2 100644
--- a/functions/public/Invoke-WPFUnInstall.ps1
+++ b/functions/public/Invoke-WPFUnInstall.ps1
@@ -6,7 +6,7 @@ function Invoke-WPFUnInstall {
#>
- if($sync.ProcessRunning){
+ if($sync.ProcessRunning) {
$msg = "[Invoke-WPFUnInstall] Install process is currently running"
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
return
@@ -27,12 +27,12 @@ function Invoke-WPFUnInstall {
$confirm = [System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon)
- if($confirm -eq "No"){return}
+ if($confirm -eq "No") {return}
Invoke-WPFRunspace -ArgumentList $PackagesToInstall -DebugPreference $DebugPreference -ScriptBlock {
param($PackagesToInstall, $DebugPreference)
- if ($PackagesToInstall.count -eq 1){
+ if ($PackagesToInstall.count -eq 1) {
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" })
} else {
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" })
@@ -51,14 +51,14 @@ function Invoke-WPFUnInstall {
}
return $packagesWinget, $packagesChoco
}.Invoke($PackagesToInstall)
- try{
+ try {
$sync.ProcessRunning = $true
# Install all selected programs in new window
- if($packagesWinget.Count -gt 0){
+ if($packagesWinget.Count -gt 0) {
Invoke-WinUtilWingetProgram -Action Uninstall -Programs $packagesWinget
}
- if($packagesChoco.Count -gt 0){
+ if($packagesChoco.Count -gt 0) {
Install-WinUtilProgramChoco -ProgramsToInstall $packagesChoco -Manage "Uninstalling"
}
@@ -66,8 +66,7 @@ function Invoke-WPFUnInstall {
Write-Host "-- Uninstalls have finished ---"
Write-Host "==========================================="
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" })
- }
- Catch {
+ } catch {
Write-Host "==========================================="
Write-Host "Error: $_"
Write-Host "==========================================="
diff --git a/functions/public/Invoke-WPFUpdatesdefault.ps1 b/functions/public/Invoke-WPFUpdatesdefault.ps1
index 3e1cebdd..0b786f32 100644
--- a/functions/public/Invoke-WPFUpdatesdefault.ps1
+++ b/functions/public/Invoke-WPFUpdatesdefault.ps1
@@ -42,4 +42,4 @@ function Invoke-WPFUpdatesdefault {
Write-Host "==================================================="
Write-Host "--- Windows Update Settings Reset to Default ---"
Write-Host "==================================================="
-}
\ No newline at end of file
+}
diff --git a/functions/public/Invoke-WPFUpdatesdisable.ps1 b/functions/public/Invoke-WPFUpdatesdisable.ps1
index 3167039f..d3f28815 100644
--- a/functions/public/Invoke-WPFUpdatesdisable.ps1
+++ b/functions/public/Invoke-WPFUpdatesdisable.ps1
@@ -32,4 +32,4 @@ function Invoke-WPFUpdatesdisable {
Write-Host "================================="
Write-Host "--- Updates ARE DISABLED ---"
Write-Host "================================="
-}
\ No newline at end of file
+}
diff --git a/functions/public/Invoke-WPFUpdatessecurity.ps1 b/functions/public/Invoke-WPFUpdatessecurity.ps1
index e310d6a4..ed7fe937 100644
--- a/functions/public/Invoke-WPFUpdatessecurity.ps1
+++ b/functions/public/Invoke-WPFUpdatessecurity.ps1
@@ -50,4 +50,4 @@ function Invoke-WPFUpdatessecurity {
Write-Host "================================="
Write-Host "-- Updates Set to Recommended ---"
Write-Host "================================="
-}
\ No newline at end of file
+}
diff --git a/functions/public/Invoke-WPFtweaksbutton.ps1 b/functions/public/Invoke-WPFtweaksbutton.ps1
index 99f40602..a4f38193 100644
--- a/functions/public/Invoke-WPFtweaksbutton.ps1
+++ b/functions/public/Invoke-WPFtweaksbutton.ps1
@@ -6,7 +6,7 @@ function Invoke-WPFtweaksbutton {
#>
- if($sync.ProcessRunning){
+ if($sync.ProcessRunning) {
$msg = "[Invoke-WPFtweaksbutton] Install process is currently running."
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
return
@@ -16,7 +16,7 @@ function Invoke-WPFtweaksbutton {
Set-WinUtilDNS -DNSProvider $sync["WPFchangedns"].text
- if ($tweaks.count -eq 0 -and $sync["WPFchangedns"].text -eq "Default"){
+ if ($tweaks.count -eq 0 -and $sync["WPFchangedns"].text -eq "Default") {
$msg = "Please check the tweaks you wish to perform."
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
return
@@ -30,17 +30,16 @@ function Invoke-WPFtweaksbutton {
$sync.ProcessRunning = $true
- if ($Tweaks.count -eq 1){
+ if ($Tweaks.count -eq 1) {
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" })
} else {
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" })
}
# Execute other selected tweaks
-
- for ($i = 0; $i -lt $Tweaks.Count; $i++){
+
+ for ($i = 0; $i -lt $Tweaks.Count; $i++) {
Set-WinUtilProgressBar -Label "Applying $($tweaks[$i])" -Percent ($i / $Tweaks.Count * 100)
- Invoke-WinUtilTweaks $tweaks[$i]
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -value ($i/$Tweaks.Count) })
+ Invoke-WinUtilTweaks $tweaks[$i]$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -value ($i/$Tweaks.Count) })
}
Set-WinUtilProgressBar -Label "Tweaks finished" -Percent 100
$sync.ProcessRunning = $false
@@ -55,4 +54,4 @@ function Invoke-WPFtweaksbutton {
# $MessageIcon = [System.Windows.MessageBoxImage]::Information
# [System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon)
}
-}
\ No newline at end of file
+}
diff --git a/functions/public/Invoke-WPFundoall.ps1 b/functions/public/Invoke-WPFundoall.ps1
index 62c4004b..cb3ce7ba 100644
--- a/functions/public/Invoke-WPFundoall.ps1
+++ b/functions/public/Invoke-WPFundoall.ps1
@@ -6,7 +6,7 @@ function Invoke-WPFundoall {
#>
- if($sync.ProcessRunning){
+ if($sync.ProcessRunning) {
$msg = "[Invoke-WPFundoall] Install process is currently running."
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
return
@@ -14,7 +14,7 @@ function Invoke-WPFundoall {
$tweaks = (Get-WinUtilCheckBoxes)["WPFtweaks"]
- if ($tweaks.count -eq 0){
+ if ($tweaks.count -eq 0) {
$msg = "Please check the tweaks you wish to undo."
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
return
@@ -24,14 +24,14 @@ function Invoke-WPFundoall {
param($tweaks, $DebugPreference)
$sync.ProcessRunning = $true
- if ($tweaks.count -eq 1){
+ if ($tweaks.count -eq 1) {
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" })
} else {
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" })
}
-
- for ($i = 0; $i -lt $tweaks.Count; $i++){
+
+ for ($i = 0; $i -lt $tweaks.Count; $i++) {
Set-WinUtilProgressBar -Label "Undoing $($tweaks[$i])" -Percent ($i / $tweaks.Count * 100)
Invoke-WinUtiltweaks $tweaks[$i] -undo $true
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -value ($i/$tweaks.Count) })
@@ -39,10 +39,10 @@ function Invoke-WPFundoall {
Set-WinUtilProgressBar -Label "Undo Tweaks Finished" -Percent 100
$sync.ProcessRunning = $false
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" })
+ $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" })
Write-Host "=================================="
Write-Host "--- Undo Tweaks are Finished ---"
Write-Host "=================================="
}
-}
\ No newline at end of file
+}
diff --git a/gpedit-home.ps1 b/gpedit-home.ps1
deleted file mode 100644
index a4931963..00000000
--- a/gpedit-home.ps1
+++ /dev/null
@@ -1,4 +0,0 @@
-Get-ChildItem @(
- "$env:SystemRoot\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientTools-Package*.mum",
- "$env:SystemRoot\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package*.mum"
-) | ForEach-Object { dism.exe /online /norestart /add-package:"$_" }
\ No newline at end of file
diff --git a/lint/PSScriptAnalyser.ps1 b/lint/PSScriptAnalyser.ps1
index 20a9080f..47feae83 100644
--- a/lint/PSScriptAnalyser.ps1
+++ b/lint/PSScriptAnalyser.ps1
@@ -22,4 +22,4 @@
# Note: if a rule is in both IncludeRules and ExcludeRules, the rule
# will be excluded.
ExcludeRules = @('PSAvoidUsingWriteHost')
-}
\ No newline at end of file
+}
diff --git a/overrides/main.html b/overrides/main.html
index f680422d..f5f0eb39 100644
--- a/overrides/main.html
+++ b/overrides/main.html
@@ -2,4 +2,4 @@
{% block footer %}
{# Empty block to override the footer #}
-{% endblock %}
\ No newline at end of file
+{% endblock %}
diff --git a/pester/configs.Tests.ps1 b/pester/configs.Tests.ps1
index 6a0a76bd..dd2db7f3 100644
--- a/pester/configs.Tests.ps1
+++ b/pester/configs.Tests.ps1
@@ -25,19 +25,19 @@ Describe "Config Files" -ForEach @(
name = "tweaks"
undo = $true
}
-){
+) {
Context "$name config file" {
It "Imports with no errors" {
$global:importedconfigs.$name | should -Not -BeNullOrEmpty
}
- if ($config){
+ if ($config) {
It "Imports should be the correct structure" {
$applications = $global:importedconfigs.$name | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty name
$template = $config | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty name
$result = New-Object System.Collections.Generic.List[System.Object]
Foreach ($application in $applications) {
$compare = $global:importedconfigs.$name.$application | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty name
- if ($(Compare-Object $compare $template) -ne $null){
+ if ($(Compare-Object $compare $template) -ne $null) {
$result.Add($application)
}
}
@@ -45,12 +45,12 @@ Describe "Config Files" -ForEach @(
$result | Select-String "WPF*" | should -BeNullOrEmpty
}
}
- if($undo){
+ if($undo) {
It "Tweaks should contain original Value" {
$tweaks = $global:importedconfigs.$name | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty name
$result = New-Object System.Collections.Generic.List[System.Object]
- foreach ($tweak in $tweaks){
+ foreach ($tweak in $tweaks) {
$Originals = @(
@{
name = "registry"
@@ -65,10 +65,10 @@ Describe "Config Files" -ForEach @(
value = "OriginalState"
}
)
- Foreach ($original in $Originals){
+ Foreach ($original in $Originals) {
$TotalCount = ($global:importedconfigs.$name.$tweak.$($original.name)).count
$OriginalCount = ($global:importedconfigs.$name.$tweak.$($original.name).$($original.value) | Where-Object {$_}).count
- if($TotalCount -ne $OriginalCount){
+ if($TotalCount -ne $OriginalCount) {
$result.Add("$Tweak,$($original.name)")
}
}
@@ -78,4 +78,4 @@ Describe "Config Files" -ForEach @(
}
}
-}
\ No newline at end of file
+}
diff --git a/scripts/main.ps1 b/scripts/main.ps1
index 575fc34b..37c47790 100644
--- a/scripts/main.ps1
+++ b/scripts/main.ps1
@@ -11,7 +11,7 @@ $InitialSessionState.Variables.Add($hashVars)
# Get every private function and add them to the session state
$functions = (Get-ChildItem function:\).where{$_.name -like "*winutil*" -or $_.name -like "*WPF*"}
-foreach ($function in $functions){
+foreach ($function in $functions) {
$functionDefinition = Get-Content function:\$($function.name)
$functionEntry = New-Object System.Management.Automation.Runspaces.SessionStateFunctionEntry -ArgumentList $($function.name), $functionDefinition
@@ -55,12 +55,10 @@ $inputXML = $inputXML -replace 'mc:Ignorable="d"', '' -replace "x:N", 'N' -repla
if ((Get-WinUtilToggleStatus WPFToggleDarkMode) -eq $True) {
if (Invoke-WinUtilGPU -eq $True) {
$ctttheme = 'Matrix'
- }
- else {
+ } else {
$ctttheme = 'Dark'
}
-}
-else {
+} else {
$ctttheme = 'Classic'
}
@@ -110,9 +108,9 @@ if (-NOT ($readerOperationSuccessful)) {
$xaml.SelectNodes("//*[@Name]") | ForEach-Object {$sync["$("$($psitem.Name)")"] = $sync["Form"].FindName($psitem.Name)}
$sync.keys | ForEach-Object {
- if($sync.$psitem){
+ if($sync.$psitem) {
if($($sync["$psitem"].GetType() | Select-Object -ExpandProperty Name) -eq "CheckBox" `
- -and $sync["$psitem"].Name -like "WPFToggle*"){
+ -and $sync["$psitem"].Name -like "WPFToggle*") {
$sync["$psitem"].IsChecked = Get-WinUtilToggleStatus $sync["$psitem"].Name
$sync["$psitem"].Add_Click({
@@ -121,14 +119,14 @@ $sync.keys | ForEach-Object {
})
}
- if($($sync["$psitem"].GetType() | Select-Object -ExpandProperty Name) -eq "ToggleButton"){
+ if($($sync["$psitem"].GetType() | Select-Object -ExpandProperty Name) -eq "ToggleButton") {
$sync["$psitem"].Add_Click({
[System.Object]$Sender = $args[0]
Invoke-WPFButton $Sender.name
})
}
- if($($sync["$psitem"].GetType() | Select-Object -ExpandProperty Name) -eq "Button"){
+ if($($sync["$psitem"].GetType() | Select-Object -ExpandProperty Name) -eq "Button") {
$sync["$psitem"].Add_Click({
[System.Object]$Sender = $args[0]
Invoke-WPFButton $Sender.name
@@ -154,7 +152,7 @@ $sync.keys | ForEach-Object {
# Load computer information in the background
Invoke-WPFRunspace -ScriptBlock {
- try{
+ try {
$oldProgressPreference = $ProgressPreference
$ProgressPreference = "SilentlyContinue"
$sync.ConfigLoaded = $False
@@ -199,8 +197,7 @@ $commonKeyEvents = {
return
}
- if ($_.Key -eq "Escape")
- {
+ if ($_.Key -eq "Escape") {
$sync.SearchBar.SelectAll()
$sync.SearchBar.Text = ""
$sync.SearchBarClearButton.Visibility = "Collapsed"
@@ -208,8 +205,7 @@ $commonKeyEvents = {
}
# don't ask, I know what I'm doing, just go...
- if (($_.Key -eq "Q" -and $_.KeyboardDevice.Modifiers -eq "Ctrl"))
- {
+ if (($_.Key -eq "Q" -and $_.KeyboardDevice.Modifiers -eq "Ctrl")) {
$this.Close()
}
if ($_.KeyboardDevice.Modifiers -eq "Alt") {
@@ -252,12 +248,9 @@ $sync["Form"].Add_MouseLeftButtonDown({
})
$sync["Form"].Add_MouseDoubleClick({
- if ($sync["Form"].WindowState -eq [Windows.WindowState]::Normal)
- {
+ if ($sync["Form"].WindowState -eq [Windows.WindowState]::Normal) {
$sync["Form"].WindowState = [Windows.WindowState]::Maximized;
- }
- else
- {
+ } else {
$sync["Form"].WindowState = [Windows.WindowState]::Normal;
}
})
@@ -303,11 +296,11 @@ Add-Type @"
foreach ($proc in (Get-Process).where{ $_.MainWindowTitle -and $_.MainWindowTitle -like "*titus*" }) {
# Check if the process's MainWindowHandle is valid
- if ($proc.MainWindowHandle -ne [System.IntPtr]::Zero) {
+ if ($proc.MainWindowHandle -ne [System.IntPtr]::Zero) {
Write-Debug "MainWindowHandle: $($proc.Id) $($proc.MainWindowTitle) $($proc.MainWindowHandle)"
$windowHandle = $proc.MainWindowHandle
- } else {
- Write-Warning "Process found, but no MainWindowHandle: $($proc.Id) $($proc.MainWindowTitle)"
+ } else {
+ Write-Warning "Process found, but no MainWindowHandle: $($proc.Id) $($proc.MainWindowTitle)"
}
}
@@ -348,9 +341,9 @@ Add-Type @"
# maybe this is not the best place to load and execute config file?
# maybe community can help?
- if ($PARAM_CONFIG){
+ if ($PARAM_CONFIG) {
Invoke-WPFImpex -type "import" -Config $PARAM_CONFIG
- if ($PARAM_RUN){
+ if ($PARAM_RUN) {
while ($sync.ProcessRunning) {
Start-Sleep -Seconds 5
}
@@ -397,8 +390,7 @@ $sync["SearchBar"].Add_TextChanged({
if ($sync.SearchBar.Text -ne "") {
$sync.SearchBarClearButton.Visibility = "Visible"
- }
- else {
+ } else {
$sync.SearchBarClearButton.Visibility = "Collapsed"
}
@@ -424,8 +416,7 @@ $sync["SearchBar"].Add_TextChanged({
if ($textBlock -ne $null) {
$textBlock.Visibility = "Visible"
}
- }
- else {
+ } else {
$CheckBox.Value.Visibility = "Collapsed"
# Set the corresponding text block visibility
if ($textBlock -ne $null) {
@@ -435,17 +426,16 @@ $sync["SearchBar"].Add_TextChanged({
}
$activeCategories = $activeApplications | Select-Object -ExpandProperty category -Unique
- foreach ($category in $activeCategories){
+ foreach ($category in $activeCategories) {
$label = $labels[$(Get-WPFObjectName -type "Label" -name $category)]
$label.Visibility = "Visible"
}
- if ($activeCategories){
+ if ($activeCategories) {
$inactiveCategories = Compare-Object -ReferenceObject $allCategories -DifferenceObject $activeCategories -PassThru
- }
- else{
+ } else {
$inactiveCategories = $allCategories
}
- foreach ($category in $inactiveCategories){
+ foreach ($category in $inactiveCategories) {
$label = $labels[$(Get-WPFObjectName -type "Label" -name $category)]
$label.Visibility = "Collapsed"}
})
@@ -491,8 +481,7 @@ $sync["SettingsButton"].Add_Click({
Write-Debug "SettingsButton clicked"
if ($sync["SettingsPopup"].IsOpen) {
$sync["SettingsPopup"].IsOpen = $false
- }
- else {
+ } else {
$sync["SettingsPopup"].IsOpen = $true
}
$_.Handled = $false
@@ -548,8 +537,7 @@ $sync["SponsorMenuItem"].Add_Click({
# Append the sponsors to the authorInfo
$sponsors | ForEach-Object { $authorInfo += "$_`n" }
- }
- catch {
+ } catch {
$authorInfo += "An error occurred while fetching or processing the sponsors: $_`n"
}
diff --git a/scripts/start.ps1 b/scripts/start.ps1
index 4f68920a..73693260 100644
--- a/scripts/start.ps1
+++ b/scripts/start.ps1
@@ -45,8 +45,7 @@ $sync.configs = @{}
$sync.ProcessRunning = $false
# If script isn't running as admin, show error message and quit
-If (([Security.Principal.WindowsIdentity]::GetCurrent()).Owner.Value -ne "S-1-5-32-544")
-{
+If (([Security.Principal.WindowsIdentity]::GetCurrent()).Owner.Value -ne "S-1-5-32-544") {
Write-Host "===========================================" -Foregroundcolor Red
Write-Host "-- Scripts must be run as Administrator ---" -Foregroundcolor Red
Write-Host "-- Right-Click Start -> Terminal(Admin) ---" -Foregroundcolor Red
diff --git a/tools/Invoke-Preprocessing.ps1 b/tools/Invoke-Preprocessing.ps1
new file mode 100644
index 00000000..c9692fc6
--- /dev/null
+++ b/tools/Invoke-Preprocessing.ps1
@@ -0,0 +1,139 @@
+ function Invoke-Preprocessing {
+ <#
+ .SYNOPSIS
+ A function that does Code Formatting using RegEx, useful when trying to force specific coding standard(s) to a project.
+
+ .PARAMETER ThrowExceptionOnEmptyFilesList
+ A switch which'll throw an exception upon not finding any files inside the provided 'WorkingDir'.
+
+ .PARAMETER SkipExcludedFilesValidation
+ A switch to stop file path validation on 'ExcludedFiles' list.
+
+ .PARAMETER ExcludedFiles
+ A list of file paths which're *relative to* 'WorkingDir' Folder, every item in the list can be pointing to File (doesn't end with '\') or Directory (ends with '\') or None-Existing File/Directory.
+ By default, it checks if everyitem exists, and throws an exception if one or more are not found (None-Existing), if you want to skip this validation, please consider providing the '-SkipExcludedFilesValidation' switch to skip this check.
+
+ .PARAMETER WorkingDir
+ The folder to search inside recursively for files which're going to be Preprocessed (Code Formatted), unless they're found in 'ExcludedFiles' List.
+ Note: The path should be absolute, NOT relative.
+
+ .PARAMETER ProgressStatusMessage
+ The status message used when displaying the progress bar, which's done through PowerShell 'Write-Progress' Cmdlet.
+ This's a Required Parameter, as the information displayed to terminal is useful when running this function,
+ which might take less than 1 sec to minutes depending on project's scale & hardware performance.
+
+ .PARAMETER ProgressActivity
+ The activity message used when displaying the progress bar, which's done through PowerShell 'Write-Progress' Cmdlet,
+ This's an Optional Parameter, default value is 'Preprocessing', used in combination with 'ProgressStatusMessage' Parameter Value.
+
+ .EXAMPLE
+ Invoke-Preprocessing -WorkingDir "DRIVE:\Path\To\Folder\" -ExcludedFiles @('file.txt', '.\.git\', '*.png') -ProgressStatusMessage "Doing Preprocessing"
+
+ Calls 'Invoke-Preprocessing' function using Named Paramters, with 'WorkingDir' (Mandatory Parameter) which's used as the base folder when searching for files recursively (using 'Get-ChildItem'), other two paramters are, in order from right to left, the Optional 'ExcludeFiles', which can be a path to a file, folder, or pattern-matched (like '*.png'), and the 'ProgressStatusMessage', which's used in Progress Bar.
+
+ .EXAMPLE
+ Invoke-Preprocessing -WorkingDir "DRIVE:\Path\To\Folder\" -ExcludedFiles @('file.txt', '.\.git\', '*.png') -ProgressStatusMessage "Doing Preprocessing" -ProgressActivity "Re-Formatting Code"
+
+ Same as Example No. 1, but uses 'ProgressActivity' which's used in Progress Bar.
+
+ .EXAMPLE
+ Invoke-Preprocessing -ThrowExceptionOnEmptyFilesList -WorkingDir "DRIVE:\Path\To\Folder\" -ExcludedFiles @('file.txt', '.\.git\', '*.png') -ProgressStatusMessage "Doing Preprocessing"
+
+ Same as Example No. 1, but will throw an exception when 'Invoke-Preprocessing' function doesn't find any files in 'WorkingDir' (not including 'ExcludedFiles' list).
+
+ .EXAMPLE
+ Invoke-Preprocessing -Skip -WorkingDir "DRIVE:\Path\To\Folder\" -ExcludedFiles @('file.txt', '.\.git\', '*.png') -ProgressStatusMessage "Doing Preprocessing"
+
+ Same as Example No. 1, but uses '-SkipExcludedFilesValidation', which'll skip the validation step for 'ExcludedFiles' list. This can be useful when 'ExcludedFiles' list is generated from another function, or from unreliable source (you can't guarantee every item in list is a valid path), but you want to silently continue through the function.
+ #>
+
+ param (
+ [Parameter(position=0)]
+ [switch]$SkipExcludedFilesValidation,
+
+ [Parameter(position=1)]
+ [switch]$ThrowExceptionOnEmptyFilesList,
+
+ [Parameter(Mandatory, position=2)]
+ [ValidateScript({[System.IO.Path]::IsPathRooted($_)})]
+ [string]$WorkingDir,
+
+ [Parameter(position=3)]
+ [string[]]$ExcludedFiles,
+
+ [Parameter(Mandatory, position=4)]
+ [string]$ProgressStatusMessage,
+
+ [Parameter(position=5)]
+ [string]$ProgressActivity = "Preprocessing"
+ )
+
+ if (-NOT (Test-Path -PathType Container -Path "$WorkingDir")) {
+ throw "[Invoke-Preprocessing] Invalid Paramter Value for 'WorkingDir', passed value: '$WorkingDir'. Either the path is a File or Non-Existing/Invlid, please double check your code."
+ }
+
+ $count = $ExcludedFiles.Count
+ if ((-NOT ($count -eq 0)) -AND (-NOT $SkipExcludedFilesValidation)) {
+ for ($i = 0; $i -lt $count; $i++) {
+ $excludedFile = $ExcludedFiles[$i]
+ $filePath = "$(($WorkingDir -replace ('\\$', '')) + '\' + ($excludedFile -replace ('\.\\', '')))"
+ if (-NOT (Get-ChildItem -Recurse -Path "$filePath" -File)) {
+ $failedFilesList += "'$filePath', "
+ }
+ }
+ $failedFilesList = $failedFilesList -replace (',\s*$', '')
+ if (-NOT $failedFilesList -eq "") {
+ throw "[Invoke-Preprocessing] One or more File Paths & File Patterns were not found, you can use '-SkipExcludedFilesValidation' switch to skip this check, and the failed files are: $failedFilesList"
+ }
+ }
+
+ $files = Get-ChildItem $WorkingDir -Recurse -Exclude $ExcludedFiles -File
+ $numOfFiles = $files.Count
+
+ if ($numOfFiles -eq 0) {
+ if ($ThrowExceptionOnEmptyFilesList) {
+ throw "[Invoke-Preprocessing] Found 0 Files to Preprocess inside 'WorkingDir' Directory and '-ThrowExceptionOnEmptyFilesList' Switch is provided, value of 'WorkingDir': '$WorkingDir'."
+ } else {
+ return # Do an early return, there's nothing else to do
+ }
+ }
+
+ for ($i = 0; $i -lt $numOfFiles; $i++) {
+ $file = $files[$i]
+
+ # If the file is in Exclude List, don't proceed to check/modify said file.
+ $fileIsExcluded = $False
+ for ($j = 0; $j -lt $excludedFiles.Count; $j++) {
+ $excluded = $excludedFiles[$j]
+ $strToCompare = ($excluded) -replace ('^\.\\', '')
+ if ($file.FullName.Contains("$strToCompare")) {
+ $fileIsExcluded = $True
+ break
+ }
+ }
+
+ if ($fileIsExcluded) {
+ continue
+ }
+
+ # TODO:
+ # make more formatting rules, and document them in WinUtil Official Documentation
+ (Get-Content "$file").TrimEnd() `
+ -replace ('\t', ' ') `
+ -replace ('\)\s*\{', ') {') `
+ -replace ('(?if|for|foreach)\s*(?\([.*?]\))\s*\{', '${keyword} ${condition} {') `
+ -replace ('\}\s*elseif\s*(?\([.*?]\))\s*\{', '} elseif ${condition} {') `
+ -replace ('\}\s*else\s*\{', '} else {') `
+ -replace ('Try\s*\{', 'try {') `
+ -replace ('Catch\s*\{', 'catch {') `
+ -replace ('\}\s*Catch', '} catch') `
+ -replace ('\}\s*Catch\s*(?(\[.*?\]\s*(\,)?\s*)+)\s*\{', '} catch ${exceptions} {') `
+ -replace ('\}\s*Catch\s*(?\[.*?\])\s*\{', '} catch ${exceptions} {') `
+ -replace ('(?\[.*?\])\s*(?\$.*?(,|\s*\)))', '${parameter_type}${str_after_type}') `
+ | Set-Content "$file"
+
+ Write-Progress -Activity $ProgressActivity -Status "$ProgressStatusMessage - Finished $i out of $numOfFiles" -PercentComplete (($i/$numOfFiles)*100)
+ }
+
+ Write-Progress -Activity $ProgressActivity -Status "$ProgressStatusMessage - Finished Task Successfully" -Completed
+}
diff --git a/tools/devdocs-generator.ps1 b/tools/devdocs-generator.ps1
new file mode 100644
index 00000000..792f6581
--- /dev/null
+++ b/tools/devdocs-generator.ps1
@@ -0,0 +1,644 @@
+<#
+ .DESCRIPTION
+ This script generates markdown files for the development documentation based on the existing JSON files.
+ Create table of content and archive any files in the dev folder not modified by this script.
+ This script is not meant to be used manually, it is called by the github action workflow.
+#>
+
+function Process-MultilineStrings {
+ param (
+ [Parameter(Mandatory, position=0)]
+ [string]$str
+ )
+
+ $lines = $str.Split("`r`n")
+ $count = $lines.Count
+
+ # Loop through every line, expect last line in the string
+ # We'll add it after the for loop
+ for ($i = 0; $i -lt ($count - 1); $i++) {
+ $line = $lines[$i]
+ $processedStr += $line -replace ('^\s*\\\\', '')
+ # Add the previously removed NewLine character by 'Split' Method
+ $processedStr += "`r`n"
+ }
+
+ # Add last line *without* a NewLine character.
+ $processedStr += $lines[$($count - 1)] -replace ('^\s*\\\\', '')
+
+ return $processedStr
+}
+
+function Update-Progress {
+ param (
+ [Parameter(Mandatory, position=0)]
+ [string]$StatusMessage,
+
+ [Parameter(Mandatory, position=1)]
+ [ValidateRange(0,100)]
+ [int]$Percent,
+
+ [Parameter(position=2)]
+ [string]$Activity = "Compiling"
+ )
+
+ Write-Progress -Activity $Activity -Status $StatusMessage -PercentComplete $Percent
+}
+
+function Load-Functions {
+ param (
+ [Parameter(Mandatory, position=0)]
+ [string]$dir
+ )
+
+ Get-ChildItem -Path $dir -Filter *.ps1 | ForEach-Object {
+ $functionName = $_.BaseName
+ $functionContent = Get-Content -Path $_.FullName -Raw
+ $functions[$functionName] = $functionContent
+ }
+}
+
+function Get-CalledFunctions {
+ param (
+ [Parameter(Mandatory, position=0)]
+ $scriptContent,
+
+ [Parameter(Mandatory, position=1)]
+ [hashtable]$functionList,
+
+ [Parameter(Mandatory, position=2)]
+ [ref]$processedFunctions
+ )
+
+ $calledFunctions = @()
+ foreach ($functionName in $functionList.Keys) {
+ if ($scriptContent -match "\b$functionName\b" -and -not $processedFunctions.Value.Contains($functionName)) {
+ $calledFunctions += $functionName
+ $processedFunctions.Value.Add($functionName)
+ if ($functionList[$functionName]) {
+ $nestedFunctions = Get-CalledFunctions -scriptContent $functionList[$functionName] -functionList $functionList -processedFunctions $processedFunctions
+ $calledFunctions += $nestedFunctions
+ }
+ }
+ }
+ return $calledFunctions
+}
+
+function Get-AdditionalFunctionsFromToggle {
+ param (
+ [Parameter(Mandatory, position=0)]
+ [string]$buttonName
+ )
+
+ $invokeWpfToggleContent = Get-Content -Path "$publicFunctionsDir/Invoke-WPFToggle.ps1" -Raw
+ $lines = $invokeWpfToggleContent -split "`r`n"
+ foreach ($line in $lines) {
+ if ($line -match "`"$buttonName`" \{Invoke-(WinUtil[a-zA-Z]+)") {
+ return $matches[1]
+ }
+ }
+}
+
+function Get-AdditionalFunctionsFromButton {
+ param (
+ [Parameter(Mandatory, position=0)]
+ [string]$buttonName
+ )
+
+ $invokeWpfButtonContent = Get-Content -Path "$publicFunctionsDir/Invoke-WPFButton.ps1" -Raw
+ $lines = $invokeWpfButtonContent -split "`r`n"
+ foreach ($line in $lines) {
+ if ($line -match "`"$buttonName`" \{Invoke-(WPF[a-zA-Z]+)") {
+ return $matches[1]
+ }
+ }
+}
+
+function Add-LinkAttribute {
+ param (
+ [Parameter(Mandatory)]
+ [PSCustomObject]$jsonObject
+ )
+
+ $totalProperties = ($jsonObject.PSObject.Properties | Measure-Object).Count
+ $progressIncrement = 50 / $totalProperties
+ $currentProgress = 50
+
+ foreach ($property in $jsonObject.PSObject.Properties) {
+ if ($property.Value -is [PSCustomObject]) {
+ Add-LinkAttribute -jsonObject $property.Value
+ } elseif ($property.Value -is [System.Collections.ArrayList]) {
+ foreach ($item in $property.Value) {
+ if ($item -is [PSCustomObject]) {
+ Add-LinkAttribute -jsonObject $item
+ }
+ }
+ }
+ $currentProgress += $progressIncrement
+ $roundedProgress = [math]::Round($currentProgress)
+ Update-Progress -StatusMessage "Adding documentation links" -Percent $roundedProgress
+ }
+ if ($jsonObject -ne $global:rootObject) {
+ $jsonObject | Add-Member -NotePropertyName "link" -NotePropertyValue "" -Force
+ }
+}
+
+function Generate-MarkdownFiles {
+ param (
+ [Parameter(Mandatory, position=0)]
+ [PSCustomObject]$data,
+
+ [Parameter(Mandatory, position=1)]
+ [string]$outputDir,
+
+ [Parameter(Mandatory, position=2)]
+ [string]$jsonFilePath,
+
+ [Parameter(Mandatory, position=3)]
+ [string]$lastModified,
+
+ [Parameter(Mandatory, position=4)]
+ [string]$type,
+
+ [Parameter(position=5)]
+ [int]$initialProgress
+ )
+
+ # TODO: Make the function reference generation better by making a Graph, so it highlights
+ # Which function "depends" on which, and makes it clearer on a high-level for the reader
+ # to understand the general structure.
+
+ $totalItems = ($data.PSObject.Properties | Measure-Object).Count
+ $progressIncrement = 10 / $totalItems
+ $currentProgress = [int]$initialProgress
+
+ $tocEntries = @()
+ $processedFiles = @()
+ foreach ($itemName in $data.PSObject.Properties.Name) {
+ # Create Category Directory if needed.
+ $itemDetails = $data.$itemName
+ $category = $itemDetails.category -replace '[^a-zA-Z0-9]', '-'
+ $categoryDir = "$outputDir/$category"
+ if (-Not (Test-Path -Path $categoryDir)) {
+ New-Item -ItemType Directory -Path $categoryDir | Out-Null
+ }
+
+ # Create empty files with correct path
+ $fullItemName = $itemName
+ $displayName = $itemName -replace $itemnametocut, ''
+ $filename = "$categoryDir/$displayName.md"
+ $relativePath = "$outputDir/$category/$displayName.md" -replace '^docs/', ''
+ if (-Not (Test-Path -Path $filename)) {
+ Set-Content -Path $filename -Value "" -Encoding utf8
+ }
+
+ # Add the entry to 'tocEntries' so we can generate Table Of Content easily
+ # And add the Full FileName of entry
+ $tocEntries += @{
+ Category = $category
+ Path = $relativePath
+ Name = $itemDetails.Content
+ Type = $type
+ }
+ $processedFiles += (Get-Item $filename).FullName
+
+ $header = "# $([string]$itemDetails.Content)" + "`r`n"
+ $lastUpdatedNotice = "Last Updated: $lastModified" + "`r`n"
+ $autoupdatenotice = Process-MultilineStrings @"
+ \\!!! info
+ \\ 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.**
+"@
+
+ $description = Process-MultilineStrings @"
+ \\## Description
+ \\
+ \\$([string]$itemDetails.Description)
+"@
+
+ $jsonContent = ($itemDetails | ConvertTo-Json -Depth 10).replace('\n',"`n").replace('\r', "`r")
+ $codeBlock = Process-MultilineStrings @"
+ \\
+ \\Preview Code
+ \\
+ \\``````json
+ \\$jsonContent
+ \\``````
+ \\
+ \\
+"@
+
+ # Clear the variable before continuing, will cause problems otherwise
+ $FeaturesDocs = ""
+ if ($itemDetails.feature) {
+ $FeaturesDocs += Process-MultilineStrings @"
+ \\## Features
+ \\
+ \\
+ \\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.
+ \\
+ \\
+ \\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).
+ \\
+ \\
+"@
+ if (($itemDetails.feature).Count -gt 1) {
+ $FeaturesDocs += "### Features to install" + "`r`n"
+ } else {
+ $FeaturesDocs += "### Feature to install" + "`r`n"
+ }
+ foreach ($feature in $itemDetails.feature) {
+ $FeaturesDocs += "- $($feature)" + "`r`n"
+ }
+ }
+
+ # Clear the variable before continuing, will cause problems otherwise
+ $InvokeScript = ""
+ if ($itemDetails.InvokeScript) {
+ $InvokeScriptContent = $itemDetails.InvokeScript | Out-String
+ $InvokeScript = Process-MultilineStrings @"
+ \\## Invoke Script
+ \\
+ \\``````powershell
+ \\$InvokeScriptContent
+ \\``````
+"@
+ }
+
+ # Clear the variable before continuing, will cause problems otherwise
+ $UndoScript = ""
+ if ($itemDetails.UndoScript) {
+ $UndoScriptContent = $itemDetails.UndoScript | Out-String
+ $UndoScript = Process-MultilineStrings @"
+ \\## Undo Script
+ \\
+ \\``````powershell
+ \\$UndoScriptContent
+ \\``````
+"@
+ }
+
+ # Clear the variable before continuing, will cause problems otherwise
+ $ToggleScript = ""
+ if ($itemDetails.ToggleScript) {
+ $ToggleScriptContent = $itemDetails.ToggleScript | Out-String
+ $ToggleScript = Process-MultilineStrings @"
+ \\## Toggle Script
+ \\
+ \\``````powershell
+ \\$ToggleScriptContent
+ \\``````
+"@
+ }
+
+ # Clear the variable before continuing, will cause problems otherwise
+ $ButtonScript = ""
+ if ($itemDetails.ButtonScript) {
+ $ButtonScriptContent = $itemDetails.ButtonScript | Out-String
+ $ButtonScript = Process-MultilineStrings @"
+ \\## Button Script
+ \\
+ \\``````powershell
+ \\$ButtonScriptContent
+ \\``````
+"@
+ }
+
+ # Clear the variable before continuing, will cause problems otherwise
+ $FunctionDetails = ""
+ $processedFunctions = New-Object 'System.Collections.Generic.HashSet[System.String]'
+ $allScripts = @($itemDetails.InvokeScript, $itemDetails.UndoScript, $itemDetails.ToggleScript, $itemDetails.ButtonScript)
+ foreach ($script in $allScripts) {
+ if ($script) {
+ $calledFunctions = Get-CalledFunctions -scriptContent $script -functionList $functions -processedFunctions ([ref]$processedFunctions)
+ foreach ($functionName in $calledFunctions) {
+ if ($functions.ContainsKey($functionName)) {
+ $FunctionDetails += Process-MultilineStrings @"
+ \\## Function: $functionName
+ \\
+ \\``````powershell
+ \\$($functions[$functionName])
+ \\``````
+ \\
+"@
+ }
+ }
+ }
+ }
+
+ $additionalFunctionToggle = Get-AdditionalFunctionsFromToggle -buttonName $fullItemName
+ if ($additionalFunctionToggle) {
+ $additionalFunctionNameToggle = "Invoke-$additionalFunctionToggle"
+ if ($functions.ContainsKey($additionalFunctionNameToggle) -and -not $processedFunctions.Contains($additionalFunctionNameToggle)) {
+ $FunctionDetails += Process-MultilineStrings @"
+ \\## Function: $additionalFunctionNameToggle
+ \\
+ \\``````powershell
+ \\$($functions[$additionalFunctionNameToggle])
+ \\``````
+ \\
+"@
+ $processedFunctions.Add($additionalFunctionNameToggle)
+ }
+ }
+
+ $additionalFunctionButton = Get-AdditionalFunctionsFromButton -buttonName $fullItemName
+ if ($additionalFunctionButton) {
+ $additionalFunctionNameButton = "Invoke-$additionalFunctionButton"
+ if ($functions.ContainsKey($additionalFunctionNameButton) -and -not $processedFunctions.Contains($additionalFunctionNameButton)) {
+ $FunctionDetails += Process-MultilineStrings @"
+ \\## Function: $additionalFunctionNameButton
+ \\
+ \\``````powershell
+ \\$($functions[$additionalFunctionNameButton])
+ \\``````
+ \\
+"@
+ $processedFunctions.Add($additionalFunctionNameButton)
+ }
+ }
+
+ # Clear the variable before continuing, will cause problems otherwise
+ $registryDocs = ""
+ if ($itemDetails.registry) {
+ $registryDocs += Process-MultilineStrings @"
+ \\## Registry Changes
+ \\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.
+ \\
+ \\
+ \\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).
+ \\
+ \\
+"@
+ foreach ($regEntry in $itemDetails.registry) {
+ $registryDocs += Process-MultilineStrings @"
+ \\### Registry Key: $($regEntry.Name)
+ \\
+ \\**Type:** $($regEntry.Type)
+ \\
+ \\**Original Value:** $($regEntry.OriginalValue)
+ \\
+ \\**New Value:** $($regEntry.Value)
+ \\
+ \\
+"@
+ }
+ }
+
+ # Clear the variable before continuing, will cause problems otherwise
+ $serviceDocs = ""
+ if ($itemDetails.service) {
+ $serviceDocs = Process-MultilineStrings @"
+ \\## Service Changes
+ \\
+ \\Windows services are background processes for system functions or applications. Setting some to manual optimizes performance by starting them only when needed.
+ \\
+ \\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).
+ \\
+ \\
+"@
+ foreach ($service in $itemDetails.service) {
+ $serviceDocs += Process-MultilineStrings @"
+ \\### Service Name: $($service.Name)
+ \\
+ \\**Startup Type:** $($service.StartupType)
+ \\
+ \\**Original Type:** $($service.OriginalType)
+ \\
+ \\
+"@
+ }
+ }
+
+ # Clear the variable before continuing, will cause problems otherwise
+ $scheduledTaskDocs = ""
+ if ($itemDetails.ScheduledTask) {
+ $scheduledTaskDocs = Process-MultilineStrings @"
+ \\## Scheduled Task Changes
+ \\
+ \\Windows scheduled tasks are used to run scripts or programs at specific times or events. Disabling unnecessary tasks can improve system performance and reduce unwanted background activity.
+ \\
+ \\
+ \\You can find information about scheduled tasks on [Wikipedia](https://www.wikiwand.com/en/Windows_Task_Scheduler) and [Microsoft's Website](https://learn.microsoft.com/en-us/windows/desktop/taskschd/about-the-task-scheduler).
+ \\
+ \\
+"@
+ foreach ($task in $itemDetails.ScheduledTask) {
+ $scheduledTaskDocs += Process-MultilineStrings @"
+ \\### Task Name: $($task.Name)
+ \\
+ \\**State:** $($task.State)
+ \\
+ \\**Original State:** $($task.OriginalState)
+ \\
+ \\
+"@
+ }
+ }
+
+ $jsonLink = "[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/$jsonFilePath)"
+ $customContentStartTag = ""
+ $customContentEndTag = ""
+ $secondCustomContentStartTag = ""
+ $secondCustomContentEndTag = ""
+
+ if (Test-Path -Path "$filename") {
+ $existingContent = Get-Content -Path "$filename" -Raw
+ $customContentPattern = "(?s)$customContentStartTag(.*?)$customContentEndTag"
+ $secondCustomContentPattern = "(?s)$secondCustomContentStartTag(.*?)$secondCustomContentEndTag"
+ if ($existingContent -match $customContentPattern) {
+ $customContent = $matches[1].Trim()
+ }
+ if ($existingContent -match $secondCustomContentPattern) {
+ $secondCustomContent = $matches[1].Trim()
+ }
+ }
+
+ $fileContent = Process-MultilineStrings @"
+ \\$header
+ \\$lastUpdatedNotice
+ \\
+ \\$autoupdatenotice
+ \\$( if ($itemDetails.Description) { $description } )
+ \\
+ \\$customContentStartTag
+ \\$customContent
+ \\$customContentEndTag
+ \\
+ \\$codeBlock
+ \\
+ \\$(
+ if ($FeaturesDocs) { $FeaturesDocs + "`r`n" }
+ if ($itemDetails.InvokeScript) { $InvokeScript + "`r`n" }
+ if ($itemDetails.UndoScript) { $UndoScript + "`r`n" }
+ if ($itemDetails.ToggleScript) { $ToggleScript + "`r`n" }
+ if ($itemDetails.ButtonScript) { $ButtonScript + "`r`n" }
+ if ($FunctionDetails) { $FunctionDetails + "`r`n" }
+ if ($itemDetails.registry) { $registryDocs + "`r`n" }
+ if ($itemDetails.service) { $serviceDocs + "`r`n" }
+ if ($itemDetails.ScheduledTask) { $scheduledTaskDocs + "`r`n" }
+ )
+ \\$secondCustomContentStartTag
+ \\$secondCustomContent
+ \\$secondCustomContentEndTag
+ \\
+ \\
+ \\$jsonLink
+"@
+
+ Set-Content -Path "$filename" -Value "$fileContent" -Encoding utf8
+
+ # TODO: For whatever reason, some headers have a space before them,
+ # so as a temporary fix.. we'll remove these it so mkdocs can render properly
+ (Get-Content -Raw -Path "$filename").Replace(' ##', '##') | Set-Content "$filename"
+ $currentProgress += $progressIncrement
+ $roundedProgress = [math]::Round($currentProgress)
+ Update-Progress -StatusMessage "Generating content for documentation" -Percent $roundedProgress
+ }
+
+ return [PSCustomObject]@{
+ TocEntries = $tocEntries
+ ProcessedFiles = $processedFiles
+ }
+}
+
+function Generate-TypeSectionContent {
+ param (
+ [array]$entries
+ )
+
+ $totalEntries = $entries.Count
+ $progressIncrement = 10 / $totalEntries
+ $currentProgress = 90
+
+ $sectionContent = ""
+ $categories = @{}
+ foreach ($entry in $entries) {
+ if (-Not $categories.ContainsKey($entry.Category)) {
+ $categories[$entry.Category] = @()
+ }
+ $categories[$entry.Category] += $entry
+
+ $currentProgress += $progressIncrement
+ $roundedProgress = [math]::Round($currentProgress)
+ Update-Progress -StatusMessage "Generating table of contents" -Percent $roundedProgress
+ }
+ foreach ($category in $categories.Keys) {
+ $sectionContent += "### $category`r`n`r`n"
+ foreach ($entry in $categories[$category]) {
+ $sectionContent += "- [$($entry.Name)]($($entry.Path))`r`n"
+ }
+ }
+ return $sectionContent
+}
+
+function Add-LinkAttributeToJson {
+ param (
+ [string]$jsonFilePath,
+ [string]$outputDir
+ )
+
+ $jsonText = Get-Content -Path $jsonFilePath -Raw
+ $jsonData = $jsonText | ConvertFrom-Json
+
+ $totalItems = ($jsonData.PSObject.Properties | Measure-Object).Count
+ $progressIncrement = 20 / $totalItems
+ $currentProgress = 70
+
+ foreach ($item in $jsonData.PSObject.Properties) {
+ $itemName = $item.Name
+ $itemDetails = $item.Value
+ $category = $itemDetails.category -replace '[^a-zA-Z0-9]', '-'
+ $displayName = $itemName -replace "$itemnametocut", ''
+ $relativePath = "$outputDir/$category/$displayName" -replace '^docs/', ''
+ $docLink = "https://christitustech.github.io/winutil/$relativePath"
+ $jsonData.$itemName.link = $docLink
+
+ $currentProgress += $progressIncrement
+ $roundedProgress = [math]::Round($currentProgress)
+ Update-Progress -StatusMessage "Adding documentation links to JSON" -Percent $roundedProgress
+ }
+
+ $jsonText = ($jsonData | ConvertTo-Json -Depth 10).replace('\n',"`n").replace('\r', "`r")
+ Set-Content -Path $jsonFilePath -Value ($jsonText) -Encoding utf8
+}
+
+Update-Progress "Loading JSON files" 10
+$tweaks = Get-Content -Path "../config/tweaks.json" | ConvertFrom-Json
+$features = Get-Content -Path "../config/feature.json" | ConvertFrom-Json
+
+Update-Progress "Getting last modified dates of the JSON files" 20
+$tweaksLastModified = (Get-Item "../config/tweaks.json").LastWriteTime.ToString("yyyy-MM-dd")
+$featuresLastModified = (Get-Item "../config/feature.json").LastWriteTime.ToString("yyyy-MM-dd")
+
+$tweaksOutputDir = "../docs/dev/tweaks"
+$featuresOutputDir = "../docs/dev/features"
+$privateFunctionsDir = "../functions/private"
+$publicFunctionsDir = "../functions/public"
+$functions = @{}
+$itemnametocut = "WPF(WinUtil|Toggle|Features?|Tweaks?|Panel|Fix(es)?)?"
+
+Update-Progress "Creating Directories" 30
+if (-Not (Test-Path -Path $tweaksOutputDir)) {
+ New-Item -ItemType Directory -Path $tweaksOutputDir | Out-Null
+}
+if (-Not (Test-Path -Path $featuresOutputDir)) {
+ New-Item -ItemType Directory -Path $featuresOutputDir | Out-Null
+}
+
+Update-Progress "Loading existing Functions" 40
+Load-Functions -dir $privateFunctionsDir
+Load-Functions -dir $publicFunctionsDir
+
+Update-Progress "Adding documentation links to JSON files" 50
+
+# Define the JSON file paths
+$jsonPaths = @("../config/feature.json", "../config/tweaks.json")
+
+# Loop through each JSON file path
+foreach ($jsonPath in $jsonPaths) {
+ # Load the JSON content
+ $json = Get-Content -Raw -Path $jsonPath | ConvertFrom-Json
+
+ # Set the global root object to the current json object
+ $global:rootObject = $json
+
+ # Add the "link" attribute to the JSON
+ Add-LinkAttribute -jsonObject $json
+
+ # Convert back to JSON with the original formatting
+ $jsonString = ($json | ConvertTo-Json -Depth 100).replace('\n',"`n").replace('\r', "`r")
+
+ # Save the JSON back to the file
+ Set-Content -Path $jsonPath -Value $jsonString
+}
+
+Add-LinkAttributeToJson -jsonFilePath "../config/tweaks.json" -outputDir "dev/tweaks"
+Add-LinkAttributeToJson -jsonFilePath "../config/feature.json" -outputDir "dev/features"
+
+Update-Progress "Generating content for documentation" 60
+$tweakResult = Generate-MarkdownFiles -data $tweaks -outputDir $tweaksOutputDir -jsonFilePath "../config/tweaks.json" -lastModified $tweaksLastModified -type "tweak" -initialProgress 60
+$featureResult = Generate-MarkdownFiles -data $features -outputDir $featuresOutputDir -jsonFilePath "../config/feature.json" -lastModified $featuresLastModified -type "feature" -initialProgress 70
+
+Update-Progress "Generating table of contents" 80
+$allTocEntries = $tweakResult.TocEntries + $featureResult.TocEntries
+$tweakEntries = ($allTocEntries).where{ $_.Type -eq 'tweak' } | Sort-Object Category, Name
+$featureEntries = ($allTocEntries).where{ $_.Type -eq 'feature' } | Sort-Object Category, Name
+
+$indexContent += Process-MultilineStrings @"
+ \\# Table of Contents
+ \\
+ \\
+ \\## Tweaks
+ \\
+ \\
+"@
+$indexContent += $(Generate-TypeSectionContent $tweakEntries) + "`r`n"
+$indexContent += Process-MultilineStrings @"
+ \\## Features
+ \\
+ \\
+"@
+$indexContent += $(Generate-TypeSectionContent $featureEntries) + "`r`n"
+Set-Content -Path "../docs/devdocs.md" -Value $indexContent -Encoding utf8
+
+Update-Progress "Process Completed" 100
diff --git a/windev.ps1 b/windev.ps1
index 6ad84f4f..3e1805f0 100644
--- a/windev.ps1
+++ b/windev.ps1
@@ -28,7 +28,7 @@ function Get-LatestRelease {
function RedirectToLatestPreRelease {
$latestRelease = Get-LatestRelease
if ($latestRelease) {
- $url = "https://raw.githubusercontent.com/ChrisTitusTech/winutil/$latestRelease/winutil.ps1"
+ $url = "https://github.com/ChrisTitusTech/winutil/releases/download/$latestRelease/winutil.ps1"
} else {
Write-Host 'Unable to determine latest pre-release version.' -ForegroundColor Red
Write-Host "Using latest Full Release"
diff --git a/winget.ps1 b/winget.ps1
index b7761cc2..861584f9 100644
--- a/winget.ps1
+++ b/winget.ps1
@@ -35,15 +35,15 @@
<#
.SYNOPSIS
- Downloads and installs the latest version of winget and its dependencies. Updates the PATH variable if needed.
+ Downloads and installs the latest version of winget and its dependencies. Updates the PATH variable if needed.
.DESCRIPTION
- Downloads and installs the latest version of winget and its dependencies. Updates the PATH variable if needed.
+ Downloads and installs the latest version of winget and its dependencies. Updates the PATH variable if needed.
This script is designed to be straightforward and easy to use, removing the hassle of manually downloading, installing, and configuring winget. To make the newly installed winget available for use, a system reboot may be required after running the script.
This function should be run with administrative privileges.
.EXAMPLE
- winget-install
+ winget-install
.PARAMETER DebugMode
Enables debug mode, which shows additional information for debugging.
.PARAMETER DisableCleanup
@@ -57,10 +57,10 @@ This function should be run with administrative privileges.
.PARAMETER Help
Displays the full help information for the script.
.NOTES
- Version : 3.0.1
- Created by : asheroto
+ Version : 3.0.1
+ Created by : asheroto
.LINK
- Project Site: https://github.com/asheroto/winget-install
+ Project Site: https://github.com/asheroto/winget-install
#>
[CmdletBinding()]
param (
diff --git a/winutil.ps1 b/winutil.ps1
deleted file mode 100644
index e6e5c218..00000000
--- a/winutil.ps1
+++ /dev/null
@@ -1,15891 +0,0 @@
-################################################################################################################
-### ###
-### WARNING: This file is automatically generated DO NOT modify this file directly as it will be overwritten ###
-### ###
-################################################################################################################
-<#
-.NOTES
- Author : Chris Titus @christitustech
- Runspace Author: @DeveloperDurp
- GitHub : https://github.com/ChrisTitusTech
- Version : 24.07.31
-#>
-param (
- [switch]$Debug,
- [string]$Config,
- [switch]$Run
-)
-
-# Set DebugPreference based on the -Debug switch
-if ($Debug) {
- $DebugPreference = "Continue"
-}
-
-if ($Config) {
- $PARAM_CONFIG = $Config
-}
-
-$PARAM_RUN = $false
-# Handle the -Run switch
-if ($Run) {
- Write-Host "Running config file tasks..."
- $PARAM_RUN = $true
-}
-
-if (!(Test-Path -Path $ENV:TEMP)) {
- New-Item -ItemType Directory -Force -Path $ENV:TEMP
-}
-
-Start-Transcript $ENV:TEMP\Winutil.log -Append
-
-# Load DLLs
-Add-Type -AssemblyName PresentationFramework
-Add-Type -AssemblyName System.Windows.Forms
-
-# Variable to sync between runspaces
-$sync = [Hashtable]::Synchronized(@{})
-$sync.PSScriptRoot = $PSScriptRoot
-$sync.version = "24.07.31"
-$sync.configs = @{}
-$sync.ProcessRunning = $false
-
-# If script isn't running as admin, show error message and quit
-If (([Security.Principal.WindowsIdentity]::GetCurrent()).Owner.Value -ne "S-1-5-32-544")
-{
- Write-Host "===========================================" -Foregroundcolor Red
- Write-Host "-- Scripts must be run as Administrator ---" -Foregroundcolor Red
- Write-Host "-- Right-Click Start -> Terminal(Admin) ---" -Foregroundcolor Red
- Write-Host "===========================================" -Foregroundcolor Red
- break
-}
-
-# Set PowerShell window title
-$Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Admin)"
-clear-host
-function ConvertTo-Icon {
- <#
-
- .DESCRIPTION
- This function will convert BMP, GIF, EXIF, JPG, PNG and TIFF to ICO file
-
- .PARAMETER bitmapPath
- The file path to bitmap image to make '.ico' file out of.
- Supported file types according to Microsoft Documentation is the following:
- BMP, GIF, EXIF, JPG, PNG and TIFF.
-
- .PARAMETER iconPath
- The file path to write the new '.ico' resource.
-
- .PARAMETER overrideIconFile
- An optional boolean Parameter that makes the function overrides
- the Icon File Path if the file exists. Defaults to $true.
-
- .EXAMPLE
- try {
- ConvertTo-Icon -bitmapPath "$env:TEMP\cttlogo.png" -iconPath "$env:TEMP\cttlogo.ico"
- } catch [System.IO.FileNotFoundException] {
- # Handle the thrown exception here...
- }
-
- This Example makes a '.ico' file at "$env:TEMP\cttlogo.ico" File Path using the bitmap file
- found in "$env:TEMP\cttlogo.png", the function overrides the '.ico' File if it's found.
- this function will throw a FileNotFound Exception at the event of not finding the provided bitmap File Path.
-
- .EXAMPLE
- try {
- ConvertTo-Icon "$env:TEMP\cttlogo.png" "$env:TEMP\cttlogo.ico"
- } catch [System.IO.FileNotFoundException] {
- # Handle the thrown exception here...
- }
-
- This Example is the same as Example 1, but uses Positional Parameters instead.
-
- .EXAMPLE
- if (Test-Path "$env:TEMP\cttlogo.png") {
- ConvertTo-Icon -bitmapPath "$env:TEMP\cttlogo.png" -iconPath "$env:TEMP\cttlogo.ico"
- }
-
- This Example is same as Example 1, but checks if the bitmap File exists before calling 'ConvertTo-Icon' Function.
- This's the recommended way of using this function, as it doesn't require any try-catch blocks.
-
- .EXAMPLE
- try {
- ConvertTo-Icon -bitmapPath "$env:TEMP\cttlogo.png" -iconPath "$env:TEMP\cttlogo.ico" -overrideIconFile $false
- } catch [System.IO.FileNotFoundException] {
- # Handle the thrown exception here...
- }
-
- This Example make use of '-overrideIconFile' Optional Parameter, the default for this paramter is $true.
- By doing '-overrideIconFile $false', the 'ConvertTo-Icon' function will raise an exception that needs to be catched throw a 'catch' Code Block,
- otherwise it'll crash the running PowerShell instance/process.
-
- #>
- param(
- [Parameter(Mandatory=$true, position=0)]
- [string]$bitmapPath,
- [Parameter(Mandatory=$true, position=1)]
- [string]$iconPath,
- [Parameter(position=2)]
- [bool]$overrideIconFile = $true
- )
-
- Add-Type -AssemblyName System.Drawing
-
- if (Test-Path $bitmapPath) {
- if ((Test-Path $iconPath) -AND ($overrideIconFile -eq $false)) {
- Write-Host "[ConvertTo-Icon] Icon File is found at '$iconPath', and the 'overrideIconFile' Parameter is set to '$overrideIconFile'. Skipping the bitmap to icon convertion..." -ForegroundColor Yellow
- return
- }
-
- # Load bitmap file into memory, and make an Icon version out of it
- $b = [System.Drawing.Bitmap]::FromFile($bitmapPath)
- $icon = [System.Drawing.Icon]::FromHandle($b.GetHicon())
-
- # Create the folder for the new icon file if it doesn't exists
- $iconFolder = (New-Object System.IO.FileInfo($iconPath)).Directory.FullName
- [System.IO.Directory]::CreateDirectory($iconFolder) | Out-Null
-
- # Write the Icon File and do some cleaning-up
- $file = New-Object System.IO.FileStream($iconPath, 'OpenOrCreate')
- $icon.Save($file)
- $file.Close()
- $icon.Dispose()
- }
- else {
- throw [System.IO.FileNotFoundException] "[ConvertTo-Icon] The provided bitmap File Path is not found at '$bitmapPath'."
- }
-}
-function Copy-Files {
- <#
-
- .DESCRIPTION
- This function will make all modifications to the registry
-
- .EXAMPLE
-
- Set-WinUtilRegistry -Name "PublishUserActivities" -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Type "DWord" -Value "0"
-
- #>
- param (
- [string] $Path,
- [string] $Destination,
- [switch] $Recurse = $false,
- [switch] $Force = $false
- )
-
- try {
-
- $files = Get-ChildItem -Path $path -Recurse:$recurse
- Write-Host "Copy $($files.Count)(s) from $path to $destination"
-
- foreach($file in $files)
- {
- $status = "Copy files {0} on {1}: {2}" -f $counter, $files.Count, $file.Name
- Write-Progress -Activity "Copy Windows files" -Status $status -PercentComplete ($counter++/$files.count*100)
- $restpath = $file.FullName -Replace $path, ''
-
- if($file.PSIsContainer -eq $true)
- {
- Write-Debug "Creating $($destination + $restpath)"
- New-Item ($destination+$restpath) -Force:$force -Type Directory -ErrorAction SilentlyContinue
- }
- else
- {
- Write-Debug "Copy from $($file.FullName) to $($destination+$restpath)"
- Copy-Item $file.FullName ($destination+$restpath) -ErrorAction SilentlyContinue -Force:$force
- Set-ItemProperty -Path ($destination+$restpath) -Name IsReadOnly -Value $false
- }
- }
- Write-Progress -Activity "Copy Windows files" -Status "Ready" -Completed
- }
- Catch{
- Write-Warning "Unable to Copy all the files due to unhandled exception"
- Write-Warning $psitem.Exception.StackTrace
- }
-}
-function Get-LocalizedYesNo {
- <#
- .SYNOPSIS
- This function runs choice.exe and captures its output to extract yes no in a localized Windows
-
- .DESCRIPTION
- The function retrieves the output of the command 'cmd /c "choice nul"' and converts the default output for Yes and No
- in the localized format, such as "Yes=, No=".
-
- .EXAMPLE
- $yesNoArray = Get-LocalizedYesNo
- Write-Host "Yes=$($yesNoArray[0]), No=$($yesNoArray[1])"
- #>
-
- # Run choice and capture its options as output
- # The output shows the options for Yes and No as "[Y,N]?" in the (partitially) localized format.
- # eg. English: [Y,N]?
- # Dutch: [Y,N]?
- # German: [J,N]?
- # French: [O,N]?
- # Spanish: [S,N]?
- # Italian: [S,N]?
- # Russian: [Y,N]?
-
- $line = cmd /c "choice nul"
- $charactersArray = @()
- $regexPattern = '([a-zA-Z])'
- $charactersArray = [regex]::Matches($line, $regexPattern) | ForEach-Object { $_.Groups[1].Value }
-
- Write-Debug "According to takeown.exe local Yes is $charactersArray[0]"
- # Return the array of characters
- return $charactersArray
-
- }
-function Get-Oscdimg {
- <#
-
- .DESCRIPTION
- This function will download oscdimg file from github Release folders and put it into env:temp folder
-
- .EXAMPLE
- Get-Oscdimg
- #>
- param( [Parameter(Mandatory=$true)]
- [string]$oscdimgPath
- )
- $oscdimgPath = "$env:TEMP\oscdimg.exe"
- $downloadUrl = "https://github.com/ChrisTitusTech/winutil/raw/main/releases/oscdimg.exe"
- Invoke-RestMethod -Uri $downloadUrl -OutFile $oscdimgPath
- $hashResult = Get-FileHash -Path $oscdimgPath -Algorithm SHA256
- $sha256Hash = $hashResult.Hash
-
- Write-Host "[INFO] oscdimg.exe SHA-256 Hash: $sha256Hash"
-
- $expectedHash = "AB9E161049D293B544961BFDF2D61244ADE79376D6423DF4F60BF9B147D3C78D" # Replace with the actual expected hash
- if ($sha256Hash -eq $expectedHash) {
- Write-Host "Hashes match. File is verified."
- } else {
- Write-Host "Hashes do not match. File may be corrupted or tampered with."
- }
-}
-function Get-TabXaml {
- <#
- .SYNOPSIS
- Generates XAML for a tab in the WinUtil GUI
- This function is used to generate the XAML for the applications tab in the WinUtil GUI
- It takes the tabname and the number of columns to display the applications in as input and returns the XAML for the tab as output
- .PARAMETER tabname
- The name of the tab to generate XAML for
- Note: the 'tabname' parameter must equal one of the json files found in $sync.configs variable
- Otherwise, it'll throw an exception
- .PARAMETER columncount
- The number of columns to display the applications in, default is 0
- .OUTPUTS
- The XAML for the tab
- .EXAMPLE
- Get-TabXaml "applications" 3
- #>
-
-
- param(
- [Parameter(Mandatory, position=0)]
- [string]$tabname,
-
- [Parameter(position=1)]
- [ValidateRange(0,10)] # 10 panels as max number is more then enough
- [int]$columncount = 0
- )
-
- # Validate tabname
- if ($sync.configs.$tabname -eq $null) {
- throw "Invalid parameter passed, can't find '$tabname' in '`$sync.configs' variable, please double check any calls to 'Get-TabXaml' function."
- }
-
- $organizedData = @{}
- # Iterate through JSON data and organize by panel and category
- foreach ($appName in $sync.configs.$tabname.PSObject.Properties.Name) {
- $appInfo = $sync.configs.$tabname.$appName
-
- # Create an object for the application
- $appObject = [PSCustomObject]@{
- Name = $appName
- Category = $appInfo.Category
- Content = $appInfo.Content
- Choco = $appInfo.choco
- Winget = $appInfo.winget
- Panel = if ($columncount -gt 0 ) { "0" } else {$appInfo.panel}
- Link = $appInfo.link
- Description = $appInfo.description
- # Type is (Checkbox,Toggle,Button,Combobox ) (Default is Checkbox)
- Type = $appInfo.type
- ComboItems = $appInfo.ComboItems
- # Checked is the property to set startup checked status of checkbox (Default is false)
- Checked = $appInfo.Checked
- ButtonWidth = $appInfo.ButtonWidth
- }
-
- if (-not $organizedData.ContainsKey($appObject.panel)) {
- $organizedData[$appObject.panel] = @{}
- }
-
- if (-not $organizedData[$appObject.panel].ContainsKey($appObject.Category)) {
- $organizedData[$appObject.panel][$appObject.Category] = @{}
- }
-
- # Store application data in a sub-array under the category
- # Add Order property to keep the original order of tweaks and features
- $organizedData[$appObject.panel][$appInfo.Category]["$($appInfo.order)$appName"] = $appObject
- }
-
- # Same tab amount in last line of 'inputXML.xaml' file
- # TODO: Get the base repeat (amount) of tabs from last line (or even lines)
- # so it can dynamicly react to whatever is before this generated XML string.
- # .. may be solve this even before calling this function, and pass the result as a parameter?
- $tab_repeat = 7
- $spaces_per_tab = 4 # The convenction used across the code base
- $tab_as_spaces = $(" " * $spaces_per_tab)
- $precal_indent = $($tab_as_spaces * $tab_repeat)
- $precal_indent_p1 = $($tab_as_spaces * ($tab_repeat + 1))
- $precal_indent_p2 = $($tab_as_spaces * ($tab_repeat + 2))
- $precal_indent_m1 = $($tab_as_spaces * ($tab_repeat - 1))
- $precal_indent_m2 = $($tab_as_spaces * ($tab_repeat - 2))
-
- # Calculate the needed number of panels
- $panelcount = 0
- $paneltotal = $organizedData.Keys.Count
- if ($columncount -gt 0) {
- $appcount = $sync.configs.$tabname.PSObject.Properties.Name.count + $organizedData["0"].Keys.count
- $maxcount = [Math]::Round( $appcount / $columncount + 0.5)
- $paneltotal = $columncount
- }
- # add ColumnDefinitions to evenly draw colums
- $blockXml = ""
- $blockXml += $("`r`n" + " " * ($spaces_per_tab * $tab_repeat) +
- "") * $paneltotal
- $blockXml += $("`r`n" + " " * ($spaces_per_tab * ($tab_repeat - 1))) +
- "" + "`r`n"
-
- # Iterate through 'organizedData' by panel, category, and application
- $count = 0
- foreach ($panel in ($organizedData.Keys | Sort-Object)) {
- $blockXml += $precal_indent_m1 + "" + "`r`n"
- $blockXml += $precal_indent + "" + "`r`n"
- $panelcount++
- foreach ($category in ($organizedData[$panel].Keys | Sort-Object)) {
- $count++
- if ($columncount -gt 0) {
- $panelcount2 = [Int](($count)/$maxcount-0.5)
- if ($panelcount -eq $panelcount2 ) {
- $blockXml += $precal_indent_p2 + "" + "`r`n"
- $blockXml += $precal_indent_p1 + "" + "`r`n"
- $blockXml += $precal_indent_p1 + "" + "`r`n"
- $blockXml += $precal_indent_p2 + "" + "`r`n"
- $panelcount++
- }
- }
-
- # Dot-source the Get-WPFObjectName function
- . .\functions\private\Get-WPFObjectName
-
- $categorycontent = $($category -replace '^.__', '')
- $categoryname = Get-WPFObjectName -type "Label" -name $categorycontent
- $blockXml += $("`r`n" + " " * ($spaces_per_tab * $tab_repeat)) +
- "" + "`r`n" + "`r`n"
- $sortedApps = $organizedData[$panel][$category].Keys | Sort-Object
- foreach ($appName in $sortedApps) {
- $count++
-
- if ($columncount -gt 0) {
- $panelcount2 = [Int](($count)/$maxcount-0.5)
- # Verify the indentation actually works...
- if ($panelcount -eq $panelcount2 ) {
- $blockXml += $precal_indent_m1 +
- "" + "`r`n"
- $blockXml += $precal_indent_m2 +
- "" + "`r`n"
- $blockXml += $precal_indent_m2 +
- "" + "`r`n"
- $blockXml += $precal_indent_m1 +
- "" + "`r`n"
- $panelcount++
- }
- }
-
- $appInfo = $organizedData[$panel][$category][$appName]
- switch ($appInfo.Type) {
- "Toggle" {
- $blockXml += $precal_indent_m1 +
- "" + "`r`n"
- $blockXml += $precal_indent +
- "" + "`r`n"
- $blockXml += $precal_indent +
- "" + "`r`n"
- $blockXml += $precal_indent_m1 +
- "" + "`r`n"
- }
-
- "Combobox" {
- $blockXml += $precal_indent_m1 +
- "" + "`r`n"
- $blockXml += $precal_indent + "" + "`r`n"
- $blockXml += $precal_indent +
- "" + "`r`n"
-
- $addfirst="IsSelected=""True"""
- foreach ($comboitem in ($appInfo.ComboItems -split " ")) {
- $blockXml += $precal_indent_p1 +
- "" + "`r`n"
- $addfirst=""
- }
-
- $blockXml += $precal_indent_p1 + "" + "`r`n"
- $blockXml += $precal_indent + "" + "`r`n"
- }
-
- "Button" {
- if ($appInfo.ButtonWidth -ne $null) {
- $ButtonWidthStr = "Width=""$($appInfo.ButtonWidth)"""
- }
- $blockXml += $precal_indent +
- "" + "`r`n"
- }
-
- # else it is a checkbox
- default {
- $checkedStatus = If ($appInfo.Checked -eq $null) {""} Else {" IsChecked=""$($appInfo.Checked)"""}
- if ($appInfo.Link -eq $null) {
- $blockXml += $precal_indent +
- "" + "`r`n"
- } else {
- $blockXml += $precal_indent +
- "" + "`r`n"
- $blockXml += $precal_indent_p1 +
- "" + "`r`n"
- $blockXml += $precal_indent_p1 +
- "" + "`r`n"
- $blockXml += $precal_indent +
- "" + "`r`n"
- }
- }
- }
- }
- }
-
- $blockXml += $precal_indent_p1 + "" + "`r`n"
- $blockXml += $precal_indent + "" + "`r`n"
- }
- return ($blockXml)
-}
-Function Get-WinUtilCheckBoxes {
-
- <#
-
- .SYNOPSIS
- Finds all checkboxes that are checked on the specific tab and inputs them into a script.
-
- .PARAMETER unCheck
- Whether to uncheck the checkboxes that are checked. Defaults to true
-
- .OUTPUTS
- A List containing the name of each checked checkbox
-
- .EXAMPLE
- Get-WinUtilCheckBoxes "WPFInstall"
-
- #>
-
- Param(
- [boolean]$unCheck = $false
- )
-
- $Output = @{
- Install = @()
- WPFTweaks = @()
- WPFFeature = @()
- WPFInstall = @()
- }
-
- $CheckBoxes = $sync.GetEnumerator() | Where-Object { $_.Value -is [System.Windows.Controls.CheckBox] }
-
- # First check and add WPFTweaksRestorePoint if checked
- $RestorePoint = $CheckBoxes | Where-Object { $_.Key -eq 'WPFTweaksRestorePoint' -and $_.Value.IsChecked -eq $true }
- if ($RestorePoint) {
- $Output["WPFTweaks"] = @('WPFTweaksRestorePoint')
- Write-Debug "Adding WPFTweaksRestorePoint as first in WPFTweaks"
-
- if ($unCheck) {
- $RestorePoint.Value.IsChecked = $false
- }
- }
-
- foreach ($CheckBox in $CheckBoxes) {
- if ($CheckBox.Key -eq 'WPFTweaksRestorePoint') { continue } # Skip since it's already handled
-
- $group = if ($CheckBox.Key.StartsWith("WPFInstall")) { "Install" }
- elseif ($CheckBox.Key.StartsWith("WPFTweaks")) { "WPFTweaks" }
- elseif ($CheckBox.Key.StartsWith("WPFFeature")) { "WPFFeature" }
- if ($group) {
- if ($CheckBox.Value.IsChecked -eq $true) {
- $feature = switch ($group) {
- "Install" {
- # Get the winget value
- [PsCustomObject]@{
- winget="$($sync.configs.applications.$($CheckBox.Name).winget)";
- choco="$($sync.configs.applications.$($CheckBox.Name).choco)";
- }
-
- }
- default {
- $CheckBox.Name
- }
- }
-
- if (-not $Output.ContainsKey($group)) {
- $Output[$group] = @()
- }
- if ($group -eq "Install") {
- $Output["WPFInstall"] += $CheckBox.Name
- Write-Debug "Adding: $($CheckBox.Name) under: WPFInstall"
- }
-
- Write-Debug "Adding: $($feature) under: $($group)"
- $Output[$group] += $feature
-
- if ($unCheck) {
- $CheckBox.Value.IsChecked = $false
- }
- }
- }
- }
- return $Output
-}
-function Get-WinUtilInstallerProcess {
- <#
-
- .SYNOPSIS
- Checks if the given process is running
-
- .PARAMETER Process
- The process to check
-
- .OUTPUTS
- Boolean - True if the process is running
-
- #>
-
- param($Process)
-
- if ($Null -eq $Process){
- return $false
- }
- if (Get-Process -Id $Process.Id -ErrorAction SilentlyContinue){
- return $true
- }
- return $false
-}
-Function Get-WinUtilToggleStatus {
- <#
-
- .SYNOPSIS
- Pulls the registry keys for the given toggle switch and checks whether the toggle should be checked or unchecked
-
- .PARAMETER ToggleSwitch
- The name of the toggle to check
-
- .OUTPUTS
- Boolean to set the toggle's status to
-
- #>
-
- Param($ToggleSwitch)
- if($ToggleSwitch -eq "WPFToggleDarkMode"){
- $app = (Get-ItemProperty -path 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize').AppsUseLightTheme
- $system = (Get-ItemProperty -path 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize').SystemUsesLightTheme
- if($app -eq 0 -and $system -eq 0){
- return $true
- }
- else{
- return $false
- }
- }
- if($ToggleSwitch -eq "WPFToggleBingSearch"){
- $bingsearch = (Get-ItemProperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Search').BingSearchEnabled
- if($bingsearch -eq 0){
- return $false
- }
- else{
- return $true
- }
- }
- if($ToggleSwitch -eq "WPFToggleNumLock"){
- $numlockvalue = (Get-ItemProperty -path 'HKCU:\Control Panel\Keyboard').InitialKeyboardIndicators
- if($numlockvalue -eq 2){
- return $true
- }
- else{
- return $false
- }
- }
- if($ToggleSwitch -eq "WPFToggleVerboseLogon"){
- $VerboseStatusvalue = (Get-ItemProperty -path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System').VerboseStatus
- if($VerboseStatusvalue -eq 1){
- return $true
- }
- else{
- return $false
- }
- }
- if($ToggleSwitch -eq "WPFToggleShowExt"){
- $hideextvalue = (Get-ItemProperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced').HideFileExt
- if($hideextvalue -eq 0){
- return $true
- }
- else{
- return $false
- }
- }
- if($ToggleSwitch -eq "WPFToggleSnapWindow"){
- $hidesnap = (Get-ItemProperty -path 'HKCU:\Control Panel\Desktop').WindowArrangementActive
- if($hidesnap -eq 0){
- return $false
- }
- else{
- return $true
- }
- }
- if($ToggleSwitch -eq "WPFToggleSnapFlyout"){
- $hidesnap = (Get-ItemProperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced').EnableSnapAssistFlyout
- if($hidesnap -eq 0){
- return $false
- }
- else{
- return $true
- }
- }
- if($ToggleSwitch -eq "WPFToggleSnapSuggestion"){
- $hidesnap = (Get-ItemProperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced').SnapAssist
- if($hidesnap -eq 0){
- return $false
- }
- else{
- return $true
- }
- }
- if($ToggleSwitch -eq "WPFToggleMouseAcceleration"){
- $MouseSpeed = (Get-ItemProperty -path 'HKCU:\Control Panel\Mouse').MouseSpeed
- $MouseThreshold1 = (Get-ItemProperty -path 'HKCU:\Control Panel\Mouse').MouseThreshold1
- $MouseThreshold2 = (Get-ItemProperty -path 'HKCU:\Control Panel\Mouse').MouseThreshold2
-
- if($MouseSpeed -eq 1 -and $MouseThreshold1 -eq 6 -and $MouseThreshold2 -eq 10){
- return $true
- }
- else{
- return $false
- }
- }
- if($ToggleSwitch -eq "WPFToggleTaskbarSearch"){
- $SearchButton = (Get-ItemProperty -path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Search").SearchboxTaskbarMode
- if($SearchButton -eq 0){
- return $false
- }
- else{
- return $true
- }
- }
- if ($ToggleSwitch -eq "WPFToggleStickyKeys") {
- $StickyKeys = (Get-ItemProperty -path 'HKCU:\Control Panel\Accessibility\StickyKeys').Flags
- if($StickyKeys -eq 58){
- return $false
- }
- else{
- return $true
- }
- }
- if ($ToggleSwitch -eq "WPFToggleTaskView") {
- $TaskView = (Get-ItemProperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced').ShowTaskViewButton
- if($TaskView -eq 0){
- return $false
- }
- else{
- return $true
- }
- }
-
- if ($ToggleSwitch -eq "WPFToggleHiddenFiles") {
- $HiddenFiles = (Get-ItemProperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced').Hidden
- if($HiddenFiles -eq 0){
- return $false
- }
- else{
- return $true
- }
- }
-
- if ($ToggleSwitch -eq "WPFToggleTaskbarWidgets") {
- $TaskbarWidgets = (Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced").TaskBarDa
- if($TaskbarWidgets -eq 0) {
- return $false
- }
- else{
- return $true
- }
- }
- if ($ToggleSwitch -eq "WPFToggleTaskbarAlignment") {
- $TaskbarAlignment = (Get-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced").TaskbarAl
- if($TaskbarAlignment -eq 0) {
- return $false
- }
- else{
- return $true
- }
- }
- if ($ToggleSwitch -eq "WPFToggleDetailedBSoD") {
- $DetailedBSoD = (Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl').DisplayParameters
- if($DetailedBSoD -eq 0) {
- return $false
- }
- else{
- return $true
- }
- }
-}
-function Get-WinUtilVariables {
-
- <#
- .SYNOPSIS
- Gets every form object of the provided type
-
- .OUTPUTS
- List containing every object that matches the provided type
- #>
- param (
- [Parameter()]
- [string[]]$Type
- )
- $keys = ($sync.keys).where{ $_ -like "WPF*" }
- if ($Type) {
- $output = $keys | ForEach-Object {
- Try {
- $objType = $sync["$psitem"].GetType().Name
- if ($Type -contains $objType) {
- Write-Output $psitem
- }
- }
- Catch {
- <#I am here so errors don't get outputted for a couple variables that don't have the .GetType() attribute#>
- }
- }
- return $output
- }
- return $keys
-}
-function Get-WinUtilWingetLatest {
- <#
- .SYNOPSIS
- Uses GitHub API to check for the latest release of Winget.
- .DESCRIPTION
- This function grabs the latest version of Winget and returns the download path to Install-WinUtilWinget for installation.
- #>
- # Invoke-WebRequest is notoriously slow when the byte progress is displayed. The following lines disable the progress bar and reset them at the end of the function
- $PreviousProgressPreference = $ProgressPreference
- $ProgressPreference = "silentlyContinue"
- Try{
- # Grabs the latest release of Winget from the Github API for the install process.
- $response = Invoke-RestMethod -Uri "https://api.github.com/repos/microsoft/Winget-cli/releases/latest" -Method Get -ErrorAction Stop
- $latestVersion = $response.tag_name #Stores version number of latest release.
- $licenseWingetUrl = $response.assets.browser_download_url | Where-Object {$_ -like "*License1.xml"} #Index value for License file.
- Write-Host "Latest Version:`t$($latestVersion)`n"
- Write-Host "Downloading..."
- $assetUrl = $response.assets.browser_download_url | Where-Object {$_ -like "*Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle"}
- Invoke-WebRequest -Uri $licenseWingetUrl -OutFile $ENV:TEMP\License1.xml
- # The only pain is that the msixbundle for winget-cli is 246MB. In some situations this can take a bit, with slower connections.
- Invoke-WebRequest -Uri $assetUrl -OutFile $ENV:TEMP\Microsoft.DesktopAppInstaller.msixbundle
- }
- Catch{
- throw [WingetFailedInstall]::new('Failed to get latest Winget release and license')
- }
- $ProgressPreference = $PreviousProgressPreference
-}
-function Get-WinUtilWingetPrerequisites {
- <#
- .SYNOPSIS
- Downloads the Winget Prereqs.
- .DESCRIPTION
- Downloads Prereqs for Winget. Version numbers are coded as variables and can be updated as uncommonly as Microsoft updates the prereqs.
- #>
-
- # I don't know of a way to detect the prereqs automatically, so if someone has a better way of defining these, that would be great.
- # Microsoft.VCLibs version rarely changes, but for future compatibility I made it a variable.
- $versionVCLibs = "14.00"
- $fileVCLibs = "https://aka.ms/Microsoft.VCLibs.x64.${versionVCLibs}.Desktop.appx"
- # Write-Host "$fileVCLibs"
- # Microsoft.UI.Xaml version changed recently, so I made the version numbers variables.
- $versionUIXamlMinor = "2.8"
- $versionUIXamlPatch = "2.8.6"
- $fileUIXaml = "https://github.com/microsoft/microsoft-ui-xaml/releases/download/v${versionUIXamlPatch}/Microsoft.UI.Xaml.${versionUIXamlMinor}.x64.appx"
- # Write-Host "$fileUIXaml"
-
- Try{
- Write-Host "Downloading Microsoft.VCLibs Dependency..."
- Invoke-WebRequest -Uri $fileVCLibs -OutFile $ENV:TEMP\Microsoft.VCLibs.x64.Desktop.appx
- Write-Host "Downloading Microsoft.UI.Xaml Dependency...`n"
- Invoke-WebRequest -Uri $fileUIXaml -OutFile $ENV:TEMP\Microsoft.UI.Xaml.x64.appx
- }
- Catch{
- throw [WingetFailedInstall]::new('Failed to install prerequsites')
- }
-}
-function Get-WPFObjectName {
- <#
- .SYNOPSIS
- This is a helper function that generates an objectname with the prefix WPF that can be used as a Powershell Variable after compilation.
- To achieve this, all characters that are not a-z, A-Z or 0-9 are simply removed from the name.
- .PARAMETER type
- The type of object for which the name should be generated. (e.g. Label, Button, CheckBox...)
- .PARAMETER name
- The name or description to be used for the object. (invalid characters are removed)
- .OUTPUTS
- A string that can be used as a object/variable name in powershell.
- For example: WPFLabelMicrosoftTools
-
- .EXAMPLE
- Get-WPFObjectName -type Label -name "Microsoft Tools"
- #>
-
- param( [Parameter(Mandatory=$true)]
- $type,
- $name
-)
-
-$Output = $("WPF"+$type+$name) -replace '[^a-zA-Z0-9]', ''
-
-return $Output
-
-}
-function Install-WinUtilChoco {
-
- <#
-
- .SYNOPSIS
- Installs Chocolatey if it is not already installed
-
- #>
-
- try {
- Write-Host "Checking if Chocolatey is Installed..."
-
- if((Test-WinUtilPackageManager -choco) -eq "installed") {
- return
- }
-
- Write-Host "Seems Chocolatey is not installed, installing now."
- Set-ExecutionPolicy Bypass -Scope Process -Force; Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) -ErrorAction Stop
- powershell choco feature enable -n allowGlobalConfirmation
-
- }
- Catch {
- Write-Host "===========================================" -Foregroundcolor Red
- Write-Host "-- Chocolatey failed to install ---" -Foregroundcolor Red
- Write-Host "===========================================" -Foregroundcolor Red
- }
-
-}
-function Install-WinUtilProgramChoco {
- <#
- .SYNOPSIS
- Manages the provided programs using Chocolatey
-
- .PARAMETER ProgramsToInstall
- A list of programs to manage
-
- .PARAMETER manage
- The action to perform on the programs, can be either 'Installing' or 'Uninstalling'
-
- .NOTES
- The triple quotes are required any time you need a " in a normal script block.
- #>
-
- param(
- [Parameter(Mandatory, Position=0)]
- [PsCustomObject]$ProgramsToInstall,
-
- [Parameter(Position=1)]
- [String]$manage = "Installing"
- )
-
- $x = 0
- $count = $ProgramsToInstall.Count
-
- # This check isn't really necessary, as there's a couple of checks before this Private Function gets called, but just to make sure ;)
- if($count -le 0) {
- throw "Private Function 'Install-WinUtilProgramChoco' expected Parameter 'ProgramsToInstall' to be of size 1 or greater, instead got $count,`nPlease double check your code and re-compile WinUtil."
- }
-
- Write-Progress -Activity "$manage Applications" -Status "Starting" -PercentComplete 0
- Write-Host "==========================================="
- Write-Host "-- Configuring Chocolatey pacakages ---"
- Write-Host "==========================================="
- Foreach ($Program in $ProgramsToInstall){
- Write-Progress -Activity "$manage Applications" -Status "$manage $($Program.choco) $($x + 1) of $count" -PercentComplete $($x/$count*100)
- if($manage -eq "Installing"){
- write-host "Starting install of $($Program.choco) with Chocolatey."
- try{
- $tryUpgrade = $false
- $installOutputFilePath = "$env:TEMP\Install-WinUtilProgramChoco.install-command.output.txt"
- New-Item -ItemType File -Path $installOutputFilePath
- $chocoInstallStatus = $(Start-Process -FilePath "choco" -ArgumentList "install $($Program.choco) -y" -Wait -PassThru -RedirectStandardOutput $installOutputFilePath).ExitCode
- if(($chocoInstallStatus -eq 0) -AND (Test-Path -Path $installOutputFilePath)) {
- $keywordsFound = Get-Content -Path $installOutputFilePath | Where-Object {$_ -match "reinstall" -OR $_ -match "already installed"}
- if ($keywordsFound) {
- $tryUpgrade = $true
- }
- }
- # TODO: Implement the Upgrade part using 'choco upgrade' command, this will make choco consistent with WinGet, as WinGet tries to Upgrade when you use the install command.
- if ($tryUpgrade) {
- throw "Automatic Upgrade for Choco isn't implemented yet, a feature to make it consistent with WinGet, the install command using choco simply failed because $($Program.choco) is already installed."
- }
- if(($chocoInstallStatus -eq 0) -AND ($tryUpgrade -eq $false)){
- Write-Host "$($Program.choco) installed successfully using Chocolatey."
- $X++
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value ($x/$count) })
- continue
- } else {
- Write-Host "Failed to install $($Program.choco) using Chocolatey, Chocolatey output:`n`n$(Get-Content -Path $installOutputFilePath)."
- $X++
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Error" -value ($x/$count) })
- }
- } catch {
- Write-Host "Failed to install $($Program.choco) due to an error: $_"
- $X++
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Error" -value ($x/$count) })
- }
- }
-
- if($manage -eq "Uninstalling"){
- write-host "Starting uninstall of $($Program.choco) with Chocolatey."
- try{
- $uninstallOutputFilePath = "$env:TEMP\Install-WinUtilProgramChoco.uninstall-command.output.txt"
- New-Item -ItemType File -Path $uninstallOutputFilePath
- $chocoUninstallStatus = $(Start-Process -FilePath "choco" -ArgumentList "uninstall $($Program.choco) -y" -Wait -PassThru).ExitCode
- if($chocoUninstallStatus -eq 0){
- Write-Host "$($Program.choco) uninstalled successfully using Chocolatey."
- $x++
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value ($x/$count) })
- continue
- } else {
- Write-Host "Failed to uninstall $($Program.choco) using Chocolatey, Chocolatey output:`n`n$(Get-Content -Path $uninstallOutputFilePath)."
- $x++
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Error" -value ($x/$count) })
- }
- } catch {
- Write-Host "Failed to uninstall $($Program.choco) due to an error: $_"
- $x++
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Error" -value ($x/$count) })
- }
- }
- }
- Write-Progress -Activity "$manage Applications" -Status "Finished" -Completed
-
- # Cleanup leftovers files
- if(Test-Path -Path $installOutputFilePath){ Remove-Item -Path $installOutputFilePath }
- if(Test-Path -Path $uninstallOutputFilePath){ Remove-Item -Path $uninstallOutputFilePath }
-
- return;
-}
-function Install-WinUtilWinget {
- <#
-
- .SYNOPSIS
- Installs Winget if it is not already installed.
-
- .DESCRIPTION
- This function will download the latest version of Winget and install it. If Winget is already installed, it will do nothing.
- #>
- $isWingetInstalled = Test-WinUtilPackageManager -winget
-
- Try {
- if ($isWingetInstalled -eq "installed") {
- Write-Host "`nWinget is already installed.`r" -ForegroundColor Green
- return
- } elseif ($isWingetInstalled -eq "outdated") {
- Write-Host "`nWinget is Outdated. Continuing with install.`r" -ForegroundColor Yellow
- } else {
- Write-Host "`nWinget is not Installed. Continuing with install.`r" -ForegroundColor Red
- }
-
-
- # Gets the computer's information
- if ($null -eq $sync.ComputerInfo){
- $ComputerInfo = Get-ComputerInfo -ErrorAction Stop
- } else {
- $ComputerInfo = $sync.ComputerInfo
- }
-
- if (($ComputerInfo.WindowsVersion) -lt "1809") {
- # Checks if Windows Version is too old for Winget
- Write-Host "Winget is not supported on this version of Windows (Pre-1809)" -ForegroundColor Red
- return
- }
-
- # Install Winget via GitHub method.
- # Used part of my own script with some modification: ruxunderscore/windows-initialization
- Write-Host "Downloading Winget Prerequsites`n"
- Get-WinUtilWingetPrerequisites
- Write-Host "Downloading Winget and License File`r"
- Get-WinUtilWingetLatest
- Write-Host "Installing Winget w/ Prerequsites`r"
- Add-AppxProvisionedPackage -Online -PackagePath $ENV:TEMP\Microsoft.DesktopAppInstaller.msixbundle -DependencyPackagePath $ENV:TEMP\Microsoft.VCLibs.x64.Desktop.appx, $ENV:TEMP\Microsoft.UI.Xaml.x64.appx -LicensePath $ENV:TEMP\License1.xml
- Write-Host "Manually adding Winget Sources, from Winget CDN."
- Add-AppxPackage -Path https://cdn.winget.microsoft.com/cache/source.msix #Seems some installs of Winget don't add the repo source, this should makes sure that it's installed every time.
- Write-Host "Winget Installed" -ForegroundColor Green
- Write-Host "Enabling NuGet and Module..."
- Install-PackageProvider -Name NuGet -Force
- Install-Module -Name Microsoft.WinGet.Client -Force
- # Winget only needs a refresh of the environment variables to be used.
- Write-Output "Refreshing Environment Variables...`n"
- $ENV:PATH = [System.Environment]::GetEnvironmentVariable("Path", "Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path", "User")
- } Catch {
- Write-Host "Failure detected while installing via GitHub method. Continuing with Chocolatey method as fallback." -ForegroundColor Red
- # In case install fails via GitHub method.
- Try {
- # Install Choco if not already present
- Install-WinUtilChoco
- Start-Process -Verb runas -FilePath powershell.exe -ArgumentList "choco install winget-cli"
- Write-Host "Winget Installed" -ForegroundColor Green
- Write-Output "Refreshing Environment Variables...`n"
- $ENV:PATH = [System.Environment]::GetEnvironmentVariable("Path", "Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path", "User")
- } Catch {
- throw [WingetFailedInstall]::new('Failed to install!')
- }
- }
-
-}
-function Test-CompatibleImage() {
-<#
-
- .SYNOPSIS
- Checks the version of a Windows image and determines whether or not it is compatible with a specific feature depending on a desired version
-
- .PARAMETER Name
- imgVersion - The version of the Windows image
- desiredVersion - The version to compare the image version with
-
-#>
-
- param
- (
- [Parameter(Mandatory = $true, Position=0)] [string] $imgVersion,
- [Parameter(Mandatory = $true, Position=1)] [Version] $desiredVersion
- )
-
- try {
- $version = [Version]$imgVersion
- return $version -ge $desiredVersion
- } catch {
- return $False
- }
-}
-
-function Remove-Features([switch] $dumpFeatures = $false, [switch] $keepDefender = $false) {
-<#
-
- .SYNOPSIS
- Removes certain features from ISO image
-
- .PARAMETER Name
- dumpFeatures - Dumps all features found in the ISO into a file called allfeaturesdump.txt. This file can be examined and used to decide what to remove.
- keepDefender - Should Defender be removed from the ISO?
-
- .EXAMPLE
- Remove-Features -keepDefender:$false
-
-#>
- try
- {
- $featlist = (Get-WindowsOptionalFeature -Path $scratchDir).FeatureName
- if ($dumpFeatures)
- {
- $featlist > allfeaturesdump.txt
- }
-
- $featlist = $featlist | Where-Object {
- $_ -NotLike "*Printing*" -AND
- $_ -NotLike "*TelnetClient*" -AND
- $_ -NotLike "*PowerShell*" -AND
- $_ -NotLike "*NetFx*" -AND
- $_ -NotLike "*Media*" -AND
- $_ -NotLike "*NFS*"
- }
-
- if ($keepDefender) { $featlist = $featlist | Where-Object { $_ -NotLike "*Defender*" }}
-
- foreach($feature in $featlist)
- {
- $status = "Removing feature $feature"
- Write-Progress -Activity "Removing features" -Status $status -PercentComplete ($counter++/$featlist.Count*100)
- Write-Debug "Removing feature $feature"
- Disable-WindowsOptionalFeature -Path "$scratchDir" -FeatureName $feature -Remove -ErrorAction SilentlyContinue -NoRestart
- }
- Write-Progress -Activity "Removing features" -Status "Ready" -Completed
- Write-Host "You can re-enable the disabled features at any time, using either Windows Update or the SxS folder in \Sources."
- }
- catch
- {
- Write-Host "Unable to get information about the features. MicroWin processing will continue, but features will not be processed"
- }
-}
-
-function Remove-Packages
-{
- try
- {
- $pkglist = (Get-WindowsPackage -Path "$scratchDir").PackageName
-
- $pkglist = $pkglist | Where-Object {
- $_ -NotLike "*ApplicationModel*" -AND
- $_ -NotLike "*indows-Client-LanguagePack*" -AND
- $_ -NotLike "*LanguageFeatures-Basic*" -AND
- $_ -NotLike "*Package_for_ServicingStack*" -AND
- $_ -NotLike "*.NET*" -AND
- $_ -NotLike "*Store*" -AND
- $_ -NotLike "*VCLibs*" -AND
- $_ -NotLike "*AAD.BrokerPlugin",
- $_ -NotLike "*LockApp*" -AND
- $_ -NotLike "*Notepad*" -AND
- $_ -NotLike "*immersivecontrolpanel*" -AND
- $_ -NotLike "*ContentDeliveryManager*" -AND
- $_ -NotLike "*PinningConfirMationDialog*" -AND
- $_ -NotLike "*SecHealthUI*" -AND
- $_ -NotLike "*SecureAssessmentBrowser*" -AND
- $_ -NotLike "*PrintDialog*" -AND
- $_ -NotLike "*AssignedAccessLockApp*" -AND
- $_ -NotLike "*OOBENetworkConnectionFlow*" -AND
- $_ -NotLike "*Apprep.ChxApp*" -AND
- $_ -NotLike "*CBS*" -AND
- $_ -NotLike "*OOBENetworkCaptivePortal*" -AND
- $_ -NotLike "*PeopleExperienceHost*" -AND
- $_ -NotLike "*ParentalControls*" -AND
- $_ -NotLike "*Win32WebViewHost*" -AND
- $_ -NotLike "*InputApp*" -AND
- $_ -NotLike "*AccountsControl*" -AND
- $_ -NotLike "*AsyncTextService*" -AND
- $_ -NotLike "*CapturePicker*" -AND
- $_ -NotLike "*CredDialogHost*" -AND
- $_ -NotLike "*BioEnrollMent*" -AND
- $_ -NotLike "*ShellExperienceHost*" -AND
- $_ -NotLike "*DesktopAppInstaller*" -AND
- $_ -NotLike "*WebMediaExtensions*" -AND
- $_ -NotLike "*WMIC*" -AND
- $_ -NotLike "*UI.XaML*"
- }
-
- foreach ($pkg in $pkglist)
- {
- try {
- $status = "Removing $pkg"
- Write-Progress -Activity "Removing Apps" -Status $status -PercentComplete ($counter++/$pkglist.Count*100)
- Remove-WindowsPackage -Path "$scratchDir" -PackageName $pkg -NoRestart -ErrorAction SilentlyContinue
- }
- catch {
- # This can happen if the package that is being removed is a permanent one, like FodMetadata
- Write-Host "Could not remove OS package $($pkg)"
- continue
- }
- }
- Write-Progress -Activity "Removing Apps" -Status "Ready" -Completed
- }
- catch
- {
- Write-Host "Unable to get information about the packages. MicroWin processing will continue, but packages will not be processed"
- }
-}
-
-function Remove-ProvisionedPackages([switch] $keepSecurity = $false)
-{
-<#
-
- .SYNOPSIS
- Removes AppX packages from a Windows image during MicroWin processing
-
- .PARAMETER Name
- keepSecurity - Boolean that determines whether to keep "Microsoft.SecHealthUI" (Windows Security) in the Windows image
-
- .EXAMPLE
- Remove-ProvisionedPackages -keepSecurity:$false
-
-#>
- $appxProvisionedPackages = Get-AppxProvisionedPackage -Path "$($scratchDir)" | Where-Object {
- $_.PackageName -NotLike "*AppInstaller*" -AND
- $_.PackageName -NotLike "*Store*" -and
- $_.PackageName -NotLike "*dism*" -and
- $_.PackageName -NotLike "*Foundation*" -and
- $_.PackageName -NotLike "*FodMetadata*" -and
- $_.PackageName -NotLike "*LanguageFeatures*" -and
- $_.PackageName -NotLike "*Notepad*" -and
- $_.PackageName -NotLike "*Printing*" -and
- $_.PackageName -NotLike "*Wifi*" -and
- $_.PackageName -NotLike "*Foundation*"
- }
-
- if ($?)
- {
- if ($keepSecurity) { $appxProvisionedPackages = $appxProvisionedPackages | Where-Object { $_.PackageName -NotLike "*SecHealthUI*" }}
- $counter = 0
- foreach ($appx in $appxProvisionedPackages)
- {
- $status = "Removing Provisioned $($appx.PackageName)"
- Write-Progress -Activity "Removing Provisioned Apps" -Status $status -PercentComplete ($counter++/$appxProvisionedPackages.Count*100)
- try {
- Remove-AppxProvisionedPackage -Path $scratchDir -PackageName $appx.PackageName -ErrorAction SilentlyContinue
- }
- catch {
- Write-Host "Application $($appx.PackageName) could not be removed"
- continue
- }
- }
- Write-Progress -Activity "Removing Provisioned Apps" -Status "Ready" -Completed
- }
- else
- {
- Write-Host "Could not get Provisioned App information. Skipping process..."
- }
-}
-
-function Copy-ToUSB([string] $fileToCopy)
-{
- foreach ($volume in Get-Volume) {
- if ($volume -and $volume.FileSystemLabel -ieq "ventoy") {
- $destinationPath = "$($volume.DriveLetter):\"
- #Copy-Item -Path $fileToCopy -Destination $destinationPath -Force
- # Get the total size of the file
- $totalSize = (Get-Item $fileToCopy).length
-
- Copy-Item -Path $fileToCopy -Destination $destinationPath -Verbose -Force -Recurse -Container -PassThru |
- ForEach-Object {
- # Calculate the percentage completed
- $completed = ($_.BytesTransferred / $totalSize) * 100
-
- # Display the progress bar
- Write-Progress -Activity "Copying File" -Status "Progress" -PercentComplete $completed -CurrentOperation ("{0:N2} MB / {1:N2} MB" -f ($_.BytesTransferred / 1MB), ($totalSize / 1MB))
- }
-
- Write-Host "File copied to Ventoy drive $($volume.DriveLetter)"
- return
- }
- }
- Write-Host "Ventoy USB Key is not inserted"
-}
-
-function Remove-FileOrDirectory([string] $pathToDelete, [string] $mask = "", [switch] $Directory = $false)
-{
- if(([string]::IsNullOrEmpty($pathToDelete))) { return }
- if (-not (Test-Path -Path "$($pathToDelete)")) { return }
-
- $yesNo = Get-LocalizedYesNo
- Write-Host "[INFO] In Your local takeown expects '$($yesNo[0])' as a Yes answer."
-
- # Specify the path to the directory
- # $directoryPath = "$($scratchDir)\Windows\System32\LogFiles\WMI\RtBackup"
- # takeown /a /r /d $yesNo[0] /f "$($directoryPath)" > $null
- # icacls "$($directoryPath)" /q /c /t /reset > $null
- # icacls $directoryPath /setowner "*S-1-5-32-544"
- # icacls $directoryPath /grant "*S-1-5-32-544:(OI)(CI)F" /t /c /q
- # Remove-Item -Path $directoryPath -Recurse -Force
-
- # # Grant full control to BUILTIN\Administrators using icacls
- # $directoryPath = "$($scratchDir)\Windows\System32\WebThreatDefSvc"
- # takeown /a /r /d $yesNo[0] /f "$($directoryPath)" > $null
- # icacls "$($directoryPath)" /q /c /t /reset > $null
- # icacls $directoryPath /setowner "*S-1-5-32-544"
- # icacls $directoryPath /grant "*S-1-5-32-544:(OI)(CI)F" /t /c /q
- # Remove-Item -Path $directoryPath -Recurse -Force
-
- $itemsToDelete = [System.Collections.ArrayList]::new()
-
- if ($mask -eq "")
- {
- Write-Debug "Adding $($pathToDelete) to array."
- [void]$itemsToDelete.Add($pathToDelete)
- }
- else
- {
- Write-Debug "Adding $($pathToDelete) to array and mask is $($mask)"
- if ($Directory) { $itemsToDelete = Get-ChildItem $pathToDelete -Include $mask -Recurse -Directory }
- else { $itemsToDelete = Get-ChildItem $pathToDelete -Include $mask -Recurse }
- }
-
- foreach($itemToDelete in $itemsToDelete)
- {
- $status = "Deleting $($itemToDelete)"
- Write-Progress -Activity "Removing Items" -Status $status -PercentComplete ($counter++/$itemsToDelete.Count*100)
-
- if (Test-Path -Path "$($itemToDelete)" -PathType Container)
- {
- $status = "Deleting directory: $($itemToDelete)"
-
- takeown /r /d $yesNo[0] /a /f "$($itemToDelete)"
- icacls "$($itemToDelete)" /q /c /t /reset
- icacls $itemToDelete /setowner "*S-1-5-32-544"
- icacls $itemToDelete /grant "*S-1-5-32-544:(OI)(CI)F" /t /c /q
- Remove-Item -Force -Recurse "$($itemToDelete)"
- }
- elseif (Test-Path -Path "$($itemToDelete)" -PathType Leaf)
- {
- $status = "Deleting file: $($itemToDelete)"
-
- takeown /a /f "$($itemToDelete)"
- icacls "$($itemToDelete)" /q /c /t /reset
- icacls "$($itemToDelete)" /setowner "*S-1-5-32-544"
- icacls "$($itemToDelete)" /grant "*S-1-5-32-544:(OI)(CI)F" /t /c /q
- Remove-Item -Force "$($itemToDelete)"
- }
- }
- Write-Progress -Activity "Removing Items" -Status "Ready" -Completed
-}
-
-function New-Unattend {
-
- # later if we wont to remove even more bloat EU requires MS to remove everything from English(world)
- # Below is an example how to do it we probably should create a drop down with common locals
- #
- #
- #
- #
- # en-US
- #
- # en-US
- # en-US
- # en-US
- # en-US
- #
- #
-
- #
- #
- #
- # en-US
- # en-US
- # en-US
- # en-US
- #
- #
- # using here string to embedd unattend
- #
- # 1
- # net user administrator /active:yes
- #
-
- # this section doesn't work in win10/????
-#
-#
-# 0
-#
-#
-# false
-#
-#
-
- $unattend = @'
-
-
- <#REPLACEME#>
-
-
-
-
- 1
- CMD /C echo LAU GG>C:\Windows\LogAuditUser.txt
- StartMenu
-
-
-
-
-
-
-
- true
- false
- false
- true
- true
- true
- 3
-
-
-
- 1
- cmd.exe /c echo 23>c:\windows\csup.txt
-
-
- 2
- CMD /C echo GG>C:\Windows\LogOobeSystem.txt
-
-
- 3
- powershell -ExecutionPolicy Bypass -File c:\windows\FirstStartup.ps1
-
-
-
-
-
-'@
- $specPass = @'
-
-
- 0
-
-
- false
-
-
-'@
- if ((Test-CompatibleImage $imgVersion $([System.Version]::new(10,0,22000,1))) -eq $false)
- {
- # Replace the placeholder text with an empty string to make it valid for Windows 10 Setup
- $unattend = $unattend.Replace("<#REPLACEME#>", "").Trim()
- }
- else
- {
- # Replace the placeholder text with the Specialize pass
- $unattend = $unattend.Replace("<#REPLACEME#>", $specPass).Trim()
- }
- $unattend | Out-File -FilePath "$env:temp\unattend.xml" -Force -Encoding utf8
-}
-
-function New-CheckInstall {
-
- # using here string to embedd firstrun
- $checkInstall = @'
- @echo off
- if exist "C:\windows\cpu.txt" (
- echo C:\windows\cpu.txt exists
- ) else (
- echo C:\windows\cpu.txt does not exist
- )
- if exist "C:\windows\SerialNumber.txt" (
- echo C:\windows\SerialNumber.txt exists
- ) else (
- echo C:\windows\SerialNumber.txt does not exist
- )
- if exist "C:\unattend.xml" (
- echo C:\unattend.xml exists
- ) else (
- echo C:\unattend.xml does not exist
- )
- if exist "C:\Windows\Setup\Scripts\SetupComplete.cmd" (
- echo C:\Windows\Setup\Scripts\SetupComplete.cmd exists
- ) else (
- echo C:\Windows\Setup\Scripts\SetupComplete.cmd does not exist
- )
- if exist "C:\Windows\Panther\unattend.xml" (
- echo C:\Windows\Panther\unattend.xml exists
- ) else (
- echo C:\Windows\Panther\unattend.xml does not exist
- )
- if exist "C:\Windows\System32\Sysprep\unattend.xml" (
- echo C:\Windows\System32\Sysprep\unattend.xml exists
- ) else (
- echo C:\Windows\System32\Sysprep\unattend.xml does not exist
- )
- if exist "C:\Windows\FirstStartup.ps1" (
- echo C:\Windows\FirstStartup.ps1 exists
- ) else (
- echo C:\Windows\FirstStartup.ps1 does not exist
- )
- if exist "C:\Windows\winutil.ps1" (
- echo C:\Windows\winutil.ps1 exists
- ) else (
- echo C:\Windows\winutil.ps1 does not exist
- )
- if exist "C:\Windows\LogSpecialize.txt" (
- echo C:\Windows\LogSpecialize.txt exists
- ) else (
- echo C:\Windows\LogSpecialize.txt does not exist
- )
- if exist "C:\Windows\LogAuditUser.txt" (
- echo C:\Windows\LogAuditUser.txt exists
- ) else (
- echo C:\Windows\LogAuditUser.txt does not exist
- )
- if exist "C:\Windows\LogOobeSystem.txt" (
- echo C:\Windows\LogOobeSystem.txt exists
- ) else (
- echo C:\Windows\LogOobeSystem.txt does not exist
- )
- if exist "c:\windows\csup.txt" (
- echo c:\windows\csup.txt exists
- ) else (
- echo c:\windows\csup.txt does not exist
- )
- if exist "c:\windows\LogFirstRun.txt" (
- echo c:\windows\LogFirstRun.txt exists
- ) else (
- echo c:\windows\LogFirstRun.txt does not exist
- )
-'@
- $checkInstall | Out-File -FilePath "$env:temp\checkinstall.cmd" -Force -Encoding Ascii
-}
-
-function New-FirstRun {
-
- # using here string to embedd firstrun
- $firstRun = @'
- # Set the global error action preference to continue
- $ErrorActionPreference = "Continue"
- function Remove-RegistryValue
- {
- param (
- [Parameter(Mandatory = $true)]
- [string]$RegistryPath,
-
- [Parameter(Mandatory = $true)]
- [string]$ValueName
- )
-
- # Check if the registry path exists
- if (Test-Path -Path $RegistryPath)
- {
- $registryValue = Get-ItemProperty -Path $RegistryPath -Name $ValueName -ErrorAction SilentlyContinue
-
- # Check if the registry value exists
- if ($registryValue)
- {
- # Remove the registry value
- Remove-ItemProperty -Path $RegistryPath -Name $ValueName -Force
- Write-Host "Registry value '$ValueName' removed from '$RegistryPath'."
- }
- else
- {
- Write-Host "Registry value '$ValueName' not found in '$RegistryPath'."
- }
- }
- else
- {
- Write-Host "Registry path '$RegistryPath' not found."
- }
- }
-
- function Stop-UnnecessaryServices
- {
- $servicesToExclude = @(
- "AudioSrv",
- "AudioEndpointBuilder",
- "BFE",
- "BITS",
- "BrokerInfrastructure",
- "CDPSvc",
- "CDPUserSvc_dc2a4",
- "CoreMessagingRegistrar",
- "CryptSvc",
- "DPS",
- "DcomLaunch",
- "Dhcp",
- "DispBrokerDesktopSvc",
- "Dnscache",
- "DoSvc",
- "DusmSvc",
- "EventLog",
- "EventSystem",
- "FontCache",
- "LSM",
- "LanmanServer",
- "LanmanWorkstation",
- "MapsBroker",
- "MpsSvc",
- "OneSyncSvc_dc2a4",
- "Power",
- "ProfSvc",
- "RpcEptMapper",
- "RpcSs",
- "SCardSvr",
- "SENS",
- "SamSs",
- "Schedule",
- "SgrmBroker",
- "ShellHWDetection",
- "Spooler",
- "SysMain",
- "SystemEventsBroker",
- "TextInputManagementService",
- "Themes",
- "TrkWks",
- "UserManager",
- "VGAuthService",
- "VMTools",
- "WSearch",
- "Wcmsvc",
- "WinDefend",
- "Winmgmt",
- "WlanSvc",
- "WpnService",
- "WpnUserService_dc2a4",
- "cbdhsvc_dc2a4",
- "edgeupdate",
- "gpsvc",
- "iphlpsvc",
- "mpssvc",
- "nsi",
- "sppsvc",
- "tiledatamodelsvc",
- "vm3dservice",
- "webthreatdefusersvc_dc2a4",
- "wscsvc"
-)
-
- $runningServices = Get-Service | Where-Object { $servicesToExclude -notcontains $_.Name }
- foreach($service in $runningServices)
- {
- Stop-Service -Name $service.Name -PassThru
- Set-Service $service.Name -StartupType Manual
- "Stopping service $($service.Name)" | Out-File -FilePath c:\windows\LogFirstRun.txt -Append -NoClobber
- }
- }
-
- "FirstStartup has worked" | Out-File -FilePath c:\windows\LogFirstRun.txt -Append -NoClobber
-
- $Theme = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize"
- Set-ItemProperty -Path $Theme -Name AppsUseLightTheme -Value 1
- Set-ItemProperty -Path $Theme -Name SystemUsesLightTheme -Value 1
-
- # figure this out later how to set updates to security only
- #Import-Module -Name PSWindowsUpdate;
- #Stop-Service -Name wuauserv
- #Set-WUSettings -MicrosoftUpdateEnabled -AutoUpdateOption 'Never'
- #Start-Service -Name wuauserv
-
- Stop-UnnecessaryServices
-
- $taskbarPath = "$env:AppData\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar"
- # Delete all files on the Taskbar
- Get-ChildItem -Path $taskbarPath -File | Remove-Item -Force
- Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "FavoritesRemovedChanges"
- Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "FavoritesChanges"
- Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "Favorites"
-
- # Stop-Process -Name explorer -Force
-
- $process = Get-Process -Name "explorer"
- Stop-Process -InputObject $process
- # Wait for the process to exit
- Wait-Process -InputObject $process
- Start-Sleep -Seconds 3
-
- # Delete Edge Icon from the desktop
- $edgeShortcutFiles = Get-ChildItem -Path $desktopPath -Filter "*Edge*.lnk"
- # Check if Edge shortcuts exist on the desktop
- if ($edgeShortcutFiles)
- {
- foreach ($shortcutFile in $edgeShortcutFiles)
- {
- # Remove each Edge shortcut
- Remove-Item -Path $shortcutFile.FullName -Force
- Write-Host "Edge shortcut '$($shortcutFile.Name)' removed from the desktop."
- }
- }
- Remove-Item -Path "$env:USERPROFILE\Desktop\*.lnk"
- Remove-Item -Path "C:\Users\Default\Desktop\*.lnk"
-
- # ************************************************
- # Create WinUtil shortcut on the desktop
- #
- $desktopPath = "$($env:USERPROFILE)\Desktop"
- # Specify the target PowerShell command
- $command = "powershell.exe -NoProfile -ExecutionPolicy Bypass -Command 'irm https://christitus.com/win | iex'"
- # Specify the path for the shortcut
- $shortcutPath = Join-Path $desktopPath 'winutil.lnk'
- # Create a shell object
- $shell = New-Object -ComObject WScript.Shell
-
- # Create a shortcut object
- $shortcut = $shell.CreateShortcut($shortcutPath)
-
- if (Test-Path -Path "c:\Windows\cttlogo.png")
- {
- $shortcut.IconLocation = "c:\Windows\cttlogo.png"
- }
-
- # Set properties of the shortcut
- $shortcut.TargetPath = "powershell.exe"
- $shortcut.Arguments = "-NoProfile -ExecutionPolicy Bypass -Command `"$command`""
- # Save the shortcut
- $shortcut.Save()
-
- # Make the shortcut have 'Run as administrator' property on
- $bytes = [System.IO.File]::ReadAllBytes($shortcutPath)
- # Set byte value at position 0x15 in hex, or 21 in decimal, from the value 0x00 to 0x20 in hex
- $bytes[0x15] = $bytes[0x15] -bor 0x20
- [System.IO.File]::WriteAllBytes($shortcutPath, $bytes)
-
- Write-Host "Shortcut created at: $shortcutPath"
- #
- # Done create WinUtil shortcut on the desktop
- # ************************************************
-
- Start-Process explorer
-
-'@
- $firstRun | Out-File -FilePath "$env:temp\FirstStartup.ps1" -Force
-}
-function Invoke-WinUtilBingSearch {
- <#
-
- .SYNOPSIS
- Disables/Enables Bing Search
-
- .PARAMETER Enabled
- Indicates whether to enable or disable Bing Search
-
- #>
- Param($Enabled)
- Try{
- if ($Enabled -eq $false){
- Write-Host "Enabling Bing Search"
- $value = 1
- }
- else {
- Write-Host "Disabling Bing Search"
- $value = 0
- }
- $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Search"
- Set-ItemProperty -Path $Path -Name BingSearchEnabled -Value $value
- }
- Catch [System.Security.SecurityException] {
- Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
- Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
- Write-Warning "Unable to set $Name due to unhandled exception"
- Write-Warning $psitem.Exception.StackTrace
- }
-}
-Function Invoke-WinUtilCurrentSystem {
-
- <#
-
- .SYNOPSIS
- Checks to see what tweaks have already been applied and what programs are installed, and checks the according boxes
-
- .EXAMPLE
- Get-WinUtilCheckBoxes "WPFInstall"
-
- #>
-
- param(
- $CheckBox
- )
-
- if ($checkbox -eq "winget"){
-
- $originalEncoding = [Console]::OutputEncoding
- [Console]::OutputEncoding = [System.Text.UTF8Encoding]::new()
- $Sync.InstalledPrograms = winget list -s winget | Select-Object -skip 3 | ConvertFrom-String -PropertyNames "Name", "Id", "Version", "Available" -Delimiter '\s{2,}'
- [Console]::OutputEncoding = $originalEncoding
-
- $filter = Get-WinUtilVariables -Type Checkbox | Where-Object {$psitem -like "WPFInstall*"}
- $sync.GetEnumerator() | Where-Object {$psitem.Key -in $filter} | ForEach-Object {
- $dependencies = @($sync.configs.applications.$($psitem.Key).winget -split ";")
-
- if ($dependencies[-1] -in $sync.InstalledPrograms.Id) {
- Write-Output $psitem.name
- }
- }
- }
-
- if($CheckBox -eq "tweaks"){
-
- if(!(Test-Path 'HKU:\')){New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS}
- $ScheduledTasks = Get-ScheduledTask
-
- $sync.configs.tweaks | Get-Member -MemberType NoteProperty | ForEach-Object {
-
- $Config = $psitem.Name
- #WPFEssTweaksTele
- $registryKeys = $sync.configs.tweaks.$Config.registry
- $scheduledtaskKeys = $sync.configs.tweaks.$Config.scheduledtask
- $serviceKeys = $sync.configs.tweaks.$Config.service
-
- if($registryKeys -or $scheduledtaskKeys -or $serviceKeys){
- $Values = @()
-
-
- Foreach ($tweaks in $registryKeys){
- Foreach($tweak in $tweaks){
-
- if(test-path $tweak.Path){
- $actualValue = Get-ItemProperty -Name $tweak.Name -Path $tweak.Path -ErrorAction SilentlyContinue | Select-Object -ExpandProperty $($tweak.Name)
- $expectedValue = $tweak.Value
- if ($expectedValue -notlike $actualValue){
- $values += $False
- }
- }
- else {
- $values += $False
- }
- }
- }
-
- Foreach ($tweaks in $scheduledtaskKeys){
- Foreach($tweak in $tweaks){
- $task = $ScheduledTasks | Where-Object {$($psitem.TaskPath + $psitem.TaskName) -like "\$($tweak.name)"}
-
- if($task){
- $actualValue = $task.State
- $expectedValue = $tweak.State
- if ($expectedValue -ne $actualValue){
- $values += $False
- }
- }
- }
- }
-
- Foreach ($tweaks in $serviceKeys){
- Foreach($tweak in $tweaks){
- $Service = Get-Service -Name $tweak.Name
-
- if($Service){
- $actualValue = $Service.StartType
- $expectedValue = $tweak.StartupType
- if ($expectedValue -ne $actualValue){
- $values += $False
- }
- }
- }
- }
-
- if($values -notcontains $false){
- Write-Output $Config
- }
- }
- }
- }
-}
-
-Function Invoke-WinUtilDarkMode {
- <#
-
- .SYNOPSIS
- Enables/Disables Dark Mode
-
- .PARAMETER DarkMoveEnabled
- Indicates the current dark mode state
-
- #>
- Param($DarkMoveEnabled)
- Try{
- if ($DarkMoveEnabled -eq $false){
- Write-Host "Enabling Dark Mode"
- $DarkMoveValue = 0
- }
- else {
- Write-Host "Disabling Dark Mode"
- $DarkMoveValue = 1
- }
-
- $Path = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize"
- Set-ItemProperty -Path $Path -Name AppsUseLightTheme -Value $DarkMoveValue
- Set-ItemProperty -Path $Path -Name SystemUsesLightTheme -Value $DarkMoveValue
- }
- Catch [System.Security.SecurityException] {
- Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
- Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
- Write-Warning "Unable to set $Name due to unhandled exception"
- Write-Warning $psitem.Exception.StackTrace
- }
-}
-Function Invoke-WinUtilDetailedBSoD {
- <#
-
- .SYNOPSIS
- Enables/Disables Detailed BSoD
- (Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl' -Name 'DisplayParameters').DisplayParameters
-
-
- #>
- Param($Enabled)
- Try{
- if ($Enabled -eq $false){
- Write-Host "Enabling Detailed BSoD"
- $value = 1
- }
- else {
- Write-Host "Disabling Detailed BSoD"
- $value =0
- }
-
- $Path = "HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl"
- Set-ItemProperty -Path $Path -Name DisplayParameters -Value $value
- }
- Catch [System.Security.SecurityException] {
- Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
- Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
- Write-Warning "Unable to set $Name due to unhandled exception"
- Write-Warning $psitem.Exception.StackTrace
- }
-}
-function Invoke-WinUtilFeatureInstall {
- <#
-
- .SYNOPSIS
- Converts all the values from the tweaks.json and routes them to the appropriate function
-
- #>
-
- param(
- $CheckBox
- )
-
- $x = 0
-
- $CheckBox | ForEach-Object {
- if($sync.configs.feature.$psitem.feature){
- Foreach( $feature in $sync.configs.feature.$psitem.feature ){
- Try{
- Write-Host "Installing $feature"
- Enable-WindowsOptionalFeature -Online -FeatureName $feature -All -NoRestart
- }
- Catch{
- if ($psitem.Exception.Message -like "*requires elevation*"){
- Write-Warning "Unable to Install $feature due to permissions. Are you running as admin?"
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Error" })
- }
-
- else{
-
- Write-Warning "Unable to Install $feature due to unhandled exception"
- Write-Warning $psitem.Exception.StackTrace
- }
- }
- }
- }
- if($sync.configs.feature.$psitem.InvokeScript){
- Foreach( $script in $sync.configs.feature.$psitem.InvokeScript ){
- Try{
- $Scriptblock = [scriptblock]::Create($script)
-
- Write-Host "Running Script for $psitem"
- Invoke-Command $scriptblock -ErrorAction stop
- }
- Catch{
- if ($psitem.Exception.Message -like "*requires elevation*"){
- Write-Warning "Unable to Install $feature due to permissions. Are you running as admin?"
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Error" })
- }
-
- else{
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Error" })
- Write-Warning "Unable to Install $feature due to unhandled exception"
- Write-Warning $psitem.Exception.StackTrace
- }
- }
- }
- }
- $X++
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -value ($x/$CheckBox.Count) })
- }
-}
-function Invoke-WinUtilGPU {
- $gpuInfo = Get-CimInstance Win32_VideoController
-
- # GPUs to blacklist from using Demanding Theming
- $lowPowerGPUs = (
- "*NVIDIA GeForce*M*",
- "*NVIDIA GeForce*Laptop*",
- "*NVIDIA GeForce*GT*",
- "*AMD Radeon(TM)*",
- "*UHD*"
- )
-
- foreach ($gpu in $gpuInfo) {
- foreach ($gpuPattern in $lowPowerGPUs){
- if ($gpu.Name -like $gpuPattern) {
- return $false
- }
- }
- }
- return $true
-}
-function Invoke-WinUtilHiddenFiles {
- <#
-
- .SYNOPSIS
- Enable/Disable Hidden Files
-
- .PARAMETER Enabled
- Indicates whether to enable or disable Hidden Files
-
- #>
- Param($Enabled)
- Try{
- if ($Enabled -eq $false){
- Write-Host "Enabling Hidden Files"
- $value = 1
- }
- else {
- Write-Host "Disabling Hidden Files"
- $value = 0
- }
- $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
- Set-ItemProperty -Path $Path -Name Hidden -Value $value
- }
- Catch [System.Security.SecurityException] {
- Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
- Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
- Write-Warning "Unable to set $Name due to unhandled exception"
- Write-Warning $psitem.Exception.StackTrace
- }
-}
-Function Invoke-WinUtilMouseAcceleration {
- <#
-
- .SYNOPSIS
- Enables/Disables Mouse Acceleration
-
- .PARAMETER DarkMoveEnabled
- Indicates the current Mouse Acceleration State
-
- #>
- Param($MouseAccelerationEnabled)
- Try{
- if ($MouseAccelerationEnabled -eq $false){
- Write-Host "Enabling Mouse Acceleration"
- $MouseSpeed = 1
- $MouseThreshold1 = 6
- $MouseThreshold2 = 10
- }
- else {
- Write-Host "Disabling Mouse Acceleration"
- $MouseSpeed = 0
- $MouseThreshold1 = 0
- $MouseThreshold2 = 0
-
- }
-
- $Path = "HKCU:\Control Panel\Mouse"
- Set-ItemProperty -Path $Path -Name MouseSpeed -Value $MouseSpeed
- Set-ItemProperty -Path $Path -Name MouseThreshold1 -Value $MouseThreshold1
- Set-ItemProperty -Path $Path -Name MouseThreshold2 -Value $MouseThreshold2
- }
- Catch [System.Security.SecurityException] {
- Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
- Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
- Write-Warning "Unable to set $Name due to unhandled exception"
- Write-Warning $psitem.Exception.StackTrace
- }
-}
-function Invoke-WinUtilNumLock {
- <#
- .SYNOPSIS
- Disables/Enables NumLock on startup
- .PARAMETER Enabled
- Indicates whether to enable or disable Numlock on startup
- #>
- Param($Enabled)
- Try{
- if ($Enabled -eq $false){
- Write-Host "Enabling Numlock on startup"
- $value = 2
- }
- else {
- Write-Host "Disabling Numlock on startup"
- $value = 0
- }
- New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS
- $Path = "HKU:\.Default\Control Panel\Keyboard"
- Set-ItemProperty -Path $Path -Name InitialKeyboardIndicators -Value $value
- }
- Catch [System.Security.SecurityException] {
- Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
- Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
- Write-Warning "Unable to set $Name due to unhandled exception"
- Write-Warning $psitem.Exception.StackTrace
- }
-}
-function Invoke-WinUtilScript {
- <#
-
- .SYNOPSIS
- Invokes the provided scriptblock. Intended for things that can't be handled with the other functions.
-
- .PARAMETER Name
- The name of the scriptblock being invoked
-
- .PARAMETER scriptblock
- The scriptblock to be invoked
-
- .EXAMPLE
- $Scriptblock = [scriptblock]::Create({"Write-output 'Hello World'"})
- Invoke-WinUtilScript -ScriptBlock $scriptblock -Name "Hello World"
-
- #>
- param (
- $Name,
- [scriptblock]$scriptblock
- )
-
- Try {
- Write-Host "Running Script for $name"
- Invoke-Command $scriptblock -ErrorAction Stop
- }
- Catch [System.Management.Automation.CommandNotFoundException] {
- Write-Warning "The specified command was not found."
- Write-Warning $PSItem.Exception.message
- }
- Catch [System.Management.Automation.RuntimeException] {
- Write-Warning "A runtime exception occurred."
- Write-Warning $PSItem.Exception.message
- }
- Catch [System.Security.SecurityException] {
- Write-Warning "A security exception occurred."
- Write-Warning $PSItem.Exception.message
- }
- Catch [System.UnauthorizedAccessException] {
- Write-Warning "Access denied. You do not have permission to perform this operation."
- Write-Warning $PSItem.Exception.message
- }
- Catch {
- # Generic catch block to handle any other type of exception
- Write-Warning "Unable to run script for $name due to unhandled exception"
- Write-Warning $psitem.Exception.StackTrace
- }
-
-}
-function Invoke-WinUtilShowExt {
- <#
- .SYNOPSIS
- Disables/Enables Show file Extentions
- .PARAMETER Enabled
- Indicates whether to enable or disable Show file extentions
- #>
- Param($Enabled)
- Try{
- if ($Enabled -eq $false){
- Write-Host "Showing file extentions"
- $value = 0
- }
- else {
- Write-Host "hiding file extensions"
- $value = 1
- }
- $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
- Set-ItemProperty -Path $Path -Name HideFileExt -Value $value
- }
- Catch [System.Security.SecurityException] {
- Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
- Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
- Write-Warning "Unable to set $Name due to unhandled exception"
- Write-Warning $psitem.Exception.StackTrace
- }
-}
-function Invoke-WinUtilSnapFlyout {
- <#
- .SYNOPSIS
- Disables/Enables Snap Assist Flyout on startup
- .PARAMETER Enabled
- Indicates whether to enable or disable Snap Assist Flyout on startup
- #>
- Param($Enabled)
- Try{
- if ($Enabled -eq $false){
- Write-Host "Enabling Snap Assist Flyout On startup"
- $value = 1
- }
- else {
- Write-Host "Disabling Snap Assist Flyout On startup"
- $value = 0
- }
- # taskkill.exe /F /IM "explorer.exe"
- $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
- taskkill.exe /F /IM "explorer.exe"
- Set-ItemProperty -Path $Path -Name EnableSnapAssistFlyout -Value $value
- Start-Process "explorer.exe"
- }
- Catch [System.Security.SecurityException] {
- Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
- Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
- Write-Warning "Unable to set $Name due to unhandled exception"
- Write-Warning $psitem.Exception.StackTrace
- }
-}
-function Invoke-WinUtilSnapSuggestion {
- <#
- .SYNOPSIS
- Disables/Enables Snap Assist Suggestions on startup
- .PARAMETER Enabled
- Indicates whether to enable or disable Snap Assist Suggestions on startup
- #>
- Param($Enabled)
- Try{
- if ($Enabled -eq $false){
- Write-Host "Enabling Snap Assist Suggestion On startup"
- $value = 1
- }
- else {
- Write-Host "Disabling Snap Assist Suggestion On startup"
- $value = 0
- }
- # taskkill.exe /F /IM "explorer.exe"
- $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
- taskkill.exe /F /IM "explorer.exe"
- Set-ItemProperty -Path $Path -Name SnapAssist -Value $value
- Start-Process "explorer.exe"
- }
- Catch [System.Security.SecurityException] {
- Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
- Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
- Write-Warning "Unable to set $Name due to unhandled exception"
- Write-Warning $psitem.Exception.StackTrace
- }
-}
-function Invoke-WinUtilSnapWindow {
- <#
- .SYNOPSIS
- Disables/Enables Snapping Windows on startup
- .PARAMETER Enabled
- Indicates whether to enable or disable Snapping Windows on startup
- #>
- Param($Enabled)
- Try{
- if ($Enabled -eq $false){
- Write-Host "Enabling Snap Windows On startup | Relogin Required"
- $value = 1
- }
- else {
- Write-Host "Disabling Snap Windows On startup | Relogin Required"
- $value = 0
- }
- $Path = "HKCU:\Control Panel\Desktop"
- Set-ItemProperty -Path $Path -Name WindowArrangementActive -Value $value
- }
- Catch [System.Security.SecurityException] {
- Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
- Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
- Write-Warning "Unable to set $Name due to unhandled exception"
- Write-Warning $psitem.Exception.StackTrace
- }
-}
-Function Invoke-WinUtilSponsors {
- <#
- .SYNOPSIS
- Lists Sponsors from ChrisTitusTech
- .DESCRIPTION
- Lists Sponsors from ChrisTitusTech
- .EXAMPLE
- Invoke-WinUtilSponsors
- .NOTES
- This function is used to list sponsors from ChrisTitusTech
- #>
- try {
- # Define the URL and headers
- $url = "https://github.com/sponsors/ChrisTitusTech"
- $headers = @{
- "User-Agent" = "Chrome/58.0.3029.110"
- }
-
- # Fetch the webpage content
- try {
- $html = Invoke-RestMethod -Uri $url -Headers $headers
- } catch {
- Write-Output $_.Exception.Message
- exit
- }
-
- # Use regex to extract the content between "Current sponsors" and "Past sponsors"
- $currentSponsorsPattern = '(?s)(?<=Current sponsors).*?(?=Past sponsors)'
- $currentSponsorsHtml = [regex]::Match($html, $currentSponsorsPattern).Value
-
- # Use regex to extract the sponsor usernames from the alt attributes in the "Current Sponsors" section
- $sponsorPattern = '(?<=alt="@)[^"]+'
- $sponsors = [regex]::Matches($currentSponsorsHtml, $sponsorPattern) | ForEach-Object { $_.Value }
-
- # Exclude "ChrisTitusTech" from the sponsors
- $sponsors = $sponsors | Where-Object { $_ -ne "ChrisTitusTech" }
-
- # Return the sponsors
- return $sponsors
- }
- catch {
- Write-Error "An error occurred while fetching or processing the sponsors: $_"
- return $null
- }
-}
-Function Invoke-WinUtilStickyKeys {
- <#
- .SYNOPSIS
- Disables/Enables Sticky Keyss on startup
- .PARAMETER Enabled
- Indicates whether to enable or disable Sticky Keys on startup
- #>
- Param($Enabled)
- Try {
- if ($Enabled -eq $false){
- Write-Host "Enabling Sticky Keys On startup"
- $value = 510
- }
- else {
- Write-Host "Disabling Sticky Keys On startup"
- $value = 58
- }
- $Path = "HKCU:\Control Panel\Accessibility\StickyKeys"
- Set-ItemProperty -Path $Path -Name Flags -Value $value
- }
- Catch [System.Security.SecurityException] {
- Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
- Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
- Write-Warning "Unable to set $Name due to unhandled exception"
- Write-Warning $psitem.Exception.StackTrace
- }
-}
-function Invoke-WinUtilTaskbarAlignment {
- <#
-
- .SYNOPSIS
- Switches between Center & Left Taskbar Alignment
-
- .PARAMETER Enabled
- Indicates whether to make Taskbar Alignment Center or Left
-
- #>
- Param($Enabled)
- Try{
- if ($Enabled -eq $false){
- Write-Host "Making Taskbar Alignment to the Center"
- $value = 1
- }
- else {
- Write-Host "Making Taskbar Alignment to the Left"
- $value = 0
- }
- $Path = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
- Set-ItemProperty -Path $Path -Name "TaskbarAl" -Value $value
- }
- Catch [System.Security.SecurityException] {
- Write-Warning "Unable to set $Path\$Name to $value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
- Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
- Write-Warning "Unable to set $Name due to unhandled exception"
- Write-Warning $psitem.Exception.StackTrace
- }
-}
-function Invoke-WinUtilTaskbarSearch {
- <#
-
- .SYNOPSIS
- Enable/Disable Taskbar Search Button.
-
- .PARAMETER Enabled
- Indicates whether to enable or disable Taskbar Search Button.
-
- #>
- Param($Enabled)
- Try{
- if ($Enabled -eq $false){
- Write-Host "Enabling Search Button"
- $value = 1
- }
- else {
- Write-Host "Disabling Search Button"
- $value = 0
- }
- $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Search\"
- Set-ItemProperty -Path $Path -Name SearchboxTaskbarMode -Value $value
- }
- Catch [System.Security.SecurityException] {
- Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
- Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
- Write-Warning "Unable to set $Name due to unhandled exception"
- Write-Warning $psitem.Exception.StackTrace
- }
-}
-function Invoke-WinUtilTaskbarWidgets {
- <#
-
- .SYNOPSIS
- Enable/Disable Taskbar Widgets
-
- .PARAMETER Enabled
- Indicates whether to enable or disable Taskbar Widgets
-
- #>
- Param($Enabled)
- Try{
- if ($Enabled -eq $false){
- Write-Host "Enabling Taskbar Widgets"
- $value = 1
- }
- else {
- Write-Host "Disabling Taskbar Widgets"
- $value = 0
- }
- $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
- Set-ItemProperty -Path $Path -Name TaskbarDa -Value $value
- }
- Catch [System.Security.SecurityException] {
- Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
- Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
- Write-Warning "Unable to set $Name due to unhandled exception"
- Write-Warning $psitem.Exception.StackTrace
- }
-}
-function Invoke-WinUtilTaskView {
- <#
-
- .SYNOPSIS
- Enable/Disable Task View
-
- .PARAMETER Enabled
- Indicates whether to enable or disable Task View
-
- #>
- Param($Enabled)
- Try{
- if ($Enabled -eq $false){
- Write-Host "Enabling Task View"
- $value = 1
- }
- else {
- Write-Host "Disabling Task View"
- $value = 0
- }
- $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
- Set-ItemProperty -Path $Path -Name ShowTaskViewButton -Value $value
- }
- Catch [System.Security.SecurityException] {
- Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
- Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
- Write-Warning "Unable to set $Name due to unhandled exception"
- Write-Warning $psitem.Exception.StackTrace
- }
-}
-function Invoke-WinUtilTweaks {
- <#
-
- .SYNOPSIS
- Invokes the function associated with each provided checkbox
-
- .PARAMETER CheckBox
- The checkbox to invoke
-
- .PARAMETER undo
- Indicates whether to undo the operation contained in the checkbox
-
- .PARAMETER KeepServiceStartup
- Indicates whether to override the startup of a service with the one given from WinUtil,
- or to keep the startup of said service, if it was changed by the user, or another program, from its default value.
- #>
-
- param(
- $CheckBox,
- $undo = $false,
- $KeepServiceStartup = $true
- )
-
- Write-Debug "Tweaks: $($CheckBox)"
- if($undo){
- $Values = @{
- Registry = "OriginalValue"
- ScheduledTask = "OriginalState"
- Service = "OriginalType"
- ScriptType = "UndoScript"
- }
-
- }
- Else{
- $Values = @{
- Registry = "Value"
- ScheduledTask = "State"
- Service = "StartupType"
- OriginalService = "OriginalType"
- ScriptType = "InvokeScript"
- }
- }
- if($sync.configs.tweaks.$CheckBox.ScheduledTask){
- $sync.configs.tweaks.$CheckBox.ScheduledTask | ForEach-Object {
- Write-Debug "$($psitem.Name) and state is $($psitem.$($values.ScheduledTask))"
- Set-WinUtilScheduledTask -Name $psitem.Name -State $psitem.$($values.ScheduledTask)
- }
- }
- if($sync.configs.tweaks.$CheckBox.service){
- Write-Debug "KeepServiceStartup is $KeepServiceStartup"
- $sync.configs.tweaks.$CheckBox.service | ForEach-Object {
- $changeservice = $true
-
- # The check for !($undo) is required, without it the script will throw an error for accessing unavailable memeber, which's the 'OriginalService' Property
- if($KeepServiceStartup -AND !($undo)) {
- try {
- # Check if the service exists
- $service = Get-Service -Name $psitem.Name -ErrorAction Stop
- if(!($service.StartType.ToString() -eq $psitem.$($values.OriginalService))) {
- Write-Debug "Service $($service.Name) was changed in the past to $($service.StartType.ToString()) from it's original type of $($psitem.$($values.OriginalService)), will not change it to $($psitem.$($values.service))"
- $changeservice = $false
- }
- }
- catch [System.ServiceProcess.ServiceNotFoundException] {
- Write-Warning "Service $($psitem.Name) was not found"
- }
- }
-
- if($changeservice) {
- Write-Debug "$($psitem.Name) and state is $($psitem.$($values.service))"
- Set-WinUtilService -Name $psitem.Name -StartupType $psitem.$($values.Service)
- }
- }
- }
- if($sync.configs.tweaks.$CheckBox.registry){
- $sync.configs.tweaks.$CheckBox.registry | ForEach-Object {
- Write-Debug "$($psitem.Name) and state is $($psitem.$($values.registry))"
- Set-WinUtilRegistry -Name $psitem.Name -Path $psitem.Path -Type $psitem.Type -Value $psitem.$($values.registry)
- }
- }
- if($sync.configs.tweaks.$CheckBox.$($values.ScriptType)){
- $sync.configs.tweaks.$CheckBox.$($values.ScriptType) | ForEach-Object {
- Write-Debug "$($psitem) and state is $($psitem.$($values.ScriptType))"
- $Scriptblock = [scriptblock]::Create($psitem)
- Invoke-WinUtilScript -ScriptBlock $scriptblock -Name $CheckBox
- }
- }
-
- if(!$undo){
- if($sync.configs.tweaks.$CheckBox.appx){
- $sync.configs.tweaks.$CheckBox.appx | ForEach-Object {
- Write-Debug "UNDO $($psitem.Name)"
- Remove-WinUtilAPPX -Name $psitem
- }
- }
-
- }
-}
-function Invoke-WinUtilVerboseLogon {
- <#
- .SYNOPSIS
- Disables/Enables VerboseLogon Messages
- .PARAMETER Enabled
- Indicates whether to enable or disable VerboseLogon messages
- #>
- Param($Enabled)
- Try{
- if ($Enabled -eq $false){
- Write-Host "Enabling Verbose Logon Messages"
- $value = 1
- }
- else {
- Write-Host "Disabling Verbose Logon Messages"
- $value = 0
- }
- $Path = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"
- Set-ItemProperty -Path $Path -Name VerboseStatus -Value $value
- }
- Catch [System.Security.SecurityException] {
- Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
- Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
- Write-Warning "Unable to set $Name due to unhandled exception"
- Write-Warning $psitem.Exception.StackTrace
- }
-}
-Function Invoke-WinUtilWingetProgram {
- <#
- .SYNOPSIS
- Runs the designated action on the provided programs using Winget
-
- .PARAMETER Programs
- A list of programs to process
-
- .PARAMETER action
- The action to perform on the programs, can be either 'Install' or 'Uninstall'
-
- .NOTES
- The triple quotes are required any time you need a " in a normal script block.
- The winget Return codes are documented here: https://github.com/microsoft/winget-cli/blob/master/doc/windows/package-actionr/winget/returnCodes.md
- #>
-
- param(
- [Parameter(Mandatory, Position=0)]
- $Programs,
-
- [Parameter(Mandatory, Position=1)]
- [ValidateSet("Install", "Uninstall")]
- [String]$Action
- )
-
- Function Invoke-Winget {
- <#
- .SYNOPSIS
- Invokes the winget.exe with the provided arguments and return the exit code
-
- .PARAMETER wingetId
- The Id of the Program that Winget should Install/Uninstall
-
- .PARAMETER scope
- Determines the installation mode. Can be "user" or "machine" (For more info look at the winget documentation)
-
- .PARAMETER credential
- The PSCredential Object of the user that should be used to run winget
-
- .NOTES
- Invoke Winget uses the public variable $Action defined outside the function to determine if a Program should be installed or removed
- #>
- param (
- [string]$wingetId,
- [string]$scope = "",
- [PScredential]$credential = $null
- )
-
- $commonArguments = "--id $wingetId --silent"
- $arguments = if ($Action -eq "Install"){
- "install $commonArguments --accept-source-agreements --accept-package-agreements $(if ($scope) {" --scope $scope"})"
- }
- else {
- "uninstall $commonArguments"
- }
-
- $processParams = @{
- FilePath = "winget"
- ArgumentList = $arguments
- Wait = $true
- PassThru = $true
- NoNewWindow = $true
- }
-
- if ($credential) {
- $processParams.credential = $credential
- }
-
- return (Start-Process @processParams).ExitCode
- }
-
- Function Invoke-Install {
- <#
- .SYNOPSIS
- Contains the Install Logic and return code handling from winget
-
- .PARAMETER Program
- The Winget ID of the Program that should be installed
- #>
- param (
- [string]$Program
- )
- $status = Invoke-Winget -wingetId $Program
- if ($status -eq 0) {
- Write-Host "$($Program) installed successfully."
- return $true
- } elseif ($status -eq -1978335189) {
- Write-Host "$($Program) No applicable update found"
- return $true
- }
-
- Write-Host "Attempt installation of $($Program) with User scope"
- $status = Invoke-Winget -wingetId $Program -scope "user"
- if ($status -eq 0) {
- Write-Host "$($Program) installed successfully with User scope."
- return $true
- } elseif ($status -eq -1978335189) {
- Write-Host "$($Program) No applicable update found"
- return $true
- }
-
- $userChoice = [System.Windows.MessageBox]::Show("Do you want to attempt $($Program) installation with specific user credentials? Select 'Yes' to proceed or 'No' to skip.", "User credential Prompt", [System.Windows.MessageBoxButton]::YesNo)
- if ($userChoice -eq 'Yes') {
- $getcreds = Get-Credential
- $status = Invoke-Winget -wingetId $Program -credential $getcreds
- if ($status -eq 0) {
- Write-Host "$($Program) installed successfully with User prompt."
- return $true
- }
- } else {
- Write-Host "Skipping installation with specific user credentials."
- }
-
- Write-Host "Failed to install $($Program)."
- return $false
- }
-
- Function Invoke-Uninstall {
- <#
- .SYNOPSIS
- Contains the Uninstall Logic and return code handling from winget
-
- .PARAMETER Program
- The Winget ID of the Program that should be uninstalled
- #>
- param (
- [psobject]$Program
- )
-
- try {
- $status = Invoke-Winget -wingetId $Program
- if ($status -eq 0) {
- Write-Host "$($Program) uninstalled successfully."
- return $true
- } else {
- Write-Host "Failed to uninstall $($Program)."
- return $false
- }
- } catch {
- Write-Host "Failed to uninstall $($Program) due to an error: $_"
- return $false
- }
- }
-
- $count = $Programs.Count
- $failedPackages = @()
-
- Write-Host "==========================================="
- Write-Host "-- Configuring winget packages ---"
- Write-Host "==========================================="
-
- for ($i = 0; $i -lt $count; $i++) {
- $Program = $Programs[$i]
- $result = $false
- Set-WinUtilProgressBar -label "$Action $($Program)" -percent ($i / $count * 100)
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -value ($i / $count)})
-
- $result = switch ($Action) {
- "Install" {Invoke-Install -Program $Program}
- "Uninstall" {Invoke-Uninstall -Program $Program}
- default {throw "[Install-WinUtilProgramWinget] Invalid action: $Action"}
- }
-
- if (-not $result) {
- $failedPackages += $Program
- }
- }
-
- Set-WinUtilProgressBar -label "$($Action)ation done" -percent 100
- return $failedPackages
-}
-function Remove-WinUtilAPPX {
- <#
-
- .SYNOPSIS
- Removes all APPX packages that match the given name
-
- .PARAMETER Name
- The name of the APPX package to remove
-
- .EXAMPLE
- Remove-WinUtilAPPX -Name "Microsoft.Microsoft3DViewer"
-
- #>
- param (
- $Name
- )
-
- Try {
- Write-Host "Removing $Name"
- Get-AppxPackage "*$Name*" | Remove-AppxPackage -ErrorAction SilentlyContinue
- Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like "*$Name*" | Remove-AppxProvisionedPackage -Online -ErrorAction SilentlyContinue
- }
- Catch [System.Exception] {
- if ($psitem.Exception.Message -like "*The requested operation requires elevation*") {
- Write-Warning "Unable to uninstall $name due to a Security Exception"
- }
- else {
- Write-Warning "Unable to uninstall $name due to unhandled exception"
- Write-Warning $psitem.Exception.StackTrace
- }
- }
- Catch{
- Write-Warning "Unable to uninstall $name due to unhandled exception"
- Write-Warning $psitem.Exception.StackTrace
- }
-}
-function Set-WinUtilDNS {
- <#
-
- .SYNOPSIS
- Sets the DNS of all interfaces that are in the "Up" state. It will lookup the values from the DNS.Json file
-
- .PARAMETER DNSProvider
- The DNS provider to set the DNS server to
-
- .EXAMPLE
- Set-WinUtilDNS -DNSProvider "google"
-
- #>
- param($DNSProvider)
- if($DNSProvider -eq "Default"){return}
- Try{
- $Adapters = Get-NetAdapter | Where-Object {$_.Status -eq "Up"}
- Write-Host "Ensuring DNS is set to $DNSProvider on the following interfaces"
- Write-Host $($Adapters | Out-String)
-
- Foreach ($Adapter in $Adapters){
- if($DNSProvider -eq "DHCP"){
- Set-DnsClientServerAddress -InterfaceIndex $Adapter.ifIndex -ResetServerAddresses
- }
- Else{
- Set-DnsClientServerAddress -InterfaceIndex $Adapter.ifIndex -ServerAddresses ("$($sync.configs.dns.$DNSProvider.Primary)", "$($sync.configs.dns.$DNSProvider.Secondary)")
- Set-DnsClientServerAddress -InterfaceIndex $Adapter.ifIndex -ServerAddresses ("$($sync.configs.dns.$DNSProvider.Primary6)", "$($sync.configs.dns.$DNSProvider.Secondary6)")
- }
- }
- }
- Catch{
- Write-Warning "Unable to set DNS Provider due to an unhandled exception"
- Write-Warning $psitem.Exception.StackTrace
- }
-}
-function Set-WinUtilProgressbar{
- <#
- .SYNOPSIS
- This function is used to Update the Progress Bar displayed in the winutil GUI.
- It will be automatically hidden if the user clicks something and no process is running
- .PARAMETER Label
- The Text to be overlayed onto the Progress Bar
- .PARAMETER PERCENT
- The percentage of the Progress Bar that should be filled (0-100)
- .PARAMETER Hide
- If provided, the Progress Bar and the label will be hidden
- #>
- param(
- [string]$Label,
- [ValidateRange(0,100)]
- [int]$Percent,
- $Hide
- )
- if ($hide){
- $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBarLabel.Visibility = "Collapsed"})
- $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBar.Visibility = "Collapsed"})
- }
- else{
- $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBarLabel.Visibility = "Visible"})
- $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBar.Visibility = "Visible"})
- }
- $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBarLabel.Content.Text = $label})
- $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBarLabel.Content.ToolTip = $label})
- $sync.form.Dispatcher.Invoke([action]{ $sync.ProgressBar.Value = $percent})
-
-}
-function Set-WinUtilRegistry {
- <#
-
- .SYNOPSIS
- Modifies the registry based on the given inputs
-
- .PARAMETER Name
- The name of the key to modify
-
- .PARAMETER Path
- The path to the key
-
- .PARAMETER Type
- The type of value to set the key to
-
- .PARAMETER Value
- The value to set the key to
-
- .EXAMPLE
- Set-WinUtilRegistry -Name "PublishUserActivities" -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Type "DWord" -Value "0"
-
- #>
- param (
- $Name,
- $Path,
- $Type,
- $Value
- )
-
- Try{
- if(!(Test-Path 'HKU:\')){New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS}
-
- If (!(Test-Path $Path)) {
- Write-Host "$Path was not found, Creating..."
- New-Item -Path $Path -Force -ErrorAction Stop | Out-Null
- }
-
- Write-Host "Set $Path\$Name to $Value"
- Set-ItemProperty -Path $Path -Name $Name -Type $Type -Value $Value -Force -ErrorAction Stop | Out-Null
- }
- Catch [System.Security.SecurityException] {
- Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
- }
- Catch [System.Management.Automation.ItemNotFoundException] {
- Write-Warning $psitem.Exception.ErrorRecord
- }
- Catch{
- Write-Warning "Unable to set $Name due to unhandled exception"
- Write-Warning $psitem.Exception.StackTrace
- }
-}
-function Set-WinUtilScheduledTask {
- <#
-
- .SYNOPSIS
- Enables/Disables the provided Scheduled Task
-
- .PARAMETER Name
- The path to the Scheduled Task
-
- .PARAMETER State
- The State to set the Task to
-
- .EXAMPLE
- Set-WinUtilScheduledTask -Name "Microsoft\Windows\Application Experience\Microsoft Compatibility Appraiser" -State "Disabled"
-
- #>
- param (
- $Name,
- $State
- )
-
- Try{
- if($State -eq "Disabled"){
- Write-Host "Disabling Scheduled Task $Name"
- Disable-ScheduledTask -TaskName $Name -ErrorAction Stop
- }
- if($State -eq "Enabled"){
- Write-Host "Enabling Scheduled Task $Name"
- Enable-ScheduledTask -TaskName $Name -ErrorAction Stop
- }
- }
- Catch [System.Exception]{
- if($psitem.Exception.Message -like "*The system cannot find the file specified*"){
- Write-Warning "Scheduled Task $name was not Found"
- }
- Else{
- Write-Warning "Unable to set $Name due to unhandled exception"
- Write-Warning $psitem.Exception.Message
- }
- }
- Catch{
- Write-Warning "Unable to run script for $name due to unhandled exception"
- Write-Warning $psitem.Exception.StackTrace
- }
-}
-Function Set-WinUtilService {
- <#
-
- .SYNOPSIS
- Changes the startup type of the given service
-
- .PARAMETER Name
- The name of the service to modify
-
- .PARAMETER StartupType
- The startup type to set the service to
-
- .EXAMPLE
- Set-WinUtilService -Name "HomeGroupListener" -StartupType "Manual"
-
- #>
- param (
- $Name,
- $StartupType
- )
- try {
- Write-Host "Setting Service $Name to $StartupType"
-
- # Check if the service exists
- $service = Get-Service -Name $Name -ErrorAction Stop
-
- # Service exists, proceed with changing properties
- $service | Set-Service -StartupType $StartupType -ErrorAction Stop
- }
- catch [System.ServiceProcess.ServiceNotFoundException] {
- Write-Warning "Service $Name was not found"
- }
- catch {
- Write-Warning "Unable to set $Name due to unhandled exception"
- Write-Warning $_.Exception.Message
- }
-
-}
-function Set-WinUtilTaskbaritem {
- <#
-
- .SYNOPSIS
- Modifies the Taskbaritem of the WPF Form
-
- .PARAMETER value
- Value can be between 0 and 1, 0 being no progress done yet and 1 being fully completed
- Value does not affect item without setting the state to 'Normal', 'Error' or 'Paused'
- Set-WinUtilTaskbaritem -value 0.5
-
- .PARAMETER state
- State can be 'None' > No progress, 'Indeterminate' > inf. loading gray, 'Normal' > Gray, 'Error' > Red, 'Paused' > Yellow
- no value needed:
- - Set-WinUtilTaskbaritem -state "None"
- - Set-WinUtilTaskbaritem -state "Indeterminate"
- value needed:
- - Set-WinUtilTaskbaritem -state "Error"
- - Set-WinUtilTaskbaritem -state "Normal"
- - Set-WinUtilTaskbaritem -state "Paused"
-
- .PARAMETER overlay
- Overlay icon to display on the taskbar item, there are the presets 'None', 'logo' and 'checkmark' or you can specify a path/link to an image file.
- CTT logo preset:
- - Set-WinUtilTaskbaritem -overlay "logo"
- Checkmark preset:
- - Set-WinUtilTaskbaritem -overlay "checkmark"
- Warning preset:
- - Set-WinUtilTaskbaritem -overlay "warning"
- No overlay:
- - Set-WinUtilTaskbaritem -overlay "None"
- Custom icon (needs to be supported by WPF):
- - Set-WinUtilTaskbaritem -overlay "C:\path\to\icon.png"
-
- .PARAMETER description
- Description to display on the taskbar item preview
- Set-WinUtilTaskbaritem -description "This is a description"
- #>
- param (
- [string]$state,
- [double]$value,
- [string]$overlay,
- [string]$description
- )
-
- if ($value) {
- $sync["Form"].taskbarItemInfo.ProgressValue = $value
- }
-
- if ($state) {
- switch ($state) {
- 'None' { $sync["Form"].taskbarItemInfo.ProgressState = "None" }
- 'Indeterminate' { $sync["Form"].taskbarItemInfo.ProgressState = "Indeterminate" }
- 'Normal' { $sync["Form"].taskbarItemInfo.ProgressState = "Normal" }
- 'Error' { $sync["Form"].taskbarItemInfo.ProgressState = "Error" }
- 'Paused' { $sync["Form"].taskbarItemInfo.ProgressState = "Paused" }
- default { throw "[Set-WinUtilTaskbarItem] Invalid state" }
- }
- }
-
- if ($overlay) {
- switch ($overlay) {
- 'logo' {
- $sync["Form"].taskbarItemInfo.Overlay = "$env:LOCALAPPDATA\winutil\cttlogo.png"
- }
- 'checkmark' {
- $sync["Form"].taskbarItemInfo.Overlay = "$env:LOCALAPPDATA\winutil\checkmark.png"
- }
- 'warning' {
- $sync["Form"].taskbarItemInfo.Overlay = "$env:LOCALAPPDATA\winutil\warning.png"
- }
- 'None' {
- $sync["Form"].taskbarItemInfo.Overlay = $null
- }
- default {
- if (Test-Path $overlay) {
- $sync["Form"].taskbarItemInfo.Overlay = $overlay
- }
- }
- }
- }
-
- if ($description) {
- $sync["Form"].taskbarItemInfo.Description = $description
- }
-}
-function Set-WinUtilUITheme {
- <#
-
- .SYNOPSIS
- Sets the theme of the XAML file
-
- .PARAMETER inputXML
- A string representing the XAML object to modify
-
- .PARAMETER themeName
- The name of the theme to set the XAML to. Defaults to 'matrix'
-
- .EXAMPLE
- Set-WinUtilUITheme -inputXAML $inputXAML
-
- #>
- param
- (
- [Parameter(Mandatory=$true, Position=0)]
- [string] $inputXML,
- [Parameter(Mandatory=$false, Position=1)]
- [string] $themeName = 'matrix'
- )
-
- try {
- # Convert the JSON to a PowerShell object
- $themes = $sync.configs.themes
- # Select the specified theme
- $selectedTheme = $themes.$themeName
-
- if ($selectedTheme) {
- # Loop through all key-value pairs in the selected theme
- foreach ($property in $selectedTheme.PSObject.Properties) {
- $key = $property.Name
- $value = $property.Value
- # Add curly braces around the key
- $formattedKey = "{$key}"
- # Replace the key with the value in the input XML
- $inputXML = $inputXML.Replace($formattedKey, $value)
- }
- }
- else {
- Write-Host "Theme '$themeName' not found."
- }
-
- }
- catch {
- Write-Warning "Unable to apply theme"
- Write-Warning $psitem.Exception.StackTrace
- }
-
- return $inputXML;
-}
-function Show-CustomDialog {
- <#
- .SYNOPSIS
- Displays a custom dialog box with an image, heading, message, and an OK button.
-
- .DESCRIPTION
- This function creates a custom dialog box with the specified message and additional elements such as an image, heading, and an OK button. The dialog box is designed with a green border, rounded corners, and a black background.
-
- .PARAMETER Message
- The message to be displayed in the dialog box.
-
- .PARAMETER Width
- The width of the custom dialog window.
-
- .PARAMETER Height
- The height of the custom dialog window.
-
- .PARAMETER FontSize
- The Font Size for text shown inside the custom dialog window.
-
- .PARAMETER HeaderFontSize
- The Font Size for the Header of the custom dialog window.
-
- .PARAMETER IconSize
- The Size to use for Icon inside the custom dialog window.
-
- .PARAMETER EnableScroll
- A flag indicating whether to enable scrolling if the content exceeds the window size.
-
- .EXAMPLE
- Show-CustomDialog -Message "This is a custom dialog with a message and an image above." -Width 300 -Height 200
-
- #>
- param(
- [string]$Message,
- [int]$Width = 300,
- [int]$Height = 200,
- [int]$FontSize = 10,
- [int]$HeaderFontSize = 14,
- [int]$IconSize = 25,
- [bool]$EnableScroll = $false
- )
-
- Add-Type -AssemblyName PresentationFramework
-
- # Define theme colors
- $foregroundColor = [Windows.Media.Brushes]::White
- $backgroundColor = [Windows.Media.Brushes]::Black
- $font = New-Object Windows.Media.FontFamily("Consolas")
- $borderColor = [Windows.Media.Brushes]::Green
- $buttonBackgroundColor = [Windows.Media.Brushes]::Black
- $buttonForegroundColor = [Windows.Media.Brushes]::White
- $shadowColor = [Windows.Media.ColorConverter]::ConvertFromString("#AAAAAAAA")
-
- # Create a custom dialog window
- $dialog = New-Object Windows.Window
- $dialog.Title = "About"
- $dialog.Height = $Height
- $dialog.Width = $Width
- $dialog.Margin = New-Object Windows.Thickness(10) # Add margin to the entire dialog box
- $dialog.WindowStyle = [Windows.WindowStyle]::None # Remove title bar and window controls
- $dialog.ResizeMode = [Windows.ResizeMode]::NoResize # Disable resizing
- $dialog.WindowStartupLocation = [Windows.WindowStartupLocation]::CenterScreen # Center the window
- $dialog.Foreground = $foregroundColor
- $dialog.Background = $backgroundColor
- $dialog.FontFamily = $font
- $dialog.FontSize = $FontSize
-
- # Create a Border for the green edge with rounded corners
- $border = New-Object Windows.Controls.Border
- $border.BorderBrush = $borderColor
- $border.BorderThickness = New-Object Windows.Thickness(1) # Adjust border thickness as needed
- $border.CornerRadius = New-Object Windows.CornerRadius(10) # Adjust the radius for rounded corners
-
- # Create a drop shadow effect
- $dropShadow = New-Object Windows.Media.Effects.DropShadowEffect
- $dropShadow.Color = $shadowColor
- $dropShadow.Direction = 270
- $dropShadow.ShadowDepth = 5
- $dropShadow.BlurRadius = 10
-
- # Apply drop shadow effect to the border
- $dialog.Effect = $dropShadow
-
- $dialog.Content = $border
-
- # Create a grid for layout inside the Border
- $grid = New-Object Windows.Controls.Grid
- $border.Child = $grid
-
- # Add the following line to show gridlines
- #$grid.ShowGridLines = $true
-
- # Add the following line to set the background color of the grid
- $grid.Background = [Windows.Media.Brushes]::Transparent
- # Add the following line to make the Grid stretch
- $grid.HorizontalAlignment = [Windows.HorizontalAlignment]::Stretch
- $grid.VerticalAlignment = [Windows.VerticalAlignment]::Stretch
-
- # Add the following line to make the Border stretch
- $border.HorizontalAlignment = [Windows.HorizontalAlignment]::Stretch
- $border.VerticalAlignment = [Windows.VerticalAlignment]::Stretch
-
-
- # Set up Row Definitions
- $row0 = New-Object Windows.Controls.RowDefinition
- $row0.Height = [Windows.GridLength]::Auto
-
- $row1 = New-Object Windows.Controls.RowDefinition
- $row1.Height = [Windows.GridLength]::new(1, [Windows.GridUnitType]::Star)
-
- $row2 = New-Object Windows.Controls.RowDefinition
- $row2.Height = [Windows.GridLength]::Auto
-
- # Add Row Definitions to Grid
- $grid.RowDefinitions.Add($row0)
- $grid.RowDefinitions.Add($row1)
- $grid.RowDefinitions.Add($row2)
-
- # Add StackPanel for horizontal layout with margins
- $stackPanel = New-Object Windows.Controls.StackPanel
- $stackPanel.Margin = New-Object Windows.Thickness(10) # Add margins around the stack panel
- $stackPanel.Orientation = [Windows.Controls.Orientation]::Horizontal
- $stackPanel.HorizontalAlignment = [Windows.HorizontalAlignment]::Left # Align to the left
- $stackPanel.VerticalAlignment = [Windows.VerticalAlignment]::Top # Align to the top
-
- $grid.Children.Add($stackPanel)
- [Windows.Controls.Grid]::SetRow($stackPanel, 0) # Set the row to the second row (0-based index)
-
- $viewbox = New-Object Windows.Controls.Viewbox
- $viewbox.Width = $IconSize
- $viewbox.Height = $IconSize
-
- # Combine the paths into a single string
-# $cttLogoPath = @"
-# M174 1094 c-4 -14 -4 -55 -2 -92 3 -57 9 -75 41 -122 41 -60 45 -75 22 -84 -25 -9 -17 -21 30 -44 l45 -22 0 -103 c0 -91 3 -109 26 -155 30 -60 65 -87 204 -157 l95 -48 110 58 c184 96 205 127 205 293 l0 108 45 22 c47 23 55 36 30 46 -22 8 -18 30 9 63 13 16 34 48 46 71 20 37 21 52 15 116 l-6 73 -69 -23 c-38 -12 -137 -59 -220 -103 -82 -45 -160 -81 -171 -81 -12 0 -47 15 -78 34 -85 51 -239 127 -309 151 l-62 22 -6 -23z m500 -689 c20 -8 36 -19 36 -24 0 -18 -53 -51 -80 -51 -28 0 -80 33 -80 51 0 10 55 38 76 39 6 0 28 -7 48 -15z
-# M177 711 c-19 -88 4 -242 49 -318 43 -74 107 -127 232 -191 176 -90 199 -84 28 7 -169 91 -214 129 -258 220 -29 58 -32 74 -37 190 -4 90 -8 116 -14 92z
-# M1069 610 c-4 -131 -5 -137 -38 -198 -43 -79 -89 -119 -210 -181 -53 -27 -116 -61 -141 -76 -74 -43 -6 -20 115 40 221 109 296 217 294 425 -1 144 -16 137 -20 -10z
-# "@
-$cttLogoPath = @"
- M 18.00,14.00
- C 18.00,14.00 45.00,27.74 45.00,27.74
- 45.00,27.74 57.40,34.63 57.40,34.63
- 57.40,34.63 59.00,43.00 59.00,43.00
- 59.00,43.00 59.00,83.00 59.00,83.00
- 55.35,81.66 46.99,77.79 44.72,74.79
- 41.17,70.10 42.01,59.80 42.00,54.00
- 42.00,51.62 42.20,48.29 40.98,46.21
- 38.34,41.74 25.78,38.60 21.28,33.79
- 16.81,29.02 18.00,20.20 18.00,14.00 Z
- M 107.00,14.00
- C 109.01,19.06 108.93,30.37 104.66,34.21
- 100.47,37.98 86.38,43.10 84.60,47.21
- 83.94,48.74 84.01,51.32 84.00,53.00
- 83.97,57.04 84.46,68.90 83.26,72.00
- 81.06,77.70 72.54,81.42 67.00,83.00
- 67.00,83.00 67.00,43.00 67.00,43.00
- 67.00,43.00 67.99,35.63 67.99,35.63
- 67.99,35.63 80.00,28.26 80.00,28.26
- 80.00,28.26 107.00,14.00 107.00,14.00 Z
- M 19.00,46.00
- C 21.36,47.14 28.67,50.71 30.01,52.63
- 31.17,54.30 30.99,57.04 31.00,59.00
- 31.04,65.41 30.35,72.16 33.56,78.00
- 38.19,86.45 46.10,89.04 54.00,93.31
- 56.55,94.69 60.10,97.20 63.00,97.22
- 65.50,97.24 68.77,95.36 71.00,94.25
- 76.42,91.55 84.51,87.78 88.82,83.68
- 94.56,78.20 95.96,70.59 96.00,63.00
- 96.01,60.24 95.59,54.63 97.02,52.39
- 98.80,49.60 103.95,47.87 107.00,47.00
- 107.00,47.00 107.00,67.00 107.00,67.00
- 106.90,87.69 96.10,93.85 80.00,103.00
- 76.51,104.98 66.66,110.67 63.00,110.52
- 60.33,110.41 55.55,107.53 53.00,106.25
- 46.21,102.83 36.63,98.57 31.04,93.68
- 16.88,81.28 19.00,62.88 19.00,46.00 Z
-"@
-
- # Add SVG path
- $svgPath = New-Object Windows.Shapes.Path
- $svgPath.Data = [Windows.Media.Geometry]::Parse($cttLogoPath)
- $svgPath.Fill = $foregroundColor # Set fill color to white
-
- # Add SVG path to Viewbox
- $viewbox.Child = $svgPath
-
- # Add SVG path to the stack panel
- $stackPanel.Children.Add($viewbox)
-
- # Add "Winutil" text
- $winutilTextBlock = New-Object Windows.Controls.TextBlock
- $winutilTextBlock.Text = "Winutil"
- $winutilTextBlock.FontSize = $HeaderFontSize
- $winutilTextBlock.Foreground = $foregroundColor
- $winutilTextBlock.Margin = New-Object Windows.Thickness(10, 5, 10, 5) # Add margins around the text block
- $stackPanel.Children.Add($winutilTextBlock)
- # Add TextBlock for information with text wrapping and margins
- $messageTextBlock = New-Object Windows.Controls.TextBlock
- $messageTextBlock.TextWrapping = [Windows.TextWrapping]::Wrap # Enable text wrapping
- $messageTextBlock.HorizontalAlignment = [Windows.HorizontalAlignment]::Left
- $messageTextBlock.VerticalAlignment = [Windows.VerticalAlignment]::Top
- $messageTextBlock.Margin = New-Object Windows.Thickness(10) # Add margins around the text block
-
- # Define the Regex to find hyperlinks formatted as HTML tags
- $regex = [regex]::new('([^<]+)')
- $lastPos = 0
-
- # Iterate through each match and add regular text and hyperlinks
- foreach ($match in $regex.Matches($Message)) {
- # Add the text before the hyperlink, if any
- $textBefore = $Message.Substring($lastPos, $match.Index - $lastPos)
- if ($textBefore.Length -gt 0) {
- $messageTextBlock.Inlines.Add((New-Object Windows.Documents.Run($textBefore)))
- }
-
- # Create and add the hyperlink
- $hyperlink = New-Object Windows.Documents.Hyperlink
- $hyperlink.NavigateUri = New-Object System.Uri($match.Groups[1].Value)
- $hyperlink.Inlines.Add($match.Groups[2].Value)
- $hyperlink.TextDecorations = [Windows.TextDecorations]::None # Remove underline
- $hyperlink.Foreground = $foregroundColor
- $hyperlink.Add_Click({
- param($sender, $args)
- Start-Process $sender.NavigateUri.AbsoluteUri
- })
- $hyperlink.Add_MouseEnter({
- param($sender, $args)
- $sender.Foreground = [Windows.Media.Brushes]::LightGray
- })
- $hyperlink.Add_MouseLeave({
- param($sender, $args)
- $sender.Foreground = $foregroundColor
- })
-
- $messageTextBlock.Inlines.Add($hyperlink)
-
- # Update the last position
- $lastPos = $match.Index + $match.Length
- }
-
- # Add any remaining text after the last hyperlink
- if ($lastPos -lt $Message.Length) {
- $textAfter = $Message.Substring($lastPos)
- $messageTextBlock.Inlines.Add((New-Object Windows.Documents.Run($textAfter)))
- }
-
- # If no matches, add the entire message as a run
- if ($regex.Matches($Message).Count -eq 0) {
- $messageTextBlock.Inlines.Add((New-Object Windows.Documents.Run($Message)))
- }
-
- # Create a ScrollViewer if EnableScroll is true
- if ($EnableScroll) {
- $scrollViewer = New-Object System.Windows.Controls.ScrollViewer
- $scrollViewer.VerticalScrollBarVisibility = 'Auto'
- $scrollViewer.HorizontalScrollBarVisibility = 'Disabled'
- $scrollViewer.Content = $messageTextBlock
- $grid.Children.Add($scrollViewer)
- [Windows.Controls.Grid]::SetRow($scrollViewer, 1) # Set the row to the second row (0-based index)
- } else {
- $grid.Children.Add($messageTextBlock)
- [Windows.Controls.Grid]::SetRow($messageTextBlock, 1) # Set the row to the second row (0-based index)
- }
-
- # Add OK button
- $okButton = New-Object Windows.Controls.Button
- $okButton.Content = "OK"
- $okButton.FontSize = $FontSize
- $okButton.Width = 80
- $okButton.Height = 30
- $okButton.HorizontalAlignment = [Windows.HorizontalAlignment]::Center
- $okButton.VerticalAlignment = [Windows.VerticalAlignment]::Bottom
- $okButton.Margin = New-Object Windows.Thickness(0, 0, 0, 10)
- $okButton.Background = $buttonBackgroundColor
- $okButton.Foreground = $buttonForegroundColor
- $okButton.BorderBrush = $borderColor
- $okButton.Add_Click({
- $dialog.Close()
- })
- $grid.Children.Add($okButton)
- [Windows.Controls.Grid]::SetRow($okButton, 2) # Set the row to the third row (0-based index)
-
- # Handle Escape key press to close the dialog
- $dialog.Add_KeyDown({
- if ($_.Key -eq 'Escape') {
- $dialog.Close()
- }
- })
-
- # Set the OK button as the default button (activated on Enter)
- $okButton.IsDefault = $true
-
- # Show the custom dialog
- $dialog.ShowDialog()
-}
-function Test-WinUtilPackageManager {
- <#
-
- .SYNOPSIS
- Checks if Winget and/or Choco are installed
-
- .PARAMETER winget
- Check if Winget is installed
-
- .PARAMETER choco
- Check if Chocolatey is installed
-
- #>
-
- Param(
- [System.Management.Automation.SwitchParameter]$winget,
- [System.Management.Automation.SwitchParameter]$choco
- )
-
- $status = "not-installed"
-
- if ($winget) {
- # Check if Winget is available while getting it's Version if it's available
- $wingetExists = $true
- try {
- $wingetVersionFull = winget --version
- } catch [System.Management.Automation.CommandNotFoundException], [System.Management.Automation.ApplicationFailedException] {
- Write-Warning "Winget was not found due to un-availablity reasons"
- $wingetExists = $false
- } catch {
- Write-Warning "Winget was not found due to un-known reasons, The Stack Trace is:`n$($psitem.Exception.StackTrace)"
- $wingetExists = $false
- }
-
- # If Winget is available, Parse it's Version and give proper information to Terminal Output.
- # If it isn't available, the return of this funtion will be "not-installed", indicating that
- # Winget isn't installed/available on The System.
- if ($wingetExists) {
- # Check if Preview Version
- if ($wingetVersionFull.Contains("-preview")) {
- $wingetVersion = $wingetVersionFull.Trim("-preview")
- $wingetPreview = $true
- } else {
- $wingetVersion = $wingetVersionFull
- $wingetPreview = $false
- }
-
- # Check if Winget's Version is too old.
- $wingetCurrentVersion = [System.Version]::Parse($wingetVersion.Trim('v'))
- # Grabs the latest release of Winget from the Github API for version check process.
- $response = Invoke-RestMethod -Uri "https://api.github.com/repos/microsoft/Winget-cli/releases/latest" -Method Get -ErrorAction Stop
- $wingetLatestVersion = [System.Version]::Parse(($response.tag_name).Trim('v')) #Stores version number of latest release.
- $wingetOutdated = $wingetCurrentVersion -lt $wingetLatestVersion
- Write-Host "===========================================" -ForegroundColor Green
- Write-Host "--- Winget is installed ---" -ForegroundColor Green
- Write-Host "===========================================" -ForegroundColor Green
- Write-Host "Version: $wingetVersionFull" -ForegroundColor White
-
- if (!$wingetPreview) {
- Write-Host " - Winget is a release version." -ForegroundColor Green
- } else {
- Write-Host " - Winget is a preview version. Unexpected problems may occur." -ForegroundColor Yellow
- }
-
- if (!$wingetOutdated) {
- Write-Host " - Winget is Up to Date" -ForegroundColor Green
- $status = "installed"
- }
- else {
- Write-Host " - Winget is Out of Date" -ForegroundColor Red
- $status = "outdated"
- }
- } else {
- Write-Host "===========================================" -ForegroundColor Red
- Write-Host "--- Winget is not installed ---" -ForegroundColor Red
- Write-Host "===========================================" -ForegroundColor Red
- $status = "not-installed"
- }
- }
-
- if ($choco) {
- if ((Get-Command -Name choco -ErrorAction Ignore) -and ($chocoVersion = (Get-Item "$env:ChocolateyInstall\choco.exe" -ErrorAction Ignore).VersionInfo.ProductVersion)) {
- Write-Host "===========================================" -ForegroundColor Green
- Write-Host "--- Chocolatey is installed ---" -ForegroundColor Green
- Write-Host "===========================================" -ForegroundColor Green
- Write-Host "Version: v$chocoVersion" -ForegroundColor White
- $status = "installed"
- } else {
- Write-Host "===========================================" -ForegroundColor Red
- Write-Host "--- Chocolatey is not installed ---" -ForegroundColor Red
- Write-Host "===========================================" -ForegroundColor Red
- $status = "not-installed"
- }
- }
-
- return $status
-}
-Function Update-WinUtilProgramWinget {
-
- <#
-
- .SYNOPSIS
- This will update all programs using Winget
-
- #>
-
- [ScriptBlock]$wingetinstall = {
-
- $host.ui.RawUI.WindowTitle = """Winget Install"""
-
- Start-Transcript $ENV:TEMP\winget-update.log -Append
- winget upgrade --all --accept-source-agreements --accept-package-agreements --scope=machine --silent
-
- }
-
- $global:WinGetInstall = Start-Process -Verb runas powershell -ArgumentList "-command invoke-command -scriptblock {$wingetinstall} -argumentlist '$($ProgramsToInstall -join ",")'" -PassThru
-
-}
-
-function Invoke-ScratchDialog {
-
- <#
-
- .SYNOPSIS
- Enable Editable Text box Alternate Scartch path
-
- .PARAMETER Button
- #>
- $sync.WPFMicrowinISOScratchDir.IsChecked
-
-
- [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null
- $Dialog = New-Object System.Windows.Forms.FolderBrowserDialog
- $Dialog.SelectedPath = $sync.MicrowinScratchDirBox.Text
- $Dialog.ShowDialog()
- $filePath = $Dialog.SelectedPath
- Write-Host "No ISO is chosen+ $filePath"
-
- if ([string]::IsNullOrEmpty($filePath))
- {
- Write-Host "No Folder had chosen"
- return
- }
-
- $sync.MicrowinScratchDirBox.Text = Join-Path $filePath "\"
-
-}
-function Invoke-WPFButton {
-
- <#
-
- .SYNOPSIS
- Invokes the function associated with the clicked button
-
- .PARAMETER Button
- The name of the button that was clicked
-
- #>
-
- Param ([string]$Button)
-
- # Use this to get the name of the button
- #[System.Windows.MessageBox]::Show("$Button","Chris Titus Tech's Windows Utility","OK","Info")
- if (-not $sync.ProcessRunning){
- Set-WinUtilProgressBar -label "" -percent 0 -hide $true
- }
-
- Switch -Wildcard ($Button){
-
- "WPFTab?BT" {Invoke-WPFTab $Button}
- "WPFinstall" {Invoke-WPFInstall}
- "WPFuninstall" {Invoke-WPFUnInstall}
- "WPFInstallUpgrade" {Invoke-WPFInstallUpgrade}
- "WPFstandard" {Invoke-WPFPresets "Standard"}
- "WPFminimal" {Invoke-WPFPresets "Minimal"}
- "WPFclear" {Invoke-WPFPresets -preset $null -imported $true}
- "WPFclearWinget" {Invoke-WPFPresets -preset $null -imported $true -CheckBox "WPFInstall"}
- "WPFtweaksbutton" {Invoke-WPFtweaksbutton}
- "WPFOOSUbutton" {Invoke-WPFOOSU}
- "WPFAddUltPerf" {Invoke-WPFUltimatePerformance -State "Enable"}
- "WPFRemoveUltPerf" {Invoke-WPFUltimatePerformance -State "Disable"}
- "WPFundoall" {Invoke-WPFundoall}
- "WPFFeatureInstall" {Invoke-WPFFeatureInstall}
- "WPFPanelDISM" {Invoke-WPFPanelDISM}
- "WPFPanelAutologin" {Invoke-WPFPanelAutologin}
- "WPFPanelcontrol" {Invoke-WPFControlPanel -Panel $button}
- "WPFPanelnetwork" {Invoke-WPFControlPanel -Panel $button}
- "WPFPanelpower" {Invoke-WPFControlPanel -Panel $button}
- "WPFPanelregion" {Invoke-WPFControlPanel -Panel $button}
- "WPFPanelsound" {Invoke-WPFControlPanel -Panel $button}
- "WPFPanelsystem" {Invoke-WPFControlPanel -Panel $button}
- "WPFPaneluser" {Invoke-WPFControlPanel -Panel $button}
- "WPFUpdatesdefault" {Invoke-WPFUpdatesdefault}
- "WPFFixesUpdate" {Invoke-WPFFixesUpdate}
- "WPFFixesWinget" {Invoke-WPFFixesWinget}
- "WPFRunAdobeCCCleanerTool" {Invoke-WPFRunAdobeCCCleanerTool}
- "WPFFixesNetwork" {Invoke-WPFFixesNetwork}
- "WPFUpdatesdisable" {Invoke-WPFUpdatesdisable}
- "WPFUpdatessecurity" {Invoke-WPFUpdatessecurity}
- "WPFWinUtilShortcut" {Invoke-WPFShortcut -ShortcutToAdd "WinUtil" -RunAsAdmin $true}
- "WPFGetInstalled" {Invoke-WPFGetInstalled -CheckBox "winget"}
- "WPFGetInstalledTweaks" {Invoke-WPFGetInstalled -CheckBox "tweaks"}
- "WPFGetIso" {Invoke-WPFGetIso}
- "WPFMicrowin" {Invoke-WPFMicrowin}
- "WPFCloseButton" {Invoke-WPFCloseButton}
- "MicrowinScratchDirBT" {Invoke-ScratchDialog}
- }
-}
-function Invoke-WPFCloseButton {
-
- <#
-
- .SYNOPSIS
- Close application
-
- .PARAMETER Button
- #>
- $sync["Form"].Close()
- Write-Host "Bye bye!"
-}
-function Invoke-WPFControlPanel {
- <#
-
- .SYNOPSIS
- Opens the requested legacy panel
-
- .PARAMETER Panel
- The panel to open
-
- #>
- param($Panel)
-
- switch ($Panel){
- "WPFPanelcontrol" {cmd /c control}
- "WPFPanelnetwork" {cmd /c ncpa.cpl}
- "WPFPanelpower" {cmd /c powercfg.cpl}
- "WPFPanelregion" {cmd /c intl.cpl}
- "WPFPanelsound" {cmd /c mmsys.cpl}
- "WPFPanelsystem" {cmd /c sysdm.cpl}
- "WPFPaneluser" {cmd /c "control userpasswords2"}
- }
-}
-function Invoke-WPFFeatureInstall {
- <#
-
- .SYNOPSIS
- Installs selected Windows Features
-
- #>
-
- if($sync.ProcessRunning){
- $msg = "[Invoke-WPFFeatureInstall] Install process is currently running."
- [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
- return
- }
-
- $Features = (Get-WinUtilCheckBoxes)["WPFFeature"]
-
- Invoke-WPFRunspace -ArgumentList $Features -DebugPreference $DebugPreference -ScriptBlock {
- param($Features, $DebugPreference)
- $sync.ProcessRunning = $true
- if ($Features.count -eq 1){
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" })
- } else {
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" })
- }
-
- Invoke-WinUtilFeatureInstall $Features
-
- $sync.ProcessRunning = $false
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" })
-
- Write-Host "==================================="
- Write-Host "--- Features are Installed ---"
- Write-Host "--- A Reboot may be required ---"
- Write-Host "==================================="
- }
-}
-function Invoke-WPFFixesNetwork {
- <#
-
- .SYNOPSIS
- Resets various network configurations
-
- #>
-
- Write-Host "Resetting Network with netsh"
-
- # Reset WinSock catalog to a clean state
- Start-Process -NoNewWindow -FilePath "netsh" -ArgumentList "winsock", "reset"
- # Resets WinHTTP proxy setting to DIRECT
- Start-Process -NoNewWindow -FilePath "netsh" -ArgumentList "winhttp", "reset", "proxy"
- # Removes all user configured IP settings
- Start-Process -NoNewWindow -FilePath "netsh" -ArgumentList "int", "ip", "reset"
-
- Write-Host "Process complete. Please reboot your computer."
-
- $ButtonType = [System.Windows.MessageBoxButton]::OK
- $MessageboxTitle = "Network Reset "
- $Messageboxbody = ("Stock settings loaded.`n Please reboot your computer")
- $MessageIcon = [System.Windows.MessageBoxImage]::Information
-
- [System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon)
- Write-Host "=========================================="
- Write-Host "-- Network Configuration has been Reset --"
- Write-Host "=========================================="
-}
-function Invoke-WPFFixesUpdate {
-
- <#
-
- .SYNOPSIS
- Performs various tasks in an attempt to repair Windows Update
-
- .DESCRIPTION
- 1. (Aggressive Only) Scans the system for corruption using chkdsk, SFC, and DISM
- Steps:
- 1. Runs chkdsk /scan /perf
- /scan - Runs an online scan on the volume
- /perf - Uses more system resources to complete a scan as fast as possible
- 2. Runs SFC /scannow
- /scannow - Scans integrity of all protected system files and repairs files with problems when possible
- 3. Runs DISM /Online /Cleanup-Image /RestoreHealth
- /Online - Targets the running operating system
- /Cleanup-Image - Performs cleanup and recovery operations on the image
- /RestoreHealth - Scans the image for component store corruption and attempts to repair the corruption using Windows Update
- 4. Runs SFC /scannow
- Ran twice in case DISM repaired SFC
- 2. Stops Windows Update Services
- 3. Remove the QMGR Data file, which stores BITS jobs
- 4. (Aggressive Only) Renames the DataStore and CatRoot2 folders
- DataStore - Contains the Windows Update History and Log Files
- CatRoot2 - Contains the Signatures for Windows Update Packages
- 5. Renames the Windows Update Download Folder
- 6. Deletes the Windows Update Log
- 7. (Aggressive Only) Resets the Security Descriptors on the Windows Update Services
- 8. Reregisters the BITS and Windows Update DLLs
- 9. Removes the WSUS client settings
- 10. Resets WinSock
- 11. Gets and deletes all BITS jobs
- 12. Sets the startup type of the Windows Update Services then starts them
- 13. Forces Windows Update to check for updates
-
- .PARAMETER Aggressive
- If specified, the script will take additional steps to repair Windows Update that are more dangerous, take a significant amount of time, or are generally unnecessary
-
- #>
-
- param($Aggressive = $false)
-
- Write-Progress -Id 0 -Activity "Repairing Windows Update" -PercentComplete 0
- # Wait for the first progress bar to show, otherwise the second one won't show
- Start-Sleep -Milliseconds 200
-
- if ($Aggressive) {
- # Scan system for corruption
- Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Scanning for corruption..." -PercentComplete 0
- Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running chkdsk..." -PercentComplete 0
- # 2>&1 redirects stdout, alowing iteration over the output
- chkdsk.exe /scan /perf 2>&1 | ForEach-Object {
- # Write stdout to the Verbose stream
- Write-Verbose $_
-
- # Get the index of the total percentage
- $index = $_.IndexOf("Total:")
- if (
- # If the percent is found
- ($percent = try {(
- $_.Substring(
- $index + 6,
- $_.IndexOf("%", $index) - $index - 6
- )
- ).Trim()} catch {0}) `
- <# And the current percentage is greater than the previous one #>`
- -and $percent -gt $oldpercent
- ){
- # Update the progress bar
- $oldpercent = $percent
- Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running chkdsk... ($percent%)" -PercentComplete $percent
- }
- }
-
- Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running SFC..." -PercentComplete 0
- $oldpercent = 0
- # SFC has a bug when redirected which causes it to output only when the stdout buffer is full, causing the progress bar to move in chunks
- sfc /scannow 2>&1 | ForEach-Object {
- # Write stdout to the Verbose stream
- Write-Verbose $_
-
- # Filter for lines that contain a percentage that is greater than the previous one
- if (
- (
- # Use a different method to get the percentage that accounts for SFC's Unicode output
- [int]$percent = try {(
- (
- $_.Substring(
- $_.IndexOf("n") + 2,
- $_.IndexOf("%") - $_.IndexOf("n") - 2
- ).ToCharArray() | Where-Object {$_}
- ) -join ''
- ).TrimStart()} catch {0}
- ) -and $percent -gt $oldpercent
- ){
- # Update the progress bar
- $oldpercent = $percent
- Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running SFC... ($percent%)" -PercentComplete $percent
- }
- }
-
- Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running DISM..." -PercentComplete 0
- $oldpercent = 0
- DISM /Online /Cleanup-Image /RestoreHealth | ForEach-Object {
- # Write stdout to the Verbose stream
- Write-Verbose $_
-
- # Filter for lines that contain a percentage that is greater than the previous one
- if (
- ($percent = try {
- [int]($_ -replace "\[" -replace "=" -replace " " -replace "%" -replace "\]")
- } catch {0}) `
- -and $percent -gt $oldpercent
- ){
- # Update the progress bar
- $oldpercent = $percent
- Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running DISM... ($percent%)" -PercentComplete $percent
- }
- }
-
- Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running SFC again..." -PercentComplete 0
- $oldpercent = 0
- sfc /scannow 2>&1 | ForEach-Object {
- # Write stdout to the Verbose stream
- Write-Verbose $_
-
- # Filter for lines that contain a percentage that is greater than the previous one
- if (
- (
- [int]$percent = try {(
- (
- $_.Substring(
- $_.IndexOf("n") + 2,
- $_.IndexOf("%") - $_.IndexOf("n") - 2
- ).ToCharArray() | Where-Object {$_}
- ) -join ''
- ).TrimStart()} catch {0}
- ) -and $percent -gt $oldpercent
- ){
- # Update the progress bar
- $oldpercent = $percent
- Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running SFC... ($percent%)" -PercentComplete $percent
- }
- }
- Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Completed" -PercentComplete 100
- }
-
-
- Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Stopping Windows Update Services..." -PercentComplete 10
- # Stop the Windows Update Services
- Write-Progress -Id 2 -ParentId 0 -Activity "Stopping Services" -Status "Stopping BITS..." -PercentComplete 0
- Stop-Service -Name BITS -Force
- Write-Progress -Id 2 -ParentId 0 -Activity "Stopping Services" -Status "Stopping wuauserv..." -PercentComplete 20
- Stop-Service -Name wuauserv -Force
- Write-Progress -Id 2 -ParentId 0 -Activity "Stopping Services" -Status "Stopping appidsvc..." -PercentComplete 40
- Stop-Service -Name appidsvc -Force
- Write-Progress -Id 2 -ParentId 0 -Activity "Stopping Services" -Status "Stopping cryptsvc..." -PercentComplete 60
- Stop-Service -Name cryptsvc -Force
- Write-Progress -Id 2 -ParentId 0 -Activity "Stopping Services" -Status "Completed" -PercentComplete 100
-
-
- # Remove the QMGR Data file
- Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Renaming/Removing Files..." -PercentComplete 20
- Write-Progress -Id 3 -ParentId 0 -Activity "Renaming/Removing Files" -Status "Removing QMGR Data files..." -PercentComplete 0
- Remove-Item "$env:allusersprofile\Application Data\Microsoft\Network\Downloader\qmgr*.dat" -ErrorAction SilentlyContinue
-
-
- if ($Aggressive) {
- # Rename the Windows Update Log and Signature Folders
- Write-Progress -Id 3 -ParentId 0 -Activity "Renaming/Removing Files" -Status "Renaming the Windows Update Log, Download, and Signature Folder..." -PercentComplete 20
- Rename-Item $env:systemroot\SoftwareDistribution\DataStore DataStore.bak -ErrorAction SilentlyContinue
- Rename-Item $env:systemroot\System32\Catroot2 catroot2.bak -ErrorAction SilentlyContinue
- }
-
- # Rename the Windows Update Download Folder
- Write-Progress -Id 3 -ParentId 0 -Activity "Renaming/Removing Files" -Status "Renaming the Windows Update Download Folder..." -PercentComplete 20
- Rename-Item $env:systemroot\SoftwareDistribution\Download Download.bak -ErrorAction SilentlyContinue
-
- # Delete the legacy Windows Update Log
- Write-Progress -Id 3 -ParentId 0 -Activity "Renaming/Removing Files" -Status "Removing the old Windows Update log..." -PercentComplete 80
- Remove-Item $env:systemroot\WindowsUpdate.log -ErrorAction SilentlyContinue
- Write-Progress -Id 3 -ParentId 0 -Activity "Renaming/Removing Files" -Status "Completed" -PercentComplete 100
-
-
- if ($Aggressive) {
- # Reset the Security Descriptors on the Windows Update Services
- Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Resetting the WU Service Security Descriptors..." -PercentComplete 25
- Write-Progress -Id 4 -ParentId 0 -Activity "Resetting the WU Service Security Descriptors" -Status "Resetting the BITS Security Descriptor..." -PercentComplete 0
- Start-Process -NoNewWindow -FilePath "sc.exe" -ArgumentList "sdset", "bits", "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)"
- Write-Progress -Id 4 -ParentId 0 -Activity "Resetting the WU Service Security Descriptors" -Status "Resetting the wuauserv Security Descriptor..." -PercentComplete 50
- Start-Process -NoNewWindow -FilePath "sc.exe" -ArgumentList "sdset", "wuauserv", "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)"
- Write-Progress -Id 4 -ParentId 0 -Activity "Resetting the WU Service Security Descriptors" -Status "Completed" -PercentComplete 100
- }
-
-
- # Reregister the BITS and Windows Update DLLs
- Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Reregistering DLLs..." -PercentComplete 40
- $oldLocation = Get-Location
- Set-Location $env:systemroot\system32
- $i = 0
- $DLLs = @(
- "atl.dll", "urlmon.dll", "mshtml.dll", "shdocvw.dll", "browseui.dll",
- "jscript.dll", "vbscript.dll", "scrrun.dll", "msxml.dll", "msxml3.dll",
- "msxml6.dll", "actxprxy.dll", "softpub.dll", "wintrust.dll", "dssenh.dll",
- "rsaenh.dll", "gpkcsp.dll", "sccbase.dll", "slbcsp.dll", "cryptdlg.dll",
- "oleaut32.dll", "ole32.dll", "shell32.dll", "initpki.dll", "wuapi.dll",
- "wuaueng.dll", "wuaueng1.dll", "wucltui.dll", "wups.dll", "wups2.dll",
- "wuweb.dll", "qmgr.dll", "qmgrprxy.dll", "wucltux.dll", "muweb.dll", "wuwebv.dll"
- )
- foreach ($dll in $DLLs) {
- Write-Progress -Id 5 -ParentId 0 -Activity "Reregistering DLLs" -Status "Registering $dll..." -PercentComplete ($i / $DLLs.Count * 100)
- $i++
- Start-Process -NoNewWindow -FilePath "regsvr32.exe" -ArgumentList "/s", $dll
- }
- Set-Location $oldLocation
- Write-Progress -Id 5 -ParentId 0 -Activity "Reregistering DLLs" -Status "Completed" -PercentComplete 100
-
-
- # Remove the WSUS client settings
- if (Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate") {
- Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Removing WSUS client settings..." -PercentComplete 60
- Write-Progress -Id 6 -ParentId 0 -Activity "Removing WSUS client settings" -PercentComplete 0
- Start-Process -NoNewWindow -FilePath "REG" -ArgumentList "DELETE", "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate", "/v", "AccountDomainSid", "/f" -RedirectStandardError $true
- Start-Process -NoNewWindow -FilePath "REG" -ArgumentList "DELETE", "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate", "/v", "PingID", "/f" -RedirectStandardError $true
- Start-Process -NoNewWindow -FilePath "REG" -ArgumentList "DELETE", "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate", "/v", "SusClientId", "/f" -RedirectStandardError $true
- Write-Progress -Id 6 -ParentId 0 -Activity "Removing WSUS client settings" -Status "Completed" -PercentComplete 100
- }
-
-
- # Reset WinSock
- Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Resetting WinSock..." -PercentComplete 65
- Write-Progress -Id 7 -ParentId 0 -Activity "Resetting WinSock" -Status "Resetting WinSock..." -PercentComplete 0
- Start-Process -NoNewWindow -FilePath "netsh" -ArgumentList "winsock", "reset" -RedirectStandardOutput $true
- Start-Process -NoNewWindow -FilePath "netsh" -ArgumentList "winhttp", "reset", "proxy" -RedirectStandardOutput $true
- Start-Process -NoNewWindow -FilePath "netsh" -ArgumentList "int", "ip", "reset" -RedirectStandardOutput $true
- Write-Progress -Id 7 -ParentId 0 -Activity "Resetting WinSock" -Status "Completed" -PercentComplete 100
-
-
- # Get and delete all BITS jobs
- Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Deleting BITS jobs..." -PercentComplete 75
- Write-Progress -Id 8 -ParentId 0 -Activity "Deleting BITS jobs" -Status "Deleting BITS jobs..." -PercentComplete 0
- Get-BitsTransfer | Remove-BitsTransfer
- Write-Progress -Id 8 -ParentId 0 -Activity "Deleting BITS jobs" -Status "Completed" -PercentComplete 100
-
-
- # Change the startup type of the Windows Update Services and start them
- Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Starting Windows Update Services..." -PercentComplete 90
- Write-Progress -Id 9 -ParentId 0 -Activity "Starting Windows Update Services" -Status "Starting BITS..." -PercentComplete 0
- Get-Service BITS | Set-Service -StartupType Manual -PassThru | Start-Service
- Write-Progress -Id 9 -ParentId 0 -Activity "Starting Windows Update Services" -Status "Starting wuauserv..." -PercentComplete 25
- Get-Service wuauserv | Set-Service -StartupType Manual -PassThru | Start-Service
- Write-Progress -Id 9 -ParentId 0 -Activity "Starting Windows Update Services" -Status "Starting AppIDSvc..." -PercentComplete 50
- # The AppIDSvc service is protected, so the startup type has to be changed in the registry
- Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\AppIDSvc" -Name "Start" -Value "3" # Manual
- Start-Service AppIDSvc
- Write-Progress -Id 9 -ParentId 0 -Activity "Starting Windows Update Services" -Status "Starting CryptSvc..." -PercentComplete 75
- Get-Service CryptSvc | Set-Service -StartupType Manual -PassThru | Start-Service
- Write-Progress -Id 9 -ParentId 0 -Activity "Starting Windows Update Services" -Status "Completed" -PercentComplete 100
-
-
- # Force Windows Update to check for updates
- Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Forcing discovery..." -PercentComplete 95
- Write-Progress -Id 10 -ParentId 0 -Activity "Forcing discovery" -Status "Forcing discovery..." -PercentComplete 0
- (New-Object -ComObject Microsoft.Update.AutoUpdate).DetectNow()
- Start-Process -NoNewWindow -FilePath "wuauclt" -ArgumentList "/resetauthorization", "/detectnow"
- Write-Progress -Id 10 -ParentId 0 -Activity "Forcing discovery" -Status "Completed" -PercentComplete 100
- Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Completed" -PercentComplete 100
-
- $ButtonType = [System.Windows.MessageBoxButton]::OK
- $MessageboxTitle = "Reset Windows Update "
- $Messageboxbody = ("Stock settings loaded.`n Please reboot your computer")
- $MessageIcon = [System.Windows.MessageBoxImage]::Information
-
- [System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon)
- Write-Host "==============================================="
- Write-Host "-- Reset All Windows Update Settings to Stock -"
- Write-Host "==============================================="
-
- # Remove the progress bars
- Write-Progress -Id 0 -Activity "Repairing Windows Update" -Completed
- Write-Progress -Id 1 -Activity "Scanning for corruption" -Completed
- Write-Progress -Id 2 -Activity "Stopping Services" -Completed
- Write-Progress -Id 3 -Activity "Renaming/Removing Files" -Completed
- Write-Progress -Id 4 -Activity "Resetting the WU Service Security Descriptors" -Completed
- Write-Progress -Id 5 -Activity "Reregistering DLLs" -Completed
- Write-Progress -Id 6 -Activity "Removing WSUS client settings" -Completed
- Write-Progress -Id 7 -Activity "Resetting WinSock" -Completed
- Write-Progress -Id 8 -Activity "Deleting BITS jobs" -Completed
- Write-Progress -Id 9 -Activity "Starting Windows Update Services" -Completed
- Write-Progress -Id 10 -Activity "Forcing discovery" -Completed
-}
-function Invoke-WPFFixesWinget {
-
- <#
-
- .SYNOPSIS
- Fixes Winget by running choco install winget
- .DESCRIPTION
- BravoNorris for the fantastic idea of a button to reinstall winget
- #>
- # Install Choco if not already present
- Install-WinUtilChoco
- Start-Process -FilePath "choco" -ArgumentList "install winget -y --force" -NoNewWindow -Wait
-
-}
-Function Invoke-WPFFormVariables {
- <#
-
- .SYNOPSIS
- Prints the logo
-
- #>
- #If ($global:ReadmeDisplay -ne $true) { Write-Host "If you need to reference this display again, run Get-FormVariables" -ForegroundColor Yellow; $global:ReadmeDisplay = $true }
-
-
- Write-Host ""
- Write-Host " CCCCCCCCCCCCCTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT "
- Write-Host " CCC::::::::::::CT:::::::::::::::::::::TT:::::::::::::::::::::T "
- Write-Host "CC:::::::::::::::CT:::::::::::::::::::::TT:::::::::::::::::::::T "
- Write-Host "C:::::CCCCCCCC::::CT:::::TT:::::::TT:::::TT:::::TT:::::::TT:::::T "
- Write-Host "C:::::C CCCCCCTTTTTT T:::::T TTTTTTTTTTTT T:::::T TTTTTT"
- Write-Host "C:::::C T:::::T T:::::T "
- Write-Host "C:::::C T:::::T T:::::T "
- Write-Host "C:::::C T:::::T T:::::T "
- Write-Host "C:::::C T:::::T T:::::T "
- Write-Host "C:::::C T:::::T T:::::T "
- Write-Host "C:::::C T:::::T T:::::T "
- Write-Host "C:::::C CCCCCC T:::::T T:::::T "
- Write-Host "C:::::CCCCCCCC::::C TT:::::::TT TT:::::::TT "
- Write-Host "CC:::::::::::::::C T:::::::::T T:::::::::T "
- Write-Host "CCC::::::::::::C T:::::::::T T:::::::::T "
- Write-Host " CCCCCCCCCCCCC TTTTTTTTTTT TTTTTTTTTTT "
- Write-Host ""
- Write-Host "====Chris Titus Tech====="
- Write-Host "=====Windows Toolbox====="
-
- #====DEBUG GUI Elements====
-
- #Write-Host "Found the following interactable elements from our form" -ForegroundColor Cyan
- #get-variable WPF*
-}
-function Invoke-WPFGetInstalled {
- <#
-
- .SYNOPSIS
- Invokes the function that gets the checkboxes to check in a new runspace
-
- .PARAMETER checkbox
- Indicates whether to check for installed 'winget' programs or applied 'tweaks'
-
- #>
- param($checkbox)
-
- if($sync.ProcessRunning){
- $msg = "[Invoke-WPFGetInstalled] Install process is currently running."
- [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
- return
- }
-
- if(((Test-WinUtilPackageManager -winget) -eq "not-installed") -and $checkbox -eq "winget"){
- return
- }
-
- Invoke-WPFRunspace -ArgumentList $checkbox -DebugPreference $DebugPreference -ScriptBlock {
- param($checkbox, $DebugPreference)
-
- $sync.ProcessRunning = $true
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" })
-
- if($checkbox -eq "winget"){
- Write-Host "Getting Installed Programs..."
- }
- if($checkbox -eq "tweaks"){
- Write-Host "Getting Installed Tweaks..."
- }
-
- $Checkboxes = Invoke-WinUtilCurrentSystem -CheckBox $checkbox
-
- $sync.form.Dispatcher.invoke({
- foreach($checkbox in $Checkboxes){
- $sync.$checkbox.ischecked = $True
- }
- })
-
- Write-Host "Done..."
- $sync.ProcessRunning = $false
- $sync.form.Dispatcher.Invoke([action] { Set-WinUtilTaskbaritem -state "None" })
- }
-}
-function Invoke-WPFGetIso {
- <#
- .DESCRIPTION
- Function to get the path to Iso file for MicroWin, unpack that isom=, read basic information and populate the UI Options
- #>
-
- Write-Host "Invoking WPFGetIso"
-
- if($sync.ProcessRunning){
- $msg = "GetIso process is currently running."
- [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
- return
- }
-
- $sync.BusyMessage.Visibility="Visible"
- $sync.BusyText.Text="N Busy"
-
-
-
- Write-Host " _ __ __ _ "
- Write-Host " /\/\ (_) ___ _ __ ___ / / /\ \ \(_) _ __ "
- Write-Host " / \ | | / __|| '__| / _ \ \ \/ \/ /| || '_ \ "
- Write-Host "/ /\/\ \| || (__ | | | (_) | \ /\ / | || | | | "
- Write-Host "\/ \/|_| \___||_| \___/ \/ \/ |_||_| |_| "
-
- $oscdimgPath = Join-Path $env:TEMP 'oscdimg.exe'
- $oscdImgFound = [bool] (Get-Command -ErrorAction Ignore -Type Application oscdimg.exe) -or (Test-Path $oscdimgPath -PathType Leaf)
- Write-Host "oscdimg.exe on system: $oscdImgFound"
-
- if (!$oscdImgFound)
- {
- $downloadFromGitHub = $sync.WPFMicrowinDownloadFromGitHub.IsChecked
- $sync.BusyMessage.Visibility="Hidden"
-
- if (!$downloadFromGitHub)
- {
- # only show the message to people who did check the box to download from github, if you check the box
- # you consent to downloading it, no need to show extra dialogs
- [System.Windows.MessageBox]::Show("oscdimge.exe is not found on the system, winutil will now attempt do download and install it using choco. This might take a long time.")
- # the step below needs choco to download oscdimg
- # Install Choco if not already present
- Install-WinUtilChoco
- $chocoFound = [bool] (Get-Command -ErrorAction Ignore -Type Application choco)
- Write-Host "choco on system: $chocoFound"
- if (!$chocoFound)
- {
- [System.Windows.MessageBox]::Show("choco.exe is not found on the system, you need choco to download oscdimg.exe")
- return
- }
-
- Start-Process -Verb runas -FilePath powershell.exe -ArgumentList "choco install windows-adk-oscdimg"
- [System.Windows.MessageBox]::Show("oscdimg is installed, now close, reopen PowerShell terminal and re-launch winutil.ps1")
- return
- }
- else {
- [System.Windows.MessageBox]::Show("oscdimge.exe is not found on the system, winutil will now attempt do download and install it from github. This might take a long time.")
- Get-Oscdimg -oscdimgPath $oscdimgPath
- $oscdImgFound = Test-Path $oscdimgPath -PathType Leaf
- if (!$oscdImgFound) {
- $msg = "oscdimg was not downloaded can not proceed"
- [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error)
- return
- }
- else {
- Write-Host "oscdimg.exe was successfully downloaded from github"
- }
- }
- }
-
- [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null
- $openFileDialog = New-Object System.Windows.Forms.OpenFileDialog
- $openFileDialog.initialDirectory = $initialDirectory
- $openFileDialog.filter = "ISO files (*.iso)| *.iso"
- $openFileDialog.ShowDialog() | Out-Null
- $filePath = $openFileDialog.FileName
-
- if ([string]::IsNullOrEmpty($filePath))
- {
- Write-Host "No ISO is chosen"
- $sync.BusyMessage.Visibility="Hidden"
- return
- }
-
- Write-Host "File path $($filePath)"
- if (-not (Test-Path -Path $filePath -PathType Leaf))
- {
- $msg = "File you've chosen doesn't exist"
- [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error)
- return
- }
-
- Set-WinUtilTaskbaritem -state "Indeterminate" -overlay "logo"
-
- # Detect the file size of the ISO and compare it with the free space of the system drive
- $isoSize = (Get-Item -Path $filePath).Length
- Write-Debug "Size of ISO file: $($isoSize) bytes"
- # Use this procedure to get the free space of the drive depending on where the user profile folder is stored.
- # This is done to guarantee a dynamic solution, as the installation drive may be mounted to a letter different than C
- $driveSpace = (Get-Volume -DriveLetter ([IO.Path]::GetPathRoot([Environment]::GetFolderPath([Environment+SpecialFolder]::UserProfile)).Replace(":\", "").Trim())).SizeRemaining
- Write-Debug "Free space on installation drive: $($driveSpace) bytes"
- if ($driveSpace -lt ($isoSize * 2))
- {
- # It's not critical and we _may_ continue. Output a warning
- Write-Warning "You may not have enough space for this operation. Proceed at your own risk."
- }
- elseif ($driveSpace -lt $isoSize)
- {
- # It's critical and we can't continue. Output an error
- Write-Host "You don't have enough space for this operation. You need at least $([Math]::Round(($isoSize / ([Math]::Pow(1024, 2))) * 2, 2)) MB of free space to copy the ISO files to a temp directory and to be able to perform additional operations."
- Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning"
- return
- }
- else
- {
- Write-Host "You have enough space for this operation."
- }
-
- try {
- Write-Host "Mounting Iso. Please wait."
- $mountedISO = Mount-DiskImage -PassThru "$filePath"
- Write-Host "Done mounting Iso $mountedISO"
- $driveLetter = (Get-Volume -DiskImage $mountedISO).DriveLetter
- Write-Host "Iso mounted to '$driveLetter'"
- } catch {
- # @ChrisTitusTech please copy this wiki and change the link below to your copy of the wiki
- Write-Error "Failed to mount the image. Error: $($_.Exception.Message)"
- Write-Error "This is NOT winutil's problem, your ISO might be corrupt, or there is a problem on the system"
- Write-Error "Please refer to this wiki for more details https://github.com/ChrisTitusTech/winutil/blob/main/wiki/Error-in-Winutil-MicroWin-during-ISO-mounting%2Cmd"
- Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning"
- return
- }
- # storing off values in hidden fields for further steps
- # there is probably a better way of doing this, I don't have time to figure this out
- $sync.MicrowinIsoDrive.Text = $driveLetter
-
- $mountedISOPath = (Split-Path -Path $filePath)
- if ($sync.MicrowinScratchDirBox.Text.Trim() -eq "Scratch") {
- $sync.MicrowinScratchDirBox.Text =""
- }
-
- $UseISOScratchDir = $sync.WPFMicrowinISOScratchDir.IsChecked
-
- if ($UseISOScratchDir) {
- $sync.MicrowinScratchDirBox.Text=$mountedISOPath
- }
-
- if( -Not $sync.MicrowinScratchDirBox.Text.EndsWith('\') -And $sync.MicrowinScratchDirBox.Text.Length -gt 1) {
-
- $sync.MicrowinScratchDirBox.Text = Join-Path $sync.MicrowinScratchDirBox.Text.Trim() '\'
-
- }
-
- # Detect if the folders already exist and remove them
- if (($sync.MicrowinMountDir.Text -ne "") -and (Test-Path -Path $sync.MicrowinMountDir.Text))
- {
- try {
- Write-Host "Deleting temporary files from previous run. Please wait..."
- Remove-Item -Path $sync.MicrowinMountDir.Text -Recurse -Force
- Remove-Item -Path $sync.MicrowinScratchDir.Text -Recurse -Force
- }
- catch {
- Write-Host "Could not delete temporary files. You need to delete those manually."
- }
- }
-
- Write-Host "Setting up mount dir and scratch dirs"
- $timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
- $randomNumber = Get-Random -Minimum 1 -Maximum 9999
- $randomMicrowin = "Microwin_${timestamp}_${randomNumber}"
- $randomMicrowinScratch = "MicrowinScratch_${timestamp}_${randomNumber}"
- $sync.BusyText.Text=" - Mounting"
- Write-Host "Mounting Iso. Please wait."
- if ($sync.MicrowinScratchDirBox.Text -eq "") {
- $mountDir = Join-Path $env:TEMP $randomMicrowin
- $scratchDir = Join-Path $env:TEMP $randomMicrowinScratch
- } else {
- $scratchDir = $sync.MicrowinScratchDirBox.Text+"Scrach"
- $mountDir = $sync.MicrowinScratchDirBox.Text+"micro"
- }
-
- $sync.MicrowinMountDir.Text = $mountDir
- $sync.MicrowinScratchDir.Text = $scratchDir
- Write-Host "Done setting up mount dir and scratch dirs"
- Write-Host "Scratch dir is $scratchDir"
- Write-Host "Image dir is $mountDir"
-
- try {
-
- #$data = @($driveLetter, $filePath)
- New-Item -ItemType Directory -Force -Path "$($mountDir)" | Out-Null
- New-Item -ItemType Directory -Force -Path "$($scratchDir)" | Out-Null
- Write-Host "Copying Windows image. This will take awhile, please don't use UI or cancel this step!"
-
- # xcopy we can verify files and also not copy files that already exist, but hard to measure
- # xcopy.exe /E /I /H /R /Y /J $DriveLetter":" $mountDir >$null
- $totalTime = Measure-Command { Copy-Files "$($driveLetter):" $mountDir -Recurse -Force }
- Write-Host "Copy complete! Total Time: $($totalTime.Minutes)m$($totalTime.Seconds)s"
-
- $wimFile = "$mountDir\sources\install.wim"
- Write-Host "Getting image information $wimFile"
-
- if ((-not (Test-Path -Path $wimFile -PathType Leaf)) -and (-not (Test-Path -Path $wimFile.Replace(".wim", ".esd").Trim() -PathType Leaf)))
- {
- $msg = "Neither install.wim nor install.esd exist in the image, this could happen if you use unofficial Windows images. Please don't use shady images from the internet, use only official images. Here are instructions how to download ISO images if the Microsoft website is not showing the link to download and ISO. https://www.techrepublic.com/article/how-to-download-a-windows-10-iso-file-without-using-the-media-creation-tool/"
- Write-Host $msg
- [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error)
- Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning"
- throw
- }
- elseif ((-not (Test-Path -Path $wimFile -PathType Leaf)) -and (Test-Path -Path $wimFile.Replace(".wim", ".esd").Trim() -PathType Leaf))
- {
- Write-Host "Install.esd found on the image. It needs to be converted to a WIM file in order to begin processing"
- $wimFile = $wimFile.Replace(".wim", ".esd").Trim()
- }
- $sync.MicrowinWindowsFlavors.Items.Clear()
- Get-WindowsImage -ImagePath $wimFile | ForEach-Object {
- $imageIdx = $_.ImageIndex
- $imageName = $_.ImageName
- $sync.MicrowinWindowsFlavors.Items.Add("$imageIdx : $imageName")
- }
- $sync.MicrowinWindowsFlavors.SelectedIndex = 0
- Write-Host "Finding suitable Pro edition. This can take some time. Do note that this is an automatic process that might not select the edition you want."
- Get-WindowsImage -ImagePath $wimFile | ForEach-Object {
- if ((Get-WindowsImage -ImagePath $wimFile -Index $_.ImageIndex).EditionId -eq "Professional")
- {
- # We have found the Pro edition
- $sync.MicrowinWindowsFlavors.SelectedIndex = $_.ImageIndex - 1
- }
- }
- Get-Volume $driveLetter | Get-DiskImage | Dismount-DiskImage
- Write-Host "Selected value '$($sync.MicrowinWindowsFlavors.SelectedValue)'....."
-
- $sync.MicrowinOptionsPanel.Visibility = 'Visible'
- } catch {
- Write-Host "Dismounting bad image..."
- Get-Volume $driveLetter | Get-DiskImage | Dismount-DiskImage
- Remove-Item -Recurse -Force "$($scratchDir)"
- Remove-Item -Recurse -Force "$($mountDir)"
- }
-
- Write-Host "Done reading and unpacking ISO"
- Write-Host ""
- Write-Host "*********************************"
- Write-Host "Check the UI for further steps!!!"
-
- $sync.BusyMessage.Visibility="Hidden"
- $sync.ProcessRunning = $false
- Set-WinUtilTaskbaritem -state "None" -overlay "checkmark"
-}
-
-
-function Invoke-WPFImpex {
- <#
-
- .SYNOPSIS
- Handles importing and exporting of the checkboxes checked for the tweaks section
-
- .PARAMETER type
- Indicates whether to 'import' or 'export'
-
- .PARAMETER checkbox
- The checkbox to export to a file or apply the imported file to
-
- .EXAMPLE
- Invoke-WPFImpex -type "export"
-
- #>
- param(
- $type,
- $Config = $null
- )
-
- if ($type -eq "export"){
- $FileBrowser = New-Object System.Windows.Forms.SaveFileDialog
- }
- if ($type -eq "import"){
- $FileBrowser = New-Object System.Windows.Forms.OpenFileDialog
- }
-
- if (-not $Config){
- $FileBrowser.InitialDirectory = [Environment]::GetFolderPath('Desktop')
- $FileBrowser.Filter = "JSON Files (*.json)|*.json"
- $FileBrowser.ShowDialog() | Out-Null
-
- if($FileBrowser.FileName -eq ""){
- return
- }
- else{
- $Config = $FileBrowser.FileName
- }
- }
-
- if ($type -eq "export"){
- $jsonFile = Get-WinUtilCheckBoxes -unCheck $false
- $jsonFile | ConvertTo-Json | Out-File $FileBrowser.FileName -Force
- }
- if ($type -eq "import"){
- $jsonFile = Get-Content $Config | ConvertFrom-Json
-
- $flattenedJson = @()
- $jsonFile.PSObject.Properties | ForEach-Object {
- $category = $_.Name
- foreach ($checkboxName in $_.Value) {
- if ($category -ne "Install") {
- $flattenedJson += $checkboxName
- }
- }
- }
-
- Invoke-WPFPresets -preset $flattenedJson -imported $true
- }
-}
-function Invoke-WPFInstall {
- <#
-
- .SYNOPSIS
- Installs the selected programs using winget, if one or more of the selected programs are already installed on the system, winget will try and perform an upgrade if there's a newer version to install.
-
- #>
-
- if($sync.ProcessRunning){
- $msg = "[Invoke-WPFInstall] An Install process is currently running."
- [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
- return
- }
-
- $PackagesToInstall = (Get-WinUtilCheckBoxes)["Install"]
- Write-Host $PackagesToInstall
- if ($PackagesToInstall.Count -eq 0) {
- $WarningMsg = "Please select the program(s) to install or upgrade"
- [System.Windows.MessageBox]::Show($WarningMsg, $AppTitle, [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
- return
- }
-
-
- Invoke-WPFRunspace -ArgumentList $PackagesToInstall -DebugPreference $DebugPreference -ScriptBlock {
- param($PackagesToInstall, $DebugPreference)
- if ($PackagesToInstall.count -eq 1){
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" })
- } else {
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" })
- }
- $packagesWinget, $packagesChoco = {
- $packagesWinget = [System.Collections.ArrayList]::new()
- $packagesChoco = [System.Collections.Generic.List`1[System.Object]]::new()
- foreach ($package in $PackagesToInstall) {
- if ($package.winget -eq "na") {
- $packagesChoco.add($package)
- Write-Host "Queueing $($package.choco) for Chocolatey install"
- } else {
- $null = $packagesWinget.add($($package.winget))
- Write-Host "Queueing $($package.winget) for Winget install"
- }
- }
- return $packagesWinget, $packagesChoco
- }.Invoke($PackagesToInstall)
-
- try{
- $sync.ProcessRunning = $true
- $errorPackages = @()
- if($packagesWinget.Count -gt 0){
- Install-WinUtilWinget
- $errorPackages += Invoke-WinUtilWingetProgram -Action Install -Programs $packagesWinget
- $errorPackages| ForEach-Object {if($_.choco -ne "na") {$packagesChoco += $_}}
- }
- if($packagesChoco.Count -gt 0){
- Install-WinUtilChoco
- Install-WinUtilProgramChoco -ProgramsToInstall $packagesChoco
- }
- Write-Host "==========================================="
- Write-Host "-- Installs have finished ---"
- Write-Host "==========================================="
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" })
- }
- Catch {
- Write-Host "==========================================="
- Write-Host "Error: $_"
- Write-Host "==========================================="
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Error" -overlay "warning" })
- }
- $sync.ProcessRunning = $False
- }
-}
-function Invoke-WPFInstallUpgrade {
- <#
-
- .SYNOPSIS
- Invokes the function that upgrades all installed programs using winget
-
- #>
- if((Test-WinUtilPackageManager -winget) -eq "not-installed"){
- return
- }
-
- if(Get-WinUtilInstallerProcess -Process $global:WinGetInstall){
- $msg = "[Invoke-WPFInstallUpgrade] Install process is currently running. Please check for a powershell window labeled 'Winget Install'"
- [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
- return
- }
-
- # Set-WinUtilTaskbaritem -state "Indeterminate"
-
- Update-WinUtilProgramWinget
-
- Write-Host "==========================================="
- Write-Host "-- Updates started ---"
- Write-Host "-- You can close this window if desired ---"
- Write-Host "==========================================="
-}
-function Invoke-WPFMicrowin {
- <#
- .DESCRIPTION
- Invoke MicroWin routines...
- #>
-
-
- if($sync.ProcessRunning) {
- $msg = "GetIso process is currently running."
- [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
- return
- }
-
- # Define the constants for Windows API
-Add-Type @"
-using System;
-using System.Runtime.InteropServices;
-
-public class PowerManagement {
- [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
- public static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags);
-
- [FlagsAttribute]
- public enum EXECUTION_STATE : uint {
- ES_SYSTEM_REQUIRED = 0x00000001,
- ES_DISPLAY_REQUIRED = 0x00000002,
- ES_CONTINUOUS = 0x80000000,
- }
-}
-"@
-
- # Prevent the machine from sleeping
- [PowerManagement]::SetThreadExecutionState([PowerManagement]::EXECUTION_STATE::ES_CONTINUOUS -bor [PowerManagement]::EXECUTION_STATE::ES_SYSTEM_REQUIRED -bor [PowerManagement]::EXECUTION_STATE::ES_DISPLAY_REQUIRED)
-
- # Ask the user where to save the file
- $SaveDialog = New-Object System.Windows.Forms.SaveFileDialog
- $SaveDialog.InitialDirectory = [Environment]::GetFolderPath('Desktop')
- $SaveDialog.Filter = "ISO images (*.iso)|*.iso"
- $SaveDialog.ShowDialog() | Out-Null
-
- if ($SaveDialog.FileName -eq "") {
- Write-Host "No file name for the target image was specified"
- Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning"
- return
- }
-
- Set-WinUtilTaskbaritem -state "Indeterminate" -overlay "logo"
-
- Write-Host "Target ISO location: $($SaveDialog.FileName)"
-
- $index = $sync.MicrowinWindowsFlavors.SelectedValue.Split(":")[0].Trim()
- Write-Host "Index chosen: '$index' from $($sync.MicrowinWindowsFlavors.SelectedValue)"
-
- $keepPackages = $sync.WPFMicrowinKeepProvisionedPackages.IsChecked
- $keepProvisionedPackages = $sync.WPFMicrowinKeepAppxPackages.IsChecked
- $keepDefender = $sync.WPFMicrowinKeepDefender.IsChecked
- $keepEdge = $sync.WPFMicrowinKeepEdge.IsChecked
- $copyToUSB = $sync.WPFMicrowinCopyToUsb.IsChecked
- $injectDrivers = $sync.MicrowinInjectDrivers.IsChecked
- $importDrivers = $sync.MicrowinImportDrivers.IsChecked
-
- $mountDir = $sync.MicrowinMountDir.Text
- $scratchDir = $sync.MicrowinScratchDir.Text
-
- # Detect if the Windows image is an ESD file and convert it to WIM
- if (-not (Test-Path -Path $mountDir\sources\install.wim -PathType Leaf) -and (Test-Path -Path $mountDir\sources\install.esd -PathType Leaf))
- {
- Write-Host "Exporting Windows image to a WIM file, keeping the index we want to work on. This can take several minutes, depending on the performance of your computer..."
- Export-WindowsImage -SourceImagePath $mountDir\sources\install.esd -SourceIndex $index -DestinationImagePath $mountDir\sources\install.wim -CompressionType "Max"
- if ($?)
- {
- Remove-Item -Path $mountDir\sources\install.esd -Force
- # Since we've already exported the image index we wanted, switch to the first one
- $index = 1
- }
- else
- {
- $msg = "The export process has failed and MicroWin processing cannot continue"
- Write-Host "Failed to export the image"
- [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error)
- Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning"
- return
- }
- }
-
- $imgVersion = (Get-WindowsImage -ImagePath $mountDir\sources\install.wim -Index $index).Version
-
- # Detect image version to avoid performing MicroWin processing on Windows 8 and earlier
- if ((Test-CompatibleImage $imgVersion $([System.Version]::new(10,0,10240,0))) -eq $false)
- {
- $msg = "This image is not compatible with MicroWin processing. Make sure it isn't a Windows 8 or earlier image."
- $dlg_msg = $msg + "`n`nIf you want more information, the version of the image selected is $($imgVersion)`n`nIf an image has been incorrectly marked as incompatible, report an issue to the developers."
- Write-Host $msg
- [System.Windows.MessageBox]::Show($dlg_msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Exclamation)
- Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning"
- return
- }
-
- $mountDirExists = Test-Path $mountDir
- $scratchDirExists = Test-Path $scratchDir
- if (-not $mountDirExists -or -not $scratchDirExists)
- {
- Write-Error "Required directories '$mountDirExists' '$scratchDirExists' and do not exist."
- Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning"
- return
- }
-
- try {
-
- Write-Host "Mounting Windows image. This may take a while."
- Mount-WindowsImage -ImagePath "$mountDir\sources\install.wim" -Index $index -Path "$scratchDir"
- if ($?)
- {
- Write-Host "Mounting complete! Performing removal of applications..."
- }
- else
- {
- Write-Host "Could not mount image. Exiting..."
- Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning"
- return
- }
-
- if ($importDrivers)
- {
- Write-Host "Exporting drivers from active installation..."
- if (Test-Path "$env:TEMP\DRV_EXPORT")
- {
- Remove-Item "$env:TEMP\DRV_EXPORT" -Recurse -Force
- }
- if (($injectDrivers -and (Test-Path $sync.MicrowinDriverLocation.Text)))
- {
- Write-Host "Using specified driver source..."
- dism /english /online /export-driver /destination="$($sync.MicrowinDriverLocation.Text)" | Out-Host
- if ($?)
- {
- # Don't add exported drivers yet, that is run later
- Write-Host "Drivers have been exported successfully."
- }
- else
- {
- Write-Host "Failed to export drivers."
- }
- }
- else
- {
- New-Item -Path "$env:TEMP\DRV_EXPORT" -ItemType Directory -Force
- dism /english /online /export-driver /destination="$env:TEMP\DRV_EXPORT" | Out-Host
- if ($?)
- {
- Write-Host "Adding exported drivers..."
- dism /english /image="$scratchDir" /add-driver /driver="$env:TEMP\DRV_EXPORT" /recurse | Out-Host
- }
- else
- {
- Write-Host "Failed to export drivers. Continuing without importing them..."
- }
- if (Test-Path "$env:TEMP\DRV_EXPORT")
- {
- Remove-Item "$env:TEMP\DRV_EXPORT" -Recurse -Force
- }
- }
- }
-
- if ($injectDrivers)
- {
- $driverPath = $sync.MicrowinDriverLocation.Text
- if (Test-Path $driverPath)
- {
- Write-Host "Adding Windows Drivers image($scratchDir) drivers($driverPath) "
- dism /English /image:$scratchDir /add-driver /driver:$driverPath /recurse | Out-Host
- }
- else
- {
- Write-Host "Path to drivers is invalid continuing without driver injection"
- }
- }
-
- Write-Host "Remove Features from the image"
- Remove-Features -keepDefender:$keepDefender
- Write-Host "Removing features complete!"
-
- if (!$keepPackages)
- {
- Write-Host "Removing OS packages"
- Remove-Packages
- }
- if (!$keepProvisionedPackages)
- {
- Write-Host "Removing Appx Bloat"
- Remove-ProvisionedPackages -keepSecurity:$keepDefender
- }
-
- # special code, for some reason when you try to delete some inbox apps
- # we have to get and delete log files directory.
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\LogFiles\WMI\RtBackup" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\WebThreatDefSvc" -Directory
-
- # Defender is hidden in 2 places we removed a feature above now need to remove it from the disk
- if (!$keepDefender)
- {
- Write-Host "Removing Defender"
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Windows Defender" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Windows Defender"
- }
- if (!$keepEdge)
- {
- Write-Host "Removing Edge"
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Microsoft" -mask "*edge*" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Microsoft" -mask "*edge*" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*edge*" -Directory
- }
-
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\DiagTrack" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\InboxApps" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\SecurityHealthSystray.exe"
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\LocationNotificationWindows.exe"
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Windows Photo Viewer" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Windows Photo Viewer" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Windows Media Player" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Windows Media Player" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Windows Mail" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Windows Mail" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Internet Explorer" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Internet Explorer" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\GameBarPresenceWriter"
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\OneDriveSetup.exe"
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\OneDrive.ico"
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*Windows.Search*" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*narratorquickstart*" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*Xbox*" -Directory
- Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*ParentalControls*" -Directory
- Write-Host "Removal complete!"
-
- Write-Host "Create unattend.xml"
- New-Unattend
- Write-Host "Done Create unattend.xml"
- Write-Host "Copy unattend.xml file into the ISO"
- New-Item -ItemType Directory -Force -Path "$($scratchDir)\Windows\Panther"
- Copy-Item "$env:temp\unattend.xml" "$($scratchDir)\Windows\Panther\unattend.xml" -force
- New-Item -ItemType Directory -Force -Path "$($scratchDir)\Windows\System32\Sysprep"
- Copy-Item "$env:temp\unattend.xml" "$($scratchDir)\Windows\System32\Sysprep\unattend.xml" -force
- Copy-Item "$env:temp\unattend.xml" "$($scratchDir)\unattend.xml" -force
- Write-Host "Done Copy unattend.xml"
-
- Write-Host "Create FirstRun"
- New-FirstRun
- Write-Host "Done create FirstRun"
- Write-Host "Copy FirstRun.ps1 into the ISO"
- Copy-Item "$env:temp\FirstStartup.ps1" "$($scratchDir)\Windows\FirstStartup.ps1" -force
- Write-Host "Done copy FirstRun.ps1"
-
- Write-Host "Copy link to winutil.ps1 into the ISO"
- $desktopDir = "$($scratchDir)\Windows\Users\Default\Desktop"
- New-Item -ItemType Directory -Force -Path "$desktopDir"
- dism /English /image:$($scratchDir) /set-profilepath:"$($scratchDir)\Windows\Users\Default"
-
- # $command = "powershell.exe -NoProfile -ExecutionPolicy Bypass -Command 'irm https://christitus.com/win | iex'"
- # $shortcutPath = "$desktopDir\WinUtil.lnk"
- # $shell = New-Object -ComObject WScript.Shell
- # $shortcut = $shell.CreateShortcut($shortcutPath)
-
- # if (Test-Path -Path "$env:TEMP\cttlogo.png")
- # {
- # $pngPath = "$env:TEMP\cttlogo.png"
- # $icoPath = "$env:TEMP\cttlogo.ico"
- # ConvertTo-Icon -bitmapPath $pngPath -iconPath $icoPath
- # Write-Host "ICO file created at: $icoPath"
- # Copy-Item "$env:TEMP\cttlogo.png" "$($scratchDir)\Windows\cttlogo.png" -force
- # Copy-Item "$env:TEMP\cttlogo.ico" "$($scratchDir)\Windows\cttlogo.ico" -force
- # $shortcut.IconLocation = "c:\Windows\cttlogo.ico"
- # }
-
- # $shortcut.TargetPath = "powershell.exe"
- # $shortcut.Arguments = "-NoProfile -ExecutionPolicy Bypass -Command `"$command`""
- # $shortcut.Save()
- # Write-Host "Shortcut to winutil created at: $shortcutPath"
- # *************************** Automation black ***************************
-
- Write-Host "Copy checkinstall.cmd into the ISO"
- New-CheckInstall
- Copy-Item "$env:temp\checkinstall.cmd" "$($scratchDir)\Windows\checkinstall.cmd" -force
- Write-Host "Done copy checkinstall.cmd"
-
- Write-Host "Creating a directory that allows to bypass Wifi setup"
- New-Item -ItemType Directory -Force -Path "$($scratchDir)\Windows\System32\OOBE\BYPASSNRO"
-
- Write-Host "Loading registry"
- reg load HKLM\zCOMPONENTS "$($scratchDir)\Windows\System32\config\COMPONENTS"
- reg load HKLM\zDEFAULT "$($scratchDir)\Windows\System32\config\default"
- reg load HKLM\zNTUSER "$($scratchDir)\Users\Default\ntuser.dat"
- reg load HKLM\zSOFTWARE "$($scratchDir)\Windows\System32\config\SOFTWARE"
- reg load HKLM\zSYSTEM "$($scratchDir)\Windows\System32\config\SYSTEM"
-
- Write-Host "Disabling Teams"
- reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Communications" /v "ConfigureChatAutoInstall" /t REG_DWORD /d 0 /f >$null 2>&1
- reg add "HKLM\zSOFTWARE\Policies\Microsoft\Windows\Windows Chat" /v ChatIcon /t REG_DWORD /d 2 /f >$null 2>&1
- reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f >$null 2>&1
- reg query "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Communications" /v "ConfigureChatAutoInstall" >$null 2>&1
- # Write-Host Error code $LASTEXITCODE
- Write-Host "Done disabling Teams"
-
- Write-Host "Bypassing system requirements (system image)"
- reg add "HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f
- reg add "HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f
- reg add "HKLM\zNTUSER\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f
- reg add "HKLM\zNTUSER\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f
- reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassCPUCheck" /t REG_DWORD /d 1 /f
- reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassRAMCheck" /t REG_DWORD /d 1 /f
- reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassSecureBootCheck" /t REG_DWORD /d 1 /f
- reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassStorageCheck" /t REG_DWORD /d 1 /f
- reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassTPMCheck" /t REG_DWORD /d 1 /f
- reg add "HKLM\zSYSTEM\Setup\MoSetup" /v "AllowUpgradesWithUnsupportedTPMOrCPU" /t REG_DWORD /d 1 /f
-
- if (!$keepEdge)
- {
- Write-Host "Removing Edge icon from taskbar"
- reg delete "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Taskband" /v "Favorites" /f >$null 2>&1
- reg delete "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Taskband" /v "FavoritesChanges" /f >$null 2>&1
- reg delete "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Taskband" /v "Pinned" /f >$null 2>&1
- reg delete "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Taskband" /v "LayoutCycle" /f >$null 2>&1
- Write-Host "Edge icon removed from taskbar"
- if (Test-Path "HKLM:\zSOFTWARE\WOW6432Node")
- {
- # Remove leftovers of 64-bit installations
- # ---
- # Remove registry values first...
- reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge" /va /f > $null 2>&1
- reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge Update" /va /f > $null 2>&1
- reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft EdgeWebView" /va /f > $null 2>&1
- # ...then the registry keys
- reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge" /f > $null 2>&1
- reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge Update" /f > $null 2>&1
- reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft EdgeWebView" /f > $null 2>&1
- }
- }
-
- reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
- Write-Host "Setting all services to start manually"
- reg add "HKLM\zSOFTWARE\CurrentControlSet\Services" /v Start /t REG_DWORD /d 3 /f
- # Write-Host $LASTEXITCODE
-
- Write-Host "Enabling Local Accounts on OOBE"
- reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v "BypassNRO" /t REG_DWORD /d "1" /f
-
- Write-Host "Disabling Sponsored Apps"
- reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "OemPreInstalledAppsEnabled" /t REG_DWORD /d 0 /f
- reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEnabled" /t REG_DWORD /d 0 /f
- reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SilentInstalledAppsEnabled" /t REG_DWORD /d 0 /f
- reg add "HKLM\zSOFTWARE\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 1 /f
- reg add "HKLM\zSOFTWARE\Microsoft\PolicyManager\current\device\Start" /v "ConfigureStartPins" /t REG_SZ /d '{\"pinnedList\": [{}]}' /f
- Write-Host "Done removing Sponsored Apps"
-
- Write-Host "Disabling Reserved Storage"
- reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\ReserveManager" /v "ShippedWithReserves" /t REG_DWORD /d 0 /f
-
- Write-Host "Changing theme to dark. This only works on Activated Windows"
- reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize" /v "AppsUseLightTheme" /t REG_DWORD /d 0 /f
- reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize" /v "SystemUsesLightTheme" /t REG_DWORD /d 0 /f
-
- } catch {
- Write-Error "An unexpected error occurred: $_"
- } finally {
- Write-Host "Unmounting Registry..."
- reg unload HKLM\zCOMPONENTS
- reg unload HKLM\zDEFAULT
- reg unload HKLM\zNTUSER
- reg unload HKLM\zSOFTWARE
- reg unload HKLM\zSYSTEM
-
- Write-Host "Cleaning up image..."
- dism /English /image:$scratchDir /Cleanup-Image /StartComponentCleanup /ResetBase
- Write-Host "Cleanup complete."
-
- Write-Host "Unmounting image..."
- Dismount-WindowsImage -Path $scratchDir -Save
- }
-
- try {
-
- Write-Host "Exporting image into $mountDir\sources\install2.wim"
- Export-WindowsImage -SourceImagePath "$mountDir\sources\install.wim" -SourceIndex $index -DestinationImagePath "$mountDir\sources\install2.wim" -CompressionType "Max"
- Write-Host "Remove old '$mountDir\sources\install.wim' and rename $mountDir\sources\install2.wim"
- Remove-Item "$mountDir\sources\install.wim"
- Rename-Item "$mountDir\sources\install2.wim" "$mountDir\sources\install.wim"
-
- if (-not (Test-Path -Path "$mountDir\sources\install.wim"))
- {
- Write-Error "Something went wrong and '$mountDir\sources\install.wim' doesn't exist. Please report this bug to the devs"
- Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning"
- return
- }
- Write-Host "Windows image completed. Continuing with boot.wim."
-
- # Next step boot image
- Write-Host "Mounting boot image $mountDir\sources\boot.wim into $scratchDir"
- Mount-WindowsImage -ImagePath "$mountDir\sources\boot.wim" -Index 2 -Path "$scratchDir"
-
- if ($injectDrivers)
- {
- $driverPath = $sync.MicrowinDriverLocation.Text
- if (Test-Path $driverPath)
- {
- Write-Host "Adding Windows Drivers image($scratchDir) drivers($driverPath) "
- dism /English /image:$scratchDir /add-driver /driver:$driverPath /recurse | Out-Host
- }
- else
- {
- Write-Host "Path to drivers is invalid continuing without driver injection"
- }
- }
-
- Write-Host "Loading registry..."
- reg load HKLM\zCOMPONENTS "$($scratchDir)\Windows\System32\config\COMPONENTS" >$null
- reg load HKLM\zDEFAULT "$($scratchDir)\Windows\System32\config\default" >$null
- reg load HKLM\zNTUSER "$($scratchDir)\Users\Default\ntuser.dat" >$null
- reg load HKLM\zSOFTWARE "$($scratchDir)\Windows\System32\config\SOFTWARE" >$null
- reg load HKLM\zSYSTEM "$($scratchDir)\Windows\System32\config\SYSTEM" >$null
- Write-Host "Bypassing system requirements on the setup image"
- reg add "HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f
- reg add "HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f
- reg add "HKLM\zNTUSER\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f
- reg add "HKLM\zNTUSER\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f
- reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassCPUCheck" /t REG_DWORD /d 1 /f
- reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassRAMCheck" /t REG_DWORD /d 1 /f
- reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassSecureBootCheck" /t REG_DWORD /d 1 /f
- reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassStorageCheck" /t REG_DWORD /d 1 /f
- reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassTPMCheck" /t REG_DWORD /d 1 /f
- reg add "HKLM\zSYSTEM\Setup\MoSetup" /v "AllowUpgradesWithUnsupportedTPMOrCPU" /t REG_DWORD /d 1 /f
- # Fix Computer Restarted Unexpectedly Error on New Bare Metal Install
- reg add "HKLM\zSYSTEM\Setup\Status\ChildCompletion" /v "setup.exe" /t REG_DWORD /d 3 /f
- } catch {
- Write-Error "An unexpected error occurred: $_"
- } finally {
- Write-Host "Unmounting Registry..."
- reg unload HKLM\zCOMPONENTS
- reg unload HKLM\zDEFAULT
- reg unload HKLM\zNTUSER
- reg unload HKLM\zSOFTWARE
- reg unload HKLM\zSYSTEM
-
- Write-Host "Unmounting image..."
- Dismount-WindowsImage -Path $scratchDir -Save
-
- Write-Host "Creating ISO image"
-
- # if we downloaded oscdimg from github it will be in the temp directory so use it
- # if it is not in temp it is part of ADK and is in global PATH so just set it to oscdimg.exe
- $oscdimgPath = Join-Path $env:TEMP 'oscdimg.exe'
- $oscdImgFound = Test-Path $oscdimgPath -PathType Leaf
- if (!$oscdImgFound)
- {
- $oscdimgPath = "oscdimg.exe"
- }
-
- Write-Host "[INFO] Using oscdimg.exe from: $oscdimgPath"
-
- $oscdimgProc = Start-Process -FilePath "$oscdimgPath" -ArgumentList "-m -o -u2 -udfver102 -bootdata:2#p0,e,b$mountDir\boot\etfsboot.com#pEF,e,b$mountDir\efi\microsoft\boot\efisys.bin `"$mountDir`" `"$($SaveDialog.FileName)`"" -Wait -PassThru -NoNewWindow
-
- $LASTEXITCODE = $oscdimgProc.ExitCode
-
- Write-Host "OSCDIMG Error Level : $($oscdimgProc.ExitCode)"
-
- if ($copyToUSB)
- {
- Write-Host "Copying target ISO to the USB drive"
- Copy-ToUSB("$($SaveDialog.FileName)")
- if ($?) { Write-Host "Done Copying target ISO to USB drive!" } else { Write-Host "ISO copy failed." }
- }
-
- Write-Host " _____ "
- Write-Host "(____ \ "
- Write-Host " _ \ \ ___ ____ ____ "
- Write-Host "| | | / _ \| _ \ / _ ) "
- Write-Host "| |__/ / |_| | | | ( (/ / "
- Write-Host "|_____/ \___/|_| |_|\____) "
-
- # Check if the ISO was successfully created - CTT edit
- if ($LASTEXITCODE -eq 0) {
- Write-Host "`n`nPerforming Cleanup..."
- Remove-Item -Recurse -Force "$($scratchDir)"
- Remove-Item -Recurse -Force "$($mountDir)"
- $msg = "Done. ISO image is located here: $($SaveDialog.FileName)"
- Write-Host $msg
- Set-WinUtilTaskbaritem -state "None" -overlay "checkmark"
- [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Information)
- } else {
- Write-Host "ISO creation failed. The "$($mountDir)" directory has not been removed."
- try
- {
- # This creates a new Win32 exception from which we can extract a message in the system language.
- # Now, this will NOT throw an exception
- $exitCode = New-Object System.ComponentModel.Win32Exception($LASTEXITCODE)
- Write-Host "Reason: $($exitCode.Message)"
- }
- catch
- {
- # Could not get error description from Windows APIs
- }
- }
-
- $sync.MicrowinOptionsPanel.Visibility = 'Collapsed'
-
- #$sync.MicrowinFinalIsoLocation.Text = "$env:temp\microwin.iso"
- $sync.MicrowinFinalIsoLocation.Text = "$($SaveDialog.FileName)"
- # Allow the machine to sleep again (optional)
- [PowerManagement]::SetThreadExecutionState(0)
- $sync.ProcessRunning = $false
- }
-}
-function Invoke-WPFOOSU {
- <#
- .SYNOPSIS
- Downloads and runs OO Shutup 10
- #>
- try {
- $OOSU_filepath = "$ENV:temp\OOSU10.exe"
- $Initial_ProgressPreference = $ProgressPreference
- $ProgressPreference = "SilentlyContinue" # Disables the Progress Bar to drasticly speed up Invoke-WebRequest
- Invoke-WebRequest -Uri "https://dl5.oo-software.com/files/ooshutup10/OOSU10.exe" -OutFile $OOSU_filepath
- Write-Host "Starting OO Shutup 10 ..."
- Start-Process $OOSU_filepath
- }
- catch {
- Write-Host "Error Downloading and Running OO Shutup 10" -ForegroundColor Red
- }
- finally {
- $ProgressPreference = $Initial_ProgressPreference
- }
-}
-function Invoke-WPFPanelAutologin {
- <#
-
- .SYNOPSIS
- Enables autologin using Sysinternals Autologon.exe
-
- #>
-
- # Official Microsoft recommendation: https://learn.microsoft.com/en-us/sysinternals/downloads/autologon
- Invoke-WebRequest -Uri "https://live.sysinternals.com/Autologon.exe" -OutFile "$env:temp\autologin.exe"
- cmd /c "$env:temp\autologin.exe" /accepteula
-}
-function Invoke-WPFPanelDISM {
- <#
-
- .SYNOPSIS
- Checks for system corruption using Chkdsk, SFC, and DISM
-
- .DESCRIPTION
- 1. Chkdsk - Fixes disk and filesystem corruption
- 2. SFC Run 1 - Fixes system file corruption, and fixes DISM if it was corrupted
- 3. DISM - Fixes system image corruption, and fixes SFC's system image if it was corrupted
- 4. SFC Run 2 - Fixes system file corruption, this time with an almost guaranteed uncorrupted system image
-
- .NOTES
- Command Arguments:
- 1. Chkdsk
- /Scan - Runs an online scan on the system drive, attempts to fix any corruption, and queues other corruption for fixing on reboot
- 2. SFC
- /ScanNow - Performs a scan of the system files and fixes any corruption
- 3. DISM - Fixes system image corruption, and fixes SFC's system image if it was corrupted
- /Online - Fixes the currently running system image
- /Cleanup-Image - Performs cleanup operations on the image, could remove some unneeded temporary files
- /Restorehealth - Performs a scan of the image and fixes any corruption
-
- #>
- Start-Process PowerShell -ArgumentList "Write-Host '(1/4) Chkdsk' -ForegroundColor Green; Chkdsk /scan;
- Write-Host '`n(2/4) SFC - 1st scan' -ForegroundColor Green; sfc /scannow;
- Write-Host '`n(3/4) DISM' -ForegroundColor Green; DISM /Online /Cleanup-Image /Restorehealth;
- Write-Host '`n(4/4) SFC - 2nd scan' -ForegroundColor Green; sfc /scannow;
- Read-Host '`nPress Enter to Continue'" -verb runas
-}
-function Invoke-WPFPresets {
- <#
-
- .SYNOPSIS
- Sets the options in the tweaks panel to the given preset
-
- .PARAMETER preset
- The preset to set the options to
-
- .PARAMETER imported
- If the preset is imported from a file, defaults to false
-
- .PARAMETER checkbox
- The checkbox to set the options to, defaults to 'WPFTweaks'
-
- #>
-
- param(
- $preset,
- [bool]$imported = $false
- )
-
- if($imported -eq $true){
- $CheckBoxesToCheck = $preset
- }
- Else{
- $CheckBoxesToCheck = $sync.configs.preset.$preset
- }
-
- $CheckBoxes = $sync.GetEnumerator() | Where-Object { $_.Value -is [System.Windows.Controls.CheckBox] -and $_.Name -notlike "WPFToggle*" }
- Write-Debug "Getting checkboxes to set $($CheckBoxes.Count)"
-
- $CheckBoxesToCheck | ForEach-Object {
- if ($_ -ne $null) {
- Write-Debug $_
- }
- }
-
- foreach ($CheckBox in $CheckBoxes) {
- $checkboxName = $CheckBox.Key
-
- if (-not $CheckBoxesToCheck)
- {
- $sync.$checkboxName.IsChecked = $false
- continue
- }
-
- # Check if the checkbox name exists in the flattened JSON hashtable
- if ($CheckBoxesToCheck.Contains($checkboxName)) {
- # If it exists, set IsChecked to true
- $sync.$checkboxName.IsChecked = $true
- Write-Debug "$checkboxName is checked"
- } else {
- # If it doesn't exist, set IsChecked to false
- $sync.$checkboxName.IsChecked = $false
- Write-Debug "$checkboxName is not checked"
- }
- }
-}
-function Invoke-WPFRunAdobeCCCleanerTool {
- <#
- .SYNOPSIS
- It removes or fixes problem files and resolves permission issues in registry keys.
- .DESCRIPTION
- The Creative Cloud Cleaner tool is a utility for experienced users to clean up corrupted installations.
- #>
-
- [string]$url="https://swupmf.adobe.com/webfeed/CleanerTool/win/AdobeCreativeCloudCleanerTool.exe"
-
- Write-Host "The Adobe Creative Cloud Cleaner tool is hosted at"
- Write-Host "$url"
-
- try {
- # Don't show the progress because it will slow down the download speed
- $ProgressPreference='SilentlyContinue'
-
- Invoke-WebRequest -Uri $url -OutFile "$env:TEMP\AdobeCreativeCloudCleanerTool.exe" -UseBasicParsing -ErrorAction SilentlyContinue -Verbose
-
- # Revert back the ProgressPreference variable to the default value since we got the file desired
- $ProgressPreference='Continue'
-
- Start-Process -FilePath "$env:TEMP\AdobeCreativeCloudCleanerTool.exe" -Wait -ErrorAction SilentlyContinue -Verbose
- } catch {
- Write-Error $_.Exception.Message
- } finally {
- if (Test-Path -Path "$env:TEMP\AdobeCreativeCloudCleanerTool.exe") {
- Write-Host "Cleaning up..."
- Remove-Item -Path "$env:TEMP\AdobeCreativeCloudCleanerTool.exe" -Verbose
- }
- }
-}
-function Invoke-WPFRunspace {
-
- <#
-
- .SYNOPSIS
- Creates and invokes a runspace using the given scriptblock and argumentlist
-
- .PARAMETER ScriptBlock
- The scriptblock to invoke in the runspace
-
- .PARAMETER ArgumentList
- A list of arguments to pass to the runspace
-
- .EXAMPLE
- Invoke-WPFRunspace `
- -ScriptBlock $sync.ScriptsInstallPrograms `
- -ArgumentList "Installadvancedip,Installbitwarden" `
-
- #>
-
- [CmdletBinding()]
- Param (
- $ScriptBlock,
- $ArgumentList,
- $DebugPreference
- )
-
- # Create a PowerShell instance
- $script:powershell = [powershell]::Create()
-
- # Add Scriptblock and Arguments to runspace
- $script:powershell.AddScript($ScriptBlock)
- $script:powershell.AddArgument($ArgumentList)
- $script:powershell.AddArgument($DebugPreference) # Pass DebugPreference to the script block
- $script:powershell.RunspacePool = $sync.runspace
-
- # Execute the RunspacePool
- $script:handle = $script:powershell.BeginInvoke()
-
- # Clean up the RunspacePool threads when they are complete, and invoke the garbage collector to clean up the memory
- if ($script:handle.IsCompleted)
- {
- $script:powershell.EndInvoke($script:handle)
- $script:powershell.Dispose()
- $sync.runspace.Dispose()
- $sync.runspace.Close()
- [System.GC]::Collect()
- }
-}
-
-function Invoke-WPFShortcut {
- <#
-
- .SYNOPSIS
- Creates a shortcut and prompts for a save location
-
- .PARAMETER ShortcutToAdd
- The name of the shortcut to add
-
- .PARAMETER RunAsAdmin
- A boolean value to make 'Run as administrator' property on (true) or off (false), defaults to off
-
- #>
- param(
- $ShortcutToAdd,
- [bool]$RunAsAdmin = $false
- )
-
- # Preper the Shortcut Fields and add an a Custom Icon if it's available, else don't add a Custom Icon.
-
- Switch ($ShortcutToAdd) {
- "WinUtil" {
- # Use Powershell 7 if installed and fallback to PS5 if not
- if (Get-Command "pwsh" -ErrorAction SilentlyContinue){
- $shell = "pwsh.exe"
- }
- else{
- $shell = "powershell.exe"
- }
-
- $shellArgs = "-ExecutionPolicy Bypass -Command `"Start-Process $shell -verb runas -ArgumentList `'-Command `"irm https://github.com/ChrisTitusTech/winutil/releases/latest/download/winutil.ps1 | iex`"`'"
-
- $DestinationName = "WinUtil.lnk"
-
- }
- }
-
- # Show a File Dialog Browser, to let the User choose the Name and Location of where to save the Shortcut
- $FileBrowser = New-Object System.Windows.Forms.SaveFileDialog
- $FileBrowser.InitialDirectory = [Environment]::GetFolderPath('Desktop')
- $FileBrowser.Filter = "Shortcut Files (*.lnk)|*.lnk"
- $FileBrowser.FileName = $DestinationName
-
- # Do an Early Return if the Save Operation was canceled by User's Input.
- $FileBrowserResult = $FileBrowser.ShowDialog()
- $DialogResultEnum = New-Object System.Windows.Forms.DialogResult
- if (-not ($FileBrowserResult -eq $DialogResultEnum::OK)) {
- return
- }
-
- # Prepare the Shortcut paramter
- $WshShell = New-Object -comObject WScript.Shell
- $Shortcut = $WshShell.CreateShortcut($FileBrowser.FileName)
- $Shortcut.TargetPath = $SourceExe
- $Shortcut.Arguments = $ArgumentsToSourceExe
- if (Test-Path -Path $winutildir["logo.ico"]) {
- $shortcut.IconLocation = $winutildir["logo.ico"]
- }
-
- # Save the Shortcut to disk
- $Shortcut.Save()
-
- if ($RunAsAdmin -eq $true) {
- $bytes = [System.IO.File]::ReadAllBytes($FileBrowser.FileName)
- # Set byte value at position 0x15 in hex, or 21 in decimal, from the value 0x00 to 0x20 in hex
- $bytes[0x15] = $bytes[0x15] -bor 0x20
- [System.IO.File]::WriteAllBytes($FileBrowser.FileName, $bytes)
- }
-
- Write-Host "Shortcut for $ShortcutToAdd has been saved to $($FileBrowser.FileName) with 'Run as administrator' set to $RunAsAdmin"
-}
-function Invoke-WPFTab {
-
- <#
-
- .SYNOPSIS
- Sets the selected tab to the tab that was clicked
-
- .PARAMETER ClickedTab
- The name of the tab that was clicked
-
- #>
-
- Param ($ClickedTab)
-
- $tabNav = Get-WinUtilVariables | Where-Object {$psitem -like "WPFTabNav"}
- $tabNumber = [int]($ClickedTab -replace "WPFTab","" -replace "BT","") - 1
-
- $filter = Get-WinUtilVariables -Type ToggleButton | Where-Object {$psitem -like "WPFTab?BT"}
- $sync.GetEnumerator() | Where-Object {$psitem.Key -in $filter} | ForEach-Object {
- if ($ClickedTab -ne $PSItem.name) {
- $sync[$PSItem.Name].IsChecked = $false
- # $tabNumber = [int]($PSItem.Name -replace "WPFTab","" -replace "BT","") - 1
- # $sync.$tabNav.Items[$tabNumber].IsSelected = $false
- }
- else {
- $sync["$ClickedTab"].IsChecked = $true
- $tabNumber = [int]($ClickedTab-replace "WPFTab","" -replace "BT","") - 1
- $sync.$tabNav.Items[$tabNumber].IsSelected = $true
- }
- }
-}
-function Invoke-WPFToggle {
-
- <#
-
- .SYNOPSIS
- Invokes the scriptblock for the given toggle
-
- .PARAMETER Button
- The name of the toggle to invoke
-
- #>
-
- Param ([string]$Button)
-
- # Use this to get the name of the button
- #[System.Windows.MessageBox]::Show("$Button","Chris Titus Tech's Windows Utility","OK","Info")
-
- Switch -Wildcard ($Button){
-
- "WPFToggleDarkMode" {Invoke-WinUtilDarkMode -DarkMoveEnabled $(Get-WinUtilToggleStatus WPFToggleDarkMode)}
- "WPFToggleBingSearch" {Invoke-WinUtilBingSearch $(Get-WinUtilToggleStatus WPFToggleBingSearch)}
- "WPFToggleNumLock" {Invoke-WinUtilNumLock $(Get-WinUtilToggleStatus WPFToggleNumLock)}
- "WPFToggleVerboseLogon" {Invoke-WinUtilVerboseLogon $(Get-WinUtilToggleStatus WPFToggleVerboseLogon)}
- "WPFToggleShowExt" {Invoke-WinUtilShowExt $(Get-WinUtilToggleStatus WPFToggleShowExt)}
- "WPFToggleSnapWindow" {Invoke-WinUtilSnapWindow $(Get-WinUtilToggleStatus WPFToggleSnapWindow)}
- "WPFToggleSnapFlyout" {Invoke-WinUtilSnapFlyout $(Get-WinUtilToggleStatus WPFToggleSnapFlyout)}
- "WPFToggleSnapSuggestion" {Invoke-WinUtilSnapSuggestion $(Get-WinUtilToggleStatus WPFToggleSnapSuggestion)}
- "WPFToggleMouseAcceleration" {Invoke-WinUtilMouseAcceleration $(Get-WinUtilToggleStatus WPFToggleMouseAcceleration)}
- "WPFToggleStickyKeys" {Invoke-WinUtilStickyKeys $(Get-WinUtilToggleStatus WPFToggleStickyKeys)}
- "WPFToggleTaskbarWidgets" {Invoke-WinUtilTaskbarWidgets $(Get-WinUtilToggleStatus WPFToggleTaskbarWidgets)}
- "WPFToggleTaskbarSearch" {Invoke-WinUtilTaskbarSearch $(Get-WinUtilToggleStatus WPFToggleTaskbarSearch)}
- "WPFToggleTaskView" {Invoke-WinUtilTaskView $(Get-WinUtilToggleStatus WPFToggleTaskView)}
- "WPFToggleHiddenFiles" {Invoke-WinUtilHiddenFiles $(Get-WinUtilToggleStatus WPFToggleHiddenFiles)}
- "WPFToggleTaskbarAlignment" {Invoke-WinUtilTaskbarAlignment $(Get-WinUtilToggleStatus WPFToggleTaskbarAlignment)}
- "WPFToggleDetailedBSoD" {Invoke-WinUtilDetailedBSoD $(Get-WinUtilToggleStatus WPFToggleDetailedBSoD)}
- }
-}
-function Invoke-WPFTweakPS7{
- <#
- .SYNOPSIS
- This will edit the config file of the Windows Terminal Replacing the Powershell 5 to Powershell 7 and install Powershell 7 if necessary
- .PARAMETER action
- PS7: Configures Powershell 7 to be the default Terminal
- PS5: Configures Powershell 5 to be the default Terminal
- #>
- param (
- [ValidateSet("PS7", "PS5")]
- [string]$action
- )
-
- switch ($action) {
- "PS7"{
- if (Test-Path -Path "$env:ProgramFiles\PowerShell\7") {
- Write-Host "Powershell 7 is already installed."
- } else {
- Write-Host "Installing Powershell 7..."
- Invoke-WinUtilWingetProgram -Action Install -Programs @("Microsoft.PowerShell")
- }
- $targetTerminalName = "PowerShell"
- }
- "PS5"{
- $targetTerminalName = "Windows PowerShell"
- }
- }
- # Check if the Windows Terminal is installed and return if not (Prerequisite for the following code)
- if (-not (Get-Command "wt" -ErrorAction SilentlyContinue)){
- Write-Host "Windows Terminal not installed. Skipping Terminal preference"
- return
- }
- # Check if the Windows Terminal settings.json file exists and return if not (Prereqisite for the following code)
- $settingsPath = "$env:LOCALAPPDATA\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json"
- if (-not (Test-Path -Path $settingsPath)){
- Write-Host "Windows Terminal Settings file not found at $settingsPath"
- return
- }
-
- Write-Host "Settings file found."
- $settingsContent = Get-Content -Path $settingsPath | ConvertFrom-Json
- $ps7Profile = $settingsContent.profiles.list | Where-Object { $_.name -eq $targetTerminalName }
- if ($ps7Profile) {
- $settingsContent.defaultProfile = $ps7Profile.guid
- $updatedSettings = $settingsContent | ConvertTo-Json -Depth 100
- Set-Content -Path $settingsPath -Value $updatedSettings
- Write-Host "Default profile updated to " -NoNewline
- Write-Host "$targetTerminalName " -ForegroundColor White -NoNewline
- Write-Host "using the name attribute."
- } else {
- Write-Host "No PowerShell 7 profile found in Windows Terminal settings using the name attribute."
- }
-}
-function Invoke-WPFtweaksbutton {
- <#
-
- .SYNOPSIS
- Invokes the functions associated with each group of checkboxes
-
- #>
-
- if($sync.ProcessRunning){
- $msg = "[Invoke-WPFtweaksbutton] Install process is currently running."
- [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
- return
- }
-
- $Tweaks = (Get-WinUtilCheckBoxes)["WPFTweaks"]
-
- Set-WinUtilDNS -DNSProvider $sync["WPFchangedns"].text
-
- if ($tweaks.count -eq 0 -and $sync["WPFchangedns"].text -eq "Default"){
- $msg = "Please check the tweaks you wish to perform."
- [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
- return
- }
-
- Write-Debug "Number of tweaks to process: $($Tweaks.Count)"
-
- Invoke-WPFRunspace -ArgumentList $Tweaks -DebugPreference $DebugPreference -ScriptBlock {
- param($Tweaks, $DebugPreference)
- Write-Debug "Inside Number of tweaks to process: $($Tweaks.Count)"
-
- $sync.ProcessRunning = $true
-
- if ($Tweaks.count -eq 1){
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" })
- } else {
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" })
- }
- # Execute other selected tweaks
-
- for ($i = 0; $i -lt $Tweaks.Count; $i++){
- Set-WinUtilProgressBar -Label "Applying $($tweaks[$i])" -Percent ($i / $Tweaks.Count * 100)
- Invoke-WinUtilTweaks $tweaks[$i]
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -value ($i/$Tweaks.Count) })
- }
- Set-WinUtilProgressBar -Label "Tweaks finished" -Percent 100
- $sync.ProcessRunning = $false
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" })
- Write-Host "================================="
- Write-Host "-- Tweaks are Finished ---"
- Write-Host "================================="
-
- # $ButtonType = [System.Windows.MessageBoxButton]::OK
- # $MessageboxTitle = "Tweaks are Finished "
- # $Messageboxbody = ("Done")
- # $MessageIcon = [System.Windows.MessageBoxImage]::Information
- # [System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon)
- }
-}
-Function Invoke-WPFUltimatePerformance {
- <#
-
- .SYNOPSIS
- Creates or removes the Ultimate Performance power scheme
-
- .PARAMETER State
- Indicates whether to enable or disable the Ultimate Performance power scheme
-
- #>
- param($State)
- Try{
- # Check if Ultimate Performance plan is installed
- $ultimatePlan = powercfg -list | Select-String -Pattern "Ultimate Performance"
- if($state -eq "Enable"){
- if ($ultimatePlan) {
- Write-Host "Ultimate Performance plan is already installed."
- } else {
- Write-Host "Installing Ultimate Performance plan..."
- powercfg -duplicatescheme e9a42b02-d5df-448d-aa00-03f14749eb61
- Write-Host "> Ultimate Performance plan installed."
- }
-
- # Set the Ultimate Performance plan as active
- $ultimatePlanGUID = (powercfg -list | Select-String -Pattern "Ultimate Performance").Line.Split()[3]
- powercfg -setactive $ultimatePlanGUID
-
- Write-Host "Ultimate Performance plan is now active."
-
-
- }
- elseif($state -eq "Disable"){
- if ($ultimatePlan) {
- # Extract the GUID of the Ultimate Performance plan
- $ultimatePlanGUID = $ultimatePlan.Line.Split()[3]
-
- # Set a different power plan as active before deleting the Ultimate Performance plan
- $balancedPlanGUID = (powercfg -list | Select-String -Pattern "Balanced").Line.Split()[3]
- powercfg -setactive $balancedPlanGUID
-
- # Delete the Ultimate Performance plan
- powercfg -delete $ultimatePlanGUID
-
- Write-Host "Ultimate Performance plan has been uninstalled."
- Write-Host "> Balanced plan is now active."
- } else {
- Write-Host "Ultimate Performance plan is not installed."
- }
- }
- } Catch{
- Write-Warning $psitem.Exception.Message
- }
-}
-function Invoke-WPFundoall {
- <#
-
- .SYNOPSIS
- Undoes every selected tweak
-
- #>
-
- if($sync.ProcessRunning){
- $msg = "[Invoke-WPFundoall] Install process is currently running."
- [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
- return
- }
-
- $tweaks = (Get-WinUtilCheckBoxes)["WPFtweaks"]
-
- if ($tweaks.count -eq 0){
- $msg = "Please check the tweaks you wish to undo."
- [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
- return
- }
-
- Invoke-WPFRunspace -ArgumentList $tweaks -DebugPreference $DebugPreference -ScriptBlock {
- param($tweaks, $DebugPreference)
-
- $sync.ProcessRunning = $true
- if ($tweaks.count -eq 1){
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" })
- } else {
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" })
- }
-
-
- for ($i = 0; $i -lt $tweaks.Count; $i++){
- Set-WinUtilProgressBar -Label "Undoing $($tweaks[$i])" -Percent ($i / $tweaks.Count * 100)
- Invoke-WinUtiltweaks $tweaks[$i] -undo $true
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -value ($i/$tweaks.Count) })
- }
-
- Set-WinUtilProgressBar -Label "Undo Tweaks Finished" -Percent 100
- $sync.ProcessRunning = $false
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" })
- Write-Host "=================================="
- Write-Host "--- Undo Tweaks are Finished ---"
- Write-Host "=================================="
-
- }
-}
-function Invoke-WPFUnInstall {
- <#
-
- .SYNOPSIS
- Uninstalls the selected programs
-
- #>
-
- if($sync.ProcessRunning){
- $msg = "[Invoke-WPFUnInstall] Install process is currently running"
- [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
- return
- }
-
- $PackagesToInstall = (Get-WinUtilCheckBoxes)["Install"]
-
- if ($PackagesToInstall.Count -eq 0) {
- $WarningMsg = "Please select the program(s) to uninstall"
- [System.Windows.MessageBox]::Show($WarningMsg, $AppTitle, [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
- return
- }
-
- $ButtonType = [System.Windows.MessageBoxButton]::YesNo
- $MessageboxTitle = "Are you sure?"
- $Messageboxbody = ("This will uninstall the following applications: `n $($PackagesToInstall | Format-Table | Out-String)")
- $MessageIcon = [System.Windows.MessageBoxImage]::Information
-
- $confirm = [System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon)
-
- if($confirm -eq "No"){return}
-
-
- Invoke-WPFRunspace -ArgumentList $PackagesToInstall -DebugPreference $DebugPreference -ScriptBlock {
- param($PackagesToInstall, $DebugPreference)
- if ($PackagesToInstall.count -eq 1){
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" })
- } else {
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" })
- }
- $packagesWinget, $packagesChoco = {
- $packagesWinget = [System.Collections.Generic.List`1[System.Object]]::new()
- $packagesChoco = [System.Collections.Generic.List`1[System.Object]]::new()
- foreach ($package in $PackagesToInstall) {
- if ($package.winget -eq "na") {
- $packagesChoco.add($package)
- Write-Host "Queueing $($package.choco) for Chocolatey Uninstall"
- } else {
- $packagesWinget.add($($package.winget))
- Write-Host "Queueing $($package.winget) for Winget Uninstall"
- }
- }
- return $packagesWinget, $packagesChoco
- }.Invoke($PackagesToInstall)
- try{
- $sync.ProcessRunning = $true
-
- # Install all selected programs in new window
- if($packagesWinget.Count -gt 0){
- Invoke-WinUtilWingetProgram -Action Uninstall -Programs $packagesWinget
- }
- if($packagesChoco.Count -gt 0){
- Install-WinUtilProgramChoco -ProgramsToInstall $packagesChoco -Manage "Uninstalling"
- }
-
- Write-Host "==========================================="
- Write-Host "-- Uninstalls have finished ---"
- Write-Host "==========================================="
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" })
- }
- Catch {
- Write-Host "==========================================="
- Write-Host "Error: $_"
- Write-Host "==========================================="
- $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Error" -overlay "warning" })
- }
- $sync.ProcessRunning = $False
-
- }
-}
-function Invoke-WPFUpdatesdefault {
- <#
-
- .SYNOPSIS
- Resets Windows Update settings to default
-
- #>
- If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU")) {
- New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Force | Out-Null
- }
- Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "NoAutoUpdate" -Type DWord -Value 0
- Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "AUOptions" -Type DWord -Value 3
- If (!(Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config")) {
- New-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config" -Force | Out-Null
- }
- Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config" -Name "DODownloadMode" -Type DWord -Value 1
-
- $services = @(
- "BITS"
- "wuauserv"
- )
-
- foreach ($service in $services) {
- # -ErrorAction SilentlyContinue is so it doesn't write an error to stdout if a service doesn't exist
-
- Write-Host "Setting $service StartupType to Automatic"
- Get-Service -Name $service -ErrorAction SilentlyContinue | Set-Service -StartupType Automatic
- }
- Write-Host "Enabling driver offering through Windows Update..."
- Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Device Metadata" -Name "PreventDeviceMetadataFromNetwork" -ErrorAction SilentlyContinue
- Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching" -Name "DontPromptForWindowsUpdate" -ErrorAction SilentlyContinue
- Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching" -Name "DontSearchWindowsUpdate" -ErrorAction SilentlyContinue
- Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching" -Name "DriverUpdateWizardWuSearchEnabled" -ErrorAction SilentlyContinue
- Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" -Name "ExcludeWUDriversInQualityUpdate" -ErrorAction SilentlyContinue
- Write-Host "Enabling Windows Update automatic restart..."
- Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "NoAutoRebootWithLoggedOnUsers" -ErrorAction SilentlyContinue
- Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "AUPowerManagement" -ErrorAction SilentlyContinue
- Write-Host "Enabled driver offering through Windows Update"
- Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "BranchReadinessLevel" -ErrorAction SilentlyContinue
- Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "DeferFeatureUpdatesPeriodInDays" -ErrorAction SilentlyContinue
- Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "DeferQualityUpdatesPeriodInDays" -ErrorAction SilentlyContinue
- Write-Host "==================================================="
- Write-Host "--- Windows Update Settings Reset to Default ---"
- Write-Host "==================================================="
-}
-function Invoke-WPFUpdatesdisable {
- <#
-
- .SYNOPSIS
- Disables Windows Update
-
- .NOTES
- Disabling Windows Update is not recommended. This is only for advanced users who know what they are doing.
-
- #>
- If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU")) {
- New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Force | Out-Null
- }
- Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "NoAutoUpdate" -Type DWord -Value 1
- Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "AUOptions" -Type DWord -Value 1
- If (!(Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config")) {
- New-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config" -Force | Out-Null
- }
- Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config" -Name "DODownloadMode" -Type DWord -Value 0
-
- $services = @(
- "BITS"
- "wuauserv"
- )
-
- foreach ($service in $services) {
- # -ErrorAction SilentlyContinue is so it doesn't write an error to stdout if a service doesn't exist
-
- Write-Host "Setting $service StartupType to Disabled"
- Get-Service -Name $service -ErrorAction SilentlyContinue | Set-Service -StartupType Disabled
- }
- Write-Host "================================="
- Write-Host "--- Updates ARE DISABLED ---"
- Write-Host "================================="
-}
-function Invoke-WPFUpdatessecurity {
- <#
-
- .SYNOPSIS
- Sets Windows Update to recommended settings
-
- .DESCRIPTION
- 1. Disables driver offering through Windows Update
- 2. Disables Windows Update automatic restart
- 3. Sets Windows Update to Semi-Annual Channel (Targeted)
- 4. Defers feature updates for 365 days
- 5. Defers quality updates for 4 days
-
- #>
- Write-Host "Disabling driver offering through Windows Update..."
- If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Device Metadata")) {
- New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Device Metadata" -Force | Out-Null
- }
- Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Device Metadata" -Name "PreventDeviceMetadataFromNetwork" -Type DWord -Value 1
- If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching")) {
- New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching" -Force | Out-Null
- }
- Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching" -Name "DontPromptForWindowsUpdate" -Type DWord -Value 1
- Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching" -Name "DontSearchWindowsUpdate" -Type DWord -Value 1
- Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching" -Name "DriverUpdateWizardWuSearchEnabled" -Type DWord -Value 0
- If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate")) {
- New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" | Out-Null
- }
- Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" -Name "ExcludeWUDriversInQualityUpdate" -Type DWord -Value 1
- Write-Host "Disabling Windows Update automatic restart..."
- If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU")) {
- New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Force | Out-Null
- }
- Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "NoAutoRebootWithLoggedOnUsers" -Type DWord -Value 1
- Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "AUPowerManagement" -Type DWord -Value 0
- Write-Host "Disabled driver offering through Windows Update"
- If (!(Test-Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings")) {
- New-Item -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Force | Out-Null
- }
- Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "BranchReadinessLevel" -Type DWord -Value 20
- Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "DeferFeatureUpdatesPeriodInDays" -Type DWord -Value 365
- Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "DeferQualityUpdatesPeriodInDays" -Type DWord -Value 4
-
- $ButtonType = [System.Windows.MessageBoxButton]::OK
- $MessageboxTitle = "Set Security Updates"
- $Messageboxbody = ("Recommended Update settings loaded")
- $MessageIcon = [System.Windows.MessageBoxImage]::Information
-
- [System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon)
- Write-Host "================================="
- Write-Host "-- Updates Set to Recommended ---"
- Write-Host "================================="
-}
-$sync.configs.applications = '{
- "WPFInstall1password": {
- "category": "Utilities",
- "choco": "1password",
- "content": "1Password",
- "description": "1Password is a password manager that allows you to store and manage your passwords securely.",
- "link": "https://1password.com/",
- "winget": "AgileBits.1Password"
- },
- "WPFInstall7zip": {
- "category": "Utilities",
- "choco": "7zip",
- "content": "7-Zip",
- "description": "7-Zip is a free and open-source file archiver utility. It supports several compression formats and provides a high compression ratio, making it a popular choice for file compression.",
- "link": "https://www.7-zip.org/",
- "winget": "7zip.7zip"
- },
- "WPFInstalladobe": {
- "category": "Document",
- "choco": "adobereader",
- "content": "Adobe Acrobat Reader",
- "description": "Adobe Acrobat Reader is a free PDF viewer with essential features for viewing, printing, and annotating PDF documents.",
- "link": "https://www.adobe.com/acrobat/pdf-reader.html",
- "winget": "Adobe.Acrobat.Reader.64-bit"
- },
- "WPFInstalladvancedip": {
- "category": "Pro Tools",
- "choco": "advanced-ip-scanner",
- "content": "Advanced IP Scanner",
- "description": "Advanced IP Scanner is a fast and easy-to-use network scanner. It is designed to analyze LAN networks and provides information about connected devices.",
- "link": "https://www.advanced-ip-scanner.com/",
- "winget": "Famatech.AdvancedIPScanner"
- },
- "WPFInstallaffine": {
- "category": "Document",
- "choco": "na",
- "content": "AFFiNE",
- "description": "AFFiNE is an open source alternative to Notion. Write, draw, plan all at once. Selfhost it to sync across devices.",
- "link": "https://affine.pro/",
- "winget": "ToEverything.AFFiNE"
- },
- "WPFInstallaimp": {
- "category": "Multimedia Tools",
- "choco": "aimp",
- "content": "AIMP (Music Player)",
- "description": "AIMP is a feature-rich music player with support for various audio formats, playlists, and customizable user interface.",
- "link": "https://www.aimp.ru/",
- "winget": "AIMP.AIMP"
- },
- "WPFInstallalacritty": {
- "category": "Utilities",
- "choco": "alacritty",
- "content": "Alacritty Terminal",
- "description": "Alacritty is a fast, cross-platform, and GPU-accelerated terminal emulator. It is designed for performance and aims to be the fastest terminal emulator available.",
- "link": "https://alacritty.org/",
- "winget": "Alacritty.Alacritty"
- },
- "WPFInstallanaconda3": {
- "category": "Development",
- "choco": "anaconda3",
- "content": "Anaconda",
- "description": "Anaconda is a distribution of the Python and R programming languages for scientific computing.",
- "link": "https://www.anaconda.com/products/distribution",
- "winget": "Anaconda.Anaconda3"
- },
- "WPFInstallangryipscanner": {
- "category": "Pro Tools",
- "choco": "angryip",
- "content": "Angry IP Scanner",
- "description": "Angry IP Scanner is an open-source and cross-platform network scanner. It is used to scan IP addresses and ports, providing information about network connectivity.",
- "link": "https://angryip.org/",
- "winget": "angryziber.AngryIPScanner"
- },
- "WPFInstallanki": {
- "category": "Document",
- "choco": "anki",
- "content": "Anki",
- "description": "Anki is a flashcard application that helps you memorize information with intelligent spaced repetition.",
- "link": "https://apps.ankiweb.net/",
- "winget": "Anki.Anki"
- },
- "WPFInstallanydesk": {
- "category": "Utilities",
- "choco": "anydesk",
- "content": "AnyDesk",
- "description": "AnyDesk is a remote desktop software that enables users to access and control computers remotely. It is known for its fast connection and low latency.",
- "link": "https://anydesk.com/",
- "winget": "AnyDeskSoftwareGmbH.AnyDesk"
- },
- "WPFInstallATLauncher": {
- "category": "Games",
- "choco": "na",
- "content": "ATLauncher",
- "description": "ATLauncher is a Launcher for Minecraft which integrates multiple different ModPacks to allow you to download and install ModPacks easily and quickly.",
- "link": "https://github.com/ATLauncher/ATLauncher",
- "winget": "ATLauncher.ATLauncher"
- },
- "WPFInstallaudacity": {
- "category": "Multimedia Tools",
- "choco": "audacity",
- "content": "Audacity",
- "description": "Audacity is a free and open-source audio editing software known for its powerful recording and editing capabilities.",
- "link": "https://www.audacityteam.org/",
- "winget": "Audacity.Audacity"
- },
- "WPFInstallautoruns": {
- "category": "Microsoft Tools",
- "choco": "autoruns",
- "content": "Autoruns",
- "description": "This utility shows you what programs are configured to run during system bootup or login",
- "link": "https://learn.microsoft.com/en-us/sysinternals/downloads/autoruns",
- "winget": "Microsoft.Sysinternals.Autoruns"
- },
- "WPFInstallrdcman": {
- "category": "Microsoft Tools",
- "choco": "rdcman",
- "content": "RDCMan",
- "description": "RDCMan manages multiple remote desktop connections. It is useful for managing server labs where you need regular access to each machine such as automated checkin systems and data centers.",
- "link": "https://learn.microsoft.com/en-us/sysinternals/downloads/rdcman",
- "winget": "Microsoft.Sysinternals.RDCMan"
- },
- "WPFInstallautohotkey": {
- "category": "Utilities",
- "choco": "autohotkey",
- "content": "AutoHotkey",
- "description": "AutoHotkey is a scripting language for Windows that allows users to create custom automation scripts and macros. It is often used for automating repetitive tasks and customizing keyboard shortcuts.",
- "link": "https://www.autohotkey.com/",
- "winget": "AutoHotkey.AutoHotkey"
- },
- "WPFInstallazuredatastudio": {
- "category": "Microsoft Tools",
- "choco": "azure-data-studio",
- "content": "Microsoft Azure Data Studio",
- "description": "Azure Data Studio is a data management tool that enables you to work with SQL Server, Azure SQL DB and SQL DW from Windows, macOS and Linux.",
- "link": "https://docs.microsoft.com/sql/azure-data-studio/what-is-azure-data-studio",
- "winget": "Microsoft.AzureDataStudio"
- },
- "WPFInstallbarrier": {
- "category": "Utilities",
- "choco": "barrier",
- "content": "Barrier",
- "description": "Barrier is an open-source software KVM (keyboard, video, and mouseswitch). It allows users to control multiple computers with a single keyboard and mouse, even if they have different operating systems.",
- "link": "https://github.com/debauchee/barrier",
- "winget": "DebaucheeOpenSourceGroup.Barrier"
- },
- "WPFInstallbat": {
- "category": "Utilities",
- "choco": "bat",
- "content": "Bat (Cat)",
- "description": "Bat is a cat command clone with syntax highlighting. It provides a user-friendly and feature-rich alternative to the traditional cat command for viewing and concatenating files.",
- "link": "https://github.com/sharkdp/bat",
- "winget": "sharkdp.bat"
- },
- "WPFInstallbitwarden": {
- "category": "Utilities",
- "choco": "bitwarden",
- "content": "Bitwarden",
- "description": "Bitwarden is an open-source password management solution. It allows users to store and manage their passwords in a secure and encrypted vault, accessible across multiple devices.",
- "link": "https://bitwarden.com/",
- "winget": "Bitwarden.Bitwarden"
- },
- "WPFInstallbleachbit": {
- "category": "Utilities",
- "choco": "bleachbit",
- "content": "BleachBit",
- "description": "Clean Your System and Free Disk Space",
- "link": "https://www.bleachbit.org/",
- "winget": "BleachBit.BleachBit"
- },
- "WPFInstallblender": {
- "category": "Multimedia Tools",
- "choco": "blender",
- "content": "Blender (3D Graphics)",
- "description": "Blender is a powerful open-source 3D creation suite, offering modeling, sculpting, animation, and rendering tools.",
- "link": "https://www.blender.org/",
- "winget": "BlenderFoundation.Blender"
- },
- "WPFInstallbrave": {
- "category": "Browsers",
- "choco": "brave",
- "content": "Brave",
- "description": "Brave is a privacy-focused web browser that blocks ads and trackers, offering a faster and safer browsing experience.",
- "link": "https://www.brave.com",
- "winget": "Brave.Brave"
- },
- "WPFInstallbulkcrapuninstaller": {
- "category": "Utilities",
- "choco": "bulk-crap-uninstaller",
- "content": "Bulk Crap Uninstaller",
- "description": "Bulk Crap Uninstaller is a free and open-source uninstaller utility for Windows. It helps users remove unwanted programs and clean up their system by uninstalling multiple applications at once.",
- "link": "https://www.bcuninstaller.com/",
- "winget": "Klocman.BulkCrapUninstaller"
- },
- "WPFInstallbulkrenameutility": {
- "category": "Utilities",
- "choco": "bulkrenameutility",
- "content": "Bulk Rename Utility",
- "description": "Bulk Rename Utility allows you to easily rename files and folders recursively based upon find-replace, character place, fields, sequences, regular expressions, EXIF data, and more.",
- "link": "https://www.bulkrenameutility.co.uk",
- "winget": "TGRMNSoftware.BulkRenameUtility"
- },
- "WPFInstallAdvancedRenamer": {
- "category": "Utilities",
- "choco": "advanced-renamer",
- "content": "Advanced Renamer",
- "description": "Advanced Renamer is a program for renaming multiple files and folders at once. By configuring renaming methods the names can be manipulated in various ways.",
- "link": "https://www.advancedrenamer.com/",
- "winget": "HulubuluSoftware.AdvancedRenamer"
- },
- "WPFInstallcalibre": {
- "category": "Document",
- "choco": "calibre",
- "content": "Calibre",
- "description": "Calibre is a powerful and easy-to-use e-book manager, viewer, and converter.",
- "link": "https://calibre-ebook.com/",
- "winget": "calibre.calibre"
- },
- "WPFInstallcarnac": {
- "category": "Utilities",
- "choco": "carnac",
- "content": "Carnac",
- "description": "Carnac is a keystroke visualizer for Windows. It displays keystrokes in an overlay, making it useful for presentations, tutorials, and live demonstrations.",
- "link": "https://carnackeys.com/",
- "winget": "code52.Carnac"
- },
- "WPFInstallcemu": {
- "category": "Games",
- "choco": "cemu",
- "content": "Cemu",
- "description": "Cemu is a highly experimental software to emulate Wii U applications on PC.",
- "link": "https://cemu.info/",
- "winget": "Cemu.Cemu"
- },
- "WPFInstallchatterino": {
- "category": "Communications",
- "choco": "chatterino",
- "content": "Chatterino",
- "description": "Chatterino is a chat client for Twitch chat that offers a clean and customizable interface for a better streaming experience.",
- "link": "https://www.chatterino.com/",
- "winget": "ChatterinoTeam.Chatterino"
- },
- "WPFInstallchrome": {
- "category": "Browsers",
- "choco": "googlechrome",
- "content": "Chrome",
- "description": "Google Chrome is a widely used web browser known for its speed, simplicity, and seamless integration with Google services.",
- "link": "https://www.google.com/chrome/",
- "winget": "Google.Chrome"
- },
- "WPFInstallchromium": {
- "category": "Browsers",
- "choco": "chromium",
- "content": "Chromium",
- "description": "Chromium is the open-source project that serves as the foundation for various web browsers, including Chrome.",
- "link": "https://github.com/Hibbiki/chromium-win64",
- "winget": "Hibbiki.Chromium"
- },
- "WPFInstallarc": {
- "category": "Browsers",
- "choco": "na",
- "content": "Arc",
- "description": "Arc is a Chromium based browser, known for it's clean and modern design.",
- "link": "https://arc.net/",
- "winget": "TheBrowserCompany.Arc"
- },
- "WPFInstallclementine": {
- "category": "Multimedia Tools",
- "choco": "clementine",
- "content": "Clementine",
- "description": "Clementine is a modern music player and library organizer, supporting various audio formats and online radio services.",
- "link": "https://www.clementine-player.org/",
- "winget": "Clementine.Clementine"
- },
- "WPFInstallclink": {
- "category": "Development",
- "choco": "clink",
- "content": "Clink",
- "description": "Clink is a powerful Bash-compatible command-line interface (CLIenhancement for Windows, adding features like syntax highlighting and improved history).",
- "link": "https://mridgers.github.io/clink/",
- "winget": "chrisant996.Clink"
- },
- "WPFInstallclonehero": {
- "category": "Games",
- "choco": "na",
- "content": "Clone Hero",
- "description": "Clone Hero is a free rhythm game, which can be played with any 5 or 6 button guitar controller.",
- "link": "https://clonehero.net/",
- "winget": "CloneHeroTeam.CloneHero"
- },
- "WPFInstallcmake": {
- "category": "Development",
- "choco": "cmake",
- "content": "CMake",
- "description": "CMake is an open-source, cross-platform family of tools designed to build, test and package software.",
- "link": "https://cmake.org/",
- "winget": "Kitware.CMake"
- },
- "WPFInstallcopyq": {
- "category": "Utilities",
- "choco": "copyq",
- "content": "CopyQ (Clipboard Manager)",
- "description": "CopyQ is a clipboard manager with advanced features, allowing you to store, edit, and retrieve clipboard history.",
- "link": "https://copyq.readthedocs.io/",
- "winget": "hluk.CopyQ"
- },
- "WPFInstallcpuz": {
- "category": "Utilities",
- "choco": "cpu-z",
- "content": "CPU-Z",
- "description": "CPU-Z is a system monitoring and diagnostic tool for Windows. It provides detailed information about the computer's hardware components, including the CPU, memory, and motherboard.",
- "link": "https://www.cpuid.com/softwares/cpu-z.html",
- "winget": "CPUID.CPU-Z"
- },
- "WPFInstallcrystaldiskinfo": {
- "category": "Utilities",
- "choco": "crystaldiskinfo",
- "content": "Crystal Disk Info",
- "description": "Crystal Disk Info is a disk health monitoring tool that provides information about the status and performance of hard drives. It helps users anticipate potential issues and monitor drive health.",
- "link": "https://crystalmark.info/en/software/crystaldiskinfo/",
- "winget": "CrystalDewWorld.CrystalDiskInfo"
- },
- "WPFInstallcapframex": {
- "category": "Utilities",
- "choco": "na",
- "content": "CapFrameX",
- "description": "Frametimes capture and analysis tool based on Intel's PresentMon. Overlay provided by Rivatuner Statistics Server.",
- "link": "https://www.capframex.com/",
- "winget": "CXWorld.CapFrameX"
- },
- "WPFInstallcrystaldiskmark": {
- "category": "Utilities",
- "choco": "crystaldiskmark",
- "content": "Crystal Disk Mark",
- "description": "Crystal Disk Mark is a disk benchmarking tool that measures the read and write speeds of storage devices. It helps users assess the performance of their hard drives and SSDs.",
- "link": "https://crystalmark.info/en/software/crystaldiskmark/",
- "winget": "CrystalDewWorld.CrystalDiskMark"
- },
- "WPFInstalldarktable": {
- "category": "Multimedia Tools",
- "choco": "darktable",
- "content": "darktable",
- "description": "Open-source photo editing tool, offering an intuitive interface, advanced editing capabilities, and a non-destructive workflow for seamless image enhancement.",
- "link": "https://www.darktable.org/install/",
- "winget": "darktable.darktable"
- },
- "WPFInstallDaxStudio": {
- "category": "Development",
- "choco": "daxstudio",
- "content": "DaxStudio",
- "description": "DAX (Data Analysis eXpressions) Studio is the ultimate tool for executing and analyzing DAX queries against Microsoft Tabular models.",
- "link": "https://daxstudio.org/",
- "winget": "DaxStudio.DaxStudio"
- },
- "WPFInstallddu": {
- "category": "Utilities",
- "choco": "ddu",
- "content": "Display Driver Uninstaller",
- "description": "Display Driver Uninstaller (DDU) is a tool for completely uninstalling graphics drivers from NVIDIA, AMD, and Intel. It is useful for troubleshooting graphics driver-related issues.",
- "link": "https://www.wagnardsoft.com/display-driver-uninstaller-DDU-",
- "winget": "ddu"
- },
- "WPFInstalldeluge": {
- "category": "Utilities",
- "choco": "deluge",
- "content": "Deluge",
- "description": "Deluge is a free and open-source BitTorrent client. It features a user-friendly interface, support for plugins, and the ability to manage torrents remotely.",
- "link": "https://deluge-torrent.org/",
- "winget": "DelugeTeam.Deluge"
- },
- "WPFInstalldevtoys": {
- "category": "Utilities",
- "choco": "devtoys",
- "content": "DevToys",
- "description": "DevToys is a collection of development-related utilities and tools for Windows. It includes tools for file management, code formatting, and productivity enhancements for developers.",
- "link": "https://devtoys.app/",
- "winget": "DevToys-app.DevToys"
- },
- "WPFInstalldigikam": {
- "category": "Multimedia Tools",
- "choco": "digikam",
- "content": "digiKam",
- "description": "digiKam is an advanced open-source photo management software with features for organizing, editing, and sharing photos.",
- "link": "https://www.digikam.org/",
- "winget": "KDE.digikam"
- },
- "WPFInstalldiscord": {
- "category": "Communications",
- "choco": "discord",
- "content": "Discord",
- "description": "Discord is a popular communication platform with voice, video, and text chat, designed for gamers but used by a wide range of communities.",
- "link": "https://discord.com/",
- "winget": "Discord.Discord"
- },
- "WPFInstallditto": {
- "category": "Utilities",
- "choco": "ditto",
- "content": "Ditto",
- "description": "Ditto is an extension to the standard windows clipboard.",
- "link": "https://github.com/sabrogden/Ditto",
- "winget": "Ditto.Ditto"
- },
- "WPFInstalldockerdesktop": {
- "category": "Development",
- "choco": "docker-desktop",
- "content": "Docker Desktop",
- "description": "Docker Desktop is a powerful tool for containerized application development and deployment.",
- "link": "https://www.docker.com/products/docker-desktop",
- "winget": "Docker.DockerDesktop"
- },
- "WPFInstalldotnet3": {
- "category": "Microsoft Tools",
- "choco": "dotnetcore3-desktop-runtime",
- "content": ".NET Desktop Runtime 3.1",
- "description": ".NET Desktop Runtime 3.1 is a runtime environment required for running applications developed with .NET Core 3.1.",
- "link": "https://dotnet.microsoft.com/download/dotnet/3.1",
- "winget": "Microsoft.DotNet.DesktopRuntime.3_1"
- },
- "WPFInstalldotnet5": {
- "category": "Microsoft Tools",
- "choco": "dotnet-5.0-runtime",
- "content": ".NET Desktop Runtime 5",
- "description": ".NET Desktop Runtime 5 is a runtime environment required for running applications developed with .NET 5.",
- "link": "https://dotnet.microsoft.com/download/dotnet/5.0",
- "winget": "Microsoft.DotNet.DesktopRuntime.5"
- },
- "WPFInstalldotnet6": {
- "category": "Microsoft Tools",
- "choco": "dotnet-6.0-runtime",
- "content": ".NET Desktop Runtime 6",
- "description": ".NET Desktop Runtime 6 is a runtime environment required for running applications developed with .NET 6.",
- "link": "https://dotnet.microsoft.com/download/dotnet/6.0",
- "winget": "Microsoft.DotNet.DesktopRuntime.6"
- },
- "WPFInstalldotnet7": {
- "category": "Microsoft Tools",
- "choco": "dotnet-7.0-runtime",
- "content": ".NET Desktop Runtime 7",
- "description": ".NET Desktop Runtime 7 is a runtime environment required for running applications developed with .NET 7.",
- "link": "https://dotnet.microsoft.com/download/dotnet/7.0",
- "winget": "Microsoft.DotNet.DesktopRuntime.7"
- },
- "WPFInstalldotnet8": {
- "category": "Microsoft Tools",
- "choco": "dotnet-8.0-runtime",
- "content": ".NET Desktop Runtime 8",
- "description": ".NET Desktop Runtime 8 is a runtime environment required for running applications developed with .NET 8.",
- "link": "https://dotnet.microsoft.com/download/dotnet/8.0",
- "winget": "Microsoft.DotNet.DesktopRuntime.8"
- },
- "WPFInstalldmt": {
- "winget": "GNE.DualMonitorTools",
- "choco": "dual-monitor-tools",
- "category": "Utilities",
- "content": "Dual Monitor Tools",
- "link": "https://dualmonitortool.sourceforge.net/",
- "description": "Dual Monitor Tools (DMT) is a FOSS app that customize handling multiple monitors and even lock the mouse on specific monitor. Useful for full screen games and apps that does not handle well a second monitor or helps the workflow."
- },
- "WPFInstallduplicati": {
- "category": "Utilities",
- "choco": "duplicati",
- "content": "Duplicati",
- "description": "Duplicati is an open-source backup solution that supports encrypted, compressed, and incremental backups. It is designed to securely store data on cloud storage services.",
- "link": "https://www.duplicati.com/",
- "winget": "Duplicati.Duplicati"
- },
- "WPFInstalleaapp": {
- "category": "Games",
- "choco": "ea-app",
- "content": "EA App",
- "description": "EA App is a platform for accessing and playing Electronic Arts games.",
- "link": "https://www.ea.com/ea-app",
- "winget": "ElectronicArts.EADesktop"
- },
- "WPFInstalleartrumpet": {
- "category": "Multimedia Tools",
- "choco": "eartrumpet",
- "content": "EarTrumpet (Audio)",
- "description": "EarTrumpet is an audio control app for Windows, providing a simple and intuitive interface for managing sound settings.",
- "link": "https://eartrumpet.app/",
- "winget": "File-New-Project.EarTrumpet"
- },
- "WPFInstalledge": {
- "category": "Browsers",
- "choco": "microsoft-edge",
- "content": "Edge",
- "description": "Microsoft Edge is a modern web browser built on Chromium, offering performance, security, and integration with Microsoft services.",
- "link": "https://www.microsoft.com/edge",
- "winget": "Microsoft.Edge"
- },
- "WPFInstallefibooteditor": {
- "category": "Pro Tools",
- "choco": "na",
- "content": "EFI Boot Editor",
- "description": "EFI Boot Editor is a tool for managing the EFI/UEFI boot entries on your system. It allows you to customize the boot configuration of your computer.",
- "link": "https://www.easyuefi.com/",
- "winget": "EFIBootEditor.EFIBootEditor"
- },
- "WPFInstallemulationstation": {
- "category": "Games",
- "choco": "emulationstation",
- "content": "Emulation Station",
- "description": "Emulation Station is a graphical and themeable emulator front-end that allows you to access all your favorite games in one place.",
- "link": "https://emulationstation.org/",
- "winget": "Emulationstation.Emulationstation"
- },
- "WPFInstallepicgames": {
- "category": "Games",
- "choco": "epicgameslauncher",
- "content": "Epic Games Launcher",
- "description": "Epic Games Launcher is the client for accessing and playing games from the Epic Games Store.",
- "link": "https://www.epicgames.com/store/en-US/",
- "winget": "EpicGames.EpicGamesLauncher"
- },
- "WPFInstallerrorlookup": {
- "category": "Utilities",
- "choco": "na",
- "content": "Windows Error Code Lookup",
- "description": "ErrorLookup is a tool for looking up Windows error codes and their descriptions.",
- "link": "https://github.com/HenryPP/ErrorLookup",
- "winget": "Henry++.ErrorLookup"
- },
- "WPFInstallesearch": {
- "category": "Utilities",
- "choco": "everything",
- "content": "Everything Search",
- "description": "Everything Search is a fast and efficient file search utility for Windows.",
- "link": "https://www.voidtools.com/",
- "winget": "voidtools.Everything"
- },
- "WPFInstallespanso": {
- "category": "Utilities",
- "choco": "espanso",
- "content": "Espanso",
- "description": "Cross-platform and open-source Text Expander written in Rust",
- "link": "https://espanso.org/",
- "winget": "Espanso.Espanso"
- },
- "WPFInstalletcher": {
- "category": "Utilities",
- "choco": "etcher",
- "content": "Etcher USB Creator",
- "description": "Etcher is a powerful tool for creating bootable USB drives with ease.",
- "link": "https://www.balena.io/etcher/",
- "winget": "Balena.Etcher"
- },
- "WPFInstallfalkon": {
- "category": "Browsers",
- "choco": "falkon",
- "content": "Falkon",
- "description": "Falkon is a lightweight and fast web browser with a focus on user privacy and efficiency.",
- "link": "https://www.falkon.org/",
- "winget": "KDE.Falkon"
- },
- "WPFInstallfastfetch": {
- "category": "Utilities",
- "choco": "na",
- "content": "Fastfetch",
- "description": "Fastfetch is a neofetch-like tool for fetching system information and displaying them in a pretty way",
- "link": "https://github.com/fastfetch-cli/fastfetch/",
- "winget": "Fastfetch-cli.Fastfetch"
- },
- "WPFInstallferdium": {
- "category": "Communications",
- "choco": "ferdium",
- "content": "Ferdium",
- "description": "Ferdium is a messaging application that combines multiple messaging services into a single app for easy management.",
- "link": "https://ferdium.org/",
- "winget": "Ferdium.Ferdium"
- },
- "WPFInstallffmpeg": {
- "category": "Multimedia Tools",
- "choco": "ffmpeg-full",
- "content": "FFmpeg (full)",
- "description": "FFmpeg is a powerful multimedia processing tool that enables users to convert, edit, and stream audio and video files with a vast range of codecs and formats.",
- "link": "https://ffmpeg.org/",
- "winget": "Gyan.FFmpeg"
- },
- "WPFInstallfileconverter": {
- "category": "Utilities",
- "choco": "file-converter",
- "content": "File-Converter",
- "description": "File Converter is a very simple tool which allows you to convert and compress one or several file(s) using the context menu in windows explorer.",
- "link": "https://file-converter.io/",
- "winget": "AdrienAllard.FileConverter"
- },
- "WPFInstallfiles": {
- "category": "Utilities",
- "choco": "files",
- "content": "Files",
- "description": "Alternative file explorer.",
- "link": "https://github.com/files-community/Files",
- "winget": "na"
- },
- "WPFInstallfirealpaca": {
- "category": "Multimedia Tools",
- "choco": "firealpaca",
- "content": "Fire Alpaca",
- "description": "Fire Alpaca is a free digital painting software that provides a wide range of drawing tools and a user-friendly interface.",
- "link": "https://firealpaca.com/",
- "winget": "FireAlpaca.FireAlpaca"
- },
- "WPFInstallfirefox": {
- "category": "Browsers",
- "choco": "firefox",
- "content": "Firefox",
- "description": "Mozilla Firefox is an open-source web browser known for its customization options, privacy features, and extensions.",
- "link": "https://www.mozilla.org/en-US/firefox/new/",
- "winget": "Mozilla.Firefox"
- },
- "WPFInstallfirefoxesr": {
- "category": "Browsers",
- "choco": "FirefoxESR",
- "content": "Firefox ESR",
- "description": "Mozilla Firefox is an open-source web browser known for its customization options, privacy features, and extensions. Firefox ESR (Extended Support Release) receives major updates every 42 weeks with minor updates such as crash fixes, security fixes and policy updates as needed, but at least every four weeks.",
- "link": "https://www.mozilla.org/en-US/firefox/enterprise/",
- "winget": "Mozilla.Firefox.ESR"
- },
- "WPFInstallflameshot": {
- "category": "Multimedia Tools",
- "choco": "flameshot",
- "content": "Flameshot (Screenshots)",
- "description": "Flameshot is a powerful yet simple to use screenshot software, offering annotation and editing features.",
- "link": "https://flameshot.org/",
- "winget": "Flameshot.Flameshot"
- },
- "WPFInstalllightshot": {
- "category": "Multimedia Tools",
- "choco": "lightshot",
- "content": "Lightshot (Screenshots)",
- "description": "Ligthshot is an Easy-to-use, light-weight screenshot software tool, where you can optionally edit your screenshots using different tools, share them via Internet and/or save to disk, and customize the available options.",
- "link": "https://app.prntscr.com/",
- "winget": "Skillbrains.Lightshot"
- },
- "WPFInstallfloorp": {
- "category": "Browsers",
- "choco": "na",
- "content": "Floorp",
- "description": "Floorp is an open-source web browser project that aims to provide a simple and fast browsing experience.",
- "link": "https://floorp.app/",
- "winget": "Ablaze.Floorp"
- },
- "WPFInstallflow": {
- "category": "Utilities",
- "choco": "flow-launcher",
- "content": "Flow launcher",
- "description": "Keystroke launcher for Windows to search, manage and launch files, folders bookmarks, websites and more.",
- "link": "https://www.flowlauncher.com/",
- "winget": "Flow-Launcher.Flow-Launcher"
- },
- "WPFInstallflux": {
- "category": "Utilities",
- "choco": "flux",
- "content": "F.lux",
- "description": "f.lux adjusts the color temperature of your screen to reduce eye strain during nighttime use.",
- "link": "https://justgetflux.com/",
- "winget": "flux.flux"
- },
- "WPFInstallfoobar": {
- "category": "Multimedia Tools",
- "choco": "foobar2000",
- "content": "foobar2000 (Music Player)",
- "description": "foobar2000 is a highly customizable and extensible music player for Windows, known for its modular design and advanced features.",
- "link": "https://www.foobar2000.org/",
- "winget": "PeterPawlowski.foobar2000"
- },
- "WPFInstallfoxpdfeditor": {
- "category": "Document",
- "choco": "na",
- "content": "Foxit PDF Editor",
- "description": "Foxit PDF Editor is a feature-rich PDF editor and viewer with a familiar ribbon-style interface.",
- "link": "https://www.foxit.com/pdf-editor/",
- "winget": "Foxit.PhantomPDF"
- },
- "WPFInstallfoxpdfreader": {
- "category": "Document",
- "choco": "foxitreader",
- "content": "Foxit PDF Reader",
- "description": "Foxit PDF Reader is a free PDF viewer with a familiar ribbon-style interface.",
- "link": "https://www.foxit.com/pdf-reader/",
- "winget": "Foxit.FoxitReader"
- },
- "WPFInstallfreecad": {
- "category": "Multimedia Tools",
- "choco": "freecad",
- "content": "FreeCAD",
- "description": "FreeCAD is a parametric 3D CAD modeler, designed for product design and engineering tasks, with a focus on flexibility and extensibility.",
- "link": "https://www.freecadweb.org/",
- "winget": "FreeCAD.FreeCAD"
- },
- "WPFInstallfxsound": {
- "category": "Multimedia Tools",
- "choco": "fxsound",
- "content": "FxSound",
- "description": "FxSound is a cutting-edge audio enhancement software that elevates your listening experience across all media.",
- "link": "https://www.fxsound.com/",
- "winget": "FxSoundLLC.FxSound"
- },
- "WPFInstallfzf": {
- "category": "Utilities",
- "choco": "fzf",
- "content": "Fzf",
- "description": "A command-line fuzzy finder",
- "link": "https://github.com/junegunn/fzf/",
- "winget": "junegunn.fzf"
- },
- "WPFInstallgeforcenow": {
- "category": "Games",
- "choco": "nvidia-geforce-now",
- "content": "GeForce NOW",
- "description": "GeForce NOW is a cloud gaming service that allows you to play high-quality PC games on your device.",
- "link": "https://www.nvidia.com/en-us/geforce-now/",
- "winget": "Nvidia.GeForceNow"
- },
- "WPFInstallgimp": {
- "category": "Multimedia Tools",
- "choco": "gimp",
- "content": "GIMP (Image Editor)",
- "description": "GIMP is a versatile open-source raster graphics editor used for tasks such as photo retouching, image editing, and image composition.",
- "link": "https://www.gimp.org/",
- "winget": "GIMP.GIMP"
- },
- "WPFInstallgit": {
- "category": "Development",
- "choco": "git",
- "content": "Git",
- "description": "Git is a distributed version control system widely used for tracking changes in source code during software development.",
- "link": "https://git-scm.com/",
- "winget": "Git.Git"
- },
- "WPFInstallgitbutler": {
- "category": "Development",
- "choco": "na",
- "content": "Git Butler",
- "description": "A Git client for simultaneous branches on top of your existing workflow.",
- "link": "https://gitbutler.com/",
- "winget": "GitButler.GitButler"
- },
- "WPFInstallgitextensions": {
- "category": "Development",
- "choco": "git;gitextensions",
- "content": "Git Extensions",
- "description": "Git Extensions is a graphical user interface for Git, providing additional features for easier source code management.",
- "link": "https://gitextensions.github.io/",
- "winget": "GitExtensionsTeam.GitExtensions"
- },
- "WPFInstallgithubcli": {
- "category": "Development",
- "choco": "git;gh",
- "content": "GitHub CLI",
- "description": "GitHub CLI is a command-line tool that simplifies working with GitHub directly from the terminal.",
- "link": "https://cli.github.com/",
- "winget": "GitHub.cli"
- },
- "WPFInstallgithubdesktop": {
- "category": "Development",
- "choco": "git;github-desktop",
- "content": "GitHub Desktop",
- "description": "GitHub Desktop is a visual Git client that simplifies collaboration on GitHub repositories with an easy-to-use interface.",
- "link": "https://desktop.github.com/",
- "winget": "GitHub.GitHubDesktop"
- },
- "WPFInstallgitkrakenclient": {
- "category": "Development",
- "choco": "gitkraken",
- "content": "GitKraken Client",
- "description": "GitKraken Client is a powerful visual Git client from Axosoft that works with ALL git repositories on any hosting environment.",
- "link": "https://www.gitkraken.com/git-client",
- "winget": "Axosoft.GitKraken"
- },
- "WPFInstallglaryutilities": {
- "category": "Utilities",
- "choco": "glaryutilities-free",
- "content": "Glary Utilities",
- "description": "Glary Utilities is a comprehensive system optimization and maintenance tool for Windows.",
- "link": "https://www.glarysoft.com/glary-utilities/",
- "winget": "Glarysoft.GlaryUtilities"
- },
- "WPFInstallgodotengine": {
- "category": "Development",
- "choco": "godot",
- "content": "Godot Engine",
- "description": "Godot Engine is a free, open-source 2D and 3D game engine with a focus on usability and flexibility.",
- "link": "https://godotengine.org/",
- "winget": "GodotEngine.GodotEngine"
- },
- "WPFInstallgog": {
- "category": "Games",
- "choco": "goggalaxy",
- "content": "GOG Galaxy",
- "description": "GOG Galaxy is a gaming client that offers DRM-free games, additional content, and more.",
- "link": "https://www.gog.com/galaxy",
- "winget": "GOG.Galaxy"
- },
- "WPFInstallgitify": {
- "category": "Development",
- "choco": "na",
- "content": "Gitify",
- "description": "GitHub notifications on your menu bar.",
- "link": "https://www.gitify.io/",
- "winget": "Gitify.Gitify"
- },
- "WPFInstallgolang": {
- "category": "Development",
- "choco": "golang",
- "content": "Go",
- "description": "Go (or Golang) is a statically typed, compiled programming language designed for simplicity, reliability, and efficiency.",
- "link": "https://go.dev/",
- "winget": "GoLang.Go"
- },
- "WPFInstallgoogledrive": {
- "category": "Utilities",
- "choco": "googledrive",
- "content": "Google Drive",
- "description": "File syncing across devices all tied to your google account",
- "link": "https://www.google.com/drive/",
- "winget": "Google.Drive"
- },
- "WPFInstallgpuz": {
- "category": "Utilities",
- "choco": "gpu-z",
- "content": "GPU-Z",
- "description": "GPU-Z provides detailed information about your graphics card and GPU.",
- "link": "https://www.techpowerup.com/gpuz/",
- "winget": "TechPowerUp.GPU-Z"
- },
- "WPFInstallgreenshot": {
- "category": "Multimedia Tools",
- "choco": "greenshot",
- "content": "Greenshot (Screenshots)",
- "description": "Greenshot is a light-weight screenshot software tool with built-in image editor and customizable capture options.",
- "link": "https://getgreenshot.org/",
- "winget": "Greenshot.Greenshot"
- },
- "WPFInstallgsudo": {
- "category": "Utilities",
- "choco": "gsudo",
- "content": "Gsudo",
- "description": "Gsudo is a sudo implementation for Windows, allowing elevated privilege execution.",
- "link": "https://gerardog.github.io/gsudo/",
- "winget": "gerardog.gsudo"
- },
- "WPFInstallguilded": {
- "category": "Communications",
- "choco": "na",
- "content": "Guilded",
- "description": "Guilded is a communication and productivity platform that includes chat, scheduling, and collaborative tools for gaming and communities.",
- "link": "https://www.guilded.gg/",
- "winget": "Guilded.Guilded"
- },
- "WPFInstallhandbrake": {
- "category": "Multimedia Tools",
- "choco": "handbrake",
- "content": "HandBrake",
- "description": "HandBrake is an open-source video transcoder, allowing you to convert video from nearly any format to a selection of widely supported codecs.",
- "link": "https://handbrake.fr/",
- "winget": "HandBrake.HandBrake"
- },
- "WPFInstallharmonoid": {
- "category": "Multimedia Tools",
- "choco": "na",
- "content": "Harmonoid",
- "description": "Plays and manages your music library. Looks beautiful and juicy. Playlists, visuals, synced lyrics, pitch shift, volume boost and more.",
- "link": "https://harmonoid.com/",
- "winget": "Harmonoid.Harmonoid"
- },
- "WPFInstallheidisql": {
- "category": "Pro Tools",
- "choco": "heidisql",
- "content": "HeidiSQL",
- "description": "HeidiSQL is a powerful and easy-to-use client for MySQL, MariaDB, Microsoft SQL Server, and PostgreSQL databases. It provides tools for database management and development.",
- "link": "https://www.heidisql.com/",
- "winget": "HeidiSQL.HeidiSQL"
- },
- "WPFInstallhelix": {
- "category": "Development",
- "choco": "helix",
- "content": "Helix",
- "description": "Helix is a neovim alternative built in rust.",
- "link": "https://helix-editor.com/",
- "winget": "Helix.Helix"
- },
- "WPFInstallheroiclauncher": {
- "category": "Games",
- "choco": "na",
- "content": "Heroic Games Launcher",
- "description": "Heroic Games Launcher is an open-source alternative game launcher for Epic Games Store.",
- "link": "https://heroicgameslauncher.com/",
- "winget": "HeroicGamesLauncher.HeroicGamesLauncher"
- },
- "WPFInstallhexchat": {
- "category": "Communications",
- "choco": "hexchat",
- "content": "Hexchat",
- "description": "HexChat is a free, open-source IRC (Internet Relay Chat) client with a graphical interface for easy communication.",
- "link": "https://hexchat.github.io/",
- "winget": "HexChat.HexChat"
- },
- "WPFInstallhwinfo": {
- "category": "Utilities",
- "choco": "hwinfo",
- "content": "HWiNFO",
- "description": "HWiNFO provides comprehensive hardware information and diagnostics for Windows.",
- "link": "https://www.hwinfo.com/",
- "winget": "REALiX.HWiNFO"
- },
- "WPFInstallhwmonitor": {
- "category": "Utilities",
- "choco": "hwmonitor",
- "content": "HWMonitor",
- "description": "HWMonitor is a hardware monitoring program that reads PC systems main health sensors.",
- "link": "https://www.cpuid.com/softwares/hwmonitor.html",
- "winget": "CPUID.HWMonitor"
- },
- "WPFInstallimageglass": {
- "category": "Multimedia Tools",
- "choco": "imageglass",
- "content": "ImageGlass (Image Viewer)",
- "description": "ImageGlass is a versatile image viewer with support for various image formats and a focus on simplicity and speed.",
- "link": "https://imageglass.org/",
- "winget": "DuongDieuPhap.ImageGlass"
- },
- "WPFInstallimgburn": {
- "category": "Multimedia Tools",
- "choco": "imgburn",
- "content": "ImgBurn",
- "description": "ImgBurn is a lightweight CD, DVD, HD-DVD, and Blu-ray burning application with advanced features for creating and burning disc images.",
- "link": "http://www.imgburn.com/",
- "winget": "LIGHTNINGUK.ImgBurn"
- },
- "WPFInstallinkscape": {
- "category": "Multimedia Tools",
- "choco": "inkscape",
- "content": "Inkscape",
- "description": "Inkscape is a powerful open-source vector graphics editor, suitable for tasks such as illustrations, icons, logos, and more.",
- "link": "https://inkscape.org/",
- "winget": "Inkscape.Inkscape"
- },
- "WPFInstallitch": {
- "category": "Games",
- "choco": "itch",
- "content": "Itch.io",
- "description": "Itch.io is a digital distribution platform for indie games and creative projects.",
- "link": "https://itch.io/",
- "winget": "ItchIo.Itch"
- },
- "WPFInstallitunes": {
- "category": "Multimedia Tools",
- "choco": "itunes",
- "content": "iTunes",
- "description": "iTunes is a media player, media library, and online radio broadcaster application developed by Apple Inc.",
- "link": "https://www.apple.com/itunes/",
- "winget": "Apple.iTunes"
- },
- "WPFInstalljami": {
- "category": "Communications",
- "choco": "jami",
- "content": "Jami",
- "description": "Jami is a secure and privacy-focused communication platform that offers audio and video calls, messaging, and file sharing.",
- "link": "https://jami.net/",
- "winget": "SFLinux.Jami"
- },
- "WPFInstalljava8": {
- "category": "Development",
- "choco": "corretto8jdk",
- "content": "Amazon Corretto 8 (LTS)",
- "description": "Amazon Corretto is a no-cost, multiplatform, production-ready distribution of the Open Java Development Kit (OpenJDK).",
- "link": "https://aws.amazon.com/corretto",
- "winget": "Amazon.Corretto.8.JDK"
- },
- "WPFInstalljava11": {
- "category": "Development",
- "choco": "corretto11jdk",
- "content": "Amazon Corretto 11 (LTS)",
- "description": "Amazon Corretto is a no-cost, multiplatform, production-ready distribution of the Open Java Development Kit (OpenJDK).",
- "link": "https://aws.amazon.com/corretto",
- "winget": "Amazon.Corretto.11.JDK"
- },
- "WPFInstalljava17": {
- "category": "Development",
- "choco": "corretto17jdk",
- "content": "Amazon Corretto 17 (LTS)",
- "description": "Amazon Corretto is a no-cost, multiplatform, production-ready distribution of the Open Java Development Kit (OpenJDK).",
- "link": "https://aws.amazon.com/corretto",
- "winget": "Amazon.Corretto.17.JDK"
- },
- "WPFInstalljava21": {
- "category": "Development",
- "choco": "corretto21jdk",
- "content": "Amazon Corretto 21 (LTS)",
- "description": "Amazon Corretto is a no-cost, multiplatform, production-ready distribution of the Open Java Development Kit (OpenJDK).",
- "link": "https://aws.amazon.com/corretto",
- "winget": "Amazon.Corretto.21.JDK"
- },
- "WPFInstalljdownloader": {
- "category": "Utilities",
- "choco": "jdownloader",
- "content": "JDownloader",
- "description": "JDownloader is a feature-rich download manager with support for various file hosting services.",
- "link": "http://jdownloader.org/",
- "winget": "AppWork.JDownloader"
- },
- "WPFInstalljellyfinmediaplayer": {
- "category": "Multimedia Tools",
- "choco": "jellyfin-media-player",
- "content": "Jellyfin Media Player",
- "description": "Jellyfin Media Player is a client application for the Jellyfin media server, providing access to your media library.",
- "link": "https://github.com/jellyfin/jellyfin-media-player",
- "winget": "Jellyfin.JellyfinMediaPlayer"
- },
- "WPFInstalljellyfinserver": {
- "category": "Multimedia Tools",
- "choco": "jellyfin",
- "content": "Jellyfin Server",
- "description": "Jellyfin Server is an open-source media server software, allowing you to organize and stream your media library.",
- "link": "https://jellyfin.org/",
- "winget": "Jellyfin.Server"
- },
- "WPFInstalljetbrains": {
- "category": "Development",
- "choco": "jetbrainstoolbox",
- "content": "Jetbrains Toolbox",
- "description": "Jetbrains Toolbox is a platform for easy installation and management of JetBrains developer tools.",
- "link": "https://www.jetbrains.com/toolbox/",
- "winget": "JetBrains.Toolbox"
- },
- "WPFInstalljoplin": {
- "category": "Document",
- "choco": "joplin",
- "content": "Joplin (FOSS Notes)",
- "description": "Joplin is an open-source note-taking and to-do application with synchronization capabilities.",
- "link": "https://joplinapp.org/",
- "winget": "Joplin.Joplin"
- },
- "WPFInstalljpegview": {
- "category": "Utilities",
- "choco": "jpegview",
- "content": "JPEG View",
- "description": "JPEGView is a lean, fast and highly configurable viewer/editor for JPEG, BMP, PNG, WEBP, TGA, GIF, JXL, HEIC, HEIF, AVIF and TIFF images with a minimal GUI",
- "link": "https://github.com/sylikc/jpegview",
- "winget": "sylikc.JPEGView"
- },
- "WPFInstallkdeconnect": {
- "category": "Utilities",
- "choco": "kdeconnect-kde",
- "content": "KDE Connect",
- "description": "KDE Connect allows seamless integration between your KDE desktop and mobile devices.",
- "link": "https://community.kde.org/KDEConnect",
- "winget": "KDE.KDEConnect"
- },
- "WPFInstallkdenlive": {
- "category": "Multimedia Tools",
- "choco": "kdenlive",
- "content": "Kdenlive (Video Editor)",
- "description": "Kdenlive is an open-source video editing software with powerful features for creating and editing professional-quality videos.",
- "link": "https://kdenlive.org/",
- "winget": "KDE.Kdenlive"
- },
- "WPFInstallkeepass": {
- "category": "Utilities",
- "choco": "keepassxc",
- "content": "KeePassXC",
- "description": "KeePassXC is a cross-platform, open-source password manager with strong encryption features.",
- "link": "https://keepassxc.org/",
- "winget": "KeePassXCTeam.KeePassXC"
- },
- "WPFInstallklite": {
- "category": "Multimedia Tools",
- "choco": "k-litecodecpack-standard",
- "content": "K-Lite Codec Standard",
- "description": "K-Lite Codec Pack Standard is a collection of audio and video codecs and related tools, providing essential components for media playback.",
- "link": "https://www.codecguide.com/",
- "winget": "CodecGuide.K-LiteCodecPack.Standard"
- },
- "WPFInstallkodi": {
- "category": "Multimedia Tools",
- "choco": "kodi",
- "content": "Kodi Media Center",
- "description": "Kodi is an open-source media center application that allows you to play and view most videos, music, podcasts, and other digital media files.",
- "link": "https://kodi.tv/",
- "winget": "XBMCFoundation.Kodi"
- },
- "WPFInstallkrita": {
- "category": "Multimedia Tools",
- "choco": "krita",
- "content": "Krita (Image Editor)",
- "description": "Krita is a powerful open-source painting application. It is designed for concept artists, illustrators, matte and texture artists, and the VFX industry.",
- "link": "https://krita.org/en/features/",
- "winget": "KDE.Krita"
- },
- "WPFInstalllazygit": {
- "category": "Development",
- "choco": "lazygit",
- "content": "Lazygit",
- "description": "Simple terminal UI for git commands",
- "link": "https://github.com/jesseduffield/lazygit/",
- "winget": "JesseDuffield.lazygit"
- },
- "WPFInstalllibreoffice": {
- "category": "Document",
- "choco": "libreoffice-fresh",
- "content": "LibreOffice",
- "description": "LibreOffice is a powerful and free office suite, compatible with other major office suites.",
- "link": "https://www.libreoffice.org/",
- "winget": "TheDocumentFoundation.LibreOffice"
- },
- "WPFInstalllibrewolf": {
- "category": "Browsers",
- "choco": "librewolf",
- "content": "LibreWolf",
- "description": "LibreWolf is a privacy-focused web browser based on Firefox, with additional privacy and security enhancements.",
- "link": "https://librewolf-community.gitlab.io/",
- "winget": "LibreWolf.LibreWolf"
- },
- "WPFInstalllinkshellextension": {
- "category": "Utilities",
- "choco": "linkshellextension",
- "content": "Link Shell extension",
- "description": "Link Shell Extension (LSE) provides for the creation of Hardlinks, Junctions, Volume Mountpoints, Symbolic Links, a folder cloning process that utilises Hardlinks or Symbolic Links and a copy process taking care of Junctions, Symbolic Links, and Hardlinks. LSE, as its name implies is implemented as a Shell extension and is accessed from Windows Explorer, or similar file/folder managers.",
- "link": "https://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html",
- "winget": "HermannSchinagl.LinkShellExtension"
- },
- "WPFInstalllinphone": {
- "category": "Communications",
- "choco": "linphone",
- "content": "Linphone",
- "description": "Linphone is an open-source voice over IP (VoIPservice that allows for audio and video calls, messaging, and more.",
- "link": "https://www.linphone.org/",
- "winget": "BelledonneCommunications.Linphone"
- },
- "WPFInstalllivelywallpaper": {
- "category": "Utilities",
- "choco": "lively",
- "content": "Lively Wallpaper",
- "description": "Free and open-source software that allows users to set animated desktop wallpapers and screensavers.",
- "link": "https://www.rocksdanister.com/lively/",
- "winget": "rocksdanister.LivelyWallpaper"
- },
- "WPFInstalllocalsend": {
- "category": "Utilities",
- "choco": "localsend.install",
- "content": "LocalSend",
- "description": "An open source cross-platform alternative to AirDrop.",
- "link": "https://localsend.org/",
- "winget": "LocalSend.LocalSend"
- },
- "WPFInstalllockhunter": {
- "category": "Utilities",
- "choco": "lockhunter",
- "content": "LockHunter",
- "description": "LockHunter is a free tool to delete files blocked by something you do not know.",
- "link": "https://lockhunter.com/",
- "winget": "CrystalRich.LockHunter"
- },
- "WPFInstalllogseq": {
- "category": "Document",
- "choco": "logseq",
- "content": "Logseq",
- "description": "Logseq is a versatile knowledge management and note-taking application designed for the digital thinker. With a focus on the interconnectedness of ideas, Logseq allows users to seamlessly organize their thoughts through a combination of hierarchical outlines and bi-directional linking. It supports both structured and unstructured content, enabling users to create a personalized knowledge graph that adapts to their evolving ideas and insights.",
- "link": "https://logseq.com/",
- "winget": "Logseq.Logseq"
- },
- "WPFInstallmalwarebytes": {
- "category": "Utilities",
- "choco": "malwarebytes",
- "content": "Malwarebytes",
- "description": "Malwarebytes is an anti-malware software that provides real-time protection against threats.",
- "link": "https://www.malwarebytes.com/",
- "winget": "Malwarebytes.Malwarebytes"
- },
- "WPFInstallmasscode": {
- "category": "Document",
- "choco": "na",
- "content": "massCode (Snippet Manager)",
- "description": "massCode is a fast and efficient open-source code snippet manager for developers.",
- "link": "https://masscode.io/",
- "winget": "antonreshetov.massCode"
- },
- "WPFInstallmatrix": {
- "category": "Communications",
- "choco": "element-desktop",
- "content": "Element",
- "description": "Element is a client for Matrix—an open network for secure, decentralized communication.",
- "link": "https://element.io/",
- "winget": "Element.Element"
- },
- "WPFInstallmeld": {
- "category": "Utilities",
- "choco": "meld",
- "content": "Meld",
- "description": "Meld is a visual diff and merge tool for files and directories.",
- "link": "https://meldmerge.org/",
- "winget": "Meld.Meld"
- },
- "WPFInstallModernFlyouts": {
- "category": "Multimedia Tools",
- "choco": "na",
- "content": "Modern Flyouts",
- "description": "An open source, modern, Fluent Design-based set of flyouts for Windows.",
- "link": "https://github.com/ModernFlyouts-Community/ModernFlyouts/",
- "winget": "ModernFlyouts.ModernFlyouts"
- },
- "WPFInstallmonitorian": {
- "category": "Utilities",
- "choco": "monitorian",
- "content": "Monitorian",
- "description": "Monitorian is a utility for adjusting monitor brightness and contrast on Windows.",
- "link": "https://github.com/emoacht/Monitorian",
- "winget": "emoacht.Monitorian"
- },
- "WPFInstallmoonlight": {
- "category": "Games",
- "choco": "moonlight-qt",
- "content": "Moonlight/GameStream Client",
- "description": "Moonlight/GameStream Client allows you to stream PC games to other devices over your local network.",
- "link": "https://moonlight-stream.org/",
- "winget": "MoonlightGameStreamingProject.Moonlight"
- },
- "WPFInstallMotrix": {
- "category": "Utilities",
- "choco": "motrix",
- "content": "Motrix Download Manager",
- "description": "A full-featured download manager.",
- "link": "https://motrix.app/",
- "winget": "agalwood.Motrix"
- },
- "WPFInstallmpchc": {
- "category": "Multimedia Tools",
- "choco": "mpc-hc-clsid2",
- "content": "Media Player Classic - Home Cinema",
- "description": "Media Player Classic - Home Cinema (MPC-HC) is a free and open-source video and audio player for Windows. MPC-HC is based on the original Guliverkli project and contains many additional features and bug fixes.",
- "link": "https://github.com/clsid2/mpc-hc/",
- "winget": "clsid2.mpc-hc"
- },
- "WPFInstallmremoteng": {
- "category": "Pro Tools",
- "choco": "mremoteng",
- "content": "mRemoteNG",
- "description": "mRemoteNG is a free and open-source remote connections manager. It allows you to view and manage multiple remote sessions in a single interface.",
- "link": "https://mremoteng.org/",
- "winget": "mRemoteNG.mRemoteNG"
- },
- "WPFInstallmsedgeredirect": {
- "category": "Utilities",
- "choco": "msedgeredirect",
- "content": "MSEdgeRedirect",
- "description": "A Tool to Redirect News, Search, Widgets, Weather, and More to Your Default Browser.",
- "link": "https://github.com/rcmaehl/MSEdgeRedirect",
- "winget": "rcmaehl.MSEdgeRedirect"
- },
- "WPFInstallmsiafterburner": {
- "category": "Utilities",
- "choco": "msiafterburner",
- "content": "MSI Afterburner",
- "description": "MSI Afterburner is a graphics card overclocking utility with advanced features.",
- "link": "https://www.msi.com/Landing/afterburner",
- "winget": "Guru3D.Afterburner"
- },
- "WPFInstallmullvadvpn": {
- "category": "Pro Tools",
- "choco": "mullvad-app",
- "content": "Mullvad VPN",
- "description": "This is the VPN client software for the Mullvad VPN service.",
- "link": "https://github.com/mullvad/mullvadvpn-app",
- "winget": "MullvadVPN.MullvadVPN"
- },
- "WPFInstallBorderlessGaming": {
- "category": "Utilities",
- "choco": "borderlessgaming",
- "content": "Borderless Gaming",
- "description": "Play your favorite games in a borderless window; no more time consuming alt-tabs.",
- "link": "https://github.com/Codeusa/Borderless-Gaming",
- "winget": "Codeusa.BorderlessGaming"
- },
- "WPFInstallEqualizerAPO": {
- "category": "Multimedia Tools",
- "choco": "equalizerapo",
- "content": "Equalizer APO",
- "description": "Equalizer APO is a parametric / graphic equalizer for Windows.",
- "link": "https://sourceforge.net/projects/equalizerapo",
- "winget": "na"
- },
- "WPFInstallCompactGUI": {
- "category": "Utilities",
- "choco": "compactgui",
- "content": "Compact GUI",
- "description": "Transparently compress active games and programs using Windows 10/11 APIs",
- "link": "https://github.com/IridiumIO/CompactGUI",
- "winget": "IridiumIO.CompactGUI"
- },
- "WPFInstallExifCleaner": {
- "category": "Utilities",
- "choco": "na",
- "content": "ExifCleaner",
- "description": "Desktop app to clean metadata from images, videos, PDFs, and other files.",
- "link": "https://github.com/szTheory/exifcleaner",
- "winget": "szTheory.exifcleaner"
- },
- "WPFInstallmullvadbrowser": {
- "category": "Browsers",
- "choco": "na",
- "content": "Mullvad Browser",
- "description": "Mullvad Browser is a privacy-focused web browser, developed in partnership with the Tor Project.",
- "link": "https://mullvad.net/browser",
- "winget": "MullvadVPN.MullvadBrowser"
- },
- "WPFInstallmusescore": {
- "category": "Multimedia Tools",
- "choco": "musescore",
- "content": "MuseScore",
- "description": "Create, play back and print beautiful sheet music with free and easy to use music notation software MuseScore.",
- "link": "https://musescore.org/en",
- "winget": "Musescore.Musescore"
- },
- "WPFInstallmusicbee": {
- "category": "Multimedia Tools",
- "choco": "musicbee",
- "content": "MusicBee (Music Player)",
- "description": "MusicBee is a customizable music player with support for various audio formats. It includes features like an integrated search function, tag editing, and more.",
- "link": "https://getmusicbee.com/",
- "winget": "MusicBee.MusicBee"
- },
- "WPFInstallmp3tag": {
- "category": "Multimedia Tools",
- "choco": "mp3tag",
- "content": "Mp3tag (Metadata Audio Editor)",
- "description": "Mp3tag is a powerful and yet easy-to-use tool to edit metadata of common audio formats.",
- "link": "https://www.mp3tag.de/en/",
- "winget": "Mp3tag.Mp3tag"
- },
- "WPFInstalltagscanner": {
- "category": "Multimedia Tools",
- "choco": "tagscanner",
- "content": "TagScanner (Tag Scanner)",
- "description": "TagScanner is a powerful tool for organizing and managing your music collection",
- "link": "https://www.xdlab.ru/en/",
- "winget": "SergeySerkov.TagScanner"
- },
- "WPFInstallnanazip": {
- "category": "Utilities",
- "choco": "nanazip",
- "content": "NanaZip",
- "description": "NanaZip is a fast and efficient file compression and decompression tool.",
- "link": "https://github.com/M2Team/NanaZip",
- "winget": "M2Team.NanaZip"
- },
- "WPFInstallnetbird": {
- "category": "Pro Tools",
- "choco": "netbird",
- "content": "NetBird",
- "description": "NetBird is a Open Source alternative comparable to TailScale that can be connected to a selfhosted Server.",
- "link": "https://netbird.io/",
- "winget": "netbird"
- },
- "WPFInstallnaps2": {
- "category": "Document",
- "choco": "naps2",
- "content": "NAPS2 (Document Scanner)",
- "description": "NAPS2 is a document scanning application that simplifies the process of creating electronic documents.",
- "link": "https://www.naps2.com/",
- "winget": "Cyanfish.NAPS2"
- },
- "WPFInstallneofetchwin": {
- "category": "Utilities",
- "choco": "na",
- "content": "Neofetch",
- "description": "Neofetch is a command-line utility for displaying system information in a visually appealing way.",
- "link": "https://github.com/nepnep39/neofetch-win",
- "winget": "nepnep.neofetch-win"
- },
- "WPFInstallneovim": {
- "category": "Development",
- "choco": "neovim",
- "content": "Neovim",
- "description": "Neovim is a highly extensible text editor and an improvement over the original Vim editor.",
- "link": "https://neovim.io/",
- "winget": "Neovim.Neovim"
- },
- "WPFInstallnextclouddesktop": {
- "category": "Utilities",
- "choco": "nextcloud-client",
- "content": "Nextcloud Desktop",
- "description": "Nextcloud Desktop is the official desktop client for the Nextcloud file synchronization and sharing platform.",
- "link": "https://nextcloud.com/install/#install-clients",
- "winget": "Nextcloud.NextcloudDesktop"
- },
- "WPFInstallnglide": {
- "category": "Multimedia Tools",
- "choco": "na",
- "content": "nGlide (3dfx compatibility)",
- "description": "nGlide is a 3Dfx Voodoo Glide wrapper. It allows you to play games that use Glide API on modern graphics cards without the need for a 3Dfx Voodoo graphics card.",
- "link": "http://www.zeus-software.com/downloads/nglide",
- "winget": "ZeusSoftware.nGlide"
- },
- "WPFInstallnmap": {
- "category": "Pro Tools",
- "choco": "nmap",
- "content": "Nmap",
- "description": "Nmap (Network Mapper) is an open-source tool for network exploration and security auditing. It discovers devices on a network and provides information about their ports and services.",
- "link": "https://nmap.org/",
- "winget": "Insecure.Nmap"
- },
- "WPFInstallnodejs": {
- "category": "Development",
- "choco": "nodejs",
- "content": "NodeJS",
- "description": "NodeJS is a JavaScript runtime built on Chrome's V8 JavaScript engine for building server-side and networking applications.",
- "link": "https://nodejs.org/",
- "winget": "OpenJS.NodeJS"
- },
- "WPFInstallnodejslts": {
- "category": "Development",
- "choco": "nodejs-lts",
- "content": "NodeJS LTS",
- "description": "NodeJS LTS provides Long-Term Support releases for stable and reliable server-side JavaScript development.",
- "link": "https://nodejs.org/",
- "winget": "OpenJS.NodeJS.LTS"
- },
- "WPFInstallnomacs": {
- "category": "Multimedia Tools",
- "choco": "nomacs",
- "content": "Nomacs (Image viewer)",
- "description": "Nomacs is a free, open-source image viewer that supports multiple platforms. It features basic image editing capabilities and supports a variety of image formats.",
- "link": "https://nomacs.org/",
- "winget": "nomacs.nomacs"
- },
- "WPFInstallnotepadplus": {
- "category": "Document",
- "choco": "notepadplusplus",
- "content": "Notepad++",
- "description": "Notepad++ is a free, open-source code editor and Notepad replacement with support for multiple languages.",
- "link": "https://notepad-plus-plus.org/",
- "winget": "Notepad++.Notepad++"
- },
- "WPFInstallnuget": {
- "category": "Microsoft Tools",
- "choco": "nuget.commandline",
- "content": "NuGet",
- "description": "NuGet is a package manager for the .NET framework, enabling developers to manage and share libraries in their .NET applications.",
- "link": "https://www.nuget.org/",
- "winget": "Microsoft.NuGet"
- },
- "WPFInstallnushell": {
- "category": "Utilities",
- "choco": "nushell",
- "content": "Nushell",
- "description": "Nushell is a new shell that takes advantage of modern hardware and systems to provide a powerful, expressive, and fast experience.",
- "link": "https://www.nushell.sh/",
- "winget": "Nushell.Nushell"
- },
- "WPFInstallnvclean": {
- "category": "Utilities",
- "choco": "na",
- "content": "NVCleanstall",
- "description": "NVCleanstall is a tool designed to customize NVIDIA driver installations, allowing advanced users to control more aspects of the installation process.",
- "link": "https://www.techpowerup.com/nvcleanstall/",
- "winget": "TechPowerUp.NVCleanstall"
- },
- "WPFInstallnvm": {
- "category": "Development",
- "choco": "nvm",
- "content": "Node Version Manager",
- "description": "Node Version Manager (NVM) for Windows allows you to easily switch between multiple Node.js versions.",
- "link": "https://github.com/coreybutler/nvm-windows",
- "winget": "CoreyButler.NVMforWindows"
- },
- "WPFInstallobs": {
- "category": "Multimedia Tools",
- "choco": "obs-studio",
- "content": "OBS Studio",
- "description": "OBS Studio is a free and open-source software for video recording and live streaming. It supports real-time video/audio capturing and mixing, making it popular among content creators.",
- "link": "https://obsproject.com/",
- "winget": "OBSProject.OBSStudio"
- },
- "WPFInstallobsidian": {
- "category": "Document",
- "choco": "obsidian",
- "content": "Obsidian",
- "description": "Obsidian is a powerful note-taking and knowledge management application.",
- "link": "https://obsidian.md/",
- "winget": "Obsidian.Obsidian"
- },
- "WPFInstallokular": {
- "category": "Document",
- "choco": "okular",
- "content": "Okular",
- "description": "Okular is a versatile document viewer with advanced features.",
- "link": "https://okular.kde.org/",
- "winget": "KDE.Okular"
- },
- "WPFInstallonedrive": {
- "category": "Microsoft Tools",
- "choco": "onedrive",
- "content": "OneDrive",
- "description": "OneDrive is a cloud storage service provided by Microsoft, allowing users to store and share files securely across devices.",
- "link": "https://onedrive.live.com/",
- "winget": "Microsoft.OneDrive"
- },
- "WPFInstallonlyoffice": {
- "category": "Document",
- "choco": "onlyoffice",
- "content": "ONLYOffice Desktop",
- "description": "ONLYOffice Desktop is a comprehensive office suite for document editing and collaboration.",
- "link": "https://www.onlyoffice.com/desktop.aspx",
- "winget": "ONLYOFFICE.DesktopEditors"
- },
- "WPFInstallOPAutoClicker": {
- "category": "Utilities",
- "choco": "autoclicker",
- "content": "OPAutoClicker",
- "description": "A full-fledged autoclicker with two modes of autoclicking, at your dynamic cursor location or at a prespecified location.",
- "link": "https://www.opautoclicker.com",
- "winget": "OPAutoClicker.OPAutoClicker"
- },
- "WPFInstallopenhashtab": {
- "category": "Utilities",
- "choco": "openhashtab",
- "content": "OpenHashTab",
- "description": "OpenHashTab is a shell extension for conveniently calculating and checking file hashes from file properties.",
- "link": "https://github.com/namazso/OpenHashTab/",
- "winget": "namazso.OpenHashTab"
- },
- "WPFInstallopenoffice": {
- "category": "Document",
- "choco": "openoffice",
- "content": "Apache OpenOffice",
- "description": "Apache OpenOffice is an open-source office software suite for word processing, spreadsheets, presentations, and more.",
- "link": "https://www.openoffice.org/",
- "winget": "Apache.OpenOffice"
- },
- "WPFInstallopenrgb": {
- "category": "Utilities",
- "choco": "openrgb",
- "content": "OpenRGB",
- "description": "OpenRGB is an open-source RGB lighting control software designed to manage and control RGB lighting for various components and peripherals.",
- "link": "https://openrgb.org/",
- "winget": "CalcProgrammer1.OpenRGB"
- },
- "WPFInstallopenscad": {
- "category": "Multimedia Tools",
- "choco": "openscad",
- "content": "OpenSCAD",
- "description": "OpenSCAD is a free and open-source script-based 3D CAD modeler. It is especially useful for creating parametric designs for 3D printing.",
- "link": "https://www.openscad.org/",
- "winget": "OpenSCAD.OpenSCAD"
- },
- "WPFInstallopenshell": {
- "category": "Utilities",
- "choco": "open-shell",
- "content": "Open Shell (Start Menu)",
- "description": "Open Shell is a Windows Start Menu replacement with enhanced functionality and customization options.",
- "link": "https://github.com/Open-Shell/Open-Shell-Menu",
- "winget": "Open-Shell.Open-Shell-Menu"
- },
- "WPFInstallOpenVPN": {
- "category": "Pro Tools",
- "choco": "openvpn-connect",
- "content": "OpenVPN Connect",
- "description": "OpenVPN Connect is an open-source VPN client that allows you to connect securely to a VPN server. It provides a secure and encrypted connection for protecting your online privacy.",
- "link": "https://openvpn.net/",
- "winget": "OpenVPNTechnologies.OpenVPNConnect"
- },
- "WPFInstallOVirtualBox": {
- "category": "Utilities",
- "choco": "virtualbox",
- "content": "Oracle VirtualBox",
- "description": "Oracle VirtualBox is a powerful and free open-source virtualization tool for x86 and AMD64/Intel64 architectures.",
- "link": "https://www.virtualbox.org/",
- "winget": "Oracle.VirtualBox"
- },
- "WPFInstallownclouddesktop": {
- "category": "Utilities",
- "choco": "owncloud-client",
- "content": "ownCloud Desktop",
- "description": "ownCloud Desktop is the official desktop client for the ownCloud file synchronization and sharing platform.",
- "link": "https://owncloud.com/desktop-app/",
- "winget": "ownCloud.ownCloudDesktop"
- },
- "WPFInstallPaintdotnet": {
- "category": "Multimedia Tools",
- "choco": "paint.net",
- "content": "Paint.NET",
- "description": "Paint.NET is a free image and photo editing software for Windows. It features an intuitive user interface and supports a wide range of powerful editing tools.",
- "link": "https://www.getpaint.net/",
- "winget": "dotPDN.PaintDotNet"
- },
- "WPFInstallparsec": {
- "category": "Utilities",
- "choco": "parsec",
- "content": "Parsec",
- "description": "Parsec is a low-latency, high-quality remote desktop sharing application for collaborating and gaming across devices.",
- "link": "https://parsec.app/",
- "winget": "Parsec.Parsec"
- },
- "WPFInstallpdf24creator": {
- "category": "Document",
- "choco": "pdf24",
- "content": "PDF24 creator",
- "description": "Free and easy-to-use online/desktop PDF tools that make you more productive",
- "link": "https://tools.pdf24.org/en/",
- "winget": "geeksoftwareGmbH.PDF24Creator"
- },
- "WPFInstallpdfsam": {
- "category": "Document",
- "choco": "pdfsam",
- "content": "PDFsam Basic",
- "description": "PDFsam Basic is a free and open-source tool for splitting, merging, and rotating PDF files.",
- "link": "https://pdfsam.org/",
- "winget": "PDFsam.PDFsam"
- },
- "WPFInstallpeazip": {
- "category": "Utilities",
- "choco": "peazip",
- "content": "PeaZip",
- "description": "PeaZip is a free, open-source file archiver utility that supports multiple archive formats and provides encryption features.",
- "link": "https://peazip.github.io/",
- "winget": "Giorgiotani.Peazip"
- },
- "WPFInstallpiimager": {
- "category": "Utilities",
- "choco": "rpi-imager",
- "content": "Raspberry Pi Imager",
- "description": "Raspberry Pi Imager is a utility for writing operating system images to SD cards for Raspberry Pi devices.",
- "link": "https://www.raspberrypi.com/software/",
- "winget": "RaspberryPiFoundation.RaspberryPiImager"
- },
- "WPFInstallplaynite": {
- "category": "Games",
- "choco": "playnite",
- "content": "Playnite",
- "description": "Playnite is an open-source video game library manager with one simple goal: To provide a unified interface for all of your games.",
- "link": "https://playnite.link/",
- "winget": "Playnite.Playnite"
- },
- "WPFInstallplex": {
- "category": "Multimedia Tools",
- "choco": "plexmediaserver",
- "content": "Plex Media Server",
- "description": "Plex Media Server is a media server software that allows you to organize and stream your media library. It supports various media formats and offers a wide range of features.",
- "link": "https://www.plex.tv/your-media/",
- "winget": "Plex.PlexMediaServer"
- },
- "WPFInstallplexdesktop": {
- "category": "Multimedia Tools",
- "choco": "plex",
- "content": "Plex Desktop",
- "description": "Plex Desktop for Windows is the front end for Plex Media Server.",
- "link": "https://www.plex.tv",
- "winget": "Plex.Plex"
- },
- "WPFInstallPortmaster": {
- "category": "Pro Tools",
- "choco": "portmaster",
- "content": "Portmaster",
- "description": "Portmaster is a free and open-source application that puts you back in charge over all your computers network connections.",
- "link": "https://safing.io/",
- "winget": "Safing.Portmaster"
- },
- "WPFInstallposh": {
- "category": "Development",
- "choco": "oh-my-posh",
- "content": "Oh My Posh (Prompt)",
- "description": "Oh My Posh is a cross-platform prompt theme engine for any shell.",
- "link": "https://ohmyposh.dev/",
- "winget": "JanDeDobbeleer.OhMyPosh"
- },
- "WPFInstallpostman": {
- "category": "Development",
- "choco": "postman",
- "content": "Postman",
- "description": "Postman is a collaboration platform for API development that simplifies the process of developing APIs.",
- "link": "https://www.postman.com/",
- "winget": "Postman.Postman"
- },
- "WPFInstallpowerautomate": {
- "category": "Microsoft Tools",
- "choco": "powerautomatedesktop",
- "content": "Power Automate",
- "description": "Using Power Automate Desktop you can automate tasks on the desktop as well as the Web.",
- "link": "https://www.microsoft.com/en-us/power-platform/products/power-automate",
- "winget": "Microsoft.PowerAutomateDesktop"
- },
- "WPFInstallpowerbi": {
- "category": "Microsoft Tools",
- "choco": "powerbi",
- "content": "Power BI",
- "description": "Create stunning reports and visualizations with Power BI Desktop. It puts visual analytics at your fingertips with intuitive report authoring. Drag-and-drop to place content exactly where you want it on the flexible and fluid canvas. Quickly discover patterns as you explore a single unified view of linked, interactive visualizations.",
- "link": "https://www.microsoft.com/en-us/power-platform/products/power-bi/",
- "winget": "Microsoft.PowerBI"
- },
- "WPFInstallpowershell": {
- "category": "Microsoft Tools",
- "choco": "powershell-core",
- "content": "PowerShell",
- "description": "PowerShell is a task automation framework and scripting language designed for system administrators, offering powerful command-line capabilities.",
- "link": "https://github.com/PowerShell/PowerShell",
- "winget": "Microsoft.PowerShell"
- },
- "WPFInstallpowertoys": {
- "category": "Microsoft Tools",
- "choco": "powertoys",
- "content": "PowerToys",
- "description": "PowerToys is a set of utilities for power users to enhance productivity, featuring tools like FancyZones, PowerRename, and more.",
- "link": "https://github.com/microsoft/PowerToys",
- "winget": "Microsoft.PowerToys"
- },
- "WPFInstallprismlauncher": {
- "category": "Games",
- "choco": "prismlauncher",
- "content": "Prism Launcher",
- "description": "Prism Launcher is a game launcher and manager designed to provide a clean and intuitive interface for organizing and launching your games.",
- "link": "https://prismlauncher.org/",
- "winget": "PrismLauncher.PrismLauncher"
- },
- "WPFInstallprocesslasso": {
- "category": "Utilities",
- "choco": "plasso",
- "content": "Process Lasso",
- "description": "Process Lasso is a system optimization and automation tool that improves system responsiveness and stability by adjusting process priorities and CPU affinities.",
- "link": "https://bitsum.com/",
- "winget": "BitSum.ProcessLasso"
- },
- "WPFInstallspotify": {
- "category": "Multimedia Tools",
- "choco": "spotify",
- "content": "Spotify",
- "description": "Spotify is a digital music service that gives you access to millions of songs, podcasts, and videos from artists all over the world.",
- "link": "https://www.spotify.com/",
- "winget": "Spotify.Spotify"
- },
- "WPFInstallprocessmonitor": {
- "category": "Microsoft Tools",
- "choco": "procexp",
- "content": "SysInternals Process Monitor",
- "description": "SysInternals Process Monitor is an advanced monitoring tool that shows real-time file system, registry, and process/thread activity.",
- "link": "https://docs.microsoft.com/en-us/sysinternals/downloads/procmon",
- "winget": "Microsoft.Sysinternals.ProcessMonitor"
- },
- "WPFInstallorcaslicer": {
- "category": "Utilities",
- "choco": "orcaslicer",
- "content": "OrcaSlicer",
- "description": "G-code generator for 3D printers (Bambu, Prusa, Voron, VzBot, RatRig, Creality, etc.)",
- "link": "https://github.com/SoftFever/OrcaSlicer",
- "winget": "SoftFever.OrcaSlicer"
- },
- "WPFInstallprucaslicer": {
- "category": "Utilities",
- "choco": "prusaslicer",
- "content": "PrusaSlicer",
- "description": "PrusaSlicer is a powerful and easy-to-use slicing software for 3D printing with Prusa 3D printers.",
- "link": "https://www.prusa3d.com/prusaslicer/",
- "winget": "Prusa3d.PrusaSlicer"
- },
- "WPFInstallpsremoteplay": {
- "category": "Games",
- "choco": "ps-remote-play",
- "content": "PS Remote Play",
- "description": "PS Remote Play is a free application that allows you to stream games from your PlayStation console to a PC or mobile device.",
- "link": "https://remoteplay.dl.playstation.net/remoteplay/lang/gb/",
- "winget": "PlayStation.PSRemotePlay"
- },
- "WPFInstallputty": {
- "category": "Pro Tools",
- "choco": "putty",
- "content": "PuTTY",
- "description": "PuTTY is a free and open-source terminal emulator, serial console, and network file transfer application. It supports various network protocols such as SSH, Telnet, and SCP.",
- "link": "https://www.chiark.greenend.org.uk/~sgtatham/putty/",
- "winget": "PuTTY.PuTTY"
- },
- "WPFInstallpython3": {
- "category": "Development",
- "choco": "python",
- "content": "Python3",
- "description": "Python is a versatile programming language used for web development, data analysis, artificial intelligence, and more.",
- "link": "https://www.python.org/",
- "winget": "Python.Python.3.12"
- },
- "WPFInstallqbittorrent": {
- "category": "Utilities",
- "choco": "qbittorrent",
- "content": "qBittorrent",
- "description": "qBittorrent is a free and open-source BitTorrent client that aims to provide a feature-rich and lightweight alternative to other torrent clients.",
- "link": "https://www.qbittorrent.org/",
- "winget": "qBittorrent.qBittorrent"
- },
- "WPFInstalltransmission": {
- "category": "Utilities",
- "choco": "transmission",
- "content": "Transmission",
- "description": "Transmission is a cross-platform BitTorrent client that is open source, easy, powerful, and lean.",
- "link": "https://transmissionbt.com/",
- "winget": "Transmission.Transmission"
- },
- "WPFInstalltixati": {
- "category": "Utilities",
- "choco": "tixati.portable",
- "content": "Tixati",
- "description": "Tixati is a cross-platform BitTorrent client written in C++ that has been designed to be light on system resources.",
- "link": "https://www.tixati.com/",
- "winget": "Tixati.Tixati.Portable"
- },
- "WPFInstallqtox": {
- "category": "Communications",
- "choco": "qtox",
- "content": "QTox",
- "description": "QTox is a free and open-source messaging app that prioritizes user privacy and security in its design.",
- "link": "https://qtox.github.io/",
- "winget": "Tox.qTox"
- },
- "WPFInstallquicklook": {
- "category": "Utilities",
- "choco": "quicklook",
- "content": "Quicklook",
- "description": "Bring macOS “Quick Look” feature to Windows",
- "link": "https://github.com/QL-Win/QuickLook",
- "winget": "QL-Win.QuickLook"
- },
- "WPFInstallrainmeter": {
- "category": "Utilities",
- "choco": "na",
- "content": "Rainmeter",
- "description": "Rainmeter is a desktop customization tool that allows you to create and share customizable skins for your desktop.",
- "link": "https://www.rainmeter.net/",
- "winget": "Rainmeter.Rainmeter"
- },
- "WPFInstallrevo": {
- "category": "Utilities",
- "choco": "revo-uninstaller",
- "content": "Revo Uninstaller",
- "description": "Revo Uninstaller is an advanced uninstaller tool that helps you remove unwanted software and clean up your system.",
- "link": "https://www.revouninstaller.com/",
- "winget": "RevoUninstaller.RevoUninstaller"
- },
- "WPFInstallWiseProgramUninstaller": {
- "category": "Utilities",
- "choco": "na",
- "content": "Wise Program Uninstaller (WiseCleaner)",
- "description": "Wise Program Uninstaller is the perfect solution for uninstalling Windows programs, allowing you to uninstall applications quickly and completely using its simple and user-friendly interface.",
- "link": "https://www.wisecleaner.com/wise-program-uninstaller.html",
- "winget": "WiseCleaner.WiseProgramUninstaller"
- },
- "WPFInstallrevolt": {
- "category": "Communications",
- "choco": "na",
- "content": "Revolt",
- "description": "Find your community, connect with the world. Revolt is one of the best ways to stay connected with your friends and community without sacrificing any usability.",
- "link": "https://revolt.chat/",
- "winget": "Revolt.RevoltDesktop"
- },
- "WPFInstallripgrep": {
- "category": "Utilities",
- "choco": "ripgrep",
- "content": "Ripgrep",
- "description": "Fast and powerful commandline search tool",
- "link": "https://github.com/BurntSushi/ripgrep/",
- "winget": "BurntSushi.ripgrep.MSVC"
- },
- "WPFInstallrufus": {
- "category": "Utilities",
- "choco": "rufus",
- "content": "Rufus Imager",
- "description": "Rufus is a utility that helps format and create bootable USB drives, such as USB keys or pen drives.",
- "link": "https://rufus.ie/",
- "winget": "Rufus.Rufus"
- },
- "WPFInstallrustdesk": {
- "category": "Pro Tools",
- "choco": "rustdesk.portable",
- "content": "RustDesk",
- "description": "RustDesk is a free and open-source remote desktop application. It provides a secure way to connect to remote machines and access desktop environments.",
- "link": "https://rustdesk.com/",
- "winget": "RustDesk.RustDesk"
- },
- "WPFInstallrustlang": {
- "category": "Development",
- "choco": "rust",
- "content": "Rust",
- "description": "Rust is a programming language designed for safety and performance, particularly focused on systems programming.",
- "link": "https://www.rust-lang.org/",
- "winget": "Rustlang.Rust.MSVC"
- },
- "WPFInstallsagethumbs": {
- "category": "Utilities",
- "choco": "sagethumbs",
- "content": "SageThumbs",
- "description": "Provides support for thumbnails in Explorer with more formats.",
- "link": "https://sagethumbs.en.lo4d.com/windows",
- "winget": "CherubicSoftware.SageThumbs"
- },
- "WPFInstallsamsungmagician": {
- "category": "Utilities",
- "choco": "samsung-magician",
- "content": "Samsung Magician",
- "description": "Samsung Magician is a utility for managing and optimizing Samsung SSDs.",
- "link": "https://semiconductor.samsung.com/consumer-storage/magician/",
- "winget": "Samsung.SamsungMagician"
- },
- "WPFInstallsandboxie": {
- "category": "Utilities",
- "choco": "sandboxie",
- "content": "Sandboxie Plus",
- "description": "Sandboxie Plus is a sandbox-based isolation program that provides enhanced security by running applications in an isolated environment.",
- "link": "https://github.com/sandboxie-plus/Sandboxie",
- "winget": "Sandboxie.Plus"
- },
- "WPFInstallsdio": {
- "category": "Utilities",
- "choco": "sdio",
- "content": "Snappy Driver Installer Origin",
- "description": "Snappy Driver Installer Origin is a free and open-source driver updater with a vast driver database for Windows.",
- "link": "https://sourceforge.net/projects/snappy-driver-installer-origin",
- "winget": "GlennDelahoy.SnappyDriverInstallerOrigin"
- },
- "WPFInstallsession": {
- "category": "Communications",
- "choco": "session",
- "content": "Session",
- "description": "Session is a private and secure messaging app built on a decentralized network for user privacy and data protection.",
- "link": "https://getsession.org/",
- "winget": "Oxen.Session"
- },
- "WPFInstallsharex": {
- "category": "Multimedia Tools",
- "choco": "sharex",
- "content": "ShareX (Screenshots)",
- "description": "ShareX is a free and open-source screen capture and file sharing tool. It supports various capture methods and offers advanced features for editing and sharing screenshots.",
- "link": "https://getsharex.com/",
- "winget": "ShareX.ShareX"
- },
- "WPFInstallnilesoftShell": {
- "category": "Utilities",
- "choco": "nilesoft-shell",
- "content": "Nilesoft Shell",
- "description": "Shell is an expanded context menu tool that adds extra functionality and customization options to the Windows context menu.",
- "link": "https://nilesoft.org/",
- "winget": "Nilesoft.Shell"
- },
- "WPFInstallsidequest": {
- "category": "Games",
- "choco": "sidequest",
- "content": "SideQuestVR",
- "description": "SideQuestVR is a community-driven platform that enables users to discover, install, and manage virtual reality content on Oculus Quest devices.",
- "link": "https://sidequestvr.com/",
- "winget": "SideQuestVR.SideQuest"
- },
- "WPFInstallsignal": {
- "category": "Communications",
- "choco": "signal",
- "content": "Signal",
- "description": "Signal is a privacy-focused messaging app that offers end-to-end encryption for secure and private communication.",
- "link": "https://signal.org/",
- "winget": "OpenWhisperSystems.Signal"
- },
- "WPFInstallsignalrgb": {
- "category": "Utilities",
- "choco": "na",
- "content": "SignalRGB",
- "description": "SignalRGB lets you control and sync your favorite RGB devices with one free application.",
- "link": "https://www.signalrgb.com/",
- "winget": "WhirlwindFX.SignalRgb"
- },
- "WPFInstallsimplenote": {
- "category": "Document",
- "choco": "simplenote",
- "content": "simplenote",
- "description": "Simplenote is an easy way to keep notes, lists, ideas and more.",
- "link": "https://simplenote.com/",
- "winget": "Automattic.Simplenote"
- },
- "WPFInstallsimplewall": {
- "category": "Pro Tools",
- "choco": "simplewall",
- "content": "Simplewall",
- "description": "Simplewall is a free and open-source firewall application for Windows. It allows users to control and manage the inbound and outbound network traffic of applications.",
- "link": "https://github.com/henrypp/simplewall",
- "winget": "Henry++.simplewall"
- },
- "WPFInstallskype": {
- "category": "Communications",
- "choco": "skype",
- "content": "Skype",
- "description": "Skype is a widely used communication platform offering video calls, voice calls, and instant messaging services.",
- "link": "https://www.skype.com/",
- "winget": "Microsoft.Skype"
- },
- "WPFInstallslack": {
- "category": "Communications",
- "choco": "slack",
- "content": "Slack",
- "description": "Slack is a collaboration hub that connects teams and facilitates communication through channels, messaging, and file sharing.",
- "link": "https://slack.com/",
- "winget": "SlackTechnologies.Slack"
- },
- "WPFInstallspacedrive": {
- "category": "Utilities",
- "choco": "na",
- "content": "Spacedrive File Manager",
- "description": "Spacedrive is a file manager that offers cloud storage integration and file synchronization across devices.",
- "link": "https://www.spacedrive.com/",
- "winget": "spacedrive.Spacedrive"
- },
- "WPFInstallspacesniffer": {
- "category": "Utilities",
- "choco": "spacesniffer",
- "content": "SpaceSniffer",
- "description": "A tool application that lets you understand how folders and files are structured on your disks",
- "link": "http://www.uderzo.it/main_products/space_sniffer/",
- "winget": "UderzoSoftware.SpaceSniffer"
- },
- "WPFInstallspotube": {
- "category": "Multimedia Tools",
- "choco": "spotube",
- "content": "Spotube",
- "description": "Open source Spotify client that doesn't require Premium nor uses Electron! Available for both desktop & mobile! ",
- "link": "https://github.com/KRTirtho/spotube",
- "winget": "KRTirtho.Spotube"
- },
- "WPFInstallstarship": {
- "category": "Development",
- "choco": "starship",
- "content": "Starship (Shell Prompt)",
- "description": "Starship is a minimal, fast, and customizable prompt for any shell.",
- "link": "https://starship.rs/",
- "winget": "starship"
- },
- "WPFInstallsteam": {
- "category": "Games",
- "choco": "steam-client",
- "content": "Steam",
- "description": "Steam is a digital distribution platform for purchasing and playing video games, offering multiplayer gaming, video streaming, and more.",
- "link": "https://store.steampowered.com/about/",
- "winget": "Valve.Steam"
- },
- "WPFInstallstrawberry": {
- "category": "Multimedia Tools",
- "choco": "strawberrymusicplayer",
- "content": "Strawberry (Music Player)",
- "description": "Strawberry is an open-source music player that focuses on music collection management and audio quality. It supports various audio formats and features a clean user interface.",
- "link": "https://www.strawberrymusicplayer.org/",
- "winget": "StrawberryMusicPlayer.Strawberry"
- },
- "WPFInstallstremio": {
- "winget": "Stremio.Stremio",
- "choco": "stremio",
- "category": "Multimedia Tools",
- "content": "Stremio",
- "link": "https://www.stremio.com/",
- "description": "Stremio is a media center application that allows users to organize and stream their favorite movies, TV shows, and video content."
- },
- "WPFInstallsublimemerge": {
- "category": "Development",
- "choco": "sublimemerge",
- "content": "Sublime Merge",
- "description": "Sublime Merge is a Git client with advanced features and a beautiful interface.",
- "link": "https://www.sublimemerge.com/",
- "winget": "SublimeHQ.SublimeMerge"
- },
- "WPFInstallsublimetext": {
- "category": "Development",
- "choco": "sublimetext4",
- "content": "Sublime Text",
- "description": "Sublime Text is a sophisticated text editor for code, markup, and prose.",
- "link": "https://www.sublimetext.com/",
- "winget": "SublimeHQ.SublimeText.4"
- },
- "WPFInstallsumatra": {
- "category": "Document",
- "choco": "sumatrapdf",
- "content": "Sumatra PDF",
- "description": "Sumatra PDF is a lightweight and fast PDF viewer with minimalistic design.",
- "link": "https://www.sumatrapdfreader.org/free-pdf-reader.html",
- "winget": "SumatraPDF.SumatraPDF"
- },
- "WPFInstallpdfgear": {
- "category": "Document",
- "choco": "na",
- "content": "PDFgear",
- "description": "PDFgear is a piece of full-featured PDF management software for Windows, Mac, and mobile, and it's completely free to use.",
- "link": "https://www.pdfgear.com/",
- "winget": "PDFgear.PDFgear"
- },
- "WPFInstallsunshine": {
- "category": "Games",
- "choco": "sunshine",
- "content": "Sunshine/GameStream Server",
- "description": "Sunshine is a GameStream server that allows you to remotely play PC games on Android devices, offering low-latency streaming.",
- "link": "https://github.com/LizardByte/Sunshine",
- "winget": "LizardByte.Sunshine"
- },
- "WPFInstallsuperf4": {
- "category": "Utilities",
- "choco": "superf4",
- "content": "SuperF4",
- "description": "SuperF4 is a utility that allows you to terminate programs instantly by pressing a customizable hotkey.",
- "link": "https://stefansundin.github.io/superf4/",
- "winget": "StefanSundin.Superf4"
- },
- "WPFInstallswift": {
- "category": "Development",
- "choco": "na",
- "content": "Swift toolchain",
- "description": "Swift is a general-purpose programming language that's approachable for newcomers and powerful for experts.",
- "link": "https://www.swift.org/",
- "winget": "Swift.Toolchain"
- },
- "WPFInstallsynctrayzor": {
- "category": "Utilities",
- "choco": "synctrayzor",
- "content": "SyncTrayzor",
- "description": "Windows tray utility / filesystem watcher / launcher for Syncthing",
- "link": "https://github.com/canton7/SyncTrayzor/",
- "winget": "SyncTrayzor.SyncTrayzor"
- },
- "WPFInstallsqlmanagementstudio": {
- "category": "Microsoft Tools",
- "choco": "sql-server-management-studio",
- "content": "Microsoft SQL Server Management Studio",
- "description": "SQL Server Management Studio (SSMS) is an integrated environment for managing any SQL infrastructure, from SQL Server to Azure SQL Database. SSMS provides tools to configure, monitor, and administer instances of SQL Server and databases.",
- "link": "https://learn.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver16",
- "winget": "Microsoft.SQLServerManagementStudio"
- },
- "WPFInstalltabby": {
- "category": "Utilities",
- "choco": "tabby",
- "content": "Tabby.sh",
- "description": "Tabby is a highly configurable terminal emulator, SSH and serial client for Windows, macOS and Linux",
- "link": "https://tabby.sh/",
- "winget": "Eugeny.Tabby"
- },
- "WPFInstalltailscale": {
- "category": "Utilities",
- "choco": "tailscale",
- "content": "Tailscale",
- "description": "Tailscale is a secure and easy-to-use VPN solution for connecting your devices and networks.",
- "link": "https://tailscale.com/",
- "winget": "tailscale.tailscale"
- },
- "WPFInstallTcNoAccSwitcher": {
- "category": "Games",
- "choco": "tcno-acc-switcher",
- "content": "TCNO Account Switcher",
- "description": "A Super-fast account switcher for Steam, Battle.net, Epic Games, Origin, Riot, Ubisoft and many others!",
- "link": "https://github.com/TCNOco/TcNo-Acc-Switcher",
- "winget": "TechNobo.TcNoAccountSwitcher"
- },
- "WPFInstalltcpview": {
- "category": "Microsoft Tools",
- "choco": "tcpview",
- "content": "SysInternals TCPView",
- "description": "SysInternals TCPView is a network monitoring tool that displays a detailed list of all TCP and UDP endpoints on your system.",
- "link": "https://docs.microsoft.com/en-us/sysinternals/downloads/tcpview",
- "winget": "Microsoft.Sysinternals.TCPView"
- },
- "WPFInstallteams": {
- "category": "Communications",
- "choco": "microsoft-teams",
- "content": "Teams",
- "description": "Microsoft Teams is a collaboration platform that integrates with Office 365 and offers chat, video conferencing, file sharing, and more.",
- "link": "https://www.microsoft.com/en-us/microsoft-teams/group-chat-software",
- "winget": "Microsoft.Teams"
- },
- "WPFInstallteamviewer": {
- "category": "Utilities",
- "choco": "teamviewer9",
- "content": "TeamViewer",
- "description": "TeamViewer is a popular remote access and support software that allows you to connect to and control remote devices.",
- "link": "https://www.teamviewer.com/",
- "winget": "TeamViewer.TeamViewer"
- },
- "WPFInstalltelegram": {
- "category": "Communications",
- "choco": "telegram",
- "content": "Telegram",
- "description": "Telegram is a cloud-based instant messaging app known for its security features, speed, and simplicity.",
- "link": "https://telegram.org/",
- "winget": "Telegram.TelegramDesktop"
- },
- "WPFInstallunigram": {
- "category": "Communications",
- "choco": "na",
- "content": "Unigram",
- "description": "Unigram - Telegram for Windows",
- "link": "https://unigramdev.github.io/",
- "winget": "Telegram.Unigram"
- },
- "WPFInstallterminal": {
- "category": "Microsoft Tools",
- "choco": "microsoft-windows-terminal",
- "content": "Windows Terminal",
- "description": "Windows Terminal is a modern, fast, and efficient terminal application for command-line users, supporting multiple tabs, panes, and more.",
- "link": "https://aka.ms/terminal",
- "winget": "Microsoft.WindowsTerminal"
- },
- "WPFInstallThonny": {
- "category": "Development",
- "choco": "thonny",
- "content": "Thonny Python IDE",
- "description": "Python IDE for beginners.",
- "link": "https://github.com/thonny/thonny",
- "winget": "AivarAnnamaa.Thonny"
- },
- "WPFInstallMuEditor": {
- "category": "Development",
- "choco": "na",
- "content": "Code With Mu (Mu Editor)",
- "description": "Mu is a Python code editor for beginner programmers",
- "link": "https://codewith.mu/",
- "winget": "Mu.Mu"
- },
- "WPFInstallthorium": {
- "category": "Browsers",
- "choco": "na",
- "content": "Thorium Browser AVX2",
- "description": "Browser built for speed over vanilla chromium. It is built with AVX2 optimizations and is the fastest browser on the market.",
- "link": "http://thorium.rocks/",
- "winget": "Alex313031.Thorium.AVX2"
- },
- "WPFInstallthunderbird": {
- "category": "Communications",
- "choco": "thunderbird",
- "content": "Thunderbird",
- "description": "Mozilla Thunderbird is a free and open-source email client, news client, and chat client with advanced features.",
- "link": "https://www.thunderbird.net/",
- "winget": "Mozilla.Thunderbird"
- },
- "WPFInstallbetterbird": {
- "category": "Communications",
- "choco": "betterbird",
- "content": "Betterbird",
- "description": "Betterbird is a fork of Mozilla Thunderbird with additional features and bugfixes.",
- "link": "https://www.betterbird.eu/",
- "winget": "Betterbird.Betterbird"
- },
- "WPFInstalltidal": {
- "category": "Multimedia Tools",
- "choco": "na",
- "content": "Tidal",
- "description": "Tidal is a music streaming service known for its high-fidelity audio quality and exclusive content. It offers a vast library of songs and curated playlists.",
- "link": "https://tidal.com/",
- "winget": "9NNCB5BS59PH"
- },
- "WPFInstalltor": {
- "category": "Browsers",
- "choco": "tor-browser",
- "content": "Tor Browser",
- "description": "Tor Browser is designed for anonymous web browsing, utilizing the Tor network to protect user privacy and security.",
- "link": "https://www.torproject.org/",
- "winget": "TorProject.TorBrowser"
- },
- "WPFInstalltotalcommander": {
- "category": "Utilities",
- "choco": "TotalCommander",
- "content": "Total Commander",
- "description": "Total Commander is a file manager for Windows that provides a powerful and intuitive interface for file management.",
- "link": "https://www.ghisler.com/",
- "winget": "Ghisler.TotalCommander"
- },
- "WPFInstalltreesize": {
- "category": "Utilities",
- "choco": "treesizefree",
- "content": "TreeSize Free",
- "description": "TreeSize Free is a disk space manager that helps you analyze and visualize the space usage on your drives.",
- "link": "https://www.jam-software.com/treesize_free/",
- "winget": "JAMSoftware.TreeSize.Free"
- },
- "WPFInstallttaskbar": {
- "category": "Utilities",
- "choco": "translucenttb",
- "content": "Translucent Taskbar",
- "description": "Translucent Taskbar is a tool that allows you to customize the transparency of the Windows taskbar.",
- "link": "https://github.com/TranslucentTB/TranslucentTB",
- "winget": "9PF4KZ2VN4W9"
- },
- "WPFInstalltwinkletray": {
- "category": "Utilities",
- "choco": "twinkle-tray",
- "content": "Twinkle Tray",
- "description": "Twinkle Tray lets you easily manage the brightness levels of multiple monitors.",
- "link": "https://twinkletray.com/",
- "winget": "xanderfrangos.twinkletray"
- },
- "WPFInstallubisoft": {
- "category": "Games",
- "choco": "ubisoft-connect",
- "content": "Ubisoft Connect",
- "description": "Ubisoft Connect is Ubisoft's digital distribution and online gaming service, providing access to Ubisoft's games and services.",
- "link": "https://ubisoftconnect.com/",
- "winget": "Ubisoft.Connect"
- },
- "WPFInstallungoogled": {
- "category": "Browsers",
- "choco": "ungoogled-chromium",
- "content": "Ungoogled",
- "description": "Ungoogled Chromium is a version of Chromium without Google's integration for enhanced privacy and control.",
- "link": "https://github.com/Eloston/ungoogled-chromium",
- "winget": "eloston.ungoogled-chromium"
- },
- "WPFInstallunity": {
- "category": "Development",
- "choco": "unityhub",
- "content": "Unity Game Engine",
- "description": "Unity is a powerful game development platform for creating 2D, 3D, augmented reality, and virtual reality games.",
- "link": "https://unity.com/",
- "winget": "Unity.UnityHub"
- },
- "WPFInstallvagrant": {
- "category": "Development",
- "choco": "vagrant",
- "content": "Vagrant",
- "description": "Vagrant is an open-source tool for building and managing virtualized development environments.",
- "link": "https://www.vagrantup.com/",
- "winget": "Hashicorp.Vagrant"
- },
- "WPFInstallvc2015_32": {
- "category": "Microsoft Tools",
- "choco": "na",
- "content": "Visual C++ 2015-2022 32-bit",
- "description": "Visual C++ 2015-2022 32-bit redistributable package installs runtime components of Visual C++ libraries required to run 32-bit applications.",
- "link": "https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads",
- "winget": "Microsoft.VCRedist.2015+.x86"
- },
- "WPFInstallvc2015_64": {
- "category": "Microsoft Tools",
- "choco": "na",
- "content": "Visual C++ 2015-2022 64-bit",
- "description": "Visual C++ 2015-2022 64-bit redistributable package installs runtime components of Visual C++ libraries required to run 64-bit applications.",
- "link": "https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads",
- "winget": "Microsoft.VCRedist.2015+.x64"
- },
- "WPFInstallventoy": {
- "category": "Pro Tools",
- "choco": "ventoy",
- "content": "Ventoy",
- "description": "Ventoy is an open-source tool for creating bootable USB drives. It supports multiple ISO files on a single USB drive, making it a versatile solution for installing operating systems.",
- "link": "https://www.ventoy.net/",
- "winget": "Ventoy.Ventoy"
- },
- "WPFInstallvesktop": {
- "category": "Communications",
- "choco": "na",
- "content": "Vesktop",
- "description": "A cross platform electron-based desktop app aiming to give you a snappier Discord experience with Vencord pre-installed.",
- "link": "https://github.com/Vencord/Vesktop",
- "winget": "Vencord.Vesktop"
- },
- "WPFInstallviber": {
- "category": "Communications",
- "choco": "viber",
- "content": "Viber",
- "description": "Viber is a free messaging and calling app with features like group chats, video calls, and more.",
- "link": "https://www.viber.com/",
- "winget": "Viber.Viber"
- },
- "WPFInstallvideomass": {
- "category": "Multimedia Tools",
- "choco": "na",
- "content": "Videomass",
- "description": "Videomass by GianlucaPernigotto is a cross-platform GUI for FFmpeg, streamlining multimedia file processing with batch conversions and user-friendly features.",
- "link": "https://jeanslack.github.io/Videomass/",
- "winget": "GianlucaPernigotto.Videomass"
- },
- "WPFInstallvisualstudio": {
- "category": "Development",
- "choco": "visualstudio2022community",
- "content": "Visual Studio 2022",
- "description": "Visual Studio 2022 is an integrated development environment (IDE) for building, debugging, and deploying applications.",
- "link": "https://visualstudio.microsoft.com/",
- "winget": "Microsoft.VisualStudio.2022.Community"
- },
- "WPFInstallvivaldi": {
- "category": "Browsers",
- "choco": "vivaldi",
- "content": "Vivaldi",
- "description": "Vivaldi is a highly customizable web browser with a focus on user personalization and productivity features.",
- "link": "https://vivaldi.com/",
- "winget": "Vivaldi.Vivaldi"
- },
- "WPFInstallvlc": {
- "category": "Multimedia Tools",
- "choco": "vlc",
- "content": "VLC (Video Player)",
- "description": "VLC Media Player is a free and open-source multimedia player that supports a wide range of audio and video formats. It is known for its versatility and cross-platform compatibility.",
- "link": "https://www.videolan.org/vlc/",
- "winget": "VideoLAN.VLC"
- },
- "WPFInstallvoicemeeter": {
- "category": "Multimedia Tools",
- "choco": "voicemeeter",
- "content": "Voicemeeter (Audio)",
- "description": "Voicemeeter is a virtual audio mixer that allows you to manage and enhance audio streams on your computer. It is commonly used for audio recording and streaming purposes.",
- "link": "https://voicemeeter.com/",
- "winget": "VB-Audio.Voicemeeter"
- },
- "WPFInstallVoicemeeterPotato": {
- "category": "Multimedia Tools",
- "choco": "voicemeeter-potato",
- "content": "Voicemeeter Potato",
- "description": "Voicemeeter Potato is the ultimate version of the Voicemeeter Audio Mixer Application endowed with Virtual Audio Device to mix and manage any audio sources from or to any audio devices or applications.",
- "link": "https://voicemeeter.com/",
- "winget": "VB-Audio.Voicemeeter.Potato"
- },
- "WPFInstallvrdesktopstreamer": {
- "category": "Games",
- "choco": "na",
- "content": "Virtual Desktop Streamer",
- "description": "Virtual Desktop Streamer is a tool that allows you to stream your desktop screen to VR devices.",
- "link": "https://www.vrdesktop.net/",
- "winget": "VirtualDesktop.Streamer"
- },
- "WPFInstallvscode": {
- "category": "Development",
- "choco": "vscode",
- "content": "VS Code",
- "description": "Visual Studio Code is a free, open-source code editor with support for multiple programming languages.",
- "link": "https://code.visualstudio.com/",
- "winget": "Microsoft.VisualStudioCode"
- },
- "WPFInstallvscodium": {
- "category": "Development",
- "choco": "vscodium",
- "content": "VS Codium",
- "description": "VSCodium is a community-driven, freely-licensed binary distribution of Microsoft's VS Code.",
- "link": "https://vscodium.com/",
- "winget": "VSCodium.VSCodium"
- },
- "WPFInstallwaterfox": {
- "category": "Browsers",
- "choco": "waterfox",
- "content": "Waterfox",
- "description": "Waterfox is a fast, privacy-focused web browser based on Firefox, designed to preserve user choice and privacy.",
- "link": "https://www.waterfox.net/",
- "winget": "Waterfox.Waterfox"
- },
- "WPFInstallwazuh": {
- "category": "Utilities",
- "choco": "wazuh-agent",
- "content": "Wazuh.",
- "description": "Wazuh is an open-source security monitoring platform that offers intrusion detection, compliance checks, and log analysis.",
- "link": "https://wazuh.com/",
- "winget": "Wazuh.WazuhAgent"
- },
- "WPFInstallwezterm": {
- "category": "Development",
- "choco": "wezterm",
- "content": "Wezterm",
- "description": "WezTerm is a powerful cross-platform terminal emulator and multiplexer",
- "link": "https://wezfurlong.org/wezterm/index.html",
- "winget": "wez.wezterm"
- },
- "WPFInstallwindowspchealth": {
- "category": "Utilities",
- "choco": "na",
- "content": "Windows PC Health Check",
- "description": "Windows PC Health Check is a tool that helps you check if your PC meets the system requirements for Windows 11.",
- "link": "https://support.microsoft.com/en-us/windows/how-to-use-the-pc-health-check-app-9c8abd9b-03ba-4e67-81ef-36f37caa7844",
- "winget": "Microsoft.WindowsPCHealthCheck"
- },
- "WPFInstallWindowGrid": {
- "category": "Utilities",
- "choco": "windowgrid",
- "content": "WindowGrid",
- "description": "WindowGrid is a modern window management program for Windows that allows the user to quickly and easily layout their windows on a dynamic grid using just the mouse.",
- "link": "http://windowgrid.net/",
- "winget": "na"
- },
- "WPFInstallwingetui": {
- "category": "Utilities",
- "choco": "wingetui",
- "content": "UniGetUI",
- "description": "UniGetUI is a GUI for Winget, Chocolatey, and other Windows CLI package managers.",
- "link": "https://www.marticliment.com/wingetui/",
- "winget": "SomePythonThings.WingetUIStore"
- },
- "WPFInstallwinmerge": {
- "category": "Document",
- "choco": "winmerge",
- "content": "WinMerge",
- "description": "WinMerge is a visual text file and directory comparison tool for Windows.",
- "link": "https://winmerge.org/",
- "winget": "WinMerge.WinMerge"
- },
- "WPFInstallwinpaletter": {
- "category": "Utilities",
- "choco": "WinPaletter",
- "content": "WinPaletter",
- "description": "WinPaletter is a tool for adjusting the color palette of Windows 10, providing customization options for window colors.",
- "link": "https://github.com/Abdelrhman-AK/WinPaletter",
- "winget": "Abdelrhman-AK.WinPaletter"
- },
- "WPFInstallwinrar": {
- "category": "Utilities",
- "choco": "winrar",
- "content": "WinRAR",
- "description": "WinRAR is a powerful archive manager that allows you to create, manage, and extract compressed files.",
- "link": "https://www.win-rar.com/",
- "winget": "RARLab.WinRAR"
- },
- "WPFInstallwinscp": {
- "category": "Pro Tools",
- "choco": "winscp",
- "content": "WinSCP",
- "description": "WinSCP is a popular open-source SFTP, FTP, and SCP client for Windows. It allows secure file transfers between a local and a remote computer.",
- "link": "https://winscp.net/",
- "winget": "WinSCP.WinSCP"
- },
- "WPFInstallwireguard": {
- "category": "Pro Tools",
- "choco": "wireguard",
- "content": "WireGuard",
- "description": "WireGuard is a fast and modern VPN (Virtual Private Network) protocol. It aims to be simpler and more efficient than other VPN protocols, providing secure and reliable connections.",
- "link": "https://www.wireguard.com/",
- "winget": "WireGuard.WireGuard"
- },
- "WPFInstallwireshark": {
- "category": "Pro Tools",
- "choco": "wireshark",
- "content": "Wireshark",
- "description": "Wireshark is a widely-used open-source network protocol analyzer. It allows users to capture and analyze network traffic in real-time, providing detailed insights into network activities.",
- "link": "https://www.wireshark.org/",
- "winget": "WiresharkFoundation.Wireshark"
- },
- "WPFInstallwisetoys": {
- "category": "Utilities",
- "choco": "na",
- "content": "WiseToys",
- "description": "WiseToys is a set of utilities and tools designed to enhance and optimize your Windows experience.",
- "link": "https://toys.wisecleaner.com/",
- "winget": "WiseCleaner.WiseToys"
- },
- "WPFInstallTeraCopy": {
- "category": "Utilities",
- "choco": "TeraCopy",
- "content": "TeraCopy",
- "description": "Copy your files faster and more securely",
- "link": "https://codesector.com/teracopy",
- "winget": "CodeSector.TeraCopy"
- },
- "WPFInstallwizfile": {
- "category": "Utilities",
- "choco": "na",
- "content": "WizFile",
- "description": "Find files by name on your hard drives almost instantly.",
- "link": "https://antibody-software.com/wizfile/",
- "winget": "AntibodySoftware.WizFile"
- },
- "WPFInstallwiztree": {
- "category": "Utilities",
- "choco": "wiztree",
- "content": "WizTree",
- "description": "WizTree is a fast disk space analyzer that helps you quickly find the files and folders consuming the most space on your hard drive.",
- "link": "https://wiztreefree.com/",
- "winget": "AntibodySoftware.WizTree"
- },
- "WPFInstallxdm": {
- "category": "Utilities",
- "choco": "xdm",
- "content": "Xtreme Download Manager",
- "description": "Xtreme Download Manager is an advanced download manager with support for various protocols and browsers.*Browser integration deprecated by google store. No official release.*",
- "link": "https://xtremedownloadmanager.com/",
- "winget": "subhra74.XtremeDownloadManager"
- },
- "WPFInstallxeheditor": {
- "category": "Utilities",
- "choco": "HxD",
- "content": "HxD Hex Editor",
- "description": "HxD is a free hex editor that allows you to edit, view, search, and analyze binary files.",
- "link": "https://mh-nexus.de/en/hxd/",
- "winget": "MHNexus.HxD"
- },
- "WPFInstallxemu": {
- "category": "Games",
- "choco": "na",
- "content": "XEMU",
- "description": "XEMU is an open-source Xbox emulator that allows you to play Xbox games on your PC, aiming for accuracy and compatibility.",
- "link": "https://xemu.app/",
- "winget": "xemu-project.xemu"
- },
- "WPFInstallxnview": {
- "category": "Utilities",
- "choco": "xnview",
- "content": "XnView classic",
- "description": "XnView is an efficient image viewer, browser and converter for Windows.",
- "link": "https://www.xnview.com/en/xnview/",
- "winget": "XnSoft.XnView.Classic"
- },
- "WPFInstallxournal": {
- "category": "Document",
- "choco": "xournalplusplus",
- "content": "Xournal++",
- "description": "Xournal++ is an open-source handwriting notetaking software with PDF annotation capabilities.",
- "link": "https://xournalpp.github.io/",
- "winget": "Xournal++.Xournal++"
- },
- "WPFInstallxpipe": {
- "category": "Pro Tools",
- "choco": "xpipe",
- "content": "XPipe",
- "description": "XPipe is an open-source tool for orchestrating containerized applications. It simplifies the deployment and management of containerized services in a distributed environment.",
- "link": "https://xpipe.io/",
- "winget": "xpipe-io.xpipe"
- },
- "WPFInstallyarn": {
- "category": "Development",
- "choco": "yarn",
- "content": "Yarn",
- "description": "Yarn is a fast, reliable, and secure dependency management tool for JavaScript projects.",
- "link": "https://yarnpkg.com/",
- "winget": "Yarn.Yarn"
- },
- "WPFInstallytdlp": {
- "category": "Multimedia Tools",
- "choco": "yt-dlp",
- "content": "Yt-dlp",
- "description": "Command-line tool that allows you to download videos from YouTube and other supported sites. It is an improved version of the popular youtube-dl.",
- "link": "https://github.com/yt-dlp/yt-dlp",
- "winget": "yt-dlp.yt-dlp"
- },
- "WPFInstallzerotierone": {
- "category": "Utilities",
- "choco": "zerotier-one",
- "content": "ZeroTier One",
- "description": "ZeroTier One is a software-defined networking tool that allows you to create secure and scalable networks.",
- "link": "https://zerotier.com/",
- "winget": "ZeroTier.ZeroTierOne"
- },
- "WPFInstallzim": {
- "category": "Document",
- "choco": "zim",
- "content": "Zim Desktop Wiki",
- "description": "Zim Desktop Wiki is a graphical text editor used to maintain a collection of wiki pages.",
- "link": "https://zim-wiki.org/",
- "winget": "Zimwiki.Zim"
- },
- "WPFInstallznote": {
- "category": "Document",
- "choco": "na",
- "content": "Znote",
- "description": "Znote is a note-taking application.",
- "link": "https://znote.io/",
- "winget": "alagrede.znote"
- },
- "WPFInstallzoom": {
- "category": "Communications",
- "choco": "zoom",
- "content": "Zoom",
- "description": "Zoom is a popular video conferencing and web conferencing service for online meetings, webinars, and collaborative projects.",
- "link": "https://zoom.us/",
- "winget": "Zoom.Zoom"
- },
- "WPFInstallzoomit": {
- "category": "Utilities",
- "choco": "na",
- "content": "ZoomIt",
- "description": "A screen zoom, annotation, and recording tool for technical presentations and demos",
- "link": "https://learn.microsoft.com/en-us/sysinternals/downloads/zoomit",
- "winget": "Microsoft.Sysinternals.ZoomIt"
- },
- "WPFInstallzotero": {
- "category": "Document",
- "choco": "zotero",
- "content": "Zotero",
- "description": "Zotero is a free, easy-to-use tool to help you collect, organize, cite, and share your research materials.",
- "link": "https://www.zotero.org/",
- "winget": "DigitalScholar.Zotero"
- },
- "WPFInstallzoxide": {
- "category": "Utilities",
- "choco": "zoxide",
- "content": "Zoxide",
- "description": "Zoxide is a fast and efficient directory changer (cd) that helps you navigate your file system with ease.",
- "link": "https://github.com/ajeetdsouza/zoxide",
- "winget": "ajeetdsouza.zoxide"
- },
- "WPFInstallzulip": {
- "category": "Communications",
- "choco": "zulip",
- "content": "Zulip",
- "description": "Zulip is an open-source team collaboration tool with chat streams for productive and organized communication.",
- "link": "https://zulipchat.com/",
- "winget": "Zulip.Zulip"
- },
- "WPFInstallsyncthingtray": {
- "category": "Utilities",
- "choco": "syncthingtray",
- "content": "Syncthingtray",
- "description": "Might be the alternative for Synctrayzor. Windows tray utility / filesystem watcher / launcher for Syncthing",
- "link": "https://github.com/Martchus/syncthingtray",
- "winget": "Martchus.syncthingtray"
- },
- "WPFInstallminiconda": {
- "category": "Development",
- "choco": "miniconda3",
- "content": "Miniconda",
- "description": "Miniconda is a free minimal installer for conda. It is a small bootstrap version of Anaconda that includes only conda, Python, the packages they both depend on, and a small number of other useful packages (like pip, zlib, and a few others).",
- "link": "https://docs.conda.io/projects/miniconda",
- "winget": "Anaconda.Miniconda3"
- },
- "WPFInstallpixi": {
- "category": "Development",
- "choco": "pixi",
- "content": "Pixi",
- "description": "Pixi is a fast software package manager built on top of the existing conda ecosystem. Spins up development environments quickly on Windows, macOS and Linux. Pixi supports Python, R, C/C++, Rust, Ruby, and many other languages.",
- "link": "https://pixi.sh",
- "winget": "prefix-dev.pixi"
- },
- "WPFInstalltemurin": {
- "category": "Development",
- "choco": "temurin",
- "content": "Eclipse Temurin",
- "description": "Eclipse Temurin is the open source Java SE build based upon OpenJDK.",
- "link": "https://adoptium.net/temurin/",
- "winget": "EclipseAdoptium.Temurin.21.JDK"
- },
- "WPFInstallintelpresentmon": {
- "category": "Utilities",
- "choco": "na",
- "content": "Intel-PresentMon",
- "description": "A new gaming performance overlay and telemetry application to monitor and measure your gaming experience.",
- "link": "https://game.intel.com/us/stories/intel-presentmon/",
- "winget": "Intel.PresentMon.Beta"
- },
- "WPFInstallpyenvwin": {
- "category": "Development",
- "choco": "pyenv-win",
- "content": "Python Version Manager (pyenv-win)",
- "description": "pyenv for Windows is a simple python version management tool. It lets you easily switch between multiple versions of Python.",
- "link": "https://pyenv-win.github.io/pyenv-win/",
- "winget": "na"
- },
- "WPFInstalltightvnc": {
- "category": "Utilities",
- "choco": "TightVNC",
- "content": "TightVNC",
- "description": "TightVNC is a free and Open Source remote desktop software that lets you access and control a computer over the network. With its intuitive interface, you can interact with the remote screen as if you were sitting in front of it. You can open files, launch applications, and perform other actions on the remote desktop almost as if you were physically there",
- "link": "https://www.tightvnc.com/",
- "winget": "GlavSoft.TightVNC"
- },
- "WPFInstallultravnc": {
- "category": "Utilities",
- "choco": "ultravnc",
- "content": "UltraVNC",
- "description": "UltraVNC is a powerful, easy to use and free - remote pc access softwares - that can display the screen of another computer (via internet or network) on your own screen. The program allows you to use your mouse and keyboard to control the other PC remotely. It means that you can work on a remote computer, as if you were sitting in front of it, right from your current location.",
- "link": "https://uvnc.com/",
- "winget": "uvncbvba.UltraVnc"
- },
- "WPFInstallwindowsfirewallcontrol": {
- "category": "Utilities",
- "choco": "windowsfirewallcontrol",
- "content": "Windows Firewall Control",
- "description": "Windows Firewall Control is a powerful tool which extends the functionality of Windows Firewall and provides new extra features which makes Windows Firewall better.",
- "link": "https://www.binisoft.org/wfc",
- "winget": "BiniSoft.WindowsFirewallControl"
- },
- "WPFInstallvistaswitcher": {
- "category": "Utilities",
- "choco": "na",
- "content": "VistaSwitcher",
- "description": "VistaSwitcher makes it easier for you to locate windows and switch focus, even on multi-monitor systems. The switcher window consists of an easy-to-read list of all tasks running with clearly shown titles and a full-sized preview of the selected task.",
- "link": "https://www.ntwind.com/freeware/vistaswitcher.html",
- "winget": "ntwind.VistaSwitcher"
- },
- "WPFInstallautodarkmode": {
- "category": "Utilities",
- "choco": "auto-dark-mode",
- "content": "Windows Auto Dark Mode",
- "description": "Automatically switches between the dark and light theme of Windows 10 and Windows 11",
- "link": "https://github.com/AutoDarkMode/Windows-Auto-Night-Mode",
- "winget": "Armin2208.WindowsAutoNightMode"
- },
- "WPFInstallAmbieWhiteNoise": {
- "category": "Utilities",
- "choco": "na",
- "content": "Ambie White Noise",
- "description": "Ambie is the ultimate app to help you focus, study, or relax. We use white noise and nature sounds combined with an innovative focus timer to keep you concentrated on doing your best work.",
- "link": "https://ambieapp.com/",
- "winget": "9P07XNM5CHP0"
- },
- "WPFInstallmagicwormhole": {
- "category": "Utilities",
- "choco": "magic-wormhole",
- "content": "Magic Wormhole",
- "description": "get things from one computer to another, safely",
- "link": "https://github.com/magic-wormhole/magic-wormhole",
- "winget": "magic-wormhole.magic-wormhole"
- },
- "WPFInstallcroc": {
- "category": "Utilities",
- "choco": "croc",
- "content": "croc",
- "description": "Easily and securely send things from one computer to another.",
- "link": "https://github.com/schollz/croc",
- "winget": "schollz.croc"
- },
- "WPFInstallqgis": {
- "category": "Multimedia Tools",
- "choco": "qgis",
- "content": "QGIS",
- "description": "QGIS (Quantum GIS) is an open-source Geographic Information System (GIS) software that enables users to create, edit, visualize, analyze, and publish geospatial information on Windows, Mac, and Linux platforms.",
- "link": "https://qgis.org/en/site/",
- "winget": "OSGeo.QGIS"
- },
- "WPFInstallsmplayer": {
- "category": "Multimedia Tools",
- "choco": "smplayer",
- "content": "SMPlayer",
- "description": "SMPlayer is a free media player for Windows and Linux with built-in codecs that can play virtually all video and audio formats.",
- "link": "https://www.smplayer.info",
- "winget": "SMPlayer.SMPlayer"
- },
- "WPFInstallglazewm": {
- "category": "Utilities",
- "choco": "na",
- "content": "GlazeWM",
- "description": "GlazeWM is a tiling window manager for Windows inspired by i3 and Polybar",
- "link": "https://github.com/glzr-io/glazewm",
- "winget": "glzr-io.glazewm"
- },
- "WPFInstallfancontrol": {
- "category": "Utilities",
- "choco": "na",
- "content": "FanControl",
- "description": "Fan Control is a free and open-source software that allows the user to control his CPU, GPU and case fans using temperatures.",
- "link": "https://getfancontrol.com/",
- "winget": "Rem0o.FanControl"
- },
- "WPFInstallfnm": {
- "category": "Development",
- "choco": "fnm",
- "content": "Fast Node Manager",
- "description": "Fast Node Manager (fnm) allows you to switch your Node version by using the Terminal",
- "link": "https://github.com/Schniz/fnm",
- "winget": "Schniz.fnm"
- },
- "WPFInstallWindhawk": {
- "category": "Utilities",
- "choco": "windhawk",
- "content": "Windhawk",
- "description": "The customization marketplace for Windows programs",
- "link": "https://windhawk.net",
- "winget": "RamenSoftware.Windhawk"
- },
- "WPFInstallForceAutoHDR": {
- "category": "Utilities",
- "choco": "na",
- "content": "ForceAutoHDR",
- "description": "ForceAutoHDR simplifies the process of adding games to the AutoHDR list in the Windows Registry",
- "link": "https://github.com/7gxycn08/ForceAutoHDR",
- "winget": "ForceAutoHDR.7gxycn08"
- },
- "WPFInstallJoyToKey": {
- "category": "Utilities",
- "choco": "joytokey",
- "content": "JoyToKey",
- "description": "enables PC game controllers to emulate the keyboard and mouse input",
- "link": "https://joytokey.net/en/",
- "winget": "JTKsoftware.JoyToKey"
- },
- "WPFInstallnditools": {
- "category": "Multimedia Tools",
- "choco": "na",
- "content": "NDI Tools",
- "description": "NDI, or Network Device Interface, is a video connectivity standard that enables multimedia systems to identify and communicate with one another over IP and to encode, transmit, and receive high-quality, low latency, frame-accurate video and audio, and exchange metadata in real-time.",
- "link": "https://ndi.video/",
- "winget": "NDI.NDITools"
- },
- "WPFInstallkicad": {
- "category": "Multimedia Tools",
- "choco": "na",
- "content": "Kicad",
- "description": "Kicad is an open-source EDA tool. It's a good starting point for those who want to do electrical design and is even used by professionals in the industry.",
- "link": "https://www.kicad.org/",
- "winget": "KiCad.KiCad"
- },
- "WPFInstallFormatFactory": {
- "category": "Utilities",
- "choco": "formatfactory",
- "content": "Format Factory",
- "description": "FormatFactory is an ad-supported freeware multimedia converter that can convert video, audio, and picture files. It is also capable of ripping DVDs and CDs to other file formats, as well as creating .iso images. It can also join multiple video files together into one.",
- "link": "http://www.pcfreetime.com/formatfactory/",
- "winget": "na"
- },
- "WPFInstalldropox": {
- "category": "Utilities",
- "choco": "na",
- "content": "Dropbox",
- "description": "The Dropbox desktop app! Save hard drive space, share and edit files and send for signature ? all without the distraction of countless browser tabs.",
- "link": "https://www.dropbox.com/en_GB/desktop",
- "winget": "Dropbox.Dropbox"
- },
- "WPFInstallOFGB": {
- "category": "Utilities",
- "choco": "ofgb",
- "content": "OFGB (Oh Frick Go Back)",
- "description": "GUI Tool to remove ads from various places around Windows 11",
- "link": "https://github.com/xM4ddy/OFGB",
- "winget": "xM4ddy.OFGB"
- },
- "WPFInstallPaleMoon": {
- "category": "Browsers",
- "choco": "paleMoon",
- "content": "PaleMoon",
- "description": "Pale Moon is an Open Source, Goanna-based web browser available for Microsoft Windows and Linux (with other operating systems in development), focusing on efficiency and ease of use.",
- "link": "https://www.palemoon.org/download.shtml",
- "winget": "MoonchildProductions.PaleMoon"
- },
- "WPFInstallShotcut": {
- "category": "Multimedia Tools",
- "choco": "na",
- "content": "Shotcut",
- "description": "Shotcut is a free, open source, cross-platform video editor.",
- "link": "https://shotcut.org/",
- "winget": "Meltytech.Shotcut"
- },
- "WPFInstallLenovoLegionToolkit": {
- "category": "Utilities",
- "choco": "na",
- "content": "Lenovo Legion Toolkit",
- "description": "Lenovo Legion Toolkit (LLT) is a open-source utility created for Lenovo Legion (and similar) series laptops, that allows changing a couple of features that are only available in Lenovo Vantage or Legion Zone. It runs no background services, uses less memory, uses virtually no CPU, and contains no telemetry. Just like Lenovo Vantage, this application is Windows only.",
- "link": "https://github.com/BartoszCichecki/LenovoLegionToolkit",
- "winget": "BartoszCichecki.LenovoLegionToolkit"
- },
- "WPFInstallPulsarEdit": {
- "category": "Development",
- "choco": "pulsar",
- "content": "Pulsar",
- "description": "A Community-led Hyper-Hackable Text Editor",
- "link": "https://pulsar-edit.dev/",
- "winget": "Pulsar-Edit.Pulsar"
- },
- "WPFInstallAegisub": {
- "category": "Development",
- "choco": "aegisub",
- "content": "Aegisub",
- "description": "Aegisub is a free, cross-platform open source tool for creating and modifying subtitles. Aegisub makes it quick and easy to time subtitles to audio, and features many powerful tools for styling them, including a built-in real-time video preview.",
- "link": "https://github.com/Aegisub/Aegisub",
- "winget": "Aegisub.Aegisub"
- },
- "WPFInstallSubtitleEdit": {
- "category": "Multimedia Tools",
- "choco": "na",
- "content": "Subtitle Edit",
- "description": "Subtitle Edit is a free and open source editor for video subtitles.",
- "link": "https://github.com/SubtitleEdit/subtitleedit",
- "winget": "Nikse.SubtitleEdit"
- },
- "WPFInstallFork": {
- "category": "Development",
- "choco": "git-fork",
- "content": "Fork",
- "description": "Fork - a fast and friendly git client.",
- "link": "https://git-fork.com/",
- "winget": "Fork.Fork"
- }
-}' | convertfrom-json
-$sync.configs.dns = '{
- "Google": {
- "Primary": "8.8.8.8",
- "Secondary": "8.8.4.4",
- "Primary6": "2001:4860:4860::8888",
- "Secondary6": "2001:4860:4860::8844"
- },
- "Cloudflare": {
- "Primary": "1.1.1.1",
- "Secondary": "1.0.0.1",
- "Primary6": "2606:4700:4700::1111",
- "Secondary6": "2606:4700:4700::1001"
- },
- "Cloudflare_Malware": {
- "Primary": "1.1.1.2",
- "Secondary": "1.0.0.2",
- "Primary6": "2606:4700:4700::1112",
- "Secondary6": "2606:4700:4700::1002"
- },
- "Cloudflare_Malware_Adult": {
- "Primary": "1.1.1.3",
- "Secondary": "1.0.0.3",
- "Primary6": "2606:4700:4700::1113",
- "Secondary6": "2606:4700:4700::1003"
- },
- "Open_DNS": {
- "Primary": "208.67.222.222",
- "Secondary": "208.67.220.220",
- "Primary6": "2620:119:35::35",
- "Secondary6": "2620:119:53::53"
- },
- "Quad9": {
- "Primary": "9.9.9.9",
- "Secondary": "149.112.112.112",
- "Primary6": "2620:fe::fe",
- "Secondary6": "2620:fe::9"
- },
- "AdGuard_Ads_Trackers": {
- "Primary": "94.140.14.14",
- "Secondary": "94.140.15.15",
- "Primary6": "2a10:50c0::ad1:ff",
- "Secondary6": "2a10:50c0::ad2:ff"
- },
- "AdGuard_Ads_Trackers_Malware_Adult": {
- "Primary": "94.140.14.15",
- "Secondary": "94.140.15.16",
- "Primary6": "2a10:50c0::bad1:ff",
- "Secondary6": "2a10:50c0::bad2:ff"
- }
-}' | convertfrom-json
-$sync.configs.feature = '{
- "WPFFeaturesdotnet": {
- "Content": "All .Net Framework (2,3,4)",
- "Description": ".NET and .NET Framework is a developer platform made up of tools, programming languages, and libraries for building many different types of applications.",
- "category": "Features",
- "panel": "1",
- "Order": "a010_",
- "feature": [
- "NetFx4-AdvSrvs",
- "NetFx3"
- ],
- "InvokeScript": []
- },
- "WPFFeatureshyperv": {
- "Content": "HyperV Virtualization",
- "Description": "Hyper-V is a hardware virtualization product developed by Microsoft that allows users to create and manage virtual machines.",
- "category": "Features",
- "panel": "1",
- "Order": "a011_",
- "feature": [
- "HypervisorPlatform",
- "Microsoft-Hyper-V-All",
- "Microsoft-Hyper-V",
- "Microsoft-Hyper-V-Tools-All",
- "Microsoft-Hyper-V-Management-PowerShell",
- "Microsoft-Hyper-V-Hypervisor",
- "Microsoft-Hyper-V-Services",
- "Microsoft-Hyper-V-Management-Clients"
- ],
- "InvokeScript": [
- "Start-Process -FilePath cmd.exe -ArgumentList ''/c bcdedit /set hypervisorschedulertype classic'' -Wait"
- ]
- },
- "WPFFeatureslegacymedia": {
- "Content": "Legacy Media (WMP, DirectPlay)",
- "Description": "Enables legacy programs from previous versions of windows",
- "category": "Features",
- "panel": "1",
- "Order": "a012_",
- "feature": [
- "WindowsMediaPlayer",
- "MediaPlayback",
- "DirectPlay",
- "LegacyComponents"
- ],
- "InvokeScript": []
- },
- "WPFFeaturewsl": {
- "Content": "Windows Subsystem for Linux",
- "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.",
- "category": "Features",
- "panel": "1",
- "Order": "a020_",
- "feature": [
- "VirtualMachinePlatform",
- "Microsoft-Windows-Subsystem-Linux"
- ],
- "InvokeScript": []
- },
- "WPFFeaturenfs": {
- "Content": "NFS - Network File System",
- "Description": "Network File System (NFS) is a mechanism for storing files on a network.",
- "category": "Features",
- "panel": "1",
- "Order": "a014_",
- "feature": [
- "ServicesForNFS-ClientOnly",
- "ClientForNFS-Infrastructure",
- "NFS-Administration"
- ],
- "InvokeScript": [
- "nfsadmin client stop",
- "Set-ItemProperty -Path ''HKLM:\\SOFTWARE\\Microsoft\\ClientForNFS\\CurrentVersion\\Default'' -Name ''AnonymousUID'' -Type DWord -Value 0",
- "Set-ItemProperty -Path ''HKLM:\\SOFTWARE\\Microsoft\\ClientForNFS\\CurrentVersion\\Default'' -Name ''AnonymousGID'' -Type DWord -Value 0",
- "nfsadmin client start",
- "nfsadmin client localhost config fileaccess=755 SecFlavors=+sys -krb5 -krb5i"
- ]
- },
- "WPFFeatureEnableSearchSuggestions": {
- "Content": "Enable Search Box Web Suggestions in Registry(explorer restart)",
- "Description": "Enables web suggestions when searching using Windows Search.",
- "category": "Features",
- "panel": "1",
- "Order": "a015_",
- "feature": [],
- "InvokeScript": [
- "
- If (!(Test-Path ''HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer'')) {
- New-Item -Path ''HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer'' -Force | Out-Null
- }
- New-ItemProperty -Path ''HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer'' -Name ''DisableSearchBoxSuggestions'' -Type DWord -Value 0 -Force
- Stop-Process -name explorer -force
- "
- ]
- },
- "WPFFeatureDisableSearchSuggestions": {
- "Content": "Disable Search Box Web Suggestions in Registry(explorer restart)",
- "Description": "Disables web suggestions when searching using Windows Search.",
- "category": "Features",
- "panel": "1",
- "Order": "a016_",
- "feature": [],
- "InvokeScript": [
- "
- If (!(Test-Path ''HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer'')) {
- New-Item -Path ''HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer'' -Force | Out-Null
- }
- New-ItemProperty -Path ''HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer'' -Name ''DisableSearchBoxSuggestions'' -Type DWord -Value 1 -Force
- Stop-Process -name explorer -force
- "
- ]
- },
- "WPFFeatureRegBackup": {
- "Content": "Enable Daily Registry Backup Task 12.30am",
- "Description": "Enables daily registry backup, previously disabled by Microsoft in Windows 10 1803.",
- "category": "Features",
- "panel": "1",
- "Order": "a017_",
- "feature": [],
- "InvokeScript": [
- "
- New-ItemProperty -Path ''HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager'' -Name ''EnablePeriodicBackup'' -Type DWord -Value 1 -Force
- New-ItemProperty -Path ''HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager'' -Name ''BackupCount'' -Type DWord -Value 2 -Force
- $action = New-ScheduledTaskAction -Execute ''schtasks'' -Argument ''/run /i /tn \"\\Microsoft\\Windows\\Registry\\RegIdleBackup\"''
- $trigger = New-ScheduledTaskTrigger -Daily -At 00:30
- Register-ScheduledTask -Action $action -Trigger $trigger -TaskName ''AutoRegBackup'' -Description ''Create System Registry Backups'' -User ''System''
- "
- ]
- },
- "WPFFeatureEnableLegacyRecovery": {
- "Content": "Enable Legacy F8 Boot Recovery",
- "Description": "Enables Advanced Boot Options screen that lets you start Windows in advanced troubleshooting modes.",
- "category": "Features",
- "panel": "1",
- "Order": "a018_",
- "feature": [],
- "InvokeScript": [
- "
- If (!(Test-Path ''HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager\\LastKnownGood'')) {
- New-Item -Path ''HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager\\LastKnownGood'' -Force | Out-Null
- }
- New-ItemProperty -Path ''HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager\\LastKnownGood'' -Name ''Enabled'' -Type DWord -Value 1 -Force
- Start-Process -FilePath cmd.exe -ArgumentList ''/c bcdedit /Set {Current} BootMenuPolicy Legacy'' -Wait
- "
- ]
- },
- "WPFFeatureDisableLegacyRecovery": {
- "Content": "Disable Legacy F8 Boot Recovery",
- "Description": "Disables Advanced Boot Options screen that lets you start Windows in advanced troubleshooting modes.",
- "category": "Features",
- "panel": "1",
- "Order": "a019_",
- "feature": [],
- "InvokeScript": [
- "
- If (!(Test-Path ''HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager\\LastKnownGood'')) {
- New-Item -Path ''HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager\\LastKnownGood'' -Force | Out-Null
- }
- New-ItemProperty -Path ''HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager\\LastKnownGood'' -Name ''Enabled'' -Type DWord -Value 0 -Force
- Start-Process -FilePath cmd.exe -ArgumentList ''/c bcdedit /Set {Current} BootMenuPolicy Standard'' -Wait
- "
- ]
- },
- "WPFFeaturesandbox": {
- "Content": "Windows Sandbox",
- "category": "Features",
- "panel": "1",
- "Order": "a021_",
- "Description": "Windows Sandbox is a lightweight virtual machine that provides a temporary desktop environment to safely run applications and programs in isolation."
- },
- "WPFFeatureInstall": {
- "Content": "Install Features",
- "category": "Features",
- "panel": "1",
- "Order": "a060_",
- "Type": "Button",
- "ButtonWidth": "300"
- },
- "WPFPanelAutologin": {
- "Content": "Set Up Autologin",
- "category": "Fixes",
- "Order": "a040_",
- "panel": "1",
- "Type": "Button",
- "ButtonWidth": "300"
- },
- "WPFFixesUpdate": {
- "Content": "Reset Windows Update",
- "category": "Fixes",
- "panel": "1",
- "Order": "a041_",
- "Type": "Button",
- "ButtonWidth": "300"
- },
- "WPFFixesNetwork": {
- "Content": "Reset Network",
- "category": "Fixes",
- "Order": "a042_",
- "panel": "1",
- "Type": "Button",
- "ButtonWidth": "300"
- },
- "WPFPanelDISM": {
- "Content": "System Corruption Scan",
- "category": "Fixes",
- "panel": "1",
- "Order": "a043_",
- "Type": "Button",
- "ButtonWidth": "300"
- },
- "WPFFixesWinget": {
- "Content": "WinGet Reinstall",
- "category": "Fixes",
- "panel": "1",
- "Order": "a044_",
- "Type": "Button",
- "ButtonWidth": "300"
- },
- "WPFRunAdobeCCCleanerTool": {
- "Content": "Remove Adobe Creative Cloud",
- "category": "Fixes",
- "panel": "1",
- "Order": "a045_",
- "Type": "Button",
- "ButtonWidth": "300"
- },
- "WPFPanelnetwork": {
- "Content": "Network Connections",
- "category": "Legacy Windows Panels",
- "panel": "2",
- "Type": "Button",
- "ButtonWidth": "300"
- },
- "WPFPanelcontrol": {
- "Content": "Control Panel",
- "category": "Legacy Windows Panels",
- "panel": "2",
- "Type": "Button",
- "ButtonWidth": "300"
- },
- "WPFPanelpower": {
- "Content": "Power Panel",
- "category": "Legacy Windows Panels",
- "panel": "2",
- "Type": "Button",
- "ButtonWidth": "300"
- },
- "WPFPanelregion": {
- "Content": "Region",
- "category": "Legacy Windows Panels",
- "panel": "2",
- "Type": "Button",
- "ButtonWidth": "300"
- },
- "WPFPanelsound": {
- "Content": "Sound Settings",
- "category": "Legacy Windows Panels",
- "panel": "2",
- "Type": "Button",
- "ButtonWidth": "300"
- },
- "WPFPanelsystem": {
- "Content": "System Properties",
- "category": "Legacy Windows Panels",
- "panel": "2",
- "Type": "Button",
- "ButtonWidth": "300"
- },
- "WPFPaneluser": {
- "Content": "User Accounts",
- "category": "Legacy Windows Panels",
- "panel": "2",
- "Type": "Button",
- "ButtonWidth": "300"
- }
-}' | convertfrom-json
-$sync.configs.preset = '{
- "Standard": [
- "WPFTweaksAH",
- "WPFTweaksConsumerFeatures",
- "WPFTweaksDVR",
- "WPFTweaksHiber",
- "WPFTweaksHome",
- "WPFTweaksLoc",
- "WPFTweaksServices",
- "WPFTweaksStorage",
- "WPFTweaksTele",
- "WPFTweaksWifi",
- "WPFTweaksDiskCleanup",
- "WPFTweaksDeleteTempFiles",
- "WPFTweaksEndTaskOnTaskbar",
- "WPFTweaksRestorePoint",
- "WPFTweaksTeredo",
- "WPFTweaksPowershell7Tele"
- ],
- "Minimal": [
- "WPFTweaksConsumerFeatures",
- "WPFTweaksHome",
- "WPFTweaksServices",
- "WPFTweaksTele"
- ]
-}' | convertfrom-json
-$sync.configs.themes = '{
- "Classic": {
- "CustomDialogFontSize": "12",
- "CustomDialogFontSizeHeader": "14",
- "CustomDialogIconSize": "25",
- "CustomDialogWidth": "400",
- "CustomDialogHeight": "200",
- "FontSize": "12",
- "FontFamily": "Arial",
- "FontSizeHeading": "14",
- "HeaderFontFamily": "Consolas, Monaco",
- "CheckBoxBulletDecoratorFontSize": "14",
- "CheckBoxMargin": "15,0,0,2",
- "TabButtonFontSize": "14",
- "TabButtonWidth": "100",
- "TabButtonHeight": "25",
- "TabRowHeightInPixels": "50",
- "IconFontSize": "14",
- "IconButtonSize": "35",
- "WinUtilIconSize": "Auto",
- "SettingsIconFontSize": "18",
- "MicroWinLogoSize": "10",
- "ProgressBarForegroundColor": "#FFAC1C",
- "ProgressBarBackgroundColor": "Transparent",
- "ProgressBarTextColor": "#000000",
- "ComboBoxBackgroundColor": "#FFFFFF",
- "LabelboxForegroundColor": "#000000",
- "MainForegroundColor": "#000000",
- "MainBackgroundColor": "#FFFFFF",
- "LabelBackgroundColor": "#FAFAFA",
- "LinkForegroundColor": "#000000",
- "LinkHoverForegroundColor": "#000000",
- "GroupBorderBackgroundColor": "#000000",
- "ComboBoxForegroundColor": "#000000",
- "ButtonFontSize": "12",
- "ButtonFontFamily": "Arial",
- "ButtonWidth": "200",
- "ButtonHeight": "25",
- "ConfigTabButtonFontSize": "16",
- "SearchBarWidth": "200",
- "SearchBarHeight": "25",
- "SearchBarTextBoxFontSize": "16",
- "SearchBarClearButtonFontSize": "14",
- "ButtonInstallBackgroundColor": "#FFFFFF",
- "ButtonTweaksBackgroundColor": "#FFFFFF",
- "ButtonConfigBackgroundColor": "#FFFFFF",
- "ButtonUpdatesBackgroundColor": "#FFFFFF",
- "ButtonInstallForegroundColor": "#000000",
- "ButtonTweaksForegroundColor": "#000000",
- "ButtonConfigForegroundColor": "#000000",
- "ButtonUpdatesForegroundColor": "#000000",
- "ButtonBackgroundColor": "#F5F5F5",
- "ButtonBackgroundPressedColor": "#1A1A1A",
- "CheckboxMouseOverColor": "#999999",
- "ButtonBackgroundMouseoverColor": "#C2C2C2",
- "ButtonBackgroundSelectedColor": "#F0F0F0",
- "ButtonForegroundColor": "#000000",
- "ToggleButtonOnColor": "#2e77ff",
- "ButtonBorderThickness": "1",
- "ButtonMargin": "1",
- "ButtonCornerRadius": "2",
- "BorderColor": "#000000",
- "BorderOpacity": "0.2",
- "ShadowPulse": "Forever"
- },
- "Matrix": {
- "CustomDialogFontSize": "12",
- "CustomDialogFontSizeHeader": "14",
- "CustomDialogIconSize": "25",
- "CustomDialogWidth": "400",
- "CustomDialogHeight": "200",
- "FontSize": "12",
- "FontFamily": "Arial",
- "FontSizeHeading": "14",
- "HeaderFontFamily": "Consolas, Monaco",
- "CheckBoxBulletDecoratorFontSize": "14",
- "CheckBoxMargin": "15,0,0,2",
- "TabButtonFontSize": "14",
- "TabButtonWidth": "100",
- "TabButtonHeight": "25",
- "TabRowHeightInPixels": "50",
- "IconFontSize": "14",
- "IconButtonSize": "35",
- "WinUtilIconSize": "Auto",
- "SettingsIconFontSize": "18",
- "MicroWinLogoSize": "10",
- "ProgressBarForegroundColor": "#222222",
- "ProgressBarBackgroundColor": "Transparent",
- "ProgressBarTextColor": "#cccccc",
- "ComboBoxBackgroundColor": "#000000",
- "LabelboxForegroundColor": "#FFEE58",
- "MainForegroundColor": "#9CCC65",
- "MainBackgroundColor": "#000000",
- "LabelBackgroundColor": "#000000",
- "LinkForegroundColor": "#add8e6",
- "LinkHoverForegroundColor": "#FFFFFF",
- "ComboBoxForegroundColor": "#FFEE58",
- "ButtonFontSize": "12",
- "ButtonFontFamily": "Arial",
- "ButtonWidth": "200",
- "ButtonHeight": "25",
- "ConfigTabButtonFontSize": "16",
- "SearchBarWidth": "200",
- "SearchBarHeight": "25",
- "SearchBarTextBoxFontSize": "16",
- "SearchBarClearButtonFontSize": "14",
- "ButtonInstallBackgroundColor": "#222222",
- "ButtonTweaksBackgroundColor": "#333333",
- "ButtonConfigBackgroundColor": "#444444",
- "ButtonUpdatesBackgroundColor": "#555555",
- "ButtonInstallForegroundColor": "#FFFFFF",
- "ButtonTweaksForegroundColor": "#FFFFFF",
- "ButtonConfigForegroundColor": "#FFFFFF",
- "ButtonUpdatesForegroundColor": "#FFFFFF",
- "ButtonBackgroundColor": "#000019",
- "ButtonBackgroundPressedColor": "#FFFFFF",
- "ButtonBackgroundMouseoverColor": "#A55A64",
- "ButtonBackgroundSelectedColor": "#FF5733",
- "ButtonForegroundColor": "#9CCC65",
- "ToggleButtonOnColor": "#2e77ff",
- "ButtonBorderThickness": "1",
- "ButtonMargin": "1",
- "ButtonCornerRadius": "2",
- "BorderColor": "#FFAC1C",
- "BorderOpacity": "0.8",
- "ShadowPulse": "0:0:3"
- },
- "Dark": {
- "CustomDialogFontSize": "12",
- "CustomDialogFontSizeHeader": "14",
- "CustomDialogIconSize": "25",
- "CustomDialogWidth": "400",
- "CustomDialogHeight": "200",
- "FontSize": "12",
- "FontFamily": "Arial",
- "FontSizeHeading": "14",
- "HeaderFontFamily": "Consolas, Monaco",
- "CheckBoxBulletDecoratorFontSize": "14",
- "CheckBoxMargin": "15,0,0,2",
- "TabButtonFontSize": "14",
- "TabButtonWidth": "100",
- "TabButtonHeight": "25",
- "TabRowHeightInPixels": "50",
- "IconFontSize": "14",
- "IconButtonSize": "35",
- "WinUtilIconSize": "Auto",
- "SettingsIconFontSize": "18",
- "MicroWinLogoSize": "10",
- "ProgressBarForegroundColor": "#222222",
- "ProgressBarBackgroundColor": "Transparent",
- "ProgressBarTextColor": "#FFFFFF",
- "ComboBoxBackgroundColor": "#000000",
- "LabelboxForegroundColor": "#FFEE58",
- "MainForegroundColor": "#9CCC65",
- "MainBackgroundColor": "#000000",
- "LabelBackgroundColor": "#000000",
- "LinkForegroundColor": "#add8e6",
- "LinkHoverForegroundColor": "#FFFFFF",
- "ComboBoxForegroundColor": "#FFEE58",
- "ButtonFontSize": "12",
- "ButtonFontFamily": "Arial",
- "ButtonWidth": "200",
- "ButtonHeight": "25",
- "ConfigTabButtonFontSize": "16",
- "SearchBarWidth": "200",
- "SearchBarHeight": "25",
- "SearchBarTextBoxFontSize": "16",
- "SearchBarClearButtonFontSize": "14",
- "ButtonInstallBackgroundColor": "#222222",
- "ButtonTweaksBackgroundColor": "#333333",
- "ButtonConfigBackgroundColor": "#444444",
- "ButtonUpdatesBackgroundColor": "#555555",
- "ButtonInstallForegroundColor": "#FFFFFF",
- "ButtonTweaksForegroundColor": "#FFFFFF",
- "ButtonConfigForegroundColor": "#FFFFFF",
- "ButtonUpdatesForegroundColor": "#FFFFFF",
- "ButtonBackgroundColor": "#000019",
- "ButtonBackgroundPressedColor": "#9CCC65",
- "ButtonBackgroundMouseoverColor": "#FF5733",
- "ButtonBackgroundSelectedColor": "#FF5733",
- "ButtonForegroundColor": "#9CCC65",
- "ToggleButtonOnColor": "#2e77ff",
- "ButtonBorderThickness": "1",
- "ButtonMargin": "1",
- "ButtonCornerRadius": "2",
- "BorderColor": "#FFAC1C",
- "BorderOpacity": "0.2",
- "ShadowPulse": "Forever"
- }
-}' | convertfrom-json
-$sync.configs.tweaks = '{
- "WPFTweaksAH": {
- "Content": "Disable Activity History",
- "Description": "This erases recent docs, clipboard, and run history.",
- "category": "Essential Tweaks",
- "panel": "1",
- "Order": "a005_",
- "registry": [
- {
- "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\System",
- "Name": "EnableActivityFeed",
- "Type": "DWord",
- "Value": "0",
- "OriginalValue": "1"
- },
- {
- "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\System",
- "Name": "PublishUserActivities",
- "Type": "DWord",
- "Value": "0",
- "OriginalValue": "1"
- },
- {
- "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\System",
- "Name": "UploadUserActivities",
- "Type": "DWord",
- "Value": "0",
- "OriginalValue": "1"
- }
- ]
- },
- "WPFTweaksHiber": {
- "Content": "Disable Hibernation",
- "Description": "Hibernation is really meant for laptops as it saves what's in memory before turning the pc off. It really should never be used, but some people are lazy and rely on it. Don't be like Bob. Bob likes hibernation.",
- "category": "Essential Tweaks",
- "panel": "1",
- "Order": "a005_",
- "registry": [
- {
- "Path": "HKLM:\\System\\CurrentControlSet\\Control\\Session Manager\\Power",
- "Name": "HibernateEnabled",
- "Type": "DWord",
- "Value": "0",
- "OriginalValue": "1"
- },
- {
- "Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FlyoutMenuSettings",
- "Name": "ShowHibernateOption",
- "Type": "DWord",
- "Value": "0",
- "OriginalValue": "1"
- }
- ],
- "InvokeScript": [
- "powercfg.exe /hibernate off"
- ],
- "UndoScript": [
- "powercfg.exe /hibernate on"
- ]
- },
- "WPFTweaksLaptopHibernation": {
- "Content": "Set Hibernation as default (good for laptops)",
- "Description": "Most modern laptops have connected standby enabled which drains the battery, this sets hibernation as default which will not drain the battery. See issue https://github.com/ChrisTitusTech/winutil/issues/1399",
- "category": "Essential Tweaks",
- "panel": "1",
- "Order": "a014_",
- "registry": [
- {
- "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Power\\PowerSettings\\238C9FA8-0AAD-41ED-83F4-97BE242C8F20\\7bc4a2f9-d8fc-4469-b07b-33eb785aaca0",
- "OriginalValue": "1",
- "Name": "Attributes",
- "Value": "2",
- "Type": "DWord"
- },
- {
- "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Power\\PowerSettings\\abfc2519-3608-4c2a-94ea-171b0ed546ab\\94ac6d29-73ce-41a6-809f-6363ba21b47e",
- "OriginalValue": "0",
- "Name": "Attributes ",
- "Value": "2",
- "Type": "DWord"
- }
- ],
- "InvokeScript": [
- "
- Write-Host \"Turn on Hibernation\"
- Start-Process -FilePath powercfg -ArgumentList \"/hibernate on\" -NoNewWindow -Wait
-
- # Set hibernation as the default action
- Start-Process -FilePath powercfg -ArgumentList \"/change standby-timeout-ac 60\" -NoNewWindow -Wait
- Start-Process -FilePath powercfg -ArgumentList \"/change standby-timeout-dc 60\" -NoNewWindow -Wait
- Start-Process -FilePath powercfg -ArgumentList \"/change monitor-timeout-ac 10\" -NoNewWindow -Wait
- Start-Process -FilePath powercfg -ArgumentList \"/change monitor-timeout-dc 1\" -NoNewWindow -Wait
- "
- ],
- "UndoScript": [
- "
- Write-Host \"Turn off Hibernation\"
- Start-Process -FilePath powercfg -ArgumentList \"/hibernate off\" -NoNewWindow -Wait
-
- # Set standby to detault values
- Start-Process -FilePath powercfg -ArgumentList \"/change standby-timeout-ac 15\" -NoNewWindow -Wait
- Start-Process -FilePath powercfg -ArgumentList \"/change standby-timeout-dc 15\" -NoNewWindow -Wait
- Start-Process -FilePath powercfg -ArgumentList \"/change monitor-timeout-ac 15\" -NoNewWindow -Wait
- Start-Process -FilePath powercfg -ArgumentList \"/change monitor-timeout-dc 15\" -NoNewWindow -Wait
- "
- ]
- },
- "WPFTweaksHome": {
- "Content": "Disable Homegroup",
- "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.",
- "category": "Essential Tweaks",
- "panel": "1",
- "Order": "a005_",
- "service": [
- {
- "Name": "HomeGroupListener",
- "StartupType": "Manual",
- "OriginalType": "Automatic"
- },
- {
- "Name": "HomeGroupProvider",
- "StartupType": "Manual",
- "OriginalType": "Automatic"
- }
- ]
- },
- "WPFTweaksLoc": {
- "Content": "Disable Location Tracking",
- "Description": "Disables Location Tracking...DUH!",
- "category": "Essential Tweaks",
- "panel": "1",
- "Order": "a005_",
- "registry": [
- {
- "Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\CapabilityAccessManager\\ConsentStore\\location",
- "Name": "Value",
- "Type": "String",
- "Value": "Deny",
- "OriginalValue": "Allow"
- },
- {
- "Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Sensor\\Overrides\\{BFA794E4-F964-4FDB-90F6-51056BFE4B44}",
- "Name": "SensorPermissionState",
- "Type": "DWord",
- "Value": "0",
- "OriginalValue": "1"
- },
- {
- "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\lfsvc\\Service\\Configuration",
- "Name": "Status",
- "Type": "DWord",
- "Value": "0",
- "OriginalValue": "1"
- },
- {
- "Path": "HKLM:\\SYSTEM\\Maps",
- "Name": "AutoUpdateEnabled",
- "Type": "DWord",
- "Value": "0",
- "OriginalValue": "1"
- }
- ]
- },
- "WPFTweaksServices": {
- "Content": "Set Services to Manual",
- "Description": "Turns a bunch of system services to manual that don't need to be running all the time. This is pretty harmless as if the service is needed, it will simply start on demand.",
- "category": "Essential Tweaks",
- "panel": "1",
- "Order": "a014_",
- "service": [
- {
- "Name": "AJRouter",
- "StartupType": "Disabled",
- "OriginalType": "Manual"
- },
- {
- "Name": "ALG",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "AppIDSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "AppMgmt",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "AppReadiness",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "AppVClient",
- "StartupType": "Disabled",
- "OriginalType": "Disabled"
- },
- {
- "Name": "AppXSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "Appinfo",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "AssignedAccessManagerSvc",
- "StartupType": "Disabled",
- "OriginalType": "Manual"
- },
- {
- "Name": "AudioEndpointBuilder",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "AudioSrv",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "Audiosrv",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "AxInstSV",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "BDESVC",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "BFE",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "BITS",
- "StartupType": "AutomaticDelayedStart",
- "OriginalType": "Automatic"
- },
- {
- "Name": "BTAGService",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "BcastDVRUserService_*",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "BluetoothUserService_*",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "BrokerInfrastructure",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "Browser",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "BthAvctpSvc",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "BthHFSrv",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "CDPSvc",
- "StartupType": "Manual",
- "OriginalType": "Automatic"
- },
- {
- "Name": "CDPUserSvc_*",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "COMSysApp",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "CaptureService_*",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "CertPropSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "ClipSVC",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "ConsentUxUserSvc_*",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "CoreMessagingRegistrar",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "CredentialEnrollmentManagerUserSvc_*",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "CryptSvc",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "CscService",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "DPS",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "DcomLaunch",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "DcpSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "DevQueryBroker",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "DeviceAssociationBrokerSvc_*",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "DeviceAssociationService",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "DeviceInstall",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "DevicePickerUserSvc_*",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "DevicesFlowUserSvc_*",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "Dhcp",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "DiagTrack",
- "StartupType": "Disabled",
- "OriginalType": "Automatic"
- },
- {
- "Name": "DialogBlockingService",
- "StartupType": "Disabled",
- "OriginalType": "Disabled"
- },
- {
- "Name": "DispBrokerDesktopSvc",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "DisplayEnhancementService",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "DmEnrollmentSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "Dnscache",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "DoSvc",
- "StartupType": "AutomaticDelayedStart",
- "OriginalType": "Automatic"
- },
- {
- "Name": "DsSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "DsmSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "DusmSvc",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "EFS",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "EapHost",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "EntAppSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "EventLog",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "EventSystem",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "FDResPub",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "Fax",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "FontCache",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "FrameServer",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "FrameServerMonitor",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "GraphicsPerfSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "HomeGroupListener",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "HomeGroupProvider",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "HvHost",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "IEEtwCollectorService",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "IKEEXT",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "InstallService",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "InventorySvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "IpxlatCfgSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "KeyIso",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "KtmRm",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "LSM",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "LanmanServer",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "LanmanWorkstation",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "LicenseManager",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "LxpSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "MSDTC",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "MSiSCSI",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "MapsBroker",
- "StartupType": "AutomaticDelayedStart",
- "OriginalType": "Automatic"
- },
- {
- "Name": "McpManagementService",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "MessagingService_*",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "MicrosoftEdgeElevationService",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "MixedRealityOpenXRSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "MpsSvc",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "MsKeyboardFilter",
- "StartupType": "Manual",
- "OriginalType": "Disabled"
- },
- {
- "Name": "NPSMSvc_*",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "NaturalAuthentication",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "NcaSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "NcbService",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "NcdAutoSetup",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "NetSetupSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "NetTcpPortSharing",
- "StartupType": "Disabled",
- "OriginalType": "Disabled"
- },
- {
- "Name": "Netlogon",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "Netman",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "NgcCtnrSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "NgcSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "NlaSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "OneSyncSvc_*",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "P9RdrService_*",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "PNRPAutoReg",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "PNRPsvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "PcaSvc",
- "StartupType": "Manual",
- "OriginalType": "Automatic"
- },
- {
- "Name": "PeerDistSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "PenService_*",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "PerfHost",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "PhoneSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "PimIndexMaintenanceSvc_*",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "PlugPlay",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "PolicyAgent",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "Power",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "PrintNotify",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "PrintWorkflowUserSvc_*",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "ProfSvc",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "PushToInstall",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "QWAVE",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "RasAuto",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "RasMan",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "RemoteAccess",
- "StartupType": "Disabled",
- "OriginalType": "Disabled"
- },
- {
- "Name": "RemoteRegistry",
- "StartupType": "Disabled",
- "OriginalType": "Disabled"
- },
- {
- "Name": "RetailDemo",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "RmSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "RpcEptMapper",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "RpcLocator",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "RpcSs",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "SCPolicySvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "SCardSvr",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "SDRSVC",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "SEMgrSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "SENS",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "SNMPTRAP",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "SNMPTrap",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "SSDPSRV",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "SamSs",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "ScDeviceEnum",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "Schedule",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "SecurityHealthService",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "Sense",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "SensorDataService",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "SensorService",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "SensrSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "SessionEnv",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "SgrmBroker",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "SharedAccess",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "SharedRealitySvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "ShellHWDetection",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "SmsRouter",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "Spooler",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "SstpSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "StateRepository",
- "StartupType": "Manual",
- "OriginalType": "Automatic"
- },
- {
- "Name": "StiSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "StorSvc",
- "StartupType": "Manual",
- "OriginalType": "Automatic"
- },
- {
- "Name": "SysMain",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "SystemEventsBroker",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "TabletInputService",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "TapiSrv",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "TermService",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "TextInputManagementService",
- "StartupType": "Manual",
- "OriginalType": "Automatic"
- },
- {
- "Name": "Themes",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "TieringEngineService",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "TimeBroker",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "TimeBrokerSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "TokenBroker",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "TrkWks",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "TroubleshootingSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "TrustedInstaller",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "UI0Detect",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "UdkUserSvc_*",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "UevAgentService",
- "StartupType": "Disabled",
- "OriginalType": "Disabled"
- },
- {
- "Name": "UmRdpService",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "UnistoreSvc_*",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "UserDataSvc_*",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "UserManager",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "UsoSvc",
- "StartupType": "Manual",
- "OriginalType": "Automatic"
- },
- {
- "Name": "VGAuthService",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "VMTools",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "VSS",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "VacSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "VaultSvc",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "W32Time",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "WEPHOSTSVC",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "WFDSConMgrSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "WMPNetworkSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "WManSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "WPDBusEnum",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "WSService",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "WSearch",
- "StartupType": "AutomaticDelayedStart",
- "OriginalType": "Automatic"
- },
- {
- "Name": "WaaSMedicSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "WalletService",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "WarpJITSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "WbioSrvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "Wcmsvc",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "WcsPlugInService",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "WdNisSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "WdiServiceHost",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "WdiSystemHost",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "WebClient",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "Wecsvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "WerSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "WiaRpc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "WinDefend",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "WinHttpAutoProxySvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "WinRM",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "Winmgmt",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "WlanSvc",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "WpcMonSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "WpnService",
- "StartupType": "Manual",
- "OriginalType": "Automatic"
- },
- {
- "Name": "WpnUserService_*",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "XblAuthManager",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "XblGameSave",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "XboxGipSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "XboxNetApiSvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "autotimesvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "bthserv",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "camsvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "cbdhsvc_*",
- "StartupType": "Manual",
- "OriginalType": "Automatic"
- },
- {
- "Name": "cloudidsvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "dcsvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "defragsvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "diagnosticshub.standardcollector.service",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "diagsvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "dmwappushservice",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "dot3svc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "edgeupdate",
- "StartupType": "Manual",
- "OriginalType": "Automatic"
- },
- {
- "Name": "edgeupdatem",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "embeddedmode",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "fdPHost",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "fhsvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "gpsvc",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "hidserv",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "icssvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "iphlpsvc",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "lfsvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "lltdsvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "lmhosts",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "mpssvc",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "msiserver",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "netprofm",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "nsi",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "p2pimsvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "p2psvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "perceptionsimulation",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "pla",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "seclogon",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "shpamsvc",
- "StartupType": "Disabled",
- "OriginalType": "Disabled"
- },
- {
- "Name": "smphost",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "spectrum",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "sppsvc",
- "StartupType": "AutomaticDelayedStart",
- "OriginalType": "Automatic"
- },
- {
- "Name": "ssh-agent",
- "StartupType": "Disabled",
- "OriginalType": "Disabled"
- },
- {
- "Name": "svsvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "swprv",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "tiledatamodelsvc",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "tzautoupdate",
- "StartupType": "Disabled",
- "OriginalType": "Disabled"
- },
- {
- "Name": "uhssvc",
- "StartupType": "Disabled",
- "OriginalType": "Disabled"
- },
- {
- "Name": "upnphost",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "vds",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "vm3dservice",
- "StartupType": "Manual",
- "OriginalType": "Automatic"
- },
- {
- "Name": "vmicguestinterface",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "vmicheartbeat",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "vmickvpexchange",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "vmicrdv",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "vmicshutdown",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "vmictimesync",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "vmicvmsession",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "vmicvss",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "vmvss",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "wbengine",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "wcncsvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "webthreatdefsvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "webthreatdefusersvc_*",
- "StartupType": "Automatic",
- "OriginalType": "Automatic"
- },
- {
- "Name": "wercplsupport",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "wisvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "wlidsvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "wlpasvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "wmiApSrv",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "workfolderssvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "wscsvc",
- "StartupType": "AutomaticDelayedStart",
- "OriginalType": "Automatic"
- },
- {
- "Name": "wuauserv",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- },
- {
- "Name": "wudfsvc",
- "StartupType": "Manual",
- "OriginalType": "Manual"
- }
- ]
- },
- "WPFTweaksConsumerFeatures": {
- "Content": "Disable ConsumerFeatures",
- "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)",
- "category": "Essential Tweaks",
- "panel": "1",
- "Order": "a003_",
- "registry": [
- {
- "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\CloudContent",
- "OriginalValue": "0",
- "Name": "DisableWindowsConsumerFeatures",
- "Value": "1",
- "Type": "DWord"
- }
- ]
- },
- "WPFTweaksTele": {
- "Content": "Disable Telemetry",
- "Description": "Disables Microsoft Telemetry. Note: This will lock many Edge Browser settings. Microsoft spies heavily on you when using the Edge browser.",
- "category": "Essential Tweaks",
- "panel": "1",
- "Order": "a003_",
- "ScheduledTask": [
- {
- "Name": "Microsoft\\Windows\\Application Experience\\Microsoft Compatibility Appraiser",
- "State": "Disabled",
- "OriginalState": "Enabled"
- },
- {
- "Name": "Microsoft\\Windows\\Application Experience\\ProgramDataUpdater",
- "State": "Disabled",
- "OriginalState": "Enabled"
- },
- {
- "Name": "Microsoft\\Windows\\Autochk\\Proxy",
- "State": "Disabled",
- "OriginalState": "Enabled"
- },
- {
- "Name": "Microsoft\\Windows\\Customer Experience Improvement Program\\Consolidator",
- "State": "Disabled",
- "OriginalState": "Enabled"
- },
- {
- "Name": "Microsoft\\Windows\\Customer Experience Improvement Program\\UsbCeip",
- "State": "Disabled",
- "OriginalState": "Enabled"
- },
- {
- "Name": "Microsoft\\Windows\\DiskDiagnostic\\Microsoft-Windows-DiskDiagnosticDataCollector",
- "State": "Disabled",
- "OriginalState": "Enabled"
- },
- {
- "Name": "Microsoft\\Windows\\Feedback\\Siuf\\DmClient",
- "State": "Disabled",
- "OriginalState": "Enabled"
- },
- {
- "Name": "Microsoft\\Windows\\Feedback\\Siuf\\DmClientOnScenarioDownload",
- "State": "Disabled",
- "OriginalState": "Enabled"
- },
- {
- "Name": "Microsoft\\Windows\\Windows Error Reporting\\QueueReporting",
- "State": "Disabled",
- "OriginalState": "Enabled"
- },
- {
- "Name": "Microsoft\\Windows\\Application Experience\\MareBackup",
- "State": "Disabled",
- "OriginalState": "Enabled"
- },
- {
- "Name": "Microsoft\\Windows\\Application Experience\\StartupAppTask",
- "State": "Disabled",
- "OriginalState": "Enabled"
- },
- {
- "Name": "Microsoft\\Windows\\Application Experience\\PcaPatchDbTask",
- "State": "Disabled",
- "OriginalState": "Enabled"
- },
- {
- "Name": "Microsoft\\Windows\\Maps\\MapsUpdateTask",
- "State": "Disabled",
- "OriginalState": "Enabled"
- }
- ],
- "registry": [
- {
- "Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\DataCollection",
- "Type": "DWord",
- "Value": "0",
- "Name": "AllowTelemetry",
- "OriginalValue": "1"
- },
- {
- "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\DataCollection",
- "OriginalValue": "1",
- "Name": "AllowTelemetry",
- "Value": "0",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ContentDeliveryManager",
- "OriginalValue": "1",
- "Name": "ContentDeliveryAllowed",
- "Value": "0",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ContentDeliveryManager",
- "OriginalValue": "1",
- "Name": "OemPreInstalledAppsEnabled",
- "Value": "0",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ContentDeliveryManager",
- "OriginalValue": "1",
- "Name": "PreInstalledAppsEnabled",
- "Value": "0",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ContentDeliveryManager",
- "OriginalValue": "1",
- "Name": "PreInstalledAppsEverEnabled",
- "Value": "0",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ContentDeliveryManager",
- "OriginalValue": "1",
- "Name": "SilentInstalledAppsEnabled",
- "Value": "0",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\ContentDeliveryManager",
- "OriginalValue": "1",
- "Name": "SubscribedContent-338387Enabled",
- "Value": "0",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ContentDeliveryManager",
- "OriginalValue": "1",
- "Name": "SubscribedContent-338388Enabled",
- "Value": "0",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ContentDeliveryManager",
- "OriginalValue": "1",
- "Name": "SubscribedContent-338389Enabled",
- "Value": "0",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ContentDeliveryManager",
- "OriginalValue": "1",
- "Name": "SubscribedContent-353698Enabled",
- "Value": "0",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ContentDeliveryManager",
- "OriginalValue": "1",
- "Name": "SystemPaneSuggestionsEnabled",
- "Value": "0",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\SOFTWARE\\Microsoft\\Siuf\\Rules",
- "OriginalValue": "0",
- "Name": "NumberOfSIUFInPeriod",
- "Value": "0",
- "Type": "DWord"
- },
- {
- "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\DataCollection",
- "OriginalValue": "0",
- "Name": "DoNotShowFeedbackNotifications",
- "Value": "1",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\CloudContent",
- "OriginalValue": "0",
- "Name": "DisableTailoredExperiencesWithDiagnosticData",
- "Value": "1",
- "Type": "DWord"
- },
- {
- "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\AdvertisingInfo",
- "OriginalValue": "0",
- "Name": "DisabledByGroupPolicy",
- "Value": "1",
- "Type": "DWord"
- },
- {
- "Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\Windows Error Reporting",
- "OriginalValue": "0",
- "Name": "Disabled",
- "Value": "1",
- "Type": "DWord"
- },
- {
- "Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\DeliveryOptimization\\Config",
- "OriginalValue": "1",
- "Name": "DODownloadMode",
- "Value": "1",
- "Type": "DWord"
- },
- {
- "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Remote Assistance",
- "OriginalValue": "1",
- "Name": "fAllowToGetHelp",
- "Value": "0",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\OperationStatusManager",
- "OriginalValue": "0",
- "Name": "EnthusiastMode",
- "Value": "1",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
- "OriginalValue": "1",
- "Name": "ShowTaskViewButton",
- "Value": "0",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\\People",
- "OriginalValue": "1",
- "Name": "PeopleBand",
- "Value": "0",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
- "OriginalValue": "1",
- "Name": "LaunchTo",
- "Value": "1",
- "Type": "DWord"
- },
- {
- "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\FileSystem",
- "OriginalValue": "0",
- "Name": "LongPathsEnabled",
- "Value": "1",
- "Type": "DWord"
- },
- {
- "_Comment": "Driver searching is a function that should be left in",
- "Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\DriverSearching",
- "OriginalValue": "1",
- "Name": "SearchOrderConfig",
- "Value": "1",
- "Type": "DWord"
- },
- {
- "Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Multimedia\\SystemProfile",
- "OriginalValue": "1",
- "Name": "SystemResponsiveness",
- "Value": "0",
- "Type": "DWord"
- },
- {
- "Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Multimedia\\SystemProfile",
- "OriginalValue": "1",
- "Name": "NetworkThrottlingIndex",
- "Value": "4294967295",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\Control Panel\\Desktop",
- "OriginalValue": "1",
- "Name": "MenuShowDelay",
- "Value": "1",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\Control Panel\\Desktop",
- "OriginalValue": "1",
- "Name": "AutoEndTasks",
- "Value": "1",
- "Type": "DWord"
- },
- {
- "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Memory Management",
- "OriginalValue": "0",
- "Name": "ClearPageFileAtShutdown",
- "Value": "0",
- "Type": "DWord"
- },
- {
- "Path": "HKLM:\\SYSTEM\\ControlSet001\\Services\\Ndu",
- "OriginalValue": "1",
- "Name": "Start",
- "Value": "2",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\Control Panel\\Mouse",
- "OriginalValue": "400",
- "Name": "MouseHoverTime",
- "Value": "400",
- "Type": "String"
- },
- {
- "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\LanmanServer\\Parameters",
- "OriginalValue": "20",
- "Name": "IRPStackSize",
- "Value": "30",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Windows Feeds",
- "OriginalValue": "1",
- "Name": "EnableFeeds",
- "Value": "0",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Feeds",
- "OriginalValue": "1",
- "Name": "ShellFeedsTaskbarViewMode",
- "Value": "2",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer",
- "OriginalValue": "1",
- "Name": "HideSCAMeetNow",
- "Value": "1",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\UserProfileEngagement",
- "OriginalValue": "1",
- "Name": "ScoobeSystemSettingEnabled",
- "Value": "0",
- "Type": "DWord"
- }
- ],
- "InvokeScript": [
- "
- bcdedit /set `{current`} bootmenupolicy Legacy | Out-Null
- If ((get-ItemProperty -Path \"HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\" -Name CurrentBuild).CurrentBuild -lt 22557) {
- $taskmgr = Start-Process -WindowStyle Hidden -FilePath taskmgr.exe -PassThru
- Do {
- Start-Sleep -Milliseconds 100
- $preferences = Get-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\TaskManager\" -Name \"Preferences\" -ErrorAction SilentlyContinue
- } Until ($preferences)
- Stop-Process $taskmgr
- $preferences.Preferences[28] = 0
- Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\TaskManager\" -Name \"Preferences\" -Type Binary -Value $preferences.Preferences
- }
- Remove-Item -Path \"HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MyComputer\\NameSpace\\{0DB7E03F-FC29-4DC6-9020-FF41B59E513A}\" -Recurse -ErrorAction SilentlyContinue
-
- # Fix Managed by your organization in Edge if regustry path exists then remove it
-
- If (Test-Path \"HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge\") {
- Remove-Item -Path \"HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge\" -Recurse -ErrorAction SilentlyContinue
- }
-
- # Group svchost.exe processes
- $ram = (Get-CimInstance -ClassName Win32_PhysicalMemory | Measure-Object -Property Capacity -Sum).Sum / 1kb
- Set-ItemProperty -Path \"HKLM:\\SYSTEM\\CurrentControlSet\\Control\" -Name \"SvcHostSplitThresholdInKB\" -Type DWord -Value $ram -Force
-
- $autoLoggerDir = \"$env:PROGRAMDATA\\Microsoft\\Diagnosis\\ETLLogs\\AutoLogger\"
- If (Test-Path \"$autoLoggerDir\\AutoLogger-Diagtrack-Listener.etl\") {
- Remove-Item \"$autoLoggerDir\\AutoLogger-Diagtrack-Listener.etl\"
- }
- icacls $autoLoggerDir /deny SYSTEM:`(OI`)`(CI`)F | Out-Null
-
- # Disable Defender Auto Sample Submission
- Set-MpPreference -SubmitSamplesConsent 2 -ErrorAction SilentlyContinue | Out-Null
- "
- ]
- },
- "WPFTweaksWifi": {
- "Content": "Disable Wifi-Sense",
- "Description": "Wifi Sense is a spying service that phones home all nearby scanned wifi networks and your current geo location.",
- "category": "Essential Tweaks",
- "panel": "1",
- "Order": "a005_",
- "registry": [
- {
- "Path": "HKLM:\\Software\\Microsoft\\PolicyManager\\default\\WiFi\\AllowWiFiHotSpotReporting",
- "Name": "Value",
- "Type": "DWord",
- "Value": "0",
- "OriginalValue": "1"
- },
- {
- "Path": "HKLM:\\Software\\Microsoft\\PolicyManager\\default\\WiFi\\AllowAutoConnectToWiFiSenseHotspots",
- "Name": "Value",
- "Type": "DWord",
- "Value": "0",
- "OriginalValue": "1"
- }
- ]
- },
- "WPFTweaksUTC": {
- "Content": "Set Time to UTC (Dual Boot)",
- "Description": "Essential for computers that are dual booting. Fixes the time sync with Linux Systems.",
- "category": "z__Advanced Tweaks - CAUTION",
- "panel": "1",
- "Order": "a027_",
- "registry": [
- {
- "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\TimeZoneInformation",
- "Name": "RealTimeIsUniversal",
- "Type": "DWord",
- "Value": "1",
- "OriginalValue": "0"
- }
- ]
- },
- "WPFTweaksRemoveHomeGallery": {
- "Content": "Remove Home and Gallery from explorer",
- "Description": "Removes the Home and Gallery from explorer and sets This PC as default",
- "category": "z__Advanced Tweaks - CAUTION",
- "panel": "1",
- "Order": "a029_",
- "InvokeScript": [
- "
- REG DELETE \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Desktop\\NameSpace\\{e88865ea-0e1c-4e20-9aa6-edcd0212c87c}\" /f
- REG DELETE \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Desktop\\NameSpace\\{f874310e-b6b7-47dc-bc84-b9e6b38f5903}\" /f
- REG ADD \"HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\" /f /v \"LaunchTo\" /t REG_DWORD /d \"1\"
- "
- ],
- "UndoScript": [
- "
- REG ADD \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Desktop\\NameSpace\\{e88865ea-0e1c-4e20-9aa6-edcd0212c87c}\" /f /ve /t REG_SZ /d \"{e88865ea-0e1c-4e20-9aa6-edcd0212c87c}\"
- REG ADD \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Desktop\\NameSpace\\{f874310e-b6b7-47dc-bc84-b9e6b38f5903}\" /f /ve /t REG_SZ /d \"CLSID_MSGraphHomeFolder\"
- REG DELETE \"HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\" /f /v \"LaunchTo\"
- "
- ]
- },
- "WPFTweaksDisplay": {
- "Content": "Set Display for Performance",
- "Description": "Sets the system preferences to performance. You can do this manually with sysdm.cpl as well.",
- "category": "z__Advanced Tweaks - CAUTION",
- "panel": "1",
- "Order": "a027_",
- "registry": [
- {
- "Path": "HKCU:\\Control Panel\\Desktop",
- "OriginalValue": "1",
- "Name": "DragFullWindows",
- "Value": "0",
- "Type": "String"
- },
- {
- "Path": "HKCU:\\Control Panel\\Desktop",
- "OriginalValue": "1",
- "Name": "MenuShowDelay",
- "Value": "200",
- "Type": "String"
- },
- {
- "Path": "HKCU:\\Control Panel\\Desktop\\WindowMetrics",
- "OriginalValue": "1",
- "Name": "MinAnimate",
- "Value": "0",
- "Type": "String"
- },
- {
- "Path": "HKCU:\\Control Panel\\Keyboard",
- "OriginalValue": "1",
- "Name": "KeyboardDelay",
- "Value": "0",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
- "OriginalValue": "1",
- "Name": "ListviewAlphaSelect",
- "Value": "0",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
- "OriginalValue": "1",
- "Name": "ListviewShadow",
- "Value": "0",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
- "OriginalValue": "1",
- "Name": "TaskbarAnimations",
- "Value": "0",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\VisualEffects",
- "OriginalValue": "1",
- "Name": "VisualFXSetting",
- "Value": "3",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\Software\\Microsoft\\Windows\\DWM",
- "OriginalValue": "1",
- "Name": "EnableAeroPeek",
- "Value": "0",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
- "OriginalValue": "1",
- "Name": "TaskbarMn",
- "Value": "0",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
- "OriginalValue": "1",
- "Name": "TaskbarDa",
- "Value": "0",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
- "OriginalValue": "1",
- "Name": "ShowTaskViewButton",
- "Value": "0",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Search",
- "OriginalValue": "1",
- "Name": "SearchboxTaskbarMode",
- "Value": "0",
- "Type": "DWord"
- }
- ],
- "InvokeScript": [
- "Set-ItemProperty -Path \"HKCU:\\Control Panel\\Desktop\" -Name \"UserPreferencesMask\" -Type Binary -Value ([byte[]](144,18,3,128,16,0,0,0))"
- ],
- "UndoScript": [
- "Remove-ItemProperty -Path \"HKCU:\\Control Panel\\Desktop\" -Name \"UserPreferencesMask\""
- ]
- },
- "WPFTweaksDeBloat": {
- "Content": "Remove ALL MS Store Apps - NOT RECOMMENDED",
- "Description": "USE WITH CAUTION!!!!! This will remove ALL Microsoft store apps other than the essentials to make winget work. Games installed by MS Store ARE INCLUDED!",
- "category": "z__Advanced Tweaks - CAUTION",
- "panel": "1",
- "Order": "a028_",
- "appx": [
- "Microsoft.Microsoft3DViewer",
- "Microsoft.AppConnector",
- "Microsoft.BingFinance",
- "Microsoft.BingNews",
- "Microsoft.BingSports",
- "Microsoft.BingTranslator",
- "Microsoft.BingWeather",
- "Microsoft.BingFoodAndDrink",
- "Microsoft.BingHealthAndFitness",
- "Microsoft.BingTravel",
- "Microsoft.MinecraftUWP",
- "Microsoft.GamingServices",
- "Microsoft.GetHelp",
- "Microsoft.Getstarted",
- "Microsoft.Messaging",
- "Microsoft.Microsoft3DViewer",
- "Microsoft.MicrosoftSolitaireCollection",
- "Microsoft.NetworkSpeedTest",
- "Microsoft.News",
- "Microsoft.Office.Lens",
- "Microsoft.Office.Sway",
- "Microsoft.Office.OneNote",
- "Microsoft.OneConnect",
- "Microsoft.People",
- "Microsoft.Print3D",
- "Microsoft.SkypeApp",
- "Microsoft.Wallet",
- "Microsoft.Whiteboard",
- "Microsoft.WindowsAlarms",
- "microsoft.windowscommunicationsapps",
- "Microsoft.WindowsFeedbackHub",
- "Microsoft.WindowsMaps",
- "Microsoft.WindowsPhone",
- "Microsoft.WindowsSoundRecorder",
- "Microsoft.XboxApp",
- "Microsoft.ConnectivityStore",
- "Microsoft.CommsPhone",
- "Microsoft.ScreenSketch",
- "Microsoft.Xbox.TCUI",
- "Microsoft.XboxGameOverlay",
- "Microsoft.XboxGameCallableUI",
- "Microsoft.XboxSpeechToTextOverlay",
- "Microsoft.MixedReality.Portal",
- "Microsoft.XboxIdentityProvider",
- "Microsoft.ZuneMusic",
- "Microsoft.ZuneVideo",
- "Microsoft.Getstarted",
- "Microsoft.MicrosoftOfficeHub",
- "*EclipseManager*",
- "*ActiproSoftwareLLC*",
- "*AdobeSystemsIncorporated.AdobePhotoshopExpress*",
- "*Duolingo-LearnLanguagesforFree*",
- "*PandoraMediaInc*",
- "*CandyCrush*",
- "*BubbleWitch3Saga*",
- "*Wunderlist*",
- "*Flipboard*",
- "*Twitter*",
- "*Facebook*",
- "*Royal Revolt*",
- "*Sway*",
- "*Speed Test*",
- "*Dolby*",
- "*Viber*",
- "*ACGMediaPlayer*",
- "*Netflix*",
- "*OneCalendar*",
- "*LinkedInforWindows*",
- "*HiddenCityMysteryofShadows*",
- "*Hulu*",
- "*HiddenCity*",
- "*AdobePhotoshopExpress*",
- "*HotspotShieldFreeVPN*",
- "*Microsoft.Advertising.Xaml*"
- ],
- "InvokeScript": [
- "
- $TeamsPath = [System.IO.Path]::Combine($env:LOCALAPPDATA, ''Microsoft'', ''Teams'')
- $TeamsUpdateExePath = [System.IO.Path]::Combine($TeamsPath, ''Update.exe'')
-
- Write-Host \"Stopping Teams process...\"
- Stop-Process -Name \"*teams*\" -Force -ErrorAction SilentlyContinue
-
- Write-Host \"Uninstalling Teams from AppData\\Microsoft\\Teams\"
- if ([System.IO.File]::Exists($TeamsUpdateExePath)) {
- # Uninstall app
- $proc = Start-Process $TeamsUpdateExePath \"-uninstall -s\" -PassThru
- $proc.WaitForExit()
- }
-
- Write-Host \"Removing Teams AppxPackage...\"
- Get-AppxPackage \"*Teams*\" | Remove-AppxPackage -ErrorAction SilentlyContinue
- Get-AppxPackage \"*Teams*\" -AllUsers | Remove-AppxPackage -AllUsers -ErrorAction SilentlyContinue
-
- Write-Host \"Deleting Teams directory\"
- if ([System.IO.Directory]::Exists($TeamsPath)) {
- Remove-Item $TeamsPath -Force -Recurse -ErrorAction SilentlyContinue
- }
-
- Write-Host \"Deleting Teams uninstall registry key\"
- # Uninstall from Uninstall registry key UninstallString
- $us = (Get-ChildItem -Path HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall, HKLM:\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall | Get-ItemProperty | Where-Object { $_.DisplayName -like ''*Teams*''}).UninstallString
- if ($us.Length -gt 0) {
- $us = ($us.Replace(''/I'', ''/uninstall '') + '' /quiet'').Replace('' '', '' '')
- $FilePath = ($us.Substring(0, $us.IndexOf(''.exe'') + 4).Trim())
- $ProcessArgs = ($us.Substring($us.IndexOf(''.exe'') + 5).Trim().replace('' '', '' ''))
- $proc = Start-Process -FilePath $FilePath -Args $ProcessArgs -PassThru
- $proc.WaitForExit()
- }
- "
- ]
- },
- "WPFTweaksRestorePoint": {
- "Content": "Create Restore Point",
- "Description": "Creates a restore point at runtime in case a revert is needed from WinUtil modifications",
- "category": "Essential Tweaks",
- "panel": "1",
- "Checked": "False",
- "Order": "a001_",
- "InvokeScript": [
- "
- # Check if the user has administrative privileges
- if (-Not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
- Write-Host \"Please run this script as an administrator.\"
- return
- }
-
- # Check if System Restore is enabled for the main drive
- try {
- # Try getting restore points to check if System Restore is enabled
- Enable-ComputerRestore -Drive \"$env:SystemDrive\"
- } catch {
- Write-Host \"An error occurred while enabling System Restore: $_\"
- }
-
- # Check if the SystemRestorePointCreationFrequency value exists
- $exists = Get-ItemProperty -path \"HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\SystemRestore\" -Name \"SystemRestorePointCreationFrequency\" -ErrorAction SilentlyContinue
- if($null -eq $exists){
- write-host ''Changing system to allow multiple restore points per day''
- Set-ItemProperty -Path \"HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\SystemRestore\" -Name \"SystemRestorePointCreationFrequency\" -Value \"0\" -Type DWord -Force -ErrorAction Stop | Out-Null
- }
-
- # Attempt to load the required module for Get-ComputerRestorePoint
- try {
- Import-Module Microsoft.PowerShell.Management -ErrorAction Stop
- } catch {
- Write-Host \"Failed to load the Microsoft.PowerShell.Management module: $_\"
- return
- }
-
- # Get all the restore points for the current day
- try {
- $existingRestorePoints = Get-ComputerRestorePoint | Where-Object { $_.CreationTime.Date -eq (Get-Date).Date }
- } catch {
- Write-Host \"Failed to retrieve restore points: $_\"
- return
- }
-
- # Check if there is already a restore point created today
- if ($existingRestorePoints.Count -eq 0) {
- $description = \"System Restore Point created by WinUtil\"
-
- Checkpoint-Computer -Description $description -RestorePointType \"MODIFY_SETTINGS\"
- Write-Host -ForegroundColor Green \"System Restore Point Created Successfully\"
- }
- "
- ]
- },
- "WPFTweaksEndTaskOnTaskbar": {
- "Content": "Enable End Task With Right Click",
- "Description": "Enables option to end task when right clicking a program in the taskbar",
- "category": "Essential Tweaks",
- "panel": "1",
- "Order": "a006_",
- "InvokeScript": [
- "$path = \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\\TaskbarDeveloperSettings\"
- $name = \"TaskbarEndTask\"
- $value = 1
-
- # Ensure the registry key exists
- if (-not (Test-Path $path)) {
- New-Item -Path $path -Force | Out-Null
- }
-
- # Set the property, creating it if it doesn''t exist
- New-ItemProperty -Path $path -Name $name -PropertyType DWord -Value $value -Force | Out-Null"
- ],
- "UndoScript": [
- "$path = \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\\TaskbarDeveloperSettings\"
- $name = \"TaskbarEndTask\"
- $value = 0
-
- # Ensure the registry key exists
- if (-not (Test-Path $path)) {
- New-Item -Path $path -Force | Out-Null
- }
-
- # Set the property, creating it if it doesn''t exist
- New-ItemProperty -Path $path -Name $name -PropertyType DWord -Value $value -Force | Out-Null"
- ]
- },
- "WPFTweaksPowershell7": {
- "Content": "Change Windows Terminal default: PowerShell 5 -> PowerShell 7",
- "Description": "This will edit the config file of the Windows Terminal replacing PowerShell 5 with PowerShell 7 and installing PS7 if necessary",
- "category": "Essential Tweaks",
- "panel": "1",
- "Order": "a009_",
- "InvokeScript": [
- "Invoke-WPFTweakPS7 -action \"PS7\""
- ],
- "UndoScript": [
- "Invoke-WPFTweakPS7 -action \"PS5\""
- ]
- },
- "WPFTweaksPowershell7Tele": {
- "Content": "Disable Powershell 7 Telemetry",
- "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.",
- "category": "Essential Tweaks",
- "panel": "1",
- "Order": "a009_",
- "InvokeScript": [
- "[Environment]::SetEnvironmentVariable(''POWERSHELL_TELEMETRY_OPTOUT'', ''1'', ''Machine'')"
- ],
- "UndoScript": [
- "[Environment]::SetEnvironmentVariable(''POWERSHELL_TELEMETRY_OPTOUT'', '''', ''Machine'')"
- ]
- },
- "WPFTweaksStorage": {
- "Content": "Disable Storage Sense",
- "Description": "Storage Sense deletes temp files automatically.",
- "category": "Essential Tweaks",
- "panel": "1",
- "Order": "a005_",
- "InvokeScript": [
- "Set-ItemProperty -Path \"HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\StorageSense\\Parameters\\StoragePolicy\" -Name \"01\" -Value 0 -Type Dword -Force"
- ],
- "UndoScript": [
- "Set-ItemProperty -Path \"HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\StorageSense\\Parameters\\StoragePolicy\" -Name \"01\" -Value 1 -Type Dword -Force"
- ]
- },
- "WPFTweaksRemoveEdge": {
- "Content": "Remove Microsoft Edge - NOT RECOMMENDED",
- "Description": "Removes MS Edge when it gets reinstalled by updates. Credit: AveYo",
- "category": "z__Advanced Tweaks - CAUTION",
- "panel": "1",
- "Order": "a029_",
- "InvokeScript": [
- "
- #:: Standalone script by AveYo Source: https://raw.githubusercontent.com/AveYo/fox/main/Edge_Removal.bat
- Invoke-WebRequest -Uri \"https://raw.githubusercontent.com/ChrisTitusTech/winutil/main/edgeremoval.bat\" -OutFile \"$ENV:TEMP\\edgeremoval.bat\"
- Start-Process $ENV:temp\\edgeremoval.bat
- "
- ],
- "UndoScript": [
- "
- Write-Host \"Install Microsoft Edge\"
- Start-Process -FilePath winget -ArgumentList \"install -e --accept-source-agreements --accept-package-agreements --silent Microsoft.Edge \" -NoNewWindow -Wait
- "
- ]
- },
- "WPFTweaksRemoveCopilot": {
- "Content": "Disable Microsoft Copilot",
- "Description": "Disables MS Copilot AI built into Windows since 23H2.",
- "category": "z__Advanced Tweaks - CAUTION",
- "panel": "1",
- "Order": "a025_",
- "registry": [
- {
- "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsCopilot",
- "Name": "TurnOffWindowsCopilot",
- "Type": "DWord",
- "Value": "1",
- "OriginalValue": "0"
- },
- {
- "Path": "HKCU:\\Software\\Policies\\Microsoft\\Windows\\WindowsCopilot",
- "Name": "TurnOffWindowsCopilot",
- "Type": "DWord",
- "Value": "1",
- "OriginalValue": "0"
- },
- {
- "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
- "Name": "ShowCopilotButton",
- "Type": "DWord",
- "Value": "0",
- "OriginalValue": "1"
- }
- ],
- "InvokeScript": [
- "
- Write-Host \"Remove Copilot\"
- dism /online /remove-package /package-name:Microsoft.Windows.Copilot
- "
- ],
- "UndoScript": [
- "
- Write-Host \"Install Copilot\"
- dism /online /add-package /package-name:Microsoft.Windows.Copilot
- "
- ]
- },
- "WPFTweaksDisableLMS1": {
- "Content": "Disable Intel MM (vPro LMS)",
- "Description": "Intel LMS service is always listening on all ports and could be a huge security risk. There is no need to run LMS on home machines and even in the Enterprise there are better solutions.",
- "category": "z__Advanced Tweaks - CAUTION",
- "panel": "1",
- "Order": "a026_",
- "InvokeScript": [
- "
- Write-Host \"Kill LMS\"
- $serviceName = \"LMS\"
- Write-Host \"Stopping and disabling service: $serviceName\"
- Stop-Service -Name $serviceName -Force -ErrorAction SilentlyContinue;
- Set-Service -Name $serviceName -StartupType Disabled -ErrorAction SilentlyContinue;
-
- Write-Host \"Removing service: $serviceName\";
- sc.exe delete $serviceName;
-
- Write-Host \"Removing LMS driver packages\";
- $lmsDriverPackages = Get-ChildItem -Path \"C:\\Windows\\System32\\DriverStore\\FileRepository\" -Recurse -Filter \"lms.inf*\";
- foreach ($package in $lmsDriverPackages) {
- Write-Host \"Removing driver package: $($package.Name)\";
- pnputil /delete-driver $($package.Name) /uninstall /force;
- }
- if ($lmsDriverPackages.Count -eq 0) {
- Write-Host \"No LMS driver packages found in the driver store.\";
- } else {
- Write-Host \"All found LMS driver packages have been removed.\";
- }
-
- Write-Host \"Searching and deleting LMS executable files\";
- $programFilesDirs = @(\"C:\\Program Files\", \"C:\\Program Files (x86)\");
- $lmsFiles = @();
- foreach ($dir in $programFilesDirs) {
- $lmsFiles += Get-ChildItem -Path $dir -Recurse -Filter \"LMS.exe\" -ErrorAction SilentlyContinue;
- }
- foreach ($file in $lmsFiles) {
- Write-Host \"Taking ownership of file: $($file.FullName)\";
- & icacls $($file.FullName) /grant Administrators:F /T /C /Q;
- & takeown /F $($file.FullName) /A /R /D Y;
- Write-Host \"Deleting file: $($file.FullName)\";
- Remove-Item $($file.FullName) -Force -ErrorAction SilentlyContinue;
- }
- if ($lmsFiles.Count -eq 0) {
- Write-Host \"No LMS.exe files found in Program Files directories.\";
- } else {
- Write-Host \"All found LMS.exe files have been deleted.\";
- }
- Write-Host ''Intel LMS vPro service has been disabled, removed, and blocked.'';
- "
- ],
- "UndoScript": [
- "
- Write-Host \"LMS vPro needs to be redownloaded from intel.com\"
-
- "
- ]
- },
- "WPFTweaksRemoveOnedrive": {
- "Content": "Remove OneDrive",
- "Description": "Moves OneDrive files to Default Home Folders and Uninstalls it.",
- "category": "z__Advanced Tweaks - CAUTION",
- "panel": "1",
- "Order": "a030_",
- "InvokeScript": [
- "
- $OneDrivePath = $($env:OneDrive)
- Write-Host \"Removing OneDrive\"
- $regPath = \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OneDriveSetup.exe\"
- if (Test-Path $regPath){
- $OneDriveUninstallString = Get-ItemPropertyValue \"$regPath\" -Name \"UninstallString\"
- $OneDriveExe, $OneDriveArgs = $OneDriveUninstallString.Split(\" \")
- Start-Process -FilePath $OneDriveExe -ArgumentList \"$OneDriveArgs /silent\" -NoNewWindow -Wait
- }
- else{
- Write-Host \"Onedrive dosn''t seem to be installed anymore\" -ForegroundColor Red
- return
- }
- # Check if OneDrive got Uninstalled
- if (-not (Test-Path $regPath)){
- Write-Host \"Copy downloaded Files from the OneDrive Folder to Root UserProfile\"
- Start-Process -FilePath powershell -ArgumentList \"robocopy ''$($OneDrivePath)'' ''$($env:USERPROFILE.TrimEnd())\\'' /mov /e /xj\" -NoNewWindow -Wait
-
- Write-Host \"Removing OneDrive leftovers\"
- Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$env:localappdata\\Microsoft\\OneDrive\"
- Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$env:localappdata\\OneDrive\"
- Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$env:programdata\\Microsoft OneDrive\"
- Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$env:systemdrive\\OneDriveTemp\"
- reg delete \"HKEY_CURRENT_USER\\Software\\Microsoft\\OneDrive\" -f
- # check if directory is empty before removing:
- If ((Get-ChildItem \"$OneDrivePath\" -Recurse | Measure-Object).Count -eq 0) {
- Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$OneDrivePath\"
- }
-
- Write-Host \"Remove Onedrive from explorer sidebar\"
- Set-ItemProperty -Path \"HKCR:\\CLSID\\{018D5C66-4533-4307-9B53-224DE2ED1FE6}\" -Name \"System.IsPinnedToNameSpaceTree\" -Value 0
- Set-ItemProperty -Path \"HKCR:\\Wow6432Node\\CLSID\\{018D5C66-4533-4307-9B53-224DE2ED1FE6}\" -Name \"System.IsPinnedToNameSpaceTree\" -Value 0
-
- Write-Host \"Removing run hook for new users\"
- reg load \"hku\\Default\" \"C:\\Users\\Default\\NTUSER.DAT\"
- reg delete \"HKEY_USERS\\Default\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\" /v \"OneDriveSetup\" /f
- reg unload \"hku\\Default\"
-
- Write-Host \"Removing startmenu entry\"
- Remove-Item -Force -ErrorAction SilentlyContinue \"$env:userprofile\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\OneDrive.lnk\"
-
- Write-Host \"Removing scheduled task\"
- Get-ScheduledTask -TaskPath ''\\'' -TaskName ''OneDrive*'' -ea SilentlyContinue | Unregister-ScheduledTask -Confirm:$false
-
- # Add Shell folders restoring default locations
- Write-Host \"Shell Fixing\"
- Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"AppData\" -Value \"$env:userprofile\\AppData\\Roaming\" -Type ExpandString
- Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Cache\" -Value \"$env:userprofile\\AppData\\Local\\Microsoft\\Windows\\INetCache\" -Type ExpandString
- Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Cookies\" -Value \"$env:userprofile\\AppData\\Local\\Microsoft\\Windows\\INetCookies\" -Type ExpandString
- Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Favorites\" -Value \"$env:userprofile\\Favorites\" -Type ExpandString
- Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"History\" -Value \"$env:userprofile\\AppData\\Local\\Microsoft\\Windows\\History\" -Type ExpandString
- Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Local AppData\" -Value \"$env:userprofile\\AppData\\Local\" -Type ExpandString
- Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"My Music\" -Value \"$env:userprofile\\Music\" -Type ExpandString
- Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"My Video\" -Value \"$env:userprofile\\Videos\" -Type ExpandString
- Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"NetHood\" -Value \"$env:userprofile\\AppData\\Roaming\\Microsoft\\Windows\\Network Shortcuts\" -Type ExpandString
- Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"PrintHood\" -Value \"$env:userprofile\\AppData\\Roaming\\Microsoft\\Windows\\Printer Shortcuts\" -Type ExpandString
- Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Programs\" -Value \"$env:userprofile\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\" -Type ExpandString
- Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Recent\" -Value \"$env:userprofile\\AppData\\Roaming\\Microsoft\\Windows\\Recent\" -Type ExpandString
- Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"SendTo\" -Value \"$env:userprofile\\AppData\\Roaming\\Microsoft\\Windows\\SendTo\" -Type ExpandString
- Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Start Menu\" -Value \"$env:userprofile\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\" -Type ExpandString
- Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Startup\" -Value \"$env:userprofile\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\" -Type ExpandString
- Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Templates\" -Value \"$env:userprofile\\AppData\\Roaming\\Microsoft\\Windows\\Templates\" -Type ExpandString
- Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"{374DE290-123F-4565-9164-39C4925E467B}\" -Value \"$env:userprofile\\Downloads\" -Type ExpandString
- Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Desktop\" -Value \"$env:userprofile\\Desktop\" -Type ExpandString
- Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"My Pictures\" -Value \"$env:userprofile\\Pictures\" -Type ExpandString
- Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Personal\" -Value \"$env:userprofile\\Documents\" -Type ExpandString
- Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"{F42EE2D3-909F-4907-8871-4C22FC0BF756}\" -Value \"$env:userprofile\\Documents\" -Type ExpandString
- Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"{0DDD015D-B06C-45D5-8C4C-F59713854639}\" -Value \"$env:userprofile\\Pictures\" -Type ExpandString
- Write-Host \"Restarting explorer\"
- taskkill.exe /F /IM \"explorer.exe\"
- Start-Process \"explorer.exe\"
-
- Write-Host \"Waiting for explorer to complete loading\"
- Write-Host \"Please Note - The OneDrive folder at $OneDrivePath may still have items in it. You must manually delete it, but all the files should already be copied to the base user folder.\"
- Write-Host \"If there are Files missing afterwards, please Login to Onedrive.com and Download them manually\" -ForegroundColor Yellow
- Start-Sleep 5
- }
- else{
- Write-Host \"Something went Wrong during the Unistallation of OneDrive\" -ForegroundColor Red
- }
- "
- ],
- "UndoScript": [
- "
- Write-Host \"Install OneDrive\"
- Start-Process -FilePath winget -ArgumentList \"install -e --accept-source-agreements --accept-package-agreements --silent Microsoft.OneDrive \" -NoNewWindow -Wait
- "
- ]
- },
- "WPFTweaksDisableNotifications": {
- "Content": "Disable Notification Tray/Calendar",
- "Description": "Disables all Notifications INCLUDING Calendar",
- "category": "z__Advanced Tweaks - CAUTION",
- "panel": "1",
- "Order": "a026_",
- "registry": [
- {
- "Path": "HKCU:\\Software\\Policies\\Microsoft\\Windows\\Explorer",
- "Name": "DisableNotificationCenter",
- "Type": "DWord",
- "Value": "1",
- "OriginalValue": "0"
- },
- {
- "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\PushNotifications",
- "Name": "ToastEnabled",
- "Type": "DWord",
- "Value": "0",
- "OriginalValue": "1"
- }
- ]
- },
- "WPFTweaksDebloatAdobe": {
- "Content": "Adobe Debloat",
- "Description": "Manages Adobe Services, Adobe Desktop Service, and Acrobat Updates",
- "category": "z__Advanced Tweaks - CAUTION",
- "panel": "1",
- "Order": "a021_",
- "InvokeScript": [
- "
- function CCStopper {
- $path = \"C:\\Program Files (x86)\\Common Files\\Adobe\\Adobe Desktop Common\\ADS\\Adobe Desktop Service.exe\"
-
- # Test if the path exists before proceeding
- if (Test-Path $path) {
- Takeown /f $path
- $acl = Get-Acl $path
- $acl.SetOwner([System.Security.Principal.NTAccount]\"Administrators\")
- $acl | Set-Acl $path
-
- Rename-Item -Path $path -NewName \"Adobe Desktop Service.exe.old\" -Force
- } else {
- Write-Host \"Adobe Desktop Service is not in the default location.\"
- }
- }
-
-
- function AcrobatUpdates {
- # Editing Acrobat Updates. The last folder before the key is dynamic, therefore using a script.
- # Possible Values for the edited key:
- # 0 = Do not download or install updates automatically
- # 2 = Automatically download updates but let the user choose when to install them
- # 3 = Automatically download and install updates (default value)
- # 4 = Notify the user when an update is available but don''t download or install it automatically
- # = It notifies the user using Windows Notifications. It runs on startup without having to have a Service/Acrobat/Reader running, therefore 0 is the next best thing.
-
- $rootPath = \"HKLM:\\SOFTWARE\\WOW6432Node\\Adobe\\Adobe ARM\\Legacy\\Acrobat\"
-
- # Get all subkeys under the specified root path
- $subKeys = Get-ChildItem -Path $rootPath | Where-Object { $_.PSChildName -like \"{*}\" }
-
- # Loop through each subkey
- foreach ($subKey in $subKeys) {
- # Get the full registry path
- $fullPath = Join-Path -Path $rootPath -ChildPath $subKey.PSChildName
- try {
- Set-ItemProperty -Path $fullPath -Name Mode -Value 0
- Write-Host \"Acrobat Updates have been disabled.\"
- } catch {
- Write-Host \"Registry Key for changing Acrobat Updates does not exist in $fullPath\"
- }
- }
- }
-
- CCStopper
- AcrobatUpdates
- "
- ],
- "UndoScript": [
- "
- function RestoreCCService {
- $originalPath = \"C:\\Program Files (x86)\\Common Files\\Adobe\\Adobe Desktop Common\\ADS\\Adobe Desktop Service.exe.old\"
- $newPath = \"C:\\Program Files (x86)\\Common Files\\Adobe\\Adobe Desktop Common\\ADS\\Adobe Desktop Service.exe\"
-
- if (Test-Path -Path $originalPath) {
- Rename-Item -Path $originalPath -NewName \"Adobe Desktop Service.exe\" -Force
- Write-Host \"Adobe Desktop Service has been restored.\"
- } else {
- Write-Host \"Backup file does not exist. No changes were made.\"
- }
- }
-
- function AcrobatUpdates {
- # Default Value:
- # 3 = Automatically download and install updates
-
- $rootPath = \"HKLM:\\SOFTWARE\\WOW6432Node\\Adobe\\Adobe ARM\\Legacy\\Acrobat\"
-
- # Get all subkeys under the specified root path
- $subKeys = Get-ChildItem -Path $rootPath | Where-Object { $_.PSChildName -like \"{*}\" }
-
- # Loop through each subkey
- foreach ($subKey in $subKeys) {
- # Get the full registry path
- $fullPath = Join-Path -Path $rootPath -ChildPath $subKey.PSChildName
- try {
- Set-ItemProperty -Path $fullPath -Name Mode -Value 3
- } catch {
- Write-Host \"Registry Key for changing Acrobat Updates does not exist in $fullPath\"
- }
- }
- }
-
- RestoreCCService
- AcrobatUpdates
- "
- ],
- "service": [
- {
- "Name": "AGSService",
- "StartupType": "Disabled",
- "OriginalType": "Automatic"
- },
- {
- "Name": "AGMService",
- "StartupType": "Disabled",
- "OriginalType": "Automatic"
- },
- {
- "Name": "AdobeUpdateService",
- "StartupType": "Manual",
- "OriginalType": "Automatic"
- },
- {
- "Name": "Adobe Acrobat Update",
- "StartupType": "Manual",
- "OriginalType": "Automatic"
- },
- {
- "Name": "Adobe Genuine Monitor Service",
- "StartupType": "Disabled",
- "OriginalType": "Automatic"
- },
- {
- "Name": "AdobeARMservice",
- "StartupType": "Manual",
- "OriginalType": "Automatic"
- },
- {
- "Name": "Adobe Licensing Console",
- "StartupType": "Manual",
- "OriginalType": "Automatic"
- },
- {
- "Name": "CCXProcess",
- "StartupType": "Manual",
- "OriginalType": "Automatic"
- },
- {
- "Name": "AdobeIPCBroker",
- "StartupType": "Manual",
- "OriginalType": "Automatic"
- },
- {
- "Name": "CoreSync",
- "StartupType": "Manual",
- "OriginalType": "Automatic"
- }
- ]
- },
- "WPFTweaksBlockAdobeNet": {
- "Content": "Adobe Network Block",
- "Description": "Reduce user interruptions by selectively blocking connections to Adobe's activation and telemetry servers. Credit: Ruddernation-Designs",
- "category": "z__Advanced Tweaks - CAUTION",
- "panel": "1",
- "Order": "a021_",
- "InvokeScript": [
- "
- # Define the URL of the remote HOSTS file and the local paths
- $remoteHostsUrl = \"https://raw.githubusercontent.com/Ruddernation-Designs/Adobe-URL-Block-List/master/hosts\"
- $localHostsPath = \"C:\\Windows\\System32\\drivers\\etc\\hosts\"
- $tempHostsPath = \"C:\\Windows\\System32\\drivers\\etc\\temp_hosts\"
-
- # Download the remote HOSTS file to a temporary location
- try {
- Invoke-WebRequest -Uri $remoteHostsUrl -OutFile $tempHostsPath
- Write-Output \"Downloaded the remote HOSTS file to a temporary location.\"
- }
- catch {
- Write-Error \"Failed to download the HOSTS file. Error: $_\"
- }
-
- # Check if the AdobeNetBlock has already been started
- try {
- $localHostsContent = Get-Content $localHostsPath -ErrorAction Stop
-
- # Check if AdobeNetBlock markers exist
- $blockStartExists = $localHostsContent -like \"*#AdobeNetBlock-start*\"
- if ($blockStartExists) {
- Write-Output \"AdobeNetBlock-start already exists. Skipping addition of new block.\"
- } else {
- # Load the new block from the downloaded file
- $newBlockContent = Get-Content $tempHostsPath -ErrorAction Stop
- $newBlockContent = $newBlockContent | Where-Object { $_ -notmatch \"^\\s*#\" -and $_ -ne \"\" } # Exclude empty lines and comments
- $newBlockHeader = \"#AdobeNetBlock-start\"
- $newBlockFooter = \"#AdobeNetBlock-end\"
-
- # Combine the contents, ensuring new block is properly formatted
- $combinedContent = $localHostsContent + $newBlockHeader, $newBlockContent, $newBlockFooter | Out-String
-
- # Write the combined content back to the original HOSTS file
- $combinedContent | Set-Content $localHostsPath -Encoding ASCII
- Write-Output \"Successfully added the AdobeNetBlock.\"
- }
- }
- catch {
- Write-Error \"Error during processing: $_\"
- }
-
- # Clean up temporary file
- Remove-Item $tempHostsPath -ErrorAction Ignore
-
- # Flush the DNS resolver cache
- try {
- Invoke-Expression \"ipconfig /flushdns\"
- Write-Output \"DNS cache flushed successfully.\"
- }
- catch {
- Write-Error \"Failed to flush DNS cache. Error: $_\"
- }
- "
- ],
- "UndoScript": [
- "
- # Define the local path of the HOSTS file
- $localHostsPath = \"C:\\Windows\\System32\\drivers\\etc\\hosts\"
-
- # Load the content of the HOSTS file
- try {
- $hostsContent = Get-Content $localHostsPath -ErrorAction Stop
- }
- catch {
- Write-Error \"Failed to load the HOSTS file. Error: $_\"
- return
- }
-
- # Initialize flags and buffer for new content
- $recording = $true
- $newContent = @()
-
- # Iterate over each line of the HOSTS file
- foreach ($line in $hostsContent) {
- if ($line -match \"#AdobeNetBlock-start\") {
- $recording = $false
- }
- if ($recording) {
- $newContent += $line
- }
- if ($line -match \"#AdobeNetBlock-end\") {
- $recording = $true
- }
- }
-
- # Write the filtered content back to the HOSTS file
- try {
- $newContent | Set-Content $localHostsPath -Encoding ASCII
- Write-Output \"Successfully removed the AdobeNetBlock section from the HOSTS file.\"
- }
- catch {
- Write-Error \"Failed to write back to the HOSTS file. Error: $_\"
- }
-
- # Flush the DNS resolver cache
- try {
- Invoke-Expression \"ipconfig /flushdns\"
- Write-Output \"DNS cache flushed successfully.\"
- }
- catch {
- Write-Error \"Failed to flush DNS cache. Error: $_\"
- }
- "
- ]
- },
- "WPFTweaksRightClickMenu": {
- "Content": "Set Classic Right-Click Menu ",
- "Description": "Great Windows 11 tweak to bring back good context menus when right clicking things in explorer.",
- "category": "z__Advanced Tweaks - CAUTION",
- "panel": "1",
- "Order": "a027_",
- "InvokeScript": [
- "
- New-Item -Path \"HKCU:\\Software\\Classes\\CLSID\\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\" -Name \"InprocServer32\" -force -value \"\"
- Write-Host Restarting explorer.exe ...
- $process = Get-Process -Name \"explorer\"
- Stop-Process -InputObject $process
- "
- ],
- "UndoScript": [
- "
- Remove-Item -Path \"HKCU:\\Software\\Classes\\CLSID\\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\" -Recurse -Confirm:$false -Force
- # Restarting Explorer in the Undo Script might not be necessary, as the Registry change without restarting Explorer does work, but just to make sure.
- Write-Host Restarting explorer.exe ...
- $process = Get-Process -Name \"explorer\"
- Stop-Process -InputObject $process
- "
- ]
- },
- "WPFTweaksDiskCleanup": {
- "Content": "Run Disk Cleanup",
- "Description": "Runs Disk Cleanup on Drive C: and removes old Windows Updates.",
- "category": "Essential Tweaks",
- "panel": "1",
- "Order": "a009_",
- "InvokeScript": [
- "
- cleanmgr.exe /d C: /VERYLOWDISK
- Dism.exe /online /Cleanup-Image /StartComponentCleanup /ResetBase
- "
- ]
- },
- "WPFTweaksDeleteTempFiles": {
- "Content": "Delete Temporary Files",
- "Description": "Erases TEMP Folders",
- "category": "Essential Tweaks",
- "panel": "1",
- "Order": "a002_",
- "InvokeScript": [
- "Get-ChildItem -Path \"C:\\Windows\\Temp\" *.* -Recurse | Remove-Item -Force -Recurse
- Get-ChildItem -Path $env:TEMP *.* -Recurse | Remove-Item -Force -Recurse"
- ]
- },
- "WPFTweaksDVR": {
- "Content": "Disable GameDVR",
- "Description": "GameDVR is a Windows App that is a dependency for some Store Games. I've never met someone that likes it, but it's there for the XBOX crowd.",
- "category": "Essential Tweaks",
- "panel": "1",
- "Order": "a005_",
- "registry": [
- {
- "Path": "HKCU:\\System\\GameConfigStore",
- "Name": "GameDVR_FSEBehavior",
- "Value": "2",
- "OriginalValue": "1",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\System\\GameConfigStore",
- "Name": "GameDVR_Enabled",
- "Value": "0",
- "OriginalValue": "1",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\System\\GameConfigStore",
- "Name": "GameDVR_HonorUserFSEBehaviorMode",
- "Value": "1",
- "OriginalValue": "0",
- "Type": "DWord"
- },
- {
- "Path": "HKCU:\\System\\GameConfigStore",
- "Name": "GameDVR_EFSEFeatureFlags",
- "Value": "0",
- "OriginalValue": "1",
- "Type": "DWord"
- },
- {
- "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\GameDVR",
- "Name": "AllowGameDVR",
- "Value": "0",
- "OriginalValue": "1",
- "Type": "DWord"
- }
- ]
- },
- "WPFTweaksTeredo": {
- "Content": "Disable Teredo",
- "Description": "Teredo network tunneling is a ipv6 feature that can cause additional latency.",
- "category": "Essential Tweaks",
- "panel": "1",
- "Order": "a005_",
- "registry": [
- {
- "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters",
- "Name": "DisabledComponents",
- "Value": "1",
- "OriginalValue": "0",
- "Type": "DWord"
- }
- ],
- "InvokeScript": [
- "netsh interface teredo set state disabled"
- ],
- "UndoScript": [
- "netsh interface teredo set state default"
- ]
- },
- "WPFTweaksDisableipsix": {
- "Content": "Disable IPv6",
- "Description": "Disables IPv6.",
- "category": "z__Advanced Tweaks - CAUTION",
- "panel": "1",
- "Order": "a023_",
- "registry": [
- {
- "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters",
- "Name": "DisabledComponents",
- "Value": "255",
- "OriginalValue": "0",
- "Type": "DWord"
- }
- ],
- "InvokeScript": [
- "Disable-NetAdapterBinding -Name \"*\" -ComponentID ms_tcpip6"
- ],
- "UndoScript": [
- "Enable-NetAdapterBinding -Name \"*\" -ComponentID ms_tcpip6"
- ]
- },
- "WPFTweaksDisableBGapps": {
- "Content": "Disable Background Apps",
- "Description": "Disables all Microsoft Store apps from running in the background, which has to be done individually since Win11",
- "category": "z__Advanced Tweaks - CAUTION",
- "panel": "1",
- "Order": "a024_",
- "registry": [
- {
- "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\BackgroundAccessApplications",
- "Name": "GlobalUserDisabled",
- "Value": "1",
- "OriginalValue": "0",
- "Type": "DWord"
- }
- ]
- },
- "WPFTweaksDisableFSO": {
- "Content": "Disable Fullscreen Optimizations",
- "Description": "Disables FSO in all applications. NOTE: This will disable Color Management in Exclusive Fullscreen",
- "category": "z__Advanced Tweaks - CAUTION",
- "panel": "1",
- "Order": "a024_",
- "registry": [
- {
- "Path": "HKCU:\\System\\GameConfigStore",
- "Name": "GameDVR_DXGIHonorFSEWindowsCompatible",
- "Value": "1",
- "OriginalValue": "0",
- "Type": "DWord"
- }
- ]
- },
- "WPFToggleDarkMode": {
- "Content": "Dark Theme for Windows",
- "Description": "Enable/Disable Dark Mode.",
- "category": "Customize Preferences",
- "panel": "2",
- "Order": "a100_",
- "Type": "Toggle"
- },
- "WPFToggleBingSearch": {
- "Content": "Bing Search in Start Menu",
- "Description": "If enable then includes web search results from Bing in your Start Menu search.",
- "category": "Customize Preferences",
- "panel": "2",
- "Order": "a101_",
- "Type": "Toggle"
- },
- "WPFToggleNumLock": {
- "Content": "NumLock on Startup",
- "Description": "Toggle the Num Lock key state when your computer starts.",
- "category": "Customize Preferences",
- "panel": "2",
- "Order": "a102_",
- "Type": "Toggle"
- },
- "WPFToggleVerboseLogon": {
- "Content": "Verbose Messages During Logon",
- "Description": "Show detailed messages during the login process for troubleshooting and diagnostics.",
- "category": "Customize Preferences",
- "panel": "2",
- "Order": "a103_",
- "Type": "Toggle"
- },
- "WPFToggleSnapWindow": {
- "Content": "Snap Window",
- "Description": "If enabled you can align windows by dragging them. | Relogin Required",
- "category": "Customize Preferences",
- "panel": "2",
- "Order": "a104_",
- "Type": "Toggle"
- },
- "WPFToggleSnapFlyout": {
- "Content": "Snap Assist Flyout",
- "Description": "If enabled then Snap preview is disabled when maximize button is hovered.",
- "category": "Customize Preferences",
- "panel": "2",
- "Order": "a105_",
- "Type": "Toggle"
- },
- "WPFToggleSnapSuggestion": {
- "Content": "Snap Assist Suggestion",
- "Description": "If enabled then you will get suggestions to snap other applications in the left over spaces.",
- "category": "Customize Preferences",
- "panel": "2",
- "Order": "a106_",
- "Type": "Toggle"
- },
- "WPFToggleMouseAcceleration": {
- "Content": "Mouse Acceleration",
- "Description": "If Enabled then Cursor movement is affected by the speed of your physical mouse movements.",
- "category": "Customize Preferences",
- "panel": "2",
- "Order": "a107_",
- "Type": "Toggle"
- },
- "WPFToggleStickyKeys": {
- "Content": "Sticky Keys",
- "Description": "If Enabled then Sticky Keys is activated - Sticky keys is an accessibility feature of some graphical user interfaces which assists users who have physical disabilities or help users reduce repetitive strain injury.",
- "category": "Customize Preferences",
- "panel": "2",
- "Order": "a108_",
- "Type": "Toggle"
- },
- "WPFToggleHiddenFiles": {
- "Content": "Show Hidden Files",
- "Description": "If Enabled then Hidden Files will be shown.",
- "category": "Customize Preferences",
- "panel": "2",
- "Order": "a200_",
- "Type": "Toggle"
- },
- "WPFToggleShowExt": {
- "Content": "Show File Extensions",
- "Description": "If enabled then File extensions (e.g., .txt, .jpg) are visible.",
- "category": "Customize Preferences",
- "panel": "2",
- "Order": "a201_",
- "Type": "Toggle"
- },
- "WPFToggleTaskbarSearch": {
- "Content": "Search Button in Taskbar",
- "Description": "If Enabled Search Button will be on the taskbar.",
- "category": "Customize Preferences",
- "panel": "2",
- "Order": "a202_",
- "Type": "Toggle"
- },
- "WPFToggleTaskView": {
- "Content": "Task View Button in Taskbar",
- "Description": "If Enabled then Task View Button in Taskbar will be shown.",
- "category": "Customize Preferences",
- "panel": "2",
- "Order": "a203_",
- "Type": "Toggle"
- },
- "WPFToggleTaskbarWidgets": {
- "Content": "Widgets Button in Taskbar",
- "Description": "If Enabled then Widgets Button in Taskbar will be shown.",
- "category": "Customize Preferences",
- "panel": "2",
- "Order": "a204_",
- "Type": "Toggle"
- },
- "WPFToggleTaskbarAlignment": {
- "Content": "Center Taskbar Items",
- "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.",
- "category": "Customize Preferences",
- "panel": "2",
- "Order": "a204_",
- "Type": "Toggle"
- },
- "WPFToggleDetailedBSoD": {
- "Content": "Detailed BSoD",
- "Description": "If Enabled then you will see a detailed Blue Screen of Death (BSOD) with more information.",
- "category": "Customize Preferences",
- "panel": "2",
- "Order": "a205_",
- "Type": "Toggle"
- },
- "WPFOOSUbutton": {
- "Content": "Run OO Shutup 10",
- "category": "z__Advanced Tweaks - CAUTION",
- "panel": "1",
- "Order": "a039_",
- "Type": "Button"
- },
- "WPFchangedns": {
- "Content": "DNS",
- "category": "z__Advanced Tweaks - CAUTION",
- "panel": "1",
- "Order": "a040_",
- "Type": "Combobox",
- "ComboItems": "Default DHCP Google Cloudflare Cloudflare_Malware Cloudflare_Malware_Adult Open_DNS Quad9 AdGuard_Ads_Trackers AdGuard_Ads_Trackers_Malware_Adult"
- },
- "WPFTweaksbutton": {
- "Content": "Run Tweaks",
- "category": "z__Advanced Tweaks - CAUTION",
- "panel": "1",
- "Order": "a041_",
- "Type": "Button"
- },
- "WPFUndoall": {
- "Content": "Undo Selected Tweaks",
- "category": "z__Advanced Tweaks - CAUTION",
- "panel": "1",
- "Order": "a042_",
- "Type": "Button"
- },
- "WPFAddUltPerf": {
- "Content": "Add and Activate Ultimate Performance Profile",
- "category": "Performance Plans",
- "panel": "2",
- "Order": "a080_",
- "Type": "Button",
- "ButtonWidth": "300"
- },
- "WPFRemoveUltPerf": {
- "Content": "Remove Ultimate Performance Profile",
- "category": "Performance Plans",
- "panel": "2",
- "Order": "a081_",
- "Type": "Button",
- "ButtonWidth": "300"
- },
- "WPFWinUtilShortcut": {
- "Content": "Create WinUtil Shortcut",
- "category": "Shortcuts",
- "panel": "2",
- "Order": "a082_",
- "Type": "Button",
- "ButtonWidth": "300"
- }
-}' | convertfrom-json
-$inputXML = '
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Install
-
-
-
-
-
-
- Tweaks
-
-
-
-
-
-
- Config
-
-
-
-
-
-
- Updates
-
-
-
-
-
-
- MicroWin
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Note: Hover over items to get a better description. Please be careful as many of these tweaks will heavily modify your system.
- Recommended selections are for normal users and if you are unsure do NOT check anything else!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- This is the default settings that come with Windows. No modifications are made and will remove any custom windows update settings.Note: If you still encounter update errors, reset all updates in the config tab. That will restore ALL Microsoft Update Services from their servers and reinstall them to default settings.
-
-
-
-
-
- This is my recommended setting I use on all computers. It will delay feature updates by 2 years and will install security updates 4 days after release.Feature Updates: Adds features and often bugs to systems when they are released. You want to delay these as long as possible.Security Updates: Typically these are pressing security flaws that need to be patched quickly. You only want to delay these a couple of days just to see if they are safe and don''t break other systems. You don''t want to go without these for ANY extended periods of time.
-
-
-
-
-
- This completely disables ALL Windows Updates and is NOT RECOMMENDED. However, it can be suitable if you use your system for a select purpose and do not actively browse the internet. Note: Your system will be easier to hack and infect without security updates.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Choose a Windows ISO file that you''ve downloaded
- Check the status in the console
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Choose Windows SKU
-
- Choose Windows features you want to remove from the ISO
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- /\/\ (_) ___ _ __ ___ / / /\ \ \(_) _ __
- / \ | | / __|| ''__| / _ \ \ \/ \/ /| || ''_ \
-/ /\/\ \| || (__ | | | (_) | \ /\ / | || | | |
-\/ \/|_| \___||_| \___/ \/ \/ |_||_| |_|
-
-
-
- MicroWin features:
- - Remove Telemetry and Tracking
- - Add ability to use local accounts
- - Remove Wifi requirement to finish install
- - Ability to remove Edge
- - Ability to remove Defender
- - Remove Teams
- - Apps debloat
-
-
-
- INSTRUCTIONS
- - Download the latest Windows 11 image from Microsoft
- LINK: https://www.microsoft.com/software-download/windows11
- May take several minutes to process the ISO depending on your machine and connection
- - Put it somewhere on the C:\ drive so it is easily accessible
- - Launch WinUtil and MicroWin
- - Click on the "Select Windows ISO" button and wait for WinUtil to process the image
- It will be processed and unpacked which may take some time
- - Once complete, choose which Windows flavor you want to base your image on
- - Choose which features you want to keep
- - Click the "Start Process" button
- The process of creating the Windows image may take some time, please check the console and wait for it to say "Done"
- - Once complete, the target ISO file will be in the directory you have specified
- - Copy this image to your Ventoy USB Stick, boot to this image, gg
-
- If you are injecting drivers ensure you put all your inf, sys, and dll files for each driver into a separate directory
-
-
-Example:
- C:\drivers\
- |-- Driver1\
- | |-- Driver1.inf
- | |-- Driver1.sys
- |-- Driver2\
- | |-- Driver2.inf
- | |-- Driver2.sys
- |-- OtherFiles...
-
-
-
-
-
-
-
-
-'
-# SPDX-License-Identifier: MIT
-# Set the maximum number of threads for the RunspacePool to the number of threads on the machine
-$maxthreads = [int]$env:NUMBER_OF_PROCESSORS
-
-# Create a new session state for parsing variables into our runspace
-$hashVars = New-object System.Management.Automation.Runspaces.SessionStateVariableEntry -ArgumentList 'sync',$sync,$Null
-$InitialSessionState = [System.Management.Automation.Runspaces.InitialSessionState]::CreateDefault()
-
-# Add the variable to the session state
-$InitialSessionState.Variables.Add($hashVars)
-
-# Get every private function and add them to the session state
-$functions = (Get-ChildItem function:\).where{$_.name -like "*winutil*" -or $_.name -like "*WPF*"}
-foreach ($function in $functions){
- $functionDefinition = Get-Content function:\$($function.name)
- $functionEntry = New-Object System.Management.Automation.Runspaces.SessionStateFunctionEntry -ArgumentList $($function.name), $functionDefinition
-
- $initialSessionState.Commands.Add($functionEntry)
-}
-
-# Create the runspace pool
-$sync.runspace = [runspacefactory]::CreateRunspacePool(
- 1, # Minimum thread count
- $maxthreads, # Maximum thread count
- $InitialSessionState, # Initial session state
- $Host # Machine to create runspaces on
-)
-
-# Open the RunspacePool instance
-$sync.runspace.Open()
-
-# Create classes for different exceptions
-
- class WingetFailedInstall : Exception {
- [string] $additionalData
-
- WingetFailedInstall($Message) : base($Message) {}
- }
-
- class ChocoFailedInstall : Exception {
- [string] $additionalData
-
- ChocoFailedInstall($Message) : base($Message) {}
- }
-
- class GenericException : Exception {
- [string] $additionalData
-
- GenericException($Message) : base($Message) {}
- }
-
-
-$inputXML = $inputXML -replace 'mc:Ignorable="d"', '' -replace "x:N", 'N' -replace '^ Set-WinUtilProgressbar
-$sync["Form"].TaskbarItemInfo = New-Object System.Windows.Shell.TaskbarItemInfo
-Set-WinUtilTaskbaritem -state "None"
-
-# Set the titlebar
-$sync["Form"].title = $sync["Form"].title + " " + $sync.version
-# Set the commands that will run when the form is closed
-$sync["Form"].Add_Closing({
- $sync.runspace.Dispose()
- $sync.runspace.Close()
- [System.GC]::Collect()
-})
-
-# Attach the event handler to the Click event
-$sync.SearchBarClearButton.Add_Click({
- $sync.SearchBar.Text = ""
- $sync.SearchBarClearButton.Visibility = "Collapsed"
-})
-
-# add some shortcuts for people that don't like clicking
-$commonKeyEvents = {
- if ($sync.ProcessRunning -eq $true) {
- return
- }
-
- if ($_.Key -eq "Escape")
- {
- $sync.SearchBar.SelectAll()
- $sync.SearchBar.Text = ""
- $sync.SearchBarClearButton.Visibility = "Collapsed"
- return
- }
-
- # don't ask, I know what I'm doing, just go...
- if (($_.Key -eq "Q" -and $_.KeyboardDevice.Modifiers -eq "Ctrl"))
- {
- $this.Close()
- }
- if ($_.KeyboardDevice.Modifiers -eq "Alt") {
- if ($_.SystemKey -eq "I") {
- Invoke-WPFButton "WPFTab1BT"
- }
- if ($_.SystemKey -eq "T") {
- Invoke-WPFButton "WPFTab2BT"
- }
- if ($_.SystemKey -eq "C") {
- Invoke-WPFButton "WPFTab3BT"
- }
- if ($_.SystemKey -eq "U") {
- Invoke-WPFButton "WPFTab4BT"
- }
- if ($_.SystemKey -eq "M") {
- Invoke-WPFButton "WPFTab5BT"
- }
- if ($_.SystemKey -eq "P") {
- Write-Host "Your Windows Product Key: $((Get-WmiObject -query 'select * from SoftwareLicensingService').OA3xOriginalProductKey)"
- }
- }
- # shortcut for the filter box
- if ($_.Key -eq "F" -and $_.KeyboardDevice.Modifiers -eq "Ctrl") {
- if ($sync.SearchBar.Text -eq "Ctrl-F to filter") {
- $sync.SearchBar.SelectAll()
- $sync.SearchBar.Text = ""
- }
- $sync.SearchBar.Focus()
- }
-}
-
-$sync["Form"].Add_PreViewKeyDown($commonKeyEvents)
-
-$sync["Form"].Add_MouseLeftButtonDown({
- if ($sync["SettingsPopup"].IsOpen) {
- $sync["SettingsPopup"].IsOpen = $false
- }
- $sync["Form"].DragMove()
-})
-
-$sync["Form"].Add_MouseDoubleClick({
- if ($sync["Form"].WindowState -eq [Windows.WindowState]::Normal)
- {
- $sync["Form"].WindowState = [Windows.WindowState]::Maximized;
- }
- else
- {
- $sync["Form"].WindowState = [Windows.WindowState]::Normal;
- }
-})
-
-$sync["Form"].Add_Deactivated({
- Write-Debug "WinUtil lost focus"
- if ($sync["SettingsPopup"].IsOpen) {
- $sync["SettingsPopup"].IsOpen = $false
- }
-})
-
-$sync["Form"].Add_ContentRendered({
-
- try {
- [void][Window]
- } catch {
-Add-Type @"
- using System;
- using System.Runtime.InteropServices;
- public class Window {
- [DllImport("user32.dll")]
- public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
-
- [DllImport("user32.dll")]
- [return: MarshalAs(UnmanagedType.Bool)]
- public static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
-
- [DllImport("user32.dll")]
- [return: MarshalAs(UnmanagedType.Bool)]
- public static extern bool MoveWindow(IntPtr handle, int x, int y, int width, int height, bool redraw);
-
- [DllImport("user32.dll")]
- public static extern int GetSystemMetrics(int nIndex);
- };
- public struct RECT {
- public int Left; // x position of upper-left corner
- public int Top; // y position of upper-left corner
- public int Right; // x position of lower-right corner
- public int Bottom; // y position of lower-right corner
- }
-"@
- }
-
- foreach ($proc in (Get-Process).where{ $_.MainWindowTitle -and $_.MainWindowTitle -like "*titus*" }) {
- # Check if the process's MainWindowHandle is valid
- if ($proc.MainWindowHandle -ne [System.IntPtr]::Zero) {
- Write-Debug "MainWindowHandle: $($proc.Id) $($proc.MainWindowTitle) $($proc.MainWindowHandle)"
- $windowHandle = $proc.MainWindowHandle
- } else {
- Write-Warning "Process found, but no MainWindowHandle: $($proc.Id) $($proc.MainWindowTitle)"
-
- }
- }
-
- $rect = New-Object RECT
- [Window]::GetWindowRect($windowHandle, [ref]$rect)
- $width = $rect.Right - $rect.Left
- $height = $rect.Bottom - $rect.Top
-
- Write-Debug "UpperLeft:$($rect.Left),$($rect.Top) LowerBottom:$($rect.Right),$($rect.Bottom). Width:$($width) Height:$($height)"
-
- # Load the Windows Forms assembly
- Add-Type -AssemblyName System.Windows.Forms
- $primaryScreen = [System.Windows.Forms.Screen]::PrimaryScreen
- # Check if the primary screen is found
- if ($primaryScreen) {
- # Extract screen width and height for the primary monitor
- $screenWidth = $primaryScreen.Bounds.Width
- $screenHeight = $primaryScreen.Bounds.Height
-
- # Print the screen size
- Write-Debug "Primary Monitor Width: $screenWidth pixels"
- Write-Debug "Primary Monitor Height: $screenHeight pixels"
-
- # Compare with the primary monitor size
- if ($width -gt $screenWidth -or $height -gt $screenHeight) {
- Write-Debug "The specified width and/or height is greater than the primary monitor size."
- [void][Window]::MoveWindow($windowHandle, 0, 0, $screenWidth, $screenHeight, $True)
- } else {
- Write-Debug "The specified width and height are within the primary monitor size limits."
- }
- } else {
- Write-Debug "Unable to retrieve information about the primary monitor."
- }
-
- Invoke-WPFTab "WPFTab1BT"
- $sync["Form"].Focus()
-
- # maybe this is not the best place to load and execute config file?
- # maybe community can help?
- if ($PARAM_CONFIG){
- Invoke-WPFImpex -type "import" -Config $PARAM_CONFIG
- if ($PARAM_RUN){
- while ($sync.ProcessRunning) {
- Start-Sleep -Seconds 5
- }
- Start-Sleep -Seconds 5
-
- Write-Host "Applying tweaks..."
- Invoke-WPFtweaksbutton
- while ($sync.ProcessRunning) {
- Start-Sleep -Seconds 5
- }
- Start-Sleep -Seconds 5
-
- Write-Host "Installing features..."
- Invoke-WPFFeatureInstall
- while ($sync.ProcessRunning) {
- Start-Sleep -Seconds 5
- }
-
- Start-Sleep -Seconds 5
- Write-Host "Installing applications..."
- while ($sync.ProcessRunning) {
- Start-Sleep -Seconds 1
- }
- Invoke-WPFInstall
- Start-Sleep -Seconds 5
-
- Write-Host "Done."
- }
- }
-
-})
-
-# Load Checkboxes and Labels outside of the Filter function only once on startup for performance reasons
-$filter = Get-WinUtilVariables -Type CheckBox
-$CheckBoxes = ($sync.GetEnumerator()).where{ $psitem.Key -in $filter }
-
-$filter = Get-WinUtilVariables -Type Label
-$labels = @{}
-($sync.GetEnumerator()).where{$PSItem.Key -in $filter} | ForEach-Object {$labels[$_.Key] = $_.Value}
-
-$allCategories = $checkBoxes.Name | ForEach-Object {$sync.configs.applications.$_} | Select-Object -Unique -ExpandProperty category
-
-$sync["SearchBar"].Add_TextChanged({
-
- if ($sync.SearchBar.Text -ne "") {
- $sync.SearchBarClearButton.Visibility = "Visible"
- }
- else {
- $sync.SearchBarClearButton.Visibility = "Collapsed"
- }
-
- $activeApplications = @()
-
- foreach ($CheckBox in $CheckBoxes) {
- # Check if the checkbox is null or if it doesn't have content
- if ($CheckBox -eq $null -or $CheckBox.Value -eq $null -or $CheckBox.Value.Content -eq $null) {
- continue
- }
-
- $textToSearch = $sync.SearchBar.Text.ToLower()
- $checkBoxName = $CheckBox.Key
- $textBlockName = $checkBoxName + "Link"
-
- # Retrieve the corresponding text block based on the generated name
- $textBlock = $sync[$textBlockName]
-
- if ($CheckBox.Value.Content.ToLower().Contains($textToSearch)) {
- $CheckBox.Value.Visibility = "Visible"
- $activeApplications += $sync.configs.applications.$checkboxName
- # Set the corresponding text block visibility
- if ($textBlock -ne $null) {
- $textBlock.Visibility = "Visible"
- }
- }
- else {
- $CheckBox.Value.Visibility = "Collapsed"
- # Set the corresponding text block visibility
- if ($textBlock -ne $null) {
- $textBlock.Visibility = "Collapsed"
- }
- }
- }
- $activeCategories = $activeApplications | Select-Object -ExpandProperty category -Unique
-
- foreach ($category in $activeCategories){
- $label = $labels[$(Get-WPFObjectName -type "Label" -name $category)]
- $label.Visibility = "Visible"
- }
- if ($activeCategories){
- $inactiveCategories = Compare-Object -ReferenceObject $allCategories -DifferenceObject $activeCategories -PassThru
- }
- else{
- $inactiveCategories = $allCategories
- }
- foreach ($category in $inactiveCategories){
- $label = $labels[$(Get-WPFObjectName -type "Label" -name $category)]
- $label.Visibility = "Collapsed"}
-})
-
-# Initialize the hashtable
-$winutildir = @{}
-
-# Set the path for the winutil directory
-$winutildir["path"] = "$env:LOCALAPPDATA\winutil\"
-if (-NOT (Test-Path -Path $winutildir["path"])) {
- New-Item -Path $winutildir["path"] -ItemType Directory
-}
-
-# Set the path for the logo and checkmark images
-$winutildir["logo.png"] = $winutildir["path"] + "cttlogo.png"
-$winutildir["logo.ico"] = $winutildir["path"] + "cttlogo.ico"
-if (-NOT (Test-Path -Path $winutildir["logo.png"])) {
- Invoke-WebRequest -Uri "https://christitus.com/images/logo-full.png" -OutFile $winutildir["logo.png"]
-}
-
-if (-NOT (Test-Path -Path $winutildir["logo.ico"])) {
- ConvertTo-Icon -bitmapPath $winutildir["logo.png"] -iconPath $winutildir["logo.ico"]
-}
-
-$winutildir["checkmark.png"] = $winutildir["path"] + "checkmark.png"
-$winutildir["warning.png"] = $winutildir["path"] + "warning.png"
-if (-NOT (Test-Path -Path $winutildir["checkmark.png"])) {
- Invoke-WebRequest -Uri "https://christitus.com/images/checkmark.png" -OutFile $winutildir["checkmark.png"]
-}
-if (-NOT (Test-Path -Path $winutildir["warning.png"])) {
- Invoke-WebRequest -Uri "https://christitus.com/images/warning.png" -OutFile $winutildir["warning.png"]
-}
-
-
-Set-WinUtilTaskbaritem -overlay "logo"
-
-$sync["Form"].Add_Activated({
- Set-WinUtilTaskbaritem -overlay "logo"
-})
-
-# Define event handler for button click
-$sync["SettingsButton"].Add_Click({
- Write-Debug "SettingsButton clicked"
- if ($sync["SettingsPopup"].IsOpen) {
- $sync["SettingsPopup"].IsOpen = $false
- }
- else {
- $sync["SettingsPopup"].IsOpen = $true
- }
- $_.Handled = $false
-})
-
-# Define event handlers for menu items
-$sync["ImportMenuItem"].Add_Click({
- # Handle Import menu item click
- Write-Debug "Import clicked"
- $sync["SettingsPopup"].IsOpen = $false
- Invoke-WPFImpex -type "import"
- $_.Handled = $false
-})
-
-$sync["ExportMenuItem"].Add_Click({
- # Handle Export menu item click
- Write-Debug "Export clicked"
- $sync["SettingsPopup"].IsOpen = $false
- Invoke-WPFImpex -type "export"
- $_.Handled = $false
-})
-
-$sync["AboutMenuItem"].Add_Click({
- # Handle Export menu item click
- Write-Debug "About clicked"
- $sync["SettingsPopup"].IsOpen = $false
- $authorInfo = @"
-Author : @christitustech
-Runspace : @DeveloperDurp
-MicroWin : @KonTy
-GitHub : ChrisTitusTech/winutil
-Version : $($sync.version)
-"@
- $FontSize = $sync.configs.themes.$ctttheme.CustomDialogFontSize
- $HeaderFontSize = $sync.configs.themes.$ctttheme.CustomDialogFontSizeHeader
- $IconSize = $sync.configs.themes.$ctttheme.CustomDialogIconSize
- $Width = $sync.configs.themes.$ctttheme.CustomDialogWidth
- $Height = $sync.configs.themes.$ctttheme.CustomDialogHeight
- Show-CustomDialog -Message $authorInfo -Width $Width -Height $Height -FontSize $FontSize -HeaderFontSize $HeaderFontSize -IconSize $IconSize
-})
-
-$sync["SponsorMenuItem"].Add_Click({
- # Handle Export menu item click
- Write-Debug "Sponsors clicked"
- $sync["SettingsPopup"].IsOpen = $false
- $authorInfo = @"
-Current sponsors for ChrisTitusTech:
-"@
- $authorInfo += "`n"
- try {
- # Call the function to get the sponsors
- $sponsors = Invoke-WinUtilSponsors
-
- # Append the sponsors to the authorInfo
- $sponsors | ForEach-Object { $authorInfo += "$_`n" }
- }
- catch {
- $authorInfo += "An error occurred while fetching or processing the sponsors: $_`n"
- }
-
- $FontSize = $sync.configs.themes.$ctttheme.CustomDialogFontSize
- $HeaderFontSize = $sync.configs.themes.$ctttheme.CustomDialogFontSizeHeader
- $IconSize = $sync.configs.themes.$ctttheme.CustomDialogIconSize
- $Width = $sync.configs.themes.$ctttheme.CustomDialogWidth
- $Height = $sync.configs.themes.$ctttheme.CustomDialogHeight
- Show-CustomDialog -Message $authorInfo -Width $Width -Height $Height -FontSize $FontSize -HeaderFontSize $HeaderFontSize -IconSize $IconSize -EnableScroll $true
-})
-$sync["Form"].ShowDialog() | out-null
-Stop-Transcript
diff --git a/xaml/inputXML.xaml b/xaml/inputXML.xaml
index 67e4d305..acedd9cb 100644
--- a/xaml/inputXML.xaml
+++ b/xaml/inputXML.xaml
@@ -566,6 +566,36 @@
+