Compare commits

..

6 Commits

50 changed files with 1002 additions and 1511 deletions

9
.gitattributes vendored
View File

@ -1,12 +1,3 @@
* text=auto
*.ps1 text eol=crlf
*.json text eol=crlf
*.cfg text eol=crlf
*.png binary
*.jpg binary
config/* diff config/* diff
config/applications.json diff config/applications.json diff
*.json diff *.json diff

View File

@ -16,20 +16,8 @@ jobs:
- name: Close inactive issues - name: Close inactive issues
uses: actions/stale@v9.0.0 uses: actions/stale@v9.0.0
with: with:
# A list of labels to reference when looking through issues,
# and only when one (or even more) of these labels are found..
# then skip this issue, and never try to stale and/or close it.
exempt-issue-labels: "Keep Issue Open" exempt-issue-labels: "Keep Issue Open"
# Split it into two weeks, after one week the issue will be marked as stale, days-before-issue-close: 14
# after another week have pasted without any update.. the issue will then be closed. close-issue-message: "This issue was closed because it has been inactive for 14 days"
days-before-issue-stale: 7 debug-only: false # Make this field equal true if you want to test your configuration if it works or not
days-before-issue-close: 7
# NEVER mark PRs as Stale or Close + this workflow should never have write permissions on PRs, EVER!
days-before-pr-stale: -1
days-before-pr-close: -1
# Sends a message for both the Stale and Close events of an issue.
stale-issue-message: "This issue was marked as stale because it has been inactive for 7 days"
close-issue-message: "This issue was closed because it has been inactive for 7 days since it was marked as stale"
# Make this field equal true if you want to test your configuration if it works correctly or not
debug-only: false
repo-token: ${{ secrets.GITHUB_TOKEN }} repo-token: ${{ secrets.GITHUB_TOKEN }}

View File

@ -1,46 +0,0 @@
name: Pre-Release WinUtil
on:
workflow_run:
workflows: ["Compile"] #Ensure Compile winget.ps1 is done
types:
- completed
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_ENV
echo "::set-output name=version::$version"
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: Pre-Release ${{ steps.extract_version.outputs.version }}
files: ./winutil.ps1
prerelease: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@ -1,6 +1,10 @@
name: Release WinUtil name: Release WinUtil
on: on:
workflow_run:
workflows: ["Compile"] #Ensure Compile winget.ps1 is done
types:
- completed
workflow_dispatch: # Manual trigger added workflow_dispatch: # Manual trigger added
jobs: jobs:
@ -37,6 +41,5 @@ jobs:
tag_name: ${{ steps.extract_version.outputs.version }} tag_name: ${{ steps.extract_version.outputs.version }}
name: Release ${{ steps.extract_version.outputs.version }} name: Release ${{ steps.extract_version.outputs.version }}
files: ./winutil.ps1 files: ./winutil.ps1
prerelease: false
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@ -68,11 +68,11 @@ Get-ChildItem .\config | Where-Object {$psitem.extension -eq ".json"} | ForEach-
for ($i = 0; $i -lt $firstLevelJsonList.Count; $i += 1) { for ($i = 0; $i -lt $firstLevelJsonList.Count; $i += 1) {
$firstLevelName = $firstLevelJsonList[$i] $firstLevelName = $firstLevelJsonList[$i]
if ($jsonAsObject.$firstLevelName.content -ne $null) { if ($jsonAsObject.$firstLevelName.content -ne $null) {
$jsonAsObject.$firstLevelName.content = $jsonAsObject.$firstLevelName.content.replace('&','&#38;').replace('“','&#8220;').replace('”','&#8221;').replace("'",'&#39;').replace('<','&#60;').replace('>','&#62;').replace('—','&#8212;') $jsonAsObject.$firstLevelName.content = $jsonAsObject.$firstLevelName.content.replace('&','&#38;').replace('“','&#8220;').replace('”','&#8221;').replace("'",'&#39;').replace('<','&#60;').replace('>','&#62;')
$jsonAsObject.$firstLevelName.content = $jsonAsObject.$firstLevelName.content.replace('&#39;&#39;',"&#39;") # resolves the Double Apostrophe caused by the first replace function in the main loop $jsonAsObject.$firstLevelName.content = $jsonAsObject.$firstLevelName.content.replace('&#39;&#39;',"&#39;") # resolves the Double Apostrophe caused by the first replace function in the main loop
} }
if ($jsonAsObject.$firstLevelName.description -ne $null) { if ($jsonAsObject.$firstLevelName.description -ne $null) {
$jsonAsObject.$firstLevelName.description = $jsonAsObject.$firstLevelName.description.replace('&','&#38;').replace('“','&#8220;').replace('”','&#8221;').replace("'",'&#39;').replace('<','&#60;').replace('>','&#62;').replace('—','&#8212;') $jsonAsObject.$firstLevelName.description = $jsonAsObject.$firstLevelName.description.replace('&','&#38;').replace('“','&#8220;').replace('”','&#8221;').replace("'",'&#39;').replace('<','&#60;').replace('>','&#62;')
$jsonAsObject.$firstLevelName.description = $jsonAsObject.$firstLevelName.description.replace('&#39;&#39;',"&#39;") # resolves the Double Apostrophe caused by the first replace function in the main loop $jsonAsObject.$firstLevelName.description = $jsonAsObject.$firstLevelName.description.replace('&#39;&#39;',"&#39;") # resolves the Double Apostrophe caused by the first replace function in the main loop
} }
} }

View File

@ -13,9 +13,14 @@
``` ```
Get-Service -Name "XboxGipSvc" | Set-Service -StartupType Automatic Get-Service -Name "XboxGipSvc" | Set-Service -StartupType Automatic
``` ```
- Windows Insider Builds not installing: Telemetry needs to be enabled
```
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection" -Name "AllowTelemetry" -Type DWord -Value 0
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection" -Name "AllowTelemetry" -Type DWord -Value 0
```
- Winget requires interaction on first run: Manually type 'y' and 'enter' into the PowerShell console to continue - Winget requires interaction on first run: Manually type 'y' and 'enter' into the PowerShell console to continue
- (Windows 11) Quick Settings no longer works: Launch the Script and click 'Enable Action Center' - (Windows 11) Quick Settings no longer works: Launch the Script and click 'Enable Action Center'
- Explorer no longer launches: Go to Control Panel, File Explorer Options, Change the 'Open File Explorer to' option to 'This PC'.
- Script doesn't run/PowerShell crashes: - Script doesn't run/PowerShell crashes:
1. Press Windows Key+X and select 'PowerShell (Admin)' (Windows 10) or 'Windows Terminal (Admin)' (Windows 11) 1. Press Windows Key+X and select 'PowerShell (Admin)' (Windows 10) or 'Windows Terminal (Admin)' (Windows 11)
2. Run: 2. Run:

View File

@ -1,7 +1,5 @@
# Chris Titus Tech's Windows Utility # Chris Titus Tech's Windows Utility
[![Version](https://img.shields.io/github/v/release/ChrisTitusTech/winutil?color=7a39fb)](https://github.com/ChrisTitusTech/winutil/releases/latest)
This utility is a compilation of Windows tasks I perform on each Windows system I use. It is meant to streamline *installs*, debloat with *tweaks*, troubleshoot with *config*, and fix Windows *updates*. I am extremely picky about any contributions to keep this project clean and efficient. This utility is a compilation of Windows tasks I perform on each Windows system I use. It is meant to streamline *installs*, debloat with *tweaks*, troubleshoot with *config*, and fix Windows *updates*. I am extremely picky about any contributions to keep this project clean and efficient.
![screen-install](screen-install.png) ![screen-install](screen-install.png)
@ -24,19 +22,24 @@ Winutil must be run in Admin mode because it performs system-wide tweaks. To ach
#### Simple way #### Simple way
```ps1
irm "https://christitus.com/win" | iex
``` ```
Courtesy of the issue: [#144](/../../issues/144) irm https://christitus.com/win | iex
```
Courtesy of the issue raised at: [#144](/../../issues/144)
If this site is not reachable from your country, please try running it directly from GitHub. or by executing:
```ps1 ```
irm "https://github.com/ChrisTitusTech/winutil/releases/latest/download/winutil.ps1" | iex iwr -useb https://christitus.com/win | iex
```
if for some reason this site is not reachable from your country please try running it directly from github (replace `RELEASE_TAG` with current release that you are interested in, for example `v2024.06.05`)
```
irm "https://github.com/ChrisTitusTech/winutil/releases/download/RELEASE_TAG/winutil.ps1" | iex
``` ```
#### Automation #### Automation
Some features are available through automation. This allows you to save your config file pass it to Winutil walk away and come back to a finished system. Here is how you can set it up currently with Winutil >24.01.15 Some features are avaliable through automation. This allows you to save your config file pass it to Winutil walk away and come back to a finished system. Here is how you can set it up currently with Winutil >24.01.15
1. On the Install Tab, click "Get Installed", this will get all installed apps **supported by Winutil** on the system 1. On the Install Tab, click "Get Installed", this will get all installed apps **supported by Winutil** on the system
![GetInstalled](/wiki/Get-Installed.png) ![GetInstalled](/wiki/Get-Installed.png)

View File

@ -151,6 +151,14 @@
"link": "https://github.com/sharkdp/bat", "link": "https://github.com/sharkdp/bat",
"winget": "sharkdp.bat" "winget": "sharkdp.bat"
}, },
"bitcomet": {
"category": "Utilities",
"choco": "bitcomet",
"content": "BitComet",
"description": "BitComet is a free and open-source BitTorrent client that supports HTTP/FTP downloads and provides download management features.",
"link": "https://www.bitcomet.com/",
"winget": "CometNetwork.BitComet"
},
"bitwarden": { "bitwarden": {
"category": "Utilities", "category": "Utilities",
"choco": "bitwarden", "choco": "bitwarden",
@ -175,6 +183,14 @@
"link": "https://www.blender.org/", "link": "https://www.blender.org/",
"winget": "BlenderFoundation.Blender" "winget": "BlenderFoundation.Blender"
}, },
"bluestacks": {
"category": "Games",
"choco": "bluestacks",
"content": "Bluestacks",
"description": "Bluestacks is an Android emulator for running mobile apps and games on a PC.",
"link": "https://www.bluestacks.com/",
"winget": "BlueStack.BlueStacks"
},
"brave": { "brave": {
"category": "Browsers", "category": "Browsers",
"choco": "brave", "choco": "brave",
@ -199,14 +215,6 @@
"link": "https://www.bulkrenameutility.co.uk", "link": "https://www.bulkrenameutility.co.uk",
"winget": "TGRMNSoftware.BulkRenameUtility" "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": "XP9MD3S1KFCPH1"
},
"calibre": { "calibre": {
"category": "Document", "category": "Document",
"choco": "calibre", "choco": "calibre",
@ -303,6 +311,14 @@
"link": "https://copyq.readthedocs.io/", "link": "https://copyq.readthedocs.io/",
"winget": "hluk.CopyQ" "winget": "hluk.CopyQ"
}, },
"ditto": {
"category": "Utilities",
"choco": "ditto",
"content": "Ditto (Clipboard Manager)",
"description": "Ditto is an extension to the Windows Clipboard. You copy something to the Clipboard and Ditto takes what you copied and stores it in a database to retrieve at a later time.",
"link": "https://github.com/sabrogden/Ditto",
"winget": "Ditto.Ditto"
},
"cpuz": { "cpuz": {
"category": "Utilities", "category": "Utilities",
"choco": "cpu-z", "choco": "cpu-z",
@ -373,7 +389,7 @@
"content": "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.", "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/", "link": "https://devtoys.app/",
"winget": "DevToys-app.DevToys" "winget": "9PGCV4V3BK4W"
}, },
"digikam": { "digikam": {
"category": "Multimedia Tools", "category": "Multimedia Tools",
@ -396,7 +412,7 @@
"choco": "ditto", "choco": "ditto",
"content": "Ditto", "content": "Ditto",
"description": "Ditto is an extension to the standard windows clipboard.", "description": "Ditto is an extension to the standard windows clipboard.",
"link": "https://github.com/sabrogden/Ditto", "link": "https://ditto-cp.sourceforge.io/",
"winget": "Ditto.Ditto" "winget": "Ditto.Ditto"
}, },
"dockerdesktop": { "dockerdesktop": {
@ -551,14 +567,6 @@
"link": "https://www.falkon.org/", "link": "https://www.falkon.org/",
"winget": "KDE.Falkon" "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": { "ferdium": {
"category": "Communications", "category": "Communications",
"choco": "ferdium", "choco": "ferdium",
@ -687,6 +695,14 @@
"link": "https://www.freecadweb.org/", "link": "https://www.freecadweb.org/",
"winget": "FreeCAD.FreeCAD" "winget": "FreeCAD.FreeCAD"
}, },
"orcaslicer": {
"category": "Multimedia Tools",
"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"
},
"fxsound": { "fxsound": {
"category": "Multimedia Tools", "category": "Multimedia Tools",
"choco": "fxsound", "choco": "fxsound",
@ -733,7 +749,7 @@
"content": "Git Extensions", "content": "Git Extensions",
"description": "Git Extensions is a graphical user interface for Git, providing additional features for easier source code management.", "description": "Git Extensions is a graphical user interface for Git, providing additional features for easier source code management.",
"link": "https://gitextensions.github.io/", "link": "https://gitextensions.github.io/",
"winget": "GitExtensionsTeam.GitExtensions" "winget": "Git.Git;GitExtensionsTeam.GitExtensions"
}, },
"githubcli": { "githubcli": {
"category": "Development", "category": "Development",
@ -741,7 +757,7 @@
"content": "GitHub CLI", "content": "GitHub CLI",
"description": "GitHub CLI is a command-line tool that simplifies working with GitHub directly from the terminal.", "description": "GitHub CLI is a command-line tool that simplifies working with GitHub directly from the terminal.",
"link": "https://cli.github.com/", "link": "https://cli.github.com/",
"winget": "GitHub.cli" "winget": "Git.Git;GitHub.cli"
}, },
"githubdesktop": { "githubdesktop": {
"category": "Development", "category": "Development",
@ -749,7 +765,7 @@
"content": "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.", "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/", "link": "https://desktop.github.com/",
"winget": "GitHub.GitHubDesktop" "winget": "Git.Git;GitHub.GitHubDesktop"
}, },
"gitkrakenclient": { "gitkrakenclient": {
"category": "Development", "category": "Development",
@ -783,20 +799,12 @@
"link": "https://www.gog.com/galaxy", "link": "https://www.gog.com/galaxy",
"winget": "GOG.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": { "golang": {
"category": "Development", "category": "Development",
"choco": "golang", "choco": "golang",
"content": "Go", "content": "GoLang",
"description": "Go (or Golang) is a statically typed, compiled programming language designed for simplicity, reliability, and efficiency.", "description": "GoLang (or Golang) is a statically typed, compiled programming language designed for simplicity, reliability, and efficiency.",
"link": "https://go.dev/", "link": "https://golang.org/",
"winget": "GoLang.Go" "winget": "GoLang.Go"
}, },
"googledrive": { "googledrive": {
@ -1271,17 +1279,9 @@
"link": "https://www.msi.com/Landing/afterburner", "link": "https://www.msi.com/Landing/afterburner",
"winget": "Guru3D.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": { "BorderlessGaming": {
"category": "Utilities", "category": "Utilities",
"choco": "borderlessgaming", "choco": "na",
"content": "Borderless Gaming", "content": "Borderless Gaming",
"description": "Play your favorite games in a borderless window; no more time consuming alt-tabs.", "description": "Play your favorite games in a borderless window; no more time consuming alt-tabs.",
"link": "https://github.com/Codeusa/Borderless-Gaming", "link": "https://github.com/Codeusa/Borderless-Gaming",
@ -1343,14 +1343,6 @@
"link": "https://www.mp3tag.de/en/", "link": "https://www.mp3tag.de/en/",
"winget": "Mp3tag.Mp3tag" "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": { "nanazip": {
"category": "Utilities", "category": "Utilities",
"choco": "nanazip", "choco": "nanazip",
@ -1751,14 +1743,6 @@
"link": "https://docs.microsoft.com/en-us/sysinternals/downloads/procmon", "link": "https://docs.microsoft.com/en-us/sysinternals/downloads/procmon",
"winget": "Microsoft.Sysinternals.ProcessMonitor" "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": { "prucaslicer": {
"category": "Utilities", "category": "Utilities",
"choco": "prusaslicer", "choco": "prusaslicer",
@ -1799,14 +1783,6 @@
"link": "https://www.qbittorrent.org/", "link": "https://www.qbittorrent.org/",
"winget": "qBittorrent.qBittorrent" "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": { "tixati": {
"category": "Utilities", "category": "Utilities",
"choco": "tixati.portable", "choco": "tixati.portable",
@ -2215,14 +2191,6 @@
"link": "https://github.com/thonny/thonny", "link": "https://github.com/thonny/thonny",
"winget": "AivarAnnamaa.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": { "thorium": {
"category": "Browsers", "category": "Browsers",
"choco": "na", "choco": "na",
@ -2407,14 +2375,6 @@
"link": "https://voicemeeter.com/", "link": "https://voicemeeter.com/",
"winget": "VB-Audio.Voicemeeter" "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": { "vrdesktopstreamer": {
"category": "Games", "category": "Games",
"choco": "na", "choco": "na",
@ -2429,7 +2389,7 @@
"content": "VS Code", "content": "VS Code",
"description": "Visual Studio Code is a free, open-source code editor with support for multiple programming languages.", "description": "Visual Studio Code is a free, open-source code editor with support for multiple programming languages.",
"link": "https://code.visualstudio.com/", "link": "https://code.visualstudio.com/",
"winget": "Microsoft.VisualStudioCode" "winget": "Git.Git;Microsoft.VisualStudioCode"
}, },
"vscodium": { "vscodium": {
"category": "Development", "category": "Development",
@ -2437,7 +2397,7 @@
"content": "VS Codium", "content": "VS Codium",
"description": "VSCodium is a community-driven, freely-licensed binary distribution of Microsoft's VS Code.", "description": "VSCodium is a community-driven, freely-licensed binary distribution of Microsoft's VS Code.",
"link": "https://vscodium.com/", "link": "https://vscodium.com/",
"winget": "VSCodium.VSCodium" "winget": "Git.Git;VSCodium.VSCodium"
}, },
"waterfox": { "waterfox": {
"category": "Browsers", "category": "Browsers",
@ -2463,6 +2423,14 @@
"link": "https://wezfurlong.org/wezterm/index.html", "link": "https://wezfurlong.org/wezterm/index.html",
"winget": "wez.wezterm" "winget": "wez.wezterm"
}, },
"windirstat": {
"category": "Utilities",
"choco": "windirstat",
"content": "WinDirStat",
"description": "WinDirStat is a disk usage statistics viewer and cleanup tool for Windows.",
"link": "https://windirstat.net/",
"winget": "WinDirStat.WinDirStat"
},
"windowspchealth": { "windowspchealth": {
"category": "Utilities", "category": "Utilities",
"choco": "na", "choco": "na",
@ -2471,14 +2439,6 @@
"link": "https://support.microsoft.com/en-us/windows/how-to-use-the-pc-health-check-app-9c8abd9b-03ba-4e67-81ef-36f37caa7844", "link": "https://support.microsoft.com/en-us/windows/how-to-use-the-pc-health-check-app-9c8abd9b-03ba-4e67-81ef-36f37caa7844",
"winget": "Microsoft.WindowsPCHealthCheck" "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": { "wingetui": {
"category": "Utilities", "category": "Utilities",
"choco": "wingetui", "choco": "wingetui",
@ -2878,29 +2838,5 @@
"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.", "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/", "link": "https://www.kicad.org/",
"winget": "KiCad.KiCad" "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 Removes Ads From Various Places Around Windows 11",
"link": "https://github.com/xM4ddy/OFGB",
"winget": "xM4ddy.OFGB"
} }
} }

View File

@ -1,7 +1,6 @@
{ {
"Standard": [ "Standard": [
"WPFTweaksAH", "WPFTweaksAH",
"WPFTweaksConsumerFeatures",
"WPFTweaksDVR", "WPFTweaksDVR",
"WPFTweaksHiber", "WPFTweaksHiber",
"WPFTweaksHome", "WPFTweaksHome",
@ -17,7 +16,6 @@
"WPFTweaksTeredo" "WPFTweaksTeredo"
], ],
"Minimal": [ "Minimal": [
"WPFTweaksConsumerFeatures",
"WPFTweaksHome", "WPFTweaksHome",
"WPFTweaksServices", "WPFTweaksServices",
"WPFTweaksTele" "WPFTweaksTele"

View File

@ -58,7 +58,7 @@
"powercfg.exe /hibernate on" "powercfg.exe /hibernate on"
] ]
}, },
"WPFTweaksLaptopHibernation": { "WPFToggleTweaksLaptopHybernation": {
"Content": "Set Hibernation as default (good for laptops)", "Content": "Set Hibernation as default (good for laptops)",
"Description": "Most modern laptops have connected stadby 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", "Description": "Most modern laptops have connected stadby 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", "category": "Essential Tweaks",
@ -1580,22 +1580,6 @@
} }
] ]
}, },
"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": { "WPFTweaksTele": {
"Content": "Disable Telemetry", "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.", "Description": "Disables Microsoft Telemetry. Note: This will lock many Edge Browser settings. Microsoft spies heavily on you when using the Edge browser.",
@ -1754,6 +1738,13 @@
"Value": "0", "Value": "0",
"Type": "DWord" "Type": "DWord"
}, },
{
"Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\CloudContent",
"OriginalValue": "0",
"Name": "DisableWindowsConsumerFeatures",
"Value": "1",
"Type": "DWord"
},
{ {
"Path": "HKCU:\\SOFTWARE\\Microsoft\\Siuf\\Rules", "Path": "HKCU:\\SOFTWARE\\Microsoft\\Siuf\\Rules",
"OriginalValue": "0", "OriginalValue": "0",
@ -2452,38 +2443,31 @@
}, },
"WPFTweaksRemoveOnedrive": { "WPFTweaksRemoveOnedrive": {
"Content": "Remove OneDrive", "Content": "Remove OneDrive",
"Description": "Moves OneDrive files to Default Home Folders and Uninstalls it.", "Description": "Copies OneDrive files to Default Home Folders and Uninstalls it.",
"category": "z__Advanced Tweaks - CAUTION", "category": "z__Advanced Tweaks - CAUTION",
"panel": "1", "panel": "1",
"Order": "a030_", "Order": "a030_",
"InvokeScript": [ "InvokeScript": [
" "
$OneDrivePath = $($env:OneDrive)
Write-Host \"Removing OneDrive\" Write-Host \"Kill OneDrive process\"
$regPath = \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OneDriveSetup.exe\" taskkill.exe /F /IM \"OneDrive.exe\"
if (Test-Path $regPath){ taskkill.exe /F /IM \"explorer.exe\"
$OneDriveUninstallString = Get-ItemPropertyValue \"$regPath\" -Name \"UninstallString\"
$OneDriveExe, $OneDriveArgs = $OneDriveUninstallString.Split(\" \") Write-Host \"Copy all OneDrive to Root UserProfile\"
Start-Process -FilePath $OneDriveExe -ArgumentList \"$OneDriveArgs /silent\" -NoNewWindow -Wait Start-Process -FilePath powershell -ArgumentList \"robocopy '$($env:USERPROFILE.TrimEnd())\\OneDrive' '$($env:USERPROFILE.TrimEnd())\\' /e /xj\" -NoNewWindow -Wait
}
else{ Write-Host \"Remove OneDrive\"
Write-Host \"Onedrive dosn't seem to be installed anymore\" -ForegroundColor Red Start-Process -FilePath winget -ArgumentList \"uninstall -e --purge --force --silent Microsoft.OneDrive \" -NoNewWindow -Wait
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\" Write-Host \"Removing OneDrive leftovers\"
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$env:localappdata\\Microsoft\\OneDrive\" 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:localappdata\\OneDrive\"
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$env:programdata\\Microsoft OneDrive\" Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$env:programdata\\Microsoft OneDrive\"
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$env:systemdrive\\OneDriveTemp\" 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: # check if directory is empty before removing:
If ((Get-ChildItem \"$OneDrivePath\" -Recurse | Measure-Object).Count -eq 0) { If ((Get-ChildItem \"$env:userprofile\\OneDrive\" -Recurse | Measure-Object).Count -eq 0) {
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$OneDrivePath\" Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$env:userprofile\\OneDrive\"
} }
Write-Host \"Remove Onedrive from explorer sidebar\" Write-Host \"Remove Onedrive from explorer sidebar\"
@ -2526,17 +2510,11 @@
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 \"{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 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\" Write-Host \"Restarting explorer\"
taskkill.exe /F /IM \"explorer.exe\"
Start-Process \"explorer.exe\" Start-Process \"explorer.exe\"
Write-Host \"Waiting for explorer to complete loading\" 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 \"Please Note - OneDrive folder 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 Start-Sleep 5
}
else{
Write-Host \"Something went Wrong during the Unistallation of OneDrive\" -ForegroundColor Red
}
" "
], ],
"UndoScript": [ "UndoScript": [
@ -2719,7 +2697,7 @@
}, },
"WPFTweaksBlockAdobeNet": { "WPFTweaksBlockAdobeNet": {
"Content": "Adobe Network Block", "Content": "Adobe Network Block",
"Description": "Reduce user interruptions by selectively blocking connections to Adobe's activation and telemetry servers. Credit: Ruddernation-Designs", "Description": "Reduce user interruptions by selectively blocking connections to Adobe's activation and telemetry servers. ",
"category": "z__Advanced Tweaks - CAUTION", "category": "z__Advanced Tweaks - CAUTION",
"panel": "1", "panel": "1",
"Order": "a021_", "Order": "a021_",
@ -2982,6 +2960,28 @@
} }
] ]
}, },
"WPFTweaksEnableipsix": {
"Content": "Enable IPv6",
"Description": "Enables IPv6.",
"category": "z__Advanced Tweaks - CAUTION",
"panel": "1",
"Order": "a023_",
"registry": [
{
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters",
"Name": "DisabledComponents",
"Value": "0",
"OriginalValue": "0",
"Type": "DWord"
}
],
"InvokeScript": [
"Enable-NetAdapterBinding -Name \"*\" -ComponentID ms_tcpip6"
],
"UndoScript": [
"Disable-NetAdapterBinding -Name \"*\" -ComponentID ms_tcpip6"
]
},
"WPFToggleDarkMode": { "WPFToggleDarkMode": {
"Content": "Dark Theme", "Content": "Dark Theme",
"Description": "Enable/Disable Dark Mode.", "Description": "Enable/Disable Dark Mode.",
@ -3059,15 +3059,7 @@
"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.", "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", "category": "Customize Preferences",
"panel": "2", "panel": "2",
"Order": "a070_", "Order": "a069_",
"Type": "Toggle"
},
"WPFToggleTaskbarSearch": {
"Content": "Taskbar Search",
"Description": "If Enabled Search Button will be on the taskbar.",
"category": "Customize Preferences",
"panel": "2",
"Order": "a068_",
"Type": "Toggle" "Type": "Toggle"
}, },
"WPFOOSUbutton": { "WPFOOSUbutton": {
@ -3082,7 +3074,7 @@
"Description": "If Enabled then Widgets Icon in Taskbar will be shown.", "Description": "If Enabled then Widgets Icon in Taskbar will be shown.",
"category": "Customize Preferences", "category": "Customize Preferences",
"panel": "2", "panel": "2",
"Order": "a069_", "Order": "a068_",
"Type": "Toggle" "Type": "Toggle"
}, },
"WPFchangedns": { "WPFchangedns": {
@ -3127,13 +3119,5 @@
"panel": "2", "panel": "2",
"Order": "a082_", "Order": "a082_",
"Type": "300" "Type": "300"
},
"WPFToggleTaskView": {
"Content": "Task View",
"Description": "If Enabled then Task View Icon in Taskbar will be shown.",
"category": "Customize Preferences",
"panel": "2",
"Order": "a069_",
"Type": "Toggle"
} }
} }

View File

@ -30,5 +30,4 @@ function Get-LocalizedYesNo {
Write-Debug "According to takeown.exe local Yes is $charactersArray[0]" Write-Debug "According to takeown.exe local Yes is $charactersArray[0]"
# Return the array of characters # Return the array of characters
return $charactersArray return $charactersArray
} }

View File

@ -61,19 +61,19 @@ function Get-TabXaml {
$paneltotal = $columncount $paneltotal = $columncount
} }
# add ColumnDefinitions to evenly draw colums # add ColumnDefinitions to evenly draw colums
$blockXml="<Grid.ColumnDefinitions>`r`n"+("<ColumnDefinition Width=""*""/>`r`n"*($paneltotal))+"</Grid.ColumnDefinitions>`r`n" $blockXml="<Grid.ColumnDefinitions>`n"+("<ColumnDefinition Width=""*""/>`n"*($paneltotal))+"</Grid.ColumnDefinitions>`n"
# Iterate through organizedData by panel, category, and application # Iterate through organizedData by panel, category, and application
$count = 0 $count = 0
foreach ($panel in ($organizedData.Keys | Sort-Object)) { foreach ($panel in ($organizedData.Keys | Sort-Object)) {
$blockXml += "<Border Grid.Row=""1"" Grid.Column=""$panelcount"">`r`n<StackPanel Background=""{MainBackgroundColor}"" SnapsToDevicePixels=""True"">`r`n" $blockXml += "<Border Grid.Row=""1"" Grid.Column=""$panelcount"">`n<StackPanel Background=""{MainBackgroundColor}"" SnapsToDevicePixels=""True"">`n"
$panelcount++ $panelcount++
foreach ($category in ($organizedData[$panel].Keys | Sort-Object)) { foreach ($category in ($organizedData[$panel].Keys | Sort-Object)) {
$count++ $count++
if ($columncount -gt 0) { if ($columncount -gt 0) {
$panelcount2 = [Int](($count)/$maxcount-0.5) $panelcount2 = [Int](($count)/$maxcount-0.5)
if ($panelcount -eq $panelcount2 ) { if ($panelcount -eq $panelcount2 ) {
$blockXml +="`r`n</StackPanel>`r`n</Border>`r`n" $blockXml +="`n</StackPanel>`n</Border>`n"
$blockXml += "<Border Grid.Row=""1"" Grid.Column=""$panelcount"">`r`n<StackPanel Background=""{MainBackgroundColor}"" SnapsToDevicePixels=""True"">`r`n" $blockXml += "<Border Grid.Row=""1"" Grid.Column=""$panelcount"">`n<StackPanel Background=""{MainBackgroundColor}"" SnapsToDevicePixels=""True"">`n"
$panelcount++ $panelcount++
} }
} }
@ -83,49 +83,49 @@ function Get-TabXaml {
$categorycontent = $($category -replace '^.__', '') $categorycontent = $($category -replace '^.__', '')
$categoryname = Get-WPFObjectName -type "Label" -name $categorycontent $categoryname = Get-WPFObjectName -type "Label" -name $categorycontent
$blockXml += "<Label Name=""$categoryname"" Content=""$categorycontent"" FontSize=""16""/>`r`n" $blockXml += "<Label Name=""$categoryname"" Content=""$categorycontent"" FontSize=""16""/>`n"
$sortedApps = $organizedData[$panel][$category].Keys | Sort-Object $sortedApps = $organizedData[$panel][$category].Keys | Sort-Object
foreach ($appName in $sortedApps) { foreach ($appName in $sortedApps) {
$count++ $count++
if ($columncount -gt 0) { if ($columncount -gt 0) {
$panelcount2 = [Int](($count)/$maxcount-0.5) $panelcount2 = [Int](($count)/$maxcount-0.5)
if ($panelcount -eq $panelcount2 ) { if ($panelcount -eq $panelcount2 ) {
$blockXml +="`r`n</StackPanel>`r`n</Border>`r`n" $blockXml +="`n</StackPanel>`n</Border>`n"
$blockXml += "<Border Grid.Row=""1"" Grid.Column=""$panelcount"">`r`n<StackPanel Background=""{MainBackgroundColor}"" SnapsToDevicePixels=""True"">`r`n" $blockXml += "<Border Grid.Row=""1"" Grid.Column=""$panelcount"">`n<StackPanel Background=""{MainBackgroundColor}"" SnapsToDevicePixels=""True"">`n"
$panelcount++ $panelcount++
} }
} }
$appInfo = $organizedData[$panel][$category][$appName] $appInfo = $organizedData[$panel][$category][$appName]
if ("Toggle" -eq $appInfo.Type) { if ("Toggle" -eq $appInfo.Type) {
$blockXml += "<DockPanel LastChildFill=`"True`">`r`n<Label Content=`"$($appInfo.Content)`" ToolTip=`"$($appInfo.Description)`" HorizontalAlignment=`"Left`"/>`r`n" $blockXml += "<DockPanel LastChildFill=`"True`">`n<Label Content=`"$($appInfo.Content)`" ToolTip=`"$($appInfo.Description)`" HorizontalAlignment=`"Left`"/>`n"
$blockXml += "<CheckBox Name=`"$($appInfo.Name)`" Style=`"{StaticResource ColorfulToggleSwitchStyle}`" Margin=`"2.5,0`" HorizontalAlignment=`"Right`"/>`r`n</DockPanel>`r`n" $blockXml += "<CheckBox Name=`"$($appInfo.Name)`" Style=`"{StaticResource ColorfulToggleSwitchStyle}`" Margin=`"2.5,0`" HorizontalAlignment=`"Right`"/>`n</DockPanel>`n"
} elseif ("Combobox" -eq $appInfo.Type) { } elseif ("Combobox" -eq $appInfo.Type) {
$blockXml += "<StackPanel Orientation=`"Horizontal`" Margin=`"0,5,0,0`">`r`n<Label Content=`"$($appInfo.Content)`" HorizontalAlignment=`"Left`" VerticalAlignment=`"Center`"/>`r`n" $blockXml += "<StackPanel Orientation=`"Horizontal`" Margin=`"0,5,0,0`">`n<Label Content=`"$($appInfo.Content)`" HorizontalAlignment=`"Left`" VerticalAlignment=`"Center`"/>`n"
$blockXml += "<ComboBox Name=`"$($appInfo.Name)`" Height=`"32`" Width=`"186`" HorizontalAlignment=`"Left`" VerticalAlignment=`"Center`" Margin=`"5,5`">`r`n" $blockXml += "<ComboBox Name=`"$($appInfo.Name)`" Height=`"32`" Width=`"186`" HorizontalAlignment=`"Left`" VerticalAlignment=`"Center`" Margin=`"5,5`">`n"
$addfirst="IsSelected=`"True`"" $addfirst="IsSelected=`"True`""
foreach ($comboitem in ($appInfo.ComboItems -split " ")) { foreach ($comboitem in ($appInfo.ComboItems -split " ")) {
$blockXml += "<ComboBoxItem $addfirst Content=`"$comboitem`"/>`r`n" $blockXml += "<ComboBoxItem $addfirst Content=`"$comboitem`"/>`n"
$addfirst="" $addfirst=""
} }
$blockXml += "</ComboBox>`r`n</StackPanel>" $blockXml += "</ComboBox>`n</StackPanel>"
# If it is a digit, type is button and button length is digits # If it is a digit, type is button and button length is digits
} elseif ($appInfo.Type -match "^[\d\.]+$") { } elseif ($appInfo.Type -match "^[\d\.]+$") {
$blockXml += "<Button Name=`"$($appInfo.Name)`" Content=`"$($appInfo.Content)`" HorizontalAlignment = `"Left`" Width=`"$($appInfo.Type)`" Margin=`"5`" Padding=`"20,5`" />`r`n" $blockXml += "<Button Name=`"$($appInfo.Name)`" Content=`"$($appInfo.Content)`" HorizontalAlignment = `"Left`" Width=`"$($appInfo.Type)`" Margin=`"5`" Padding=`"20,5`" />`n"
# else it is a checkbox # else it is a checkbox
} else { } else {
$checkedStatus = If ($null -eq $appInfo.Checked) {""} Else {"IsChecked=`"$($appInfo.Checked)`" "} $checkedStatus = If ($null -eq $appInfo.Checked) {""} Else {"IsChecked=`"$($appInfo.Checked)`" "}
if ($null -eq $appInfo.Link) if ($null -eq $appInfo.Link)
{ {
$blockXml += "<CheckBox Name=`"$($appInfo.Name)`" Content=`"$($appInfo.Content)`" $($checkedStatus)Margin=`"5,0`" ToolTip=`"$($appInfo.Description)`"/>`r`n" $blockXml += "<CheckBox Name=`"$($appInfo.Name)`" Content=`"$($appInfo.Content)`" $($checkedStatus)Margin=`"5,0`" ToolTip=`"$($appInfo.Description)`"/>`n"
} }
else else
{ {
$blockXml += "<StackPanel Orientation=""Horizontal"">`r`n<CheckBox Name=""$($appInfo.Name)"" Content=""$($appInfo.Content)"" $($checkedStatus)ToolTip=""$($appInfo.Description)"" Margin=""0,0,2,0""/><TextBlock Name=""$($appInfo.Name)Link"" Style=""{StaticResource HoverTextBlockStyle}"" Text=""(?)"" ToolTip=""$($appInfo.Link)"" />`r`n</StackPanel>`r`n" $blockXml += "<StackPanel Orientation=""Horizontal"">`n<CheckBox Name=""$($appInfo.Name)"" Content=""$($appInfo.Content)"" $($checkedStatus)ToolTip=""$($appInfo.Description)"" Margin=""0,0,2,0""/><TextBlock Name=""$($appInfo.Name)Link"" Style=""{StaticResource HoverTextBlockStyle}"" Text=""(?)"" ToolTip=""$($appInfo.Link)"" />`n</StackPanel>`n"
} }
} }
} }
} }
$blockXml +="`r`n</StackPanel>`r`n</Border>`r`n" $blockXml +="`n</StackPanel>`n</Border>`n"
} }
return ($blockXml) return ($blockXml)
} }

View File

@ -98,15 +98,6 @@ Function Get-WinUtilToggleStatus {
return $false 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") { if ($ToggleSwitch -eq "WPFToggleStickyKeys") {
$StickyKeys = (Get-ItemProperty -path 'HKCU:\Control Panel\Accessibility\StickyKeys').Flags $StickyKeys = (Get-ItemProperty -path 'HKCU:\Control Panel\Accessibility\StickyKeys').Flags
if($StickyKeys -eq 58){ if($StickyKeys -eq 58){
@ -116,15 +107,6 @@ Function Get-WinUtilToggleStatus {
return $true 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 "WPFToggleTaskbarWidgets") { if ($ToggleSwitch -eq "WPFToggleTaskbarWidgets") {
$TaskbarWidgets = (Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced").TaskBarDa $TaskbarWidgets = (Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced").TaskBarDa
if($TaskbarWidgets -eq 0) { if($TaskbarWidgets -eq 0) {

View File

@ -11,7 +11,9 @@ function Get-WinUtilVariables {
[Parameter()] [Parameter()]
[string[]]$Type [string[]]$Type
) )
$keys = ($sync.keys).where{ $_ -like "WPF*" }
$keys = $sync.keys | Where-Object { $_ -like "WPF*" }
if ($Type) { if ($Type) {
$output = $keys | ForEach-Object { $output = $keys | ForEach-Object {
Try { Try {

View File

@ -159,14 +159,8 @@ function Remove-ProvisionedPackages([switch] $keepSecurity = $false)
{ {
$status = "Removing Provisioned $($appx.PackageName)" $status = "Removing Provisioned $($appx.PackageName)"
Write-Progress -Activity "Removing Provisioned Apps" -Status $status -PercentComplete ($counter++/$appxProvisionedPackages.Count*100) Write-Progress -Activity "Removing Provisioned Apps" -Status $status -PercentComplete ($counter++/$appxProvisionedPackages.Count*100)
try {
Remove-AppxProvisionedPackage -Path $scratchDir -PackageName $appx.PackageName -ErrorAction SilentlyContinue 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 Write-Progress -Activity "Removing Provisioned Apps" -Status "Ready" -Completed
} }
else else

View File

@ -1,21 +1,29 @@
function Invoke-WinUtilGPU { function Invoke-WinUtilGPU {
$gpuInfo = Get-CimInstance Win32_VideoController $gpuInfo = Get-CimInstance Win32_VideoController
# GPUs to blacklist from using Demanding Theming foreach ($gpu in $gpuInfo) {
$lowPowerGPUs = ( $gpuName = $gpu.Name
"*NVIDIA GeForce*M*", if ($gpuName -like "*NVIDIA*") {
"*NVIDIA GeForce*Laptop*", return $true # NVIDIA GPU found
"*NVIDIA GeForce*GT*", }
"*AMD Radeon(TM)*", }
"*UHD*"
)
foreach ($gpu in $gpuInfo) { foreach ($gpu in $gpuInfo) {
foreach ($gpuPattern in $lowPowerGPUs){ $gpuName = $gpu.Name
if ($gpu.Name -like $gpuPattern) { if ($gpuName -like "*AMD Radeon RX*") {
return $false return $true # AMD GPU Found
}
}
foreach ($gpu in $gpuInfo) {
$gpuName = $gpu.Name
if ($gpuName -like "*UHD*") {
return $false # Intel Intergrated GPU Found
}
}
foreach ($gpu in $gpuInfo) {
$gpuName = $gpu.Name
if ($gpuName -like "*AMD Radeon(TM)*") {
return $false # AMD Intergrated GPU Found
} }
} }
} }
return $true
}

View File

@ -1,34 +0,0 @@
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 File

@ -1,34 +0,0 @@
function Invoke-WinUtilTaskbarSearch {
<#
.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 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 File

@ -5,8 +5,6 @@ function Invoke-WPFPanelAutologin {
Enables autologin using Sysinternals Autologon.exe Enables autologin using Sysinternals Autologon.exe
#> #>
curl.exe -ss "https://live.sysinternals.com/Autologon.exe" -o $env:temp\autologin.exe # Official Microsoft recommendation https://learn.microsoft.com/en-us/sysinternals/downloads/autologon
# Official Microsoft recommendation: https://learn.microsoft.com/en-us/sysinternals/downloads/autologon cmd /c $env:temp\autologin.exe /accepteula
Invoke-WebRequest -Uri "https://live.sysinternals.com/Autologon.exe" -OutFile "$env:temp\autologin.exe"
cmd /c "$env:temp\autologin.exe" /accepteula
} }

View File

@ -28,7 +28,5 @@ function Invoke-WPFToggle {
"WPFToggleMouseAcceleration" {Invoke-WinUtilMouseAcceleration $(Get-WinUtilToggleStatus WPFToggleMouseAcceleration)} "WPFToggleMouseAcceleration" {Invoke-WinUtilMouseAcceleration $(Get-WinUtilToggleStatus WPFToggleMouseAcceleration)}
"WPFToggleStickyKeys" {Invoke-WinUtilStickyKeys $(Get-WinUtilToggleStatus WPFToggleStickyKeys)} "WPFToggleStickyKeys" {Invoke-WinUtilStickyKeys $(Get-WinUtilToggleStatus WPFToggleStickyKeys)}
"WPFToggleTaskbarWidgets" {Invoke-WinUtilTaskbarWidgets $(Get-WinUtilToggleStatus WPFToggleTaskbarWidgets)} "WPFToggleTaskbarWidgets" {Invoke-WinUtilTaskbarWidgets $(Get-WinUtilToggleStatus WPFToggleTaskbarWidgets)}
"WPFToggleTaskbarSearch" {Invoke-WinUtilTaskbarSearch $(Get-WinUtilToggleStatus WPFToggleTaskbarSearch)}
"WPFToggleTaskView" {Invoke-WinUtilTaskView $(Get-WinUtilToggleStatus WPFToggleTaskView)}
} }
} }

View File

@ -15,7 +15,7 @@ function Invoke-WPFUnInstall {
$PackagesToInstall = (Get-WinUtilCheckBoxes)["Install"] $PackagesToInstall = (Get-WinUtilCheckBoxes)["Install"]
if ($PackagesToInstall.Count -eq 0) { if ($PackagesToInstall.Count -eq 0) {
$WarningMsg = "Please select the program(s) to uninstall" $WarningMsg = "Please select the program(s) to install"
[System.Windows.MessageBox]::Show($WarningMsg, $AppTitle, [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) [System.Windows.MessageBox]::Show($WarningMsg, $AppTitle, [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
return return
} }

View File

@ -10,7 +10,7 @@ $InitialSessionState = [System.Management.Automation.Runspaces.InitialSessionSta
$InitialSessionState.Variables.Add($hashVars) $InitialSessionState.Variables.Add($hashVars)
# Get every private function and add them to the session state # Get every private function and add them to the session state
$functions = (Get-ChildItem function:\).where{$_.name -like "*winutil*" -or $_.name -like "*WPF*"} $functions = Get-ChildItem function:\ | Where-Object {$_.name -like "*winutil*" -or $_.name -like "*WPF*"}
foreach ($function in $functions){ foreach ($function in $functions){
$functionDefinition = Get-Content function:\$($function.name) $functionDefinition = Get-Content function:\$($function.name)
$functionEntry = New-Object System.Management.Automation.Runspaces.SessionStateFunctionEntry -ArgumentList $($function.name), $functionDefinition $functionEntry = New-Object System.Management.Automation.Runspaces.SessionStateFunctionEntry -ArgumentList $($function.name), $functionDefinition
@ -276,7 +276,7 @@ Add-Type @"
"@ "@
} }
foreach ($proc in (Get-Process).where{ $_.MainWindowTitle -and $_.MainWindowTitle -like "*titus*" }) { foreach ($proc in (Get-Process | Where-Object { $_.MainWindowTitle -and $_.MainWindowTitle -like "*titus*" })) {
# Check if the process's MainWindowHandle is valid # 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)" Write-Debug "MainWindowHandle: $($proc.Id) $($proc.MainWindowTitle) $($proc.MainWindowHandle)"
@ -287,37 +287,19 @@ Add-Type @"
} }
} }
# need to experiemnt more
# Using a TaskbarItem Overlay until someone figures out how to replace the icon correctly # setting icon for the windows is still not working
# $pngUrl = "https://christitus.com/images/logo-full.png"
# URL of the image # $pngPath = "$env:TEMP\cttlogo.png"
$imageUrl = "https://christitus.com/images/logo-full.png" # $iconPath = "$env:TEMP\cttlogo.ico"
# # Download the PNG file
# Download the image # Invoke-WebRequest -Uri $pngUrl -OutFile $pngPath
$imagePath = "$env:TEMP\logo-full.png" # if (Test-Path -Path $pngPath) {
Invoke-WebRequest -Uri $imageUrl -OutFile $imagePath # ConvertTo-Icon -bitmapPath $pngPath -iconPath $iconPath
# }
# Read the image file as a byte array # $icon = [System.Drawing.Icon]::ExtractAssociatedIcon($iconPath)
$imageBytes = [System.IO.File]::ReadAllBytes($imagePath) # Write-Host $icon.Handle
# [Window]::SendMessage($windowHandle, 0x80, [IntPtr]::Zero, $icon.Handle)
# Convert the byte array to a Base64 string
$base64String = [System.Convert]::ToBase64String($imageBytes)
# Create a streaming image by streaming the base64 string to a bitmap streamsource
$bitmap = New-Object System.Windows.Media.Imaging.BitmapImage
$bitmap.BeginInit()
$bitmap.StreamSource = [System.IO.MemoryStream][System.Convert]::FromBase64String($base64String)
$bitmap.EndInit()
$bitmap.Freeze()
# Ensure TaskbarItemInfo is created if not already
if (-not $sync["Form"].TaskbarItemInfo) {
$sync["Form"].TaskbarItemInfo = New-Object System.Windows.Shell.TaskbarItemInfo
}
# Set the overlay icon for the taskbar
$sync["Form"].TaskbarItemInfo.Overlay = $bitmap
$rect = New-Object RECT $rect = New-Object RECT
[Window]::GetWindowRect($windowHandle, [ref]$rect) [Window]::GetWindowRect($windowHandle, [ref]$rect)
@ -392,11 +374,11 @@ Add-Type @"
# Load Checkboxes and Labels outside of the Filter fuction only once on startup for performance reasons # Load Checkboxes and Labels outside of the Filter fuction only once on startup for performance reasons
$filter = Get-WinUtilVariables -Type CheckBox $filter = Get-WinUtilVariables -Type CheckBox
$CheckBoxes = ($sync.GetEnumerator()).where{ $psitem.Key -in $filter } $CheckBoxes = $sync.GetEnumerator() | Where-Object { $psitem.Key -in $filter }
$filter = Get-WinUtilVariables -Type Label $filter = Get-WinUtilVariables -Type Label
$labels = @{} $labels = @{}
($sync.GetEnumerator()).where{$PSItem.Key -in $filter} | ForEach-Object {$labels[$_.Key] = $_.Value} $sync.GetEnumerator() | Where-Object {$PSItem.Key -in $filter} | ForEach-Object {$labels[$_.Key] = $_.Value}
$allCategories = $checkBoxes.Name | ForEach-Object {$sync.configs.applications.$_} | Select-Object -Unique -ExpandProperty category $allCategories = $checkBoxes.Name | ForEach-Object {$sync.configs.applications.$_} | Select-Object -Unique -ExpandProperty category
@ -493,11 +475,13 @@ $sync["AboutMenuItem"].Add_Click({
$authorInfo = @" $authorInfo = @"
Author : <a href="https://github.com/ChrisTitusTech">@christitustech</a> Author : <a href="https://github.com/ChrisTitusTech">@christitustech</a>
Runspace : <a href="https://github.com/DeveloperDurp">@DeveloperDurp</a> Runspace : <a href="https://github.com/DeveloperDurp">@DeveloperDurp</a>
GUI : <a href="https://github.com/KonTy">@KonTy</a>
MicroWin : <a href="https://github.com/KonTy">@KonTy</a> MicroWin : <a href="https://github.com/KonTy">@KonTy</a>
GitHub : <a href="https://github.com/ChrisTitusTech/winutil">ChrisTitusTech/winutil</a> GitHub : <a href="https://github.com/ChrisTitusTech/winutil">ChrisTitusTech/winutil</a>
Version : <a href="https://github.com/ChrisTitusTech/winutil/releases/tag/$($sync.version)">$($sync.version)</a> Version : <a href="https://github.com/ChrisTitusTech/winutil/releases/tag/$($sync.version)">$($sync.version)</a>
"@ "@
Show-CustomDialog -Message $authorInfo -Width 400 Show-CustomDialog -Message $authorInfo -Width 400
}) })
$sync["Form"].ShowDialog() | out-null $sync["Form"].ShowDialog() | out-null
Stop-Transcript Stop-Transcript

View File

@ -1,40 +0,0 @@
<#
.SYNOPSIS
This Script is used as a target for the https://christitus.com/windev alias.
It queries the latest winget release (no matter if Pre-Release, Draft or Full Release) and invokes It
.DESCRIPTION
This Script provides a simple way to always start the bleeding edge release even if it's not yet a full release.
This function should be run with administrative privileges.
Because this way of recursively invoking scripts via Invoke-Expression it might very well happen that AV Programs flag this because it's a common way of mulitstage exploits to run
.EXAMPLE
irm https://christitus.com/windev | iex
OR
Run in Admin Powershell > ./windev.ps1
#>
# Function to fetch the latest release tag from the GitHub API
function Get-LatestRelease {
try {
$releases = Invoke-RestMethod -Uri 'https://api.github.com/repos/ChrisTitusTech/winutil/releases'
$latestRelease = $releases | Select-Object -First 1
return $latestRelease.tag_name
} catch {
Write-Host "Error fetching release data: $_" -ForegroundColor Red
return $null
}
}
# Function to redirect to the latest pre-release version
function RedirectToLatestPreRelease {
$latestRelease = Get-LatestRelease
if ($latestRelease) {
$url = "https://raw.githubusercontent.com/ChrisTitusTech/winutil/$latestRelease/winutil.ps1"
Invoke-RestMethod $url | Invoke-Expression
} else {
Write-Host 'Unable to determine latest pre-release version.' -ForegroundColor Red
}
}
# Call the redirect function
RedirectToLatestPreRelease

File diff suppressed because it is too large Load Diff

View File

@ -713,7 +713,7 @@
<StackPanel Background="{MainBackgroundColor}" Orientation="Horizontal" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Top" Grid.Column="0" Grid.ColumnSpan="3" Margin="5"> <StackPanel Background="{MainBackgroundColor}" Orientation="Horizontal" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Top" Grid.Column="0" Grid.ColumnSpan="3" Margin="5">
<Button Name="WPFinstall" Content=" Install/Upgrade Selected" Margin="2" /> <Button Name="WPFinstall" Content=" Install/Upgrade Selected" Margin="2" />
<Button Name="WPFInstallUpgrade" Content=" Upgrade All" Margin="2"/> <Button Name="WPFInstallUpgrade" Content=" Upgrade All" Margin="2"/>
<Button Name="WPFuninstall" Content=" Uninstall Selected" Margin="2"/> <Button Name="WPFuninstall" Content=" Uninstall Selection" Margin="2"/>
<Button Name="WPFGetInstalled" Content=" Get Installed" Margin="2"/> <Button Name="WPFGetInstalled" Content=" Get Installed" Margin="2"/>
<Button Name="WPFclearWinget" Content=" Clear Selection" Margin="2"/> <Button Name="WPFclearWinget" Content=" Clear Selection" Margin="2"/>
</StackPanel> </StackPanel>