mirror of
https://github.com/ChrisTitusTech/winutil.git
synced 2025-06-30 18:12:33 -05:00
Compare commits
13 Commits
fba593c8d1
...
24.06.11
Author | SHA1 | Date | |
---|---|---|---|
3a83203298 | |||
09b1e56967 | |||
af94adbabe | |||
a609f771c8 | |||
2b80e14bf9 | |||
1325ef54b8 | |||
8a76641d20 | |||
3dca1ee43e | |||
7b6decb28a | |||
774b64b092 | |||
02ea93c80f | |||
5e10883547 | |||
a8af90a112 |
89
.github/workflows/close-old-issues.yaml
vendored
89
.github/workflows/close-old-issues.yaml
vendored
@ -4,91 +4,20 @@ on:
|
||||
schedule:
|
||||
- cron: '0 0 * * *' # Run daily
|
||||
workflow_dispatch: # This line enables manual triggering
|
||||
|
||||
jobs:
|
||||
close-issues:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
issues: write # Ensure necessary permissions for issues
|
||||
|
||||
pull-requests: none
|
||||
contents: none
|
||||
steps:
|
||||
- name: Close inactive issues
|
||||
uses: actions/github-script@v7
|
||||
uses: actions/stale@v9.0.0
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
script: |
|
||||
const octokit = github;
|
||||
|
||||
// Get the repository owner and name
|
||||
const { owner, repo } = context.repo;
|
||||
|
||||
// Define the inactivity period (14 days)
|
||||
const inactivityPeriod = new Date();
|
||||
inactivityPeriod.setDate(inactivityPeriod.getDate() - 14);
|
||||
|
||||
const labelKeepIssue = 'Keep Issue Open';
|
||||
|
||||
try {
|
||||
// Get all open issues with pagination
|
||||
for await (const response of octokit.paginate.iterator(octokit.rest.issues.listForRepo, {
|
||||
owner,
|
||||
repo,
|
||||
state: 'open',
|
||||
})) {
|
||||
const issues = response.data;
|
||||
|
||||
// Close issues inactive for more than the inactivity period
|
||||
for (const issue of issues) {
|
||||
let closeIssue = true;
|
||||
|
||||
// Get all Labels of issue, and compared each label with the labelKeepIssue const variable
|
||||
try {
|
||||
const respondIssueLabels = await octokit.request("GET /repos/{owner}/{repo}/issues/{issue_number}/labels", {
|
||||
owner: owner,
|
||||
repo: repo,
|
||||
issue_number: issue.number
|
||||
});
|
||||
const labels = respondIssueLabels.data;
|
||||
|
||||
for (let i = 0; i < labels.length; i++) {
|
||||
const label = labels[i]
|
||||
if (label.name === labelKeepIssue) {
|
||||
console.log(`Issue #${issue.number} will not be closed`);
|
||||
closeIssue = false;
|
||||
break; // Break from the loop, no need to check the remaining Labels.
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`Error while Fetching Labels for Issue #${issue.number}, Error: ${error}`);
|
||||
}
|
||||
|
||||
if (!closeIssue) {
|
||||
continue; // Skip the next bit of code
|
||||
}
|
||||
|
||||
const lastCommentDate = issue.updated_at;
|
||||
if (new Date(lastCommentDate) < inactivityPeriod) {
|
||||
try {
|
||||
// Close the issue
|
||||
await octokit.rest.issues.update({
|
||||
owner,
|
||||
repo,
|
||||
issue_number: issue.number,
|
||||
state: 'closed',
|
||||
});
|
||||
|
||||
// Add a comment
|
||||
await octokit.rest.issues.createComment({
|
||||
owner,
|
||||
repo,
|
||||
issue_number: issue.number,
|
||||
body: 'Closed due to inactivity',
|
||||
});
|
||||
} catch (error) {
|
||||
console.error(`Error updating or commenting on issue #${issue.number}: ${error}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`Error fetching issues: ${error}`);
|
||||
}
|
||||
exempt-issue-labels: "Keep Issue Open"
|
||||
days-before-issue-close: 14
|
||||
close-issue-message: "This issue was closed because it has been inactive for 14 days"
|
||||
debug-only: false # Make this field equal true if you want to test your configuration if it works or not
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
24
.github/workflows/compile.yaml
vendored
Normal file
24
.github/workflows/compile.yaml
vendored
Normal file
@ -0,0 +1,24 @@
|
||||
name: Compile
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- test*
|
||||
|
||||
jobs:
|
||||
build-runspace:
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.head_ref }}
|
||||
- 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
|
||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
||||
with:
|
||||
commit_message: Compile Winutil
|
||||
if: success()
|
54
.github/workflows/release.yaml
vendored
54
.github/workflows/release.yaml
vendored
@ -1,24 +1,44 @@
|
||||
name: Update Branch
|
||||
name: Release WinUtil
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- test*
|
||||
workflow_run:
|
||||
workflows: ["Compile"] #Ensure Compile winget.ps1 is done
|
||||
types:
|
||||
- completed
|
||||
|
||||
jobs:
|
||||
build-runspace:
|
||||
runs-on: windows-latest
|
||||
outputs:
|
||||
version: ${{ steps.extract_version.outputs.version }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.head_ref }}
|
||||
- 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
|
||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
||||
with:
|
||||
commit_message: Compile Winutil
|
||||
if: success()
|
||||
- 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: Release ${{ steps.extract_version.outputs.version }}
|
||||
files: ./winutil.ps1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -44,3 +44,4 @@ Microsoft.PowerShell.ConsoleHost.dll
|
||||
microwin.log
|
||||
True
|
||||
test.ps1
|
||||
winutil.ps1
|
||||
|
86
Compile.ps1
86
Compile.ps1
@ -1,35 +1,43 @@
|
||||
param (
|
||||
[switch]$Debug
|
||||
)
|
||||
$OFS = "`r`n"
|
||||
$scriptname = "winutil.ps1"
|
||||
|
||||
# Variable to sync between runspaces
|
||||
$sync = [Hashtable]::Synchronized(@{})
|
||||
$sync.PSScriptRoot = $PSScriptRoot
|
||||
$sync.configs = @{}
|
||||
|
||||
if (Test-Path -Path "$($scriptname)")
|
||||
{
|
||||
Remove-Item -Force "$($scriptname)"
|
||||
}
|
||||
|
||||
Write-output '
|
||||
$header = @"
|
||||
################################################################################################################
|
||||
### ###
|
||||
### WARNING: This file is automatically generated DO NOT modify this file directly as it will be overwritten ###
|
||||
### ###
|
||||
################################################################################################################
|
||||
' | Out-File ./$scriptname -Append -Encoding ascii
|
||||
"@
|
||||
|
||||
(Get-Content .\scripts\start.ps1).replace('#{replaceme}',"$(Get-Date -Format yy.MM.dd)") | Out-File ./$scriptname -Append -Encoding ascii
|
||||
# Create the script in memory.
|
||||
$script_content = [System.Collections.Generic.List[string]]::new()
|
||||
|
||||
Write-Progress -Activity "Compiling" -Status "Adding: Header" -PercentComplete 5
|
||||
$script_content.Add($header)
|
||||
|
||||
Write-Progress -Activity "Compiling" -Status "Adding: Version" -PercentComplete 10
|
||||
$script_content.Add($(Get-Content .\scripts\start.ps1).replace('#{replaceme}',"$(Get-Date -Format yy.MM.dd)"))
|
||||
|
||||
Write-Progress -Activity "Compiling" -Status "Adding: Functions" -PercentComplete 20
|
||||
Get-ChildItem .\functions -Recurse -File | ForEach-Object {
|
||||
Get-Content $psitem.FullName | Out-File ./$scriptname -Append -Encoding ascii
|
||||
}
|
||||
|
||||
$script_content.Add($(Get-Content $psitem.FullName))
|
||||
}
|
||||
Write-Progress -Activity "Compiling" -Status "Adding: Config *.json" -PercentComplete 40
|
||||
Get-ChildItem .\config | Where-Object {$psitem.extension -eq ".json"} | ForEach-Object {
|
||||
|
||||
$json = (Get-Content $psitem.FullName).replace("'","''")
|
||||
|
||||
# Replace every XML Special Character so it'll render correctly in final build
|
||||
# Only do so if json files has content to be displayed (for example the applications, tweaks, features json files)
|
||||
# Some Type Convertion using Casting and Cleaning Up of the convertion result using 'Replace' Method
|
||||
# Some Type Convertion using Casting and Cleaning Up of the convertion result using 'Replace' Method
|
||||
$jsonAsObject = $json | convertfrom-json
|
||||
$firstLevelJsonList = ([System.String]$jsonAsObject).split('=;') | ForEach-Object {
|
||||
$_.Replace('=}','').Replace('@{','').Replace(' ','')
|
||||
@ -38,7 +46,7 @@ Get-ChildItem .\config | Where-Object {$psitem.extension -eq ".json"} | ForEach-
|
||||
for ($i = 0; $i -lt $firstLevelJsonList.Count; $i += 1) {
|
||||
$firstLevelName = $firstLevelJsonList[$i]
|
||||
# Note: Avoid using HTML Entity Codes (for example '”' (stands for "Right Double Quotation Mark")), and use HTML decimal/hex codes instead.
|
||||
# as using HTML Entity Codes will result in XML parse Error when running the compiled script.
|
||||
# as using HTML Entity Codes will result in XML parse Error when running the compiled script.
|
||||
if ($jsonAsObject.$firstLevelName.content -ne $null) {
|
||||
$jsonAsObject.$firstLevelName.content = $jsonAsObject.$firstLevelName.content.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
|
||||
@ -49,11 +57,18 @@ Get-ChildItem .\config | Where-Object {$psitem.extension -eq ".json"} | ForEach-
|
||||
}
|
||||
}
|
||||
# The replace at the end is required, as without it the output of converto-json will be somewhat weird for Multiline String
|
||||
# Most Notably is the scripts in json files, make=ing it harder for users who want to review these scripts that are found in the final compiled script
|
||||
# Most Notably is the scripts in json files, making it harder for users who want to review these scripts that are found in the final compiled script
|
||||
$json = ($jsonAsObject | convertto-json -Depth 3).replace('\r\n',"`r`n")
|
||||
|
||||
$sync.configs.$($psitem.BaseName) = $json | convertfrom-json
|
||||
Write-output "`$sync.configs.$($psitem.BaseName) = '$json' `| convertfrom-json" | Out-File ./$scriptname -Append -Encoding ascii
|
||||
$script_content.Add($(Write-output "`$sync.configs.$($psitem.BaseName) = '$json' `| convertfrom-json" ))
|
||||
}
|
||||
Write-Progress -Activity "Compiling" -Status "Adding: Config *.cfg" -PercentComplete 45
|
||||
Get-ChildItem .\config | Where-Object {$PSItem.Extension -eq ".cfg"} | ForEach-Object {
|
||||
$script_content.Add($(Write-output "`$sync.configs.$($psitem.BaseName) = '$(Get-Content $PSItem.FullName)'"))
|
||||
}
|
||||
Get-ChildItem .\config | Where-Object {$PSItem.Extension -eq ".cfg"} | ForEach-Object {
|
||||
$script_content.Add($(Write-output "`$sync.configs.$($psitem.BaseName) = '$(Get-Content $PSItem.FullName)'"))
|
||||
}
|
||||
|
||||
$xaml = (Get-Content .\xaml\inputXML.xaml).replace("'","''")
|
||||
@ -61,29 +76,34 @@ $xaml = (Get-Content .\xaml\inputXML.xaml).replace("'","''")
|
||||
# Dot-source the Get-TabXaml function
|
||||
. .\functions\private\Get-TabXaml.ps1
|
||||
|
||||
## Xaml Manipulation
|
||||
$tabColumns = Get-TabXaml "applications" 5
|
||||
$tabColumns | Out-File -FilePath ".\xaml\inputApp.xaml" -Encoding ascii
|
||||
$tabColumns = Get-TabXaml "tweaks"
|
||||
$tabColumns | Out-File -FilePath ".\xaml\inputTweaks.xaml" -Encoding ascii
|
||||
$tabColumns = Get-TabXaml "feature"
|
||||
$tabColumns | Out-File -FilePath ".\xaml\inputFeatures.xaml" -Encoding ascii
|
||||
Write-Progress -Activity "Compiling" -Status "Building: Xaml " -PercentComplete 75
|
||||
$appXamlContent = Get-TabXaml "applications" 5
|
||||
$tweaksXamlContent = Get-TabXaml "tweaks"
|
||||
$featuresXamlContent = Get-TabXaml "feature"
|
||||
|
||||
# Assuming inputApp.xaml is in the same directory as main.ps1
|
||||
$appXamlPath = Join-Path -Path $PSScriptRoot -ChildPath "xaml/inputApp.xaml"
|
||||
$tweaksXamlPath = Join-Path -Path $PSScriptRoot -ChildPath "xaml/inputTweaks.xaml"
|
||||
$featuresXamlPath = Join-Path -Path $PSScriptRoot -ChildPath "xaml/inputFeatures.xaml"
|
||||
|
||||
# Load the XAML content from inputApp.xaml
|
||||
$appXamlContent = Get-Content -Path $appXamlPath -Raw
|
||||
$tweaksXamlContent = Get-Content -Path $tweaksXamlPath -Raw
|
||||
$featuresXamlContent = Get-Content -Path $featuresXamlPath -Raw
|
||||
|
||||
Write-Progress -Activity "Compiling" -Status "Adding: Xaml " -PercentComplete 90
|
||||
# Replace the placeholder in $inputXML with the content of inputApp.xaml
|
||||
$xaml = $xaml -replace "{{InstallPanel_applications}}", $appXamlContent
|
||||
$xaml = $xaml -replace "{{InstallPanel_tweaks}}", $tweaksXamlContent
|
||||
$xaml = $xaml -replace "{{InstallPanel_features}}", $featuresXamlContent
|
||||
|
||||
Write-output "`$inputXML = '$xaml'" | Out-File ./$scriptname -Append -Encoding ascii
|
||||
$script_content.Add($(Write-output "`$inputXML = '$xaml'"))
|
||||
|
||||
Get-Content .\scripts\main.ps1 | Out-File ./$scriptname -Append -Encoding ascii
|
||||
$script_content.Add($(Get-Content .\scripts\main.ps1))
|
||||
|
||||
if ($Debug){
|
||||
Write-Progress -Activity "Compiling" -Status "Writing debug files" -PercentComplete 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 {
|
||||
Write-Progress -Activity "Compiling" -Status "Removing temporary files" -PercentComplete 99
|
||||
Remove-Item ".\xaml\inputApp.xaml" -ErrorAction SilentlyContinue
|
||||
Remove-Item ".\xaml\inputTweaks.xaml" -ErrorAction SilentlyContinue
|
||||
Remove-Item ".\xaml\inputFeatures.xaml" -ErrorAction SilentlyContinue
|
||||
}
|
||||
|
||||
Set-Content -Path $scriptname -Value ($script_content -join "`r`n") -Encoding ascii
|
||||
Write-Progress -Activity "Compiling" -Completed
|
@ -32,10 +32,9 @@ or by executing:
|
||||
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
|
||||
|
||||
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://raw.githubusercontent.com/ChrisTitusTech/winutil/main/winutil.ps1 | iex
|
||||
irm "https://github.com/ChrisTitusTech/winutil/releases/download/RELEASE_TAG/winutil.ps1" | iex
|
||||
```
|
||||
|
||||
#### Automation
|
||||
@ -128,7 +127,9 @@ If you encounter any challenges or problems with the script, I kindly request th
|
||||
|
||||
## Contribute Code
|
||||
|
||||
To contribute new code, please ensure that it is submitted to the **TEST BRANCH**. Please note that merges will not be performed directly on the MAIN branch.
|
||||
If you adding, changing, or deleting an Application... submit to **APPLICATIONS branch**. We batch these in at the end of the month.
|
||||
|
||||
If doing a code change and you can submit a PR to main branch, but I am very selective about these. Do not use a code formatter, massive amounts of line changes, and 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 documenting any additions made to the tweaks section and ensuring that corresponding undo measures are in place to remove the newly added tweaks if necessary. Failure to adhere to this format may result in denial of the pull request. Additionally, comprehensive documentation is required for all code changes. Any code lacking sufficient documentation may also be denied.
|
||||
|
||||
|
@ -32,13 +32,13 @@
|
||||
"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": "AFFiNE.stable"
|
||||
},
|
||||
"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",
|
||||
@ -263,6 +263,14 @@
|
||||
"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",
|
||||
@ -398,6 +406,14 @@
|
||||
"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://ditto-cp.sourceforge.io/",
|
||||
"winget": "Ditto.Ditto"
|
||||
},
|
||||
"WPFInstalldockerdesktop": {
|
||||
"category": "Development",
|
||||
@ -569,11 +585,19 @@
|
||||
},
|
||||
"WPFInstallfileconverter": {
|
||||
"category": "Utilities",
|
||||
"choco": "files",
|
||||
"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",
|
||||
@ -743,6 +767,14 @@
|
||||
"link": "https://desktop.github.com/",
|
||||
"winget": "Git.Git;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",
|
||||
@ -751,6 +783,14 @@
|
||||
"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",
|
||||
@ -1004,7 +1044,7 @@
|
||||
"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-playerf",
|
||||
"link": "https://github.com/jellyfin/jellyfin-media-player",
|
||||
"winget": "Jellyfin.JellyfinMediaPlayer"
|
||||
},
|
||||
"WPFInstalljellyfinserver": {
|
||||
@ -1178,8 +1218,8 @@
|
||||
"WPFInstallmatrix": {
|
||||
"category": "Communications",
|
||||
"choco": "element-desktop",
|
||||
"content": "Matrix",
|
||||
"description": "Matrix is an open network for secure, decentralized communication with features like chat, VoIP, and collaboration tools.",
|
||||
"content": "Element",
|
||||
"description": "Element is a client for Matrix—an open network for secure, decentralized communication.",
|
||||
"link": "https://element.io/",
|
||||
"winget": "Element.Element"
|
||||
},
|
||||
@ -1247,6 +1287,46 @@
|
||||
"link": "https://www.msi.com/Landing/afterburner",
|
||||
"winget": "Guru3D.Afterburner"
|
||||
},
|
||||
"WPFInstallBorderlessGaming": {
|
||||
"category": "Utilities",
|
||||
"choco": "na",
|
||||
"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"
|
||||
},
|
||||
"WPFInstallFreeFileSync": {
|
||||
"category": "Utilities",
|
||||
"choco": "freefilesync",
|
||||
"content": "FreeFileSync",
|
||||
"description": "Synchronize Files and Folders",
|
||||
"link": "https://freefilesync.org",
|
||||
"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",
|
||||
@ -1655,6 +1735,14 @@
|
||||
"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",
|
||||
@ -1782,6 +1870,14 @@
|
||||
"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",
|
||||
@ -1902,6 +1998,14 @@
|
||||
"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",
|
||||
@ -2207,14 +2311,6 @@
|
||||
"link": "https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads",
|
||||
"winget": "Microsoft.VCRedist.2015+.x64"
|
||||
},
|
||||
"WPFInstallvencord": {
|
||||
"category": "Communications",
|
||||
"choco": "na",
|
||||
"content": "Vencord",
|
||||
"description": "Vencord is a modification for Discord that adds plugins, custom styles, and more!",
|
||||
"link": "https://vencord.dev/",
|
||||
"winget": "Vendicated.Vencord"
|
||||
},
|
||||
"WPFInstallventoy": {
|
||||
"category": "Pro Tools",
|
||||
"choco": "ventoy",
|
||||
@ -2276,7 +2372,7 @@
|
||||
"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://www.vb-audio.com/Voicemeeter/",
|
||||
"link": "https://voicemeeter.com/",
|
||||
"winget": "VB-Audio.Voicemeeter"
|
||||
},
|
||||
"WPFInstallvrdesktopstreamer": {
|
||||
@ -2312,13 +2408,13 @@
|
||||
"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"
|
||||
},
|
||||
"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",
|
||||
@ -2559,6 +2655,14 @@
|
||||
"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",
|
||||
@ -2631,6 +2735,30 @@
|
||||
"link": "https://github.com/magic-wormhole/magic-wormhole",
|
||||
"winget": "magic-wormhole.magic-wormhole"
|
||||
},
|
||||
"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",
|
||||
@ -2654,5 +2782,21 @@
|
||||
"description": "The customization marketplace for Windows programs",
|
||||
"link": "https://windhawk.net",
|
||||
"winget": "RamenSoftware.Windhawk"
|
||||
},
|
||||
"WPFInstallForceAutoHDR": {
|
||||
"category": "Utilities",
|
||||
"choco": "na",
|
||||
"content": "GUI That Forces Auto HDR In Unsupported Games",
|
||||
"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"
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
||||
|
@ -159,22 +159,6 @@ E005 -
|
||||
E013 -
|
||||
E014 -
|
||||
E006 -
|
||||
F002 -
|
||||
F014 -
|
||||
F015 -
|
||||
F016 -
|
||||
F001 -
|
||||
F003 -
|
||||
F004 -
|
||||
F005 -
|
||||
F007 -
|
||||
F008 -
|
||||
F009 -
|
||||
F006 -
|
||||
F010 -
|
||||
F011 -
|
||||
F012 -
|
||||
F013 -
|
||||
Y001 -
|
||||
Y002 -
|
||||
Y003 -
|
||||
@ -224,7 +208,6 @@ S014 -
|
||||
K001 -
|
||||
K002 -
|
||||
K005 -
|
||||
M025 -
|
||||
M003 -
|
||||
M015 -
|
||||
M016 -
|
||||
|
@ -1,5 +1,5 @@
|
||||
############################################################################
|
||||
# This file was created with O&O ShutUp10++ V1.9.1436
|
||||
# This file was created with O&O ShutUp10++ V1.9.1438
|
||||
# and can be imported onto another computer.
|
||||
#
|
||||
# Download the application at https://www.oo-software.com/shutup10
|
||||
@ -13,7 +13,7 @@
|
||||
# user does not get any feedback about the import.
|
||||
#
|
||||
# We are always happy to answer any questions you may have!
|
||||
# © 2015-2023 O&O Software GmbH, Berlin. All rights reserved.
|
||||
# © 2015-2024 O&O Software GmbH, Berlin. All rights reserved.
|
||||
# https://www.oo-software.com/
|
||||
############################################################################
|
||||
|
||||
@ -34,8 +34,8 @@ P067 +
|
||||
P070 +
|
||||
P069 +
|
||||
P009 -
|
||||
P010 -
|
||||
P015 -
|
||||
P010 +
|
||||
P015 +
|
||||
P068 -
|
||||
P016 -
|
||||
A001 +
|
||||
@ -49,7 +49,7 @@ P036 +
|
||||
P025 +
|
||||
P033 +
|
||||
P023 +
|
||||
P056 -
|
||||
P056 +
|
||||
P057 -
|
||||
P012 -
|
||||
P034 -
|
||||
@ -102,7 +102,7 @@ P077 -
|
||||
P078 -
|
||||
P079 -
|
||||
P080 -
|
||||
P024 -
|
||||
P024 +
|
||||
S001 +
|
||||
S002 +
|
||||
S003 +
|
||||
@ -159,22 +159,6 @@ E005 -
|
||||
E013 -
|
||||
E014 -
|
||||
E006 -
|
||||
F002 +
|
||||
F014 +
|
||||
F015 +
|
||||
F016 +
|
||||
F001 +
|
||||
F003 +
|
||||
F004 +
|
||||
F005 +
|
||||
F007 +
|
||||
F008 +
|
||||
F009 +
|
||||
F006 -
|
||||
F010 -
|
||||
F011 -
|
||||
F012 -
|
||||
F013 -
|
||||
Y001 +
|
||||
Y002 +
|
||||
Y003 +
|
||||
@ -195,6 +179,8 @@ C015 +
|
||||
C101 +
|
||||
C201 +
|
||||
C102 +
|
||||
C103 +
|
||||
C203 +
|
||||
L001 +
|
||||
L003 +
|
||||
L004 -
|
||||
@ -210,12 +196,12 @@ W004 -
|
||||
W005 -
|
||||
W010 -
|
||||
W009 -
|
||||
P017 -
|
||||
P017 +
|
||||
W006 -
|
||||
W008 -
|
||||
M006 +
|
||||
M011 -
|
||||
M010 -
|
||||
M010 +
|
||||
O003 -
|
||||
O001 -
|
||||
S012 -
|
||||
@ -224,21 +210,22 @@ S014 -
|
||||
K001 +
|
||||
K002 +
|
||||
K005 +
|
||||
M025 +
|
||||
M003 -
|
||||
M015 -
|
||||
M016 -
|
||||
M003 +
|
||||
M015 +
|
||||
M016 +
|
||||
M017 -
|
||||
M018 -
|
||||
M018 +
|
||||
M019 -
|
||||
M020 -
|
||||
M021 -
|
||||
M020 +
|
||||
M021 +
|
||||
M022 +
|
||||
M001 +
|
||||
M004 +
|
||||
M005 +
|
||||
M024 +
|
||||
M026 +
|
||||
M027 +
|
||||
M012 -
|
||||
M013 -
|
||||
M014 -
|
||||
N001 -
|
||||
N001 -
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"desktop": [
|
||||
"Standard": [
|
||||
"WPFTweaksAH",
|
||||
"WPFTweaksDVR",
|
||||
"WPFTweaksHiber",
|
||||
@ -9,21 +9,14 @@
|
||||
"WPFTweaksServices",
|
||||
"WPFTweaksStorage",
|
||||
"WPFTweaksTele",
|
||||
"WPFTweaksWifi"
|
||||
],
|
||||
"laptop": [
|
||||
"WPFTweaksAH",
|
||||
"WPFTweaksDVR",
|
||||
"WPFTweaksHome",
|
||||
"WPFTweaksLoc",
|
||||
"WPFTweaksOO",
|
||||
"WPFTweaksServices",
|
||||
"WPFTweaksStorage",
|
||||
"WPFTweaksTele",
|
||||
"WPFTweaksWifi",
|
||||
"WPFMiscTweaksLapPower"
|
||||
"WPFTweaksDiskCleanup",
|
||||
"WPFTweaksDeleteTempFiles",
|
||||
"WPFTweaksEndTaskOnTaskbar",
|
||||
"WPFTweaksRestorePoint",
|
||||
"WPFTweaksTeredo"
|
||||
],
|
||||
"minimal": [
|
||||
"Minimal": [
|
||||
"WPFTweaksHome",
|
||||
"WPFTweaksOO",
|
||||
"WPFTweaksServices",
|
||||
|
@ -23,6 +23,7 @@
|
||||
"ButtonBackgroundMouseoverColor": "#C2C2C2",
|
||||
"ButtonBackgroundSelectedColor": "#F0F0F0",
|
||||
"ButtonForegroundColor": "#000000",
|
||||
"ToggleButtonOnColor": "#2e77ff",
|
||||
"ButtonBorderThickness": "1",
|
||||
"ButtonMargin": "1",
|
||||
"ButtonCornerRadius": "2",
|
||||
@ -53,6 +54,7 @@
|
||||
"ButtonBackgroundMouseoverColor": "#A55A64",
|
||||
"ButtonBackgroundSelectedColor": "#FF5733",
|
||||
"ButtonForegroundColor": "#9CCC65",
|
||||
"ToggleButtonOnColor": "#2e77ff",
|
||||
"ButtonBorderThickness": "1",
|
||||
"ButtonMargin": "1",
|
||||
"ButtonCornerRadius": "2",
|
||||
@ -83,6 +85,7 @@
|
||||
"ButtonBackgroundMouseoverColor": "#FF5733",
|
||||
"ButtonBackgroundSelectedColor": "#FF5733",
|
||||
"ButtonForegroundColor": "#9CCC65",
|
||||
"ToggleButtonOnColor": "#2e77ff",
|
||||
"ButtonBorderThickness": "1",
|
||||
"ButtonMargin": "1",
|
||||
"ButtonCornerRadius": "2",
|
||||
|
@ -34,7 +34,7 @@
|
||||
"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": "a012_",
|
||||
"Order": "a005_",
|
||||
"registry": [
|
||||
{
|
||||
"Path": "HKLM:\\System\\CurrentControlSet\\Control\\Session Manager\\Power",
|
||||
@ -58,12 +58,59 @@
|
||||
"powercfg.exe /hibernate on"
|
||||
]
|
||||
},
|
||||
"WPFToggleTweaksLaptopHybernation": {
|
||||
"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",
|
||||
"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": "a011_",
|
||||
"Order": "a005_",
|
||||
"service": [
|
||||
{
|
||||
"Name": "HomeGroupListener",
|
||||
@ -77,273 +124,12 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"WPFTweaksDebloatAdobe": {
|
||||
"Content": "Debloat Adobe",
|
||||
"Description": "Manages Adobe Services, Adobe Desktop Service, and Acrobat Updates",
|
||||
"category": "Essential Tweaks",
|
||||
"panel": "1",
|
||||
"Order": "a009_",
|
||||
"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": "Block Adobe Networking",
|
||||
"Description": "Reduce user interruptions by selectively blocking connections to Adobe's activation and telemetry servers. ",
|
||||
"category": "Essential Tweaks",
|
||||
"panel": "1",
|
||||
"Order": "a010_",
|
||||
"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: $_\"
|
||||
}
|
||||
"
|
||||
]
|
||||
},
|
||||
"WPFTweaksLoc": {
|
||||
"Content": "Disable Location Tracking",
|
||||
"Description": "Disables Location Tracking...DUH!",
|
||||
"category": "Essential Tweaks",
|
||||
"panel": "1",
|
||||
"Order": "a008_",
|
||||
"Order": "a005_",
|
||||
"registry": [
|
||||
{
|
||||
"Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\CapabilityAccessManager\\ConsentStore\\location",
|
||||
@ -2133,27 +1919,6 @@
|
||||
"Value": "1",
|
||||
"Type": "DWord"
|
||||
},
|
||||
{
|
||||
"Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Multimedia\\SystemProfile\\Tasks\\Games",
|
||||
"OriginalValue": "1",
|
||||
"Name": "GPU Priority",
|
||||
"Value": "8",
|
||||
"Type": "DWord"
|
||||
},
|
||||
{
|
||||
"Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Multimedia\\SystemProfile\\Tasks\\Games",
|
||||
"OriginalValue": "1",
|
||||
"Name": "Priority",
|
||||
"Value": "6",
|
||||
"Type": "DWord"
|
||||
},
|
||||
{
|
||||
"Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Multimedia\\SystemProfile\\Tasks\\Games",
|
||||
"OriginalValue": "High",
|
||||
"Name": "Scheduling Category",
|
||||
"Value": "High",
|
||||
"Type": "String"
|
||||
},
|
||||
{
|
||||
"Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\UserProfileEngagement",
|
||||
"OriginalValue": "1",
|
||||
@ -2203,7 +1968,7 @@
|
||||
"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": "a004_",
|
||||
"Order": "a005_",
|
||||
"registry": [
|
||||
{
|
||||
"Path": "HKLM:\\Software\\Microsoft\\PolicyManager\\default\\WiFi\\AllowWiFiHotSpotReporting",
|
||||
@ -2226,7 +1991,7 @@
|
||||
"Description": "Essential for computers that are dual booting. Fixes the time sync with Linux Systems.",
|
||||
"category": "z__Advanced Tweaks - CAUTION",
|
||||
"panel": "1",
|
||||
"Order": "a022_",
|
||||
"Order": "a027_",
|
||||
"registry": [
|
||||
{
|
||||
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\TimeZoneInformation",
|
||||
@ -2242,7 +2007,7 @@
|
||||
"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": "a021_",
|
||||
"Order": "a027_",
|
||||
"registry": [
|
||||
{
|
||||
"Path": "HKCU:\\Control Panel\\Desktop",
|
||||
@ -2348,7 +2113,7 @@
|
||||
"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": "a025_",
|
||||
"Order": "a028_",
|
||||
"appx": [
|
||||
"Microsoft.Microsoft3DViewer",
|
||||
"Microsoft.AppConnector",
|
||||
@ -2467,7 +2232,7 @@
|
||||
"Description": "Creates a restore point at runtime in case a revert is needed from WinUtil modifications",
|
||||
"category": "Essential Tweaks",
|
||||
"panel": "1",
|
||||
"Checked": "True",
|
||||
"Checked": "False",
|
||||
"Order": "a001_",
|
||||
"InvokeScript": [
|
||||
"
|
||||
@ -2523,7 +2288,7 @@
|
||||
"Description": "Enables option to end task when right clicking a program in the taskbar",
|
||||
"category": "Essential Tweaks",
|
||||
"panel": "1",
|
||||
"Order": "a002_",
|
||||
"Order": "a006_",
|
||||
"InvokeScript": [
|
||||
"
|
||||
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\\TaskbarDeveloperSettings\" -Name \"TaskbarEndTask\" -Type \"DWord\" -Value \"1\"
|
||||
@ -2535,12 +2300,25 @@
|
||||
"
|
||||
]
|
||||
},
|
||||
"WPFTweaksPowershell7": {
|
||||
"Content": "Replace Default Powershell 5 to Powershell 7",
|
||||
"Description": "This will edit the config file of the Windows Terminal Replacing the Powershell 5 to Powershell 7 and install Powershell 7 if necessary",
|
||||
"category": "Essential Tweaks",
|
||||
"panel": "1",
|
||||
"Order": "a009_",
|
||||
"InvokeScript": [
|
||||
"Invoke-WPFTweakPS7 -action \"PS7\""
|
||||
],
|
||||
"UndoScript": [
|
||||
"Invoke-WPFTweakPS7 -action \"PS5\""
|
||||
]
|
||||
},
|
||||
"WPFTweaksOO": {
|
||||
"Content": "Run OO Shutup",
|
||||
"Description": "Runs OO Shutup and applies the recommended Tweaks. https://www.oo-software.com/en/shutup10",
|
||||
"category": "Essential Tweaks",
|
||||
"panel": "1",
|
||||
"Order": "a002_",
|
||||
"Order": "a009_",
|
||||
"ToolTip": "Runs OO Shutup and applies the recommended Tweaks https://www.oo-software.com/en/shutup10",
|
||||
"InvokeScript": [
|
||||
"Invoke-WPFOOSU -action \"recommended\""
|
||||
@ -2554,7 +2332,7 @@
|
||||
"Description": "Storage Sense deletes temp files automatically.",
|
||||
"category": "Essential Tweaks",
|
||||
"panel": "1",
|
||||
"Order": "a010_",
|
||||
"Order": "a005_",
|
||||
"InvokeScript": [
|
||||
"Set-ItemProperty -Path \"HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\StorageSense\\Parameters\\StoragePolicy\" -Name \"01\" -Value 0 -Type Dword -Force"
|
||||
],
|
||||
@ -2567,7 +2345,7 @@
|
||||
"Description": "Removes MS Edge when it gets reinstalled by updates.",
|
||||
"category": "z__Advanced Tweaks - CAUTION",
|
||||
"panel": "1",
|
||||
"Order": "a026_",
|
||||
"Order": "a029_",
|
||||
"InvokeScript": [
|
||||
"
|
||||
#:: Standalone script by AveYo Source: https://raw.githubusercontent.com/AveYo/fox/main/Edge_Removal.bat
|
||||
@ -2585,30 +2363,112 @@
|
||||
]
|
||||
},
|
||||
"WPFTweaksRemoveCopilot": {
|
||||
"Content": "Disables Microsoft Copilot",
|
||||
"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": [
|
||||
"
|
||||
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\" -Name \"ShowCopilotButton\" -Type \"DWord\" -Value \"0\"
|
||||
New-Item \"HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsCopilot\" -Force | New-ItemProperty -Name \"TurnOffWindowsCopilot\" -Value \"1\" -Force -Type \"DWord\"
|
||||
"
|
||||
"
|
||||
Write-Host \"Remove Copilot\"
|
||||
dism /online /remove-package /package-name:Microsoft.Windows.Copilot
|
||||
"
|
||||
],
|
||||
"UndoScript": [
|
||||
"
|
||||
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\" -Name \"ShowCopilotButton\" -Type \"DWord\" -Value \"1\"
|
||||
Remove-Item \"HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsCopilot\" -Force
|
||||
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": "Essential Tweaks",
|
||||
"panel": "1",
|
||||
"Order": "a0015_",
|
||||
"InvokeScript": [
|
||||
"
|
||||
Write-Host \"Kill OneDrive process\"
|
||||
$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 \"Install Microsoft Edge\"
|
||||
taskkill.exe /F /IM \"OneDrive.exe\"
|
||||
|
||||
"
|
||||
]
|
||||
},
|
||||
"WPFTweaksRemoveOnedrive": {
|
||||
"Content": "Remove OneDrive",
|
||||
"Description": "Copies OneDrive files to Default Home Folders and Uninstalls it.",
|
||||
"category": "z__Advanced Tweaks - CAUTION",
|
||||
"panel": "1",
|
||||
"Order": "a027_",
|
||||
"Order": "a030_",
|
||||
"InvokeScript": [
|
||||
"
|
||||
|
||||
@ -2691,7 +2551,7 @@
|
||||
"Description": "Disables all Notifications INCLUDING Calendar",
|
||||
"category": "z__Advanced Tweaks - CAUTION",
|
||||
"panel": "1",
|
||||
"Order": "a024_",
|
||||
"Order": "a026_",
|
||||
"registry": [
|
||||
{
|
||||
"Path": "HKCU:\\Software\\Policies\\Microsoft\\Windows\\Explorer",
|
||||
@ -2709,12 +2569,273 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"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. ",
|
||||
"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": "a028_",
|
||||
"Order": "a027_",
|
||||
"InvokeScript": [
|
||||
"
|
||||
New-Item -Path \"HKCU:\\Software\\Classes\\CLSID\\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\" -Name \"InprocServer32\" -force -value \"\"
|
||||
@ -2738,7 +2859,7 @@
|
||||
"Description": "Runs Disk Cleanup on Drive C: and removes old Windows Updates.",
|
||||
"category": "Essential Tweaks",
|
||||
"panel": "1",
|
||||
"Order": "a007_",
|
||||
"Order": "a009_",
|
||||
"InvokeScript": [
|
||||
"
|
||||
cleanmgr.exe /d C: /VERYLOWDISK
|
||||
@ -2751,7 +2872,7 @@
|
||||
"Description": "Erases TEMP Folders",
|
||||
"category": "Essential Tweaks",
|
||||
"panel": "1",
|
||||
"Order": "a006_",
|
||||
"Order": "a002_",
|
||||
"InvokeScript": [
|
||||
"Get-ChildItem -Path \"C:\\Windows\\Temp\" *.* -Recurse | Remove-Item -Force -Recurse
|
||||
Get-ChildItem -Path $env:TEMP *.* -Recurse | Remove-Item -Force -Recurse"
|
||||
@ -2762,7 +2883,7 @@
|
||||
"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": "a012_",
|
||||
"Order": "a005_",
|
||||
"registry": [
|
||||
{
|
||||
"Path": "HKCU:\\System\\GameConfigStore",
|
||||
@ -2778,13 +2899,6 @@
|
||||
"OriginalValue": "1",
|
||||
"Type": "DWord"
|
||||
},
|
||||
{
|
||||
"Path": "HKCU:\\System\\GameConfigStore",
|
||||
"Name": "GameDVR_DXGIHonorFSEWindowsCompatible",
|
||||
"Value": "1",
|
||||
"OriginalValue": "0",
|
||||
"Type": "DWord"
|
||||
},
|
||||
{
|
||||
"Path": "HKCU:\\System\\GameConfigStore",
|
||||
"Name": "GameDVR_HonorUserFSEBehaviorMode",
|
||||
@ -2813,8 +2927,7 @@
|
||||
"Description": "Teredo network tunneling is a ipv6 feature that can cause additional latency.",
|
||||
"category": "Essential Tweaks",
|
||||
"panel": "1",
|
||||
"Order": "a029_",
|
||||
"Order": "a013_",
|
||||
"Order": "a005_",
|
||||
"registry": [
|
||||
{
|
||||
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters",
|
||||
@ -2836,7 +2949,7 @@
|
||||
"Description": "Disables IPv6.",
|
||||
"category": "z__Advanced Tweaks - CAUTION",
|
||||
"panel": "1",
|
||||
"Order": "a031_",
|
||||
"Order": "a023_",
|
||||
"registry": [
|
||||
{
|
||||
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters",
|
||||
@ -2853,12 +2966,28 @@
|
||||
"Enable-NetAdapterBinding -Name \"*\" -ComponentID ms_tcpip6"
|
||||
]
|
||||
},
|
||||
"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"
|
||||
}
|
||||
]
|
||||
},
|
||||
"WPFTweaksEnableipsix": {
|
||||
"Content": "Enable IPv6",
|
||||
"Description": "Enables IPv6.",
|
||||
"category": "z__Advanced Tweaks - CAUTION",
|
||||
"panel": "1",
|
||||
"Order": "a030_",
|
||||
"Order": "a023_",
|
||||
"registry": [
|
||||
{
|
||||
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters",
|
||||
|
@ -77,7 +77,13 @@ function Get-TabXaml {
|
||||
$panelcount++
|
||||
}
|
||||
}
|
||||
$blockXml += "<Label Content=""$($category -replace '^.__', '')"" FontSize=""16""/>`n"
|
||||
|
||||
# Dot-source the Get-WPFObjectName function
|
||||
. .\functions\private\Get-WPFObjectName
|
||||
|
||||
$categorycontent = $($category -replace '^.__', '')
|
||||
$categoryname = Get-WPFObjectName -type "Label" -name $categorycontent
|
||||
$blockXml += "<Label Name=""$categoryname"" Content=""$categorycontent"" FontSize=""16""/>`n"
|
||||
$sortedApps = $organizedData[$panel][$category].Keys | Sort-Object
|
||||
foreach ($appName in $sortedApps) {
|
||||
$count++
|
||||
@ -91,9 +97,8 @@ function Get-TabXaml {
|
||||
}
|
||||
$appInfo = $organizedData[$panel][$category][$appName]
|
||||
if ("Toggle" -eq $appInfo.Type) {
|
||||
$blockXml += "<StackPanel Orientation=`"Horizontal`" Margin=`"0,10,0,0`">`n"
|
||||
$blockXml += "<CheckBox Name=`"$($appInfo.Name)`" Style=`"{StaticResource ColorfulToggleSwitchStyle}`" Margin=`"2.5,0`"/>`n"
|
||||
$blockXml += "<Label Content=`"$($appInfo.Content)`" Style=`"{StaticResource labelfortweaks}`" ToolTip=`"$($appInfo.Description)`" />`n</StackPanel>`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`"/>`n</DockPanel>`n"
|
||||
} elseif ("Combobox" -eq $appInfo.Type) {
|
||||
$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`">`n"
|
||||
|
27
functions/private/Get-WPFObjectName.ps1
Normal file
27
functions/private/Get-WPFObjectName.ps1
Normal file
@ -0,0 +1,27 @@
|
||||
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
|
||||
|
||||
}
|
@ -46,17 +46,16 @@ Function Get-WinUtilCheckBoxes {
|
||||
$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" {
|
||||
$wingetValue = $sync.configs.applications.$($CheckBox.Name).winget
|
||||
if (-not [string]::IsNullOrWhiteSpace($wingetValue) -and $wingetValue -ne "na") {
|
||||
$wingetValue -split ";"
|
||||
} else {
|
||||
$sync.configs.applications.$($CheckBox.Name).choco
|
||||
# Get the winget value
|
||||
[PsCustomObject]@{
|
||||
winget="$($sync.configs.applications.$($CheckBox.Name).winget)";
|
||||
choco="$($sync.configs.applications.$($CheckBox.Name).choco)";
|
||||
}
|
||||
|
||||
}
|
||||
default {
|
||||
$CheckBox.Name
|
||||
@ -80,6 +79,5 @@ Function Get-WinUtilCheckBoxes {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $Output
|
||||
return $Output
|
||||
}
|
||||
|
@ -5,14 +5,17 @@ function Get-WinUtilWingetLatest {
|
||||
.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[0] #Index value for License file.
|
||||
$licenseWingetUrl = $response.assets.browser_download_url | Where-Object {$_ -like "*License1.xml"} #Index value for License file.
|
||||
Write-Host "Latest Version:`t$($latestVersion)`n"
|
||||
$assetUrl = $response.assets.browser_download_url[2] #Index value for download URL.
|
||||
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
|
||||
@ -20,4 +23,5 @@ function Get-WinUtilWingetLatest {
|
||||
Catch{
|
||||
throw [WingetFailedInstall]::new('Failed to get latest Winget release and license')
|
||||
}
|
||||
$ProgressPreference = $PreviousProgressPreference
|
||||
}
|
||||
|
91
functions/private/Install-WinUtilProgramChoco.ps1
Normal file
91
functions/private/Install-WinUtilProgramChoco.ps1
Normal file
@ -0,0 +1,91 @@
|
||||
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."
|
||||
continue
|
||||
} else {
|
||||
Write-Host "Failed to install $($Program.choco) using Chocolatey, Chocolatey output:`n`n$(Get-Content -Path $installOutputFilePath)."
|
||||
}
|
||||
} catch {
|
||||
Write-Host "Failed to install $($Program.choco) due to an error: $_"
|
||||
}
|
||||
}
|
||||
|
||||
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."
|
||||
continue
|
||||
} else {
|
||||
Write-Host "Failed to uninstall $($Program.choco) using Chocolatey, Chocolatey output:`n`n$(Get-Content -Path $uninstallOutputFilePath)."
|
||||
}
|
||||
} catch {
|
||||
Write-Host "Failed to uninstall $($Program.choco) due to an error: $_"
|
||||
}
|
||||
}
|
||||
$x++
|
||||
}
|
||||
Write-Progress -Activity "$manage Applications" -Status "Finished" -Completed
|
||||
|
||||
# Cleanup leftovers files
|
||||
if(Test-Path -Path $installOutputFilePath){ Remove-Item -Path $installOutputFilePath }
|
||||
if(Test-Path -Path $installOutputFilePath){ Remove-Item -Path $uninstallOutputFilePath }
|
||||
|
||||
return;
|
||||
}
|
@ -1,75 +1,103 @@
|
||||
Function Install-WinUtilProgramWinget {
|
||||
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Manages the provided programs using Winget
|
||||
|
||||
Manages the provided programs using Winget
|
||||
|
||||
.PARAMETER ProgramsToInstall
|
||||
A list of programs to manage
|
||||
|
||||
A list of programs to manage
|
||||
|
||||
.PARAMETER manage
|
||||
The action to perform on the programs, can be either 'Installing' or 'Uninstalling'
|
||||
|
||||
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.
|
||||
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-manager/winget/returnCodes.md
|
||||
#>
|
||||
|
||||
|
||||
param(
|
||||
$ProgramsToInstall,
|
||||
$manage = "Installing"
|
||||
[Parameter(Mandatory, Position=0)]
|
||||
[PsCustomObject]$ProgramsToInstall,
|
||||
|
||||
[Parameter(Position=1)]
|
||||
[String]$manage = "Installing"
|
||||
)
|
||||
|
||||
$x = 0
|
||||
$count = $($ProgramsToInstall -split ",").Count
|
||||
|
||||
$count = $ProgramsToInstall.Count
|
||||
|
||||
Write-Progress -Activity "$manage Applications" -Status "Starting" -PercentComplete 0
|
||||
|
||||
Foreach ($Program in $($ProgramsToInstall -split ",")){
|
||||
|
||||
Write-Progress -Activity "$manage Applications" -Status "$manage $Program $($x + 1) of $count" -PercentComplete $($x/$count*100)
|
||||
Write-Host "==========================================="
|
||||
Write-Host "-- Configuring winget packages ---"
|
||||
Write-Host "==========================================="
|
||||
Foreach ($Program in $ProgramsToInstall){
|
||||
$failedPackages = @()
|
||||
Write-Progress -Activity "$manage Applications" -Status "$manage $($Program.winget) $($x + 1) of $count" -PercentComplete $($x/$count*100)
|
||||
if($manage -eq "Installing"){
|
||||
# Install package via ID, if it fails try again with different scope and then with an unelevated prompt.
|
||||
# Since Install-WinGetPackage might not be directly available, we use winget install command as a workaround.
|
||||
# Winget, not all installers honor any of the following: System-wide, User Installs, or Unelevated Prompt OR Silent Install Mode.
|
||||
# This is up to the individual package maintainers to enable these options. Aka. not as clean as Linux Package Managers.
|
||||
Write-Host "Starting install of $($Program.winget) with winget."
|
||||
try {
|
||||
$status = $(Start-Process -FilePath "winget" -ArgumentList "install --id $Program --silent --accept-source-agreements --accept-package-agreements" -Wait -PassThru).ExitCode
|
||||
if($status -ne 0){
|
||||
Write-Host "Attempt with User scope"
|
||||
$status = $(Start-Process -FilePath "winget" -ArgumentList "install --id $Program --scope user --silent --accept-source-agreements --accept-package-agreements" -Wait -PassThru).ExitCode
|
||||
if($status -ne 0){
|
||||
Write-Host "Attempt with Unelevated prompt"
|
||||
$status = $(Start-Process -FilePath "powershell" -ArgumentList "-Command Start-Process winget -ArgumentList 'install --id $Program --silent --accept-source-agreements --accept-package-agreements' -Verb runAsUser" -Wait -PassThru).ExitCode
|
||||
if($status -ne 0){
|
||||
Write-Host "Failed to install $Program."
|
||||
} else {
|
||||
Write-Host "$Program installed successfully with Unelevated prompt."
|
||||
}
|
||||
} else {
|
||||
Write-Host "$Program installed successfully with User scope."
|
||||
}
|
||||
$status = $(Start-Process -FilePath "winget" -ArgumentList "install --id $($Program.winget) --silent --accept-source-agreements --accept-package-agreements" -Wait -PassThru -NoNewWindow).ExitCode
|
||||
if($status -eq 0){
|
||||
Write-Host "$($Program.winget) installed successfully."
|
||||
continue
|
||||
}
|
||||
if ($status -eq -1978335189){
|
||||
Write-Host "$($Program.winget) No applicable update found"
|
||||
continue
|
||||
}
|
||||
Write-Host "Attempt with User scope"
|
||||
$status = $(Start-Process -FilePath "winget" -ArgumentList "install --id $($Program.winget) --scope user --silent --accept-source-agreements --accept-package-agreements" -Wait -PassThru -NoNewWindow).ExitCode
|
||||
if($status -eq 0){
|
||||
Write-Host "$($Program.winget) installed successfully with User scope."
|
||||
continue
|
||||
}
|
||||
if ($status -eq -1978335189){
|
||||
Write-Host "$($Program.winget) No applicable update found"
|
||||
continue
|
||||
}
|
||||
Write-Host "Attempt with User prompt"
|
||||
$userChoice = [System.Windows.MessageBox]::Show("Do you want to attempt $($Program.winget) 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
|
||||
$process = Start-Process -FilePath "winget" -ArgumentList "install --id $($Program.winget) --silent --accept-source-agreements --accept-package-agreements" -Credential $getcreds -PassThru -NoNewWindow
|
||||
Wait-Process -Id $process.Id
|
||||
$status = $process.ExitCode
|
||||
} else {
|
||||
Write-Host "$Program installed successfully."
|
||||
Write-Host "Skipping installation with specific user credentials."
|
||||
}
|
||||
if($status -eq 0){
|
||||
Write-Host "$($Program.winget) installed successfully with User prompt."
|
||||
continue
|
||||
}
|
||||
if ($status -eq -1978335189){
|
||||
Write-Host "$($Program.winget) No applicable update found"
|
||||
continue
|
||||
}
|
||||
} catch {
|
||||
Write-Host "Failed to install $Program due to an error: $_"
|
||||
Write-Host "Failed to install $($Program.winget). With winget"
|
||||
$failedPackages += $Program
|
||||
}
|
||||
}
|
||||
if($manage -eq "Uninstalling"){
|
||||
# Uninstall package via ID using winget directly.
|
||||
try {
|
||||
$status = $(Start-Process -FilePath "winget" -ArgumentList "uninstall --id $Program --silent" -Wait -PassThru).ExitCode
|
||||
$status = $(Start-Process -FilePath "winget" -ArgumentList "uninstall --id $($Program.winget) --silent" -Wait -PassThru -NoNewWindow).ExitCode
|
||||
if($status -ne 0){
|
||||
Write-Host "Failed to uninstall $Program."
|
||||
Write-Host "Failed to uninstall $($Program.winget)."
|
||||
} else {
|
||||
Write-Host "$Program uninstalled successfully."
|
||||
Write-Host "$($Program.winget) uninstalled successfully."
|
||||
$failedPackages += $Program
|
||||
}
|
||||
} catch {
|
||||
Write-Host "Failed to uninstall $Program due to an error: $_"
|
||||
Write-Host "Failed to uninstall $($Program.winget) due to an error: $_"
|
||||
$failedPackages += $Program
|
||||
}
|
||||
}
|
||||
$X++
|
||||
}
|
||||
|
||||
Write-Progress -Activity "$manage Applications" -Status "Finished" -Completed
|
||||
return $failedPackages;
|
||||
}
|
||||
|
@ -53,6 +53,8 @@ function Install-WinUtilWinget {
|
||||
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"
|
||||
|
@ -15,7 +15,7 @@ function Invoke-WinUtilNumLock {
|
||||
Write-Host "Disabling Numlock on startup"
|
||||
$value = 0
|
||||
}
|
||||
$Path = "HKCU:\Control Panel\Keyboard"
|
||||
$Path = "HKU:\.Default\Control Panel\Keyboard"
|
||||
Set-ItemProperty -Path $Path -Name InitialKeyboardIndicators -Value $value
|
||||
}
|
||||
Catch [System.Security.SecurityException] {
|
||||
|
@ -21,9 +21,8 @@ function Invoke-WPFButton {
|
||||
"WPFinstall" {Invoke-WPFInstall}
|
||||
"WPFuninstall" {Invoke-WPFUnInstall}
|
||||
"WPFInstallUpgrade" {Invoke-WPFInstallUpgrade}
|
||||
"WPFdesktop" {Invoke-WPFPresets "Desktop"}
|
||||
"WPFlaptop" {Invoke-WPFPresets "laptop"}
|
||||
"WPFminimal" {Invoke-WPFPresets "minimal"}
|
||||
"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}
|
||||
|
@ -7,7 +7,8 @@ function Invoke-WPFFixesWinget {
|
||||
.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
|
||||
|
||||
}
|
@ -12,7 +12,7 @@ function Invoke-WPFGetIso {
|
||||
return
|
||||
}
|
||||
|
||||
$sync.BusyMessage.Visibility="Visible"
|
||||
$sync.BusyMessage.Visibility="Visible"
|
||||
$sync.BusyText.Text="N Busy"
|
||||
|
||||
|
||||
@ -23,10 +23,6 @@ function Invoke-WPFGetIso {
|
||||
Write-Host "\/ \/|_| \___||_| \___/ \/ \/ |_||_| |_| "
|
||||
|
||||
$oscdimgPath = Join-Path $env:TEMP 'oscdimg.exe'
|
||||
if( ! (Test-Path $oscdimgPath -PathType Leaf) ) {
|
||||
$oscdimgPath = Join-Path '.\releases\' '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"
|
||||
|
||||
@ -41,6 +37,8 @@ function Invoke-WPFGetIso {
|
||||
# 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)
|
||||
|
@ -12,23 +12,43 @@ function Invoke-WPFInstall {
|
||||
return
|
||||
}
|
||||
|
||||
$WingetInstall = (Get-WinUtilCheckBoxes)["Install"]
|
||||
|
||||
if ($wingetinstall.Count -eq 0) {
|
||||
$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 $WingetInstall -DebugPreference $DebugPreference -ScriptBlock {
|
||||
param($WingetInstall, $DebugPreference)
|
||||
Invoke-WPFRunspace -ArgumentList $PackagesToInstall -DebugPreference $DebugPreference -ScriptBlock {
|
||||
param($PackagesToInstall, $DebugPreference)
|
||||
$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 install"
|
||||
} else {
|
||||
$packagesWinget.add($package)
|
||||
Write-Host "Queueing $($package.winget) for Winget install"
|
||||
}
|
||||
}
|
||||
return $packagesWinget, $packagesChoco
|
||||
}.Invoke($PackagesToInstall)
|
||||
|
||||
try{
|
||||
$sync.ProcessRunning = $true
|
||||
|
||||
Install-WinUtilWinget
|
||||
Install-WinUtilProgramWinget -ProgramsToInstall $WingetInstall
|
||||
|
||||
$errorPackages = @()
|
||||
if($packagesWinget.Count -gt 0){
|
||||
Install-WinUtilWinget
|
||||
$errorPackages += Install-WinUtilProgramWinget -ProgramsToInstall $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 "==========================================="
|
||||
|
@ -53,6 +53,7 @@ public class PowerManagement {
|
||||
$keepEdge = $sync.WPFMicrowinKeepEdge.IsChecked
|
||||
$copyToUSB = $sync.WPFMicrowinCopyToUsb.IsChecked
|
||||
$injectDrivers = $sync.MicrowinInjectDrivers.IsChecked
|
||||
$importDrivers = $sync.MicrowinImportDrivers.IsChecked
|
||||
|
||||
$mountDir = $sync.MicrowinMountDir.Text
|
||||
$scratchDir = $sync.MicrowinScratchDir.Text
|
||||
@ -111,13 +112,54 @@ public class PowerManagement {
|
||||
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) "
|
||||
Add-WindowsDriver -Path "$scratchDir" -Recurse -Driver "$driverPath"
|
||||
dism /English /image:$scratchDir /add-driver /driver:$driverPath /recurse | Out-Host
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -202,26 +244,27 @@ public class PowerManagement {
|
||||
$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"
|
||||
}
|
||||
# $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)
|
||||
|
||||
$shortcut.TargetPath = "powershell.exe"
|
||||
$shortcut.Arguments = "-NoProfile -ExecutionPolicy Bypass -Command `"$command`""
|
||||
$shortcut.Save()
|
||||
Write-Host "Shortcut to winutil created at: $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"
|
||||
@ -335,7 +378,7 @@ public class PowerManagement {
|
||||
if (Test-Path $driverPath)
|
||||
{
|
||||
Write-Host "Adding Windows Drivers image($scratchDir) drivers($driverPath) "
|
||||
Add-WindowsDriver -Path "$scratchDir" -Driver "$driverPath" -Recurse
|
||||
dism /English /image:$scratchDir /add-driver /driver:$driverPath /recurse | Out-Host
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -28,13 +28,13 @@ function Invoke-WPFOOSU {
|
||||
}
|
||||
"recommended"{
|
||||
$oosu_config = "$ENV:temp\ooshutup10_recommended.cfg"
|
||||
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/ChrisTitusTech/winutil/main/config/ooshutup10_recommended.cfg" -OutFile $oosu_config
|
||||
$sync.configs.ooshutup10_recommended | Out-File -FilePath $oosu_config -Force
|
||||
Write-Host "Applying recommended OO Shutup 10 Policies"
|
||||
Start-Process $OOSU_filepath -ArgumentList "$oosu_config /quiet" -Wait
|
||||
}
|
||||
"undo"{
|
||||
$oosu_config = "$ENV:temp\ooshutup10_factory.cfg"
|
||||
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/ChrisTitusTech/winutil/main/config/ooshutup10_factory.cfg" -OutFile $oosu_config
|
||||
$sync.configs.ooshutup10_factory | Out-File -FilePath $oosu_config -Force
|
||||
Write-Host "Resetting all OO Shutup 10 Policies"
|
||||
Start-Process $OOSU_filepath -ArgumentList "$oosu_config /quiet" -Wait
|
||||
}
|
46
functions/public/Invoke-WPFTweakPS7.ps1
Normal file
46
functions/public/Invoke-WPFTweakPS7.ps1
Normal file
@ -0,0 +1,46 @@
|
||||
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..."
|
||||
Install-WinUtilProgramWinget -ProgramsToInstall @(@{"winget"="Microsoft.PowerShell"})
|
||||
}
|
||||
$targetTerminalName = "PowerShell"
|
||||
}
|
||||
"PS5"{
|
||||
$targetTerminalName = "Windows PowerShell"
|
||||
}
|
||||
}
|
||||
|
||||
$settingsPath = "$env:LOCALAPPDATA\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json"
|
||||
if (Test-Path -Path $settingsPath) {
|
||||
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 $targetTerminalName using the name attribute."
|
||||
} else {
|
||||
Write-Host "No PowerShell 7 profile found in Windows Terminal settings using the name attribute."
|
||||
}
|
||||
} else {
|
||||
Write-Host "Settings file not found at $settingsPath"
|
||||
}
|
||||
}
|
||||
|
@ -12,9 +12,9 @@ function Invoke-WPFUnInstall {
|
||||
return
|
||||
}
|
||||
|
||||
$WingetInstall = (Get-WinUtilCheckBoxes)["Install"]
|
||||
$PackagesToInstall = (Get-WinUtilCheckBoxes)["Install"]
|
||||
|
||||
if ($wingetinstall.Count -eq 0) {
|
||||
if ($PackagesToInstall.Count -eq 0) {
|
||||
$WarningMsg = "Please select the program(s) to install"
|
||||
[System.Windows.MessageBox]::Show($WarningMsg, $AppTitle, [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
|
||||
return
|
||||
@ -22,21 +22,39 @@ function Invoke-WPFUnInstall {
|
||||
|
||||
$ButtonType = [System.Windows.MessageBoxButton]::YesNo
|
||||
$MessageboxTitle = "Are you sure?"
|
||||
$Messageboxbody = ("This will uninstall the following applications: `n $WingetInstall")
|
||||
$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 $WingetInstall -DebugPreference $DebugPreference -ScriptBlock {
|
||||
param($WingetInstall, $DebugPreference)
|
||||
|
||||
Invoke-WPFRunspace -ArgumentList $PackagesToInstall -DebugPreference $DebugPreference -ScriptBlock {
|
||||
param($PackagesToInstall, $DebugPreference)
|
||||
$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)
|
||||
Write-Host "Queueing $($package.winget) for Winget Uninstall"
|
||||
}
|
||||
}
|
||||
return $packagesWinget, $packagesChoco
|
||||
}.Invoke($PackagesToInstall)
|
||||
try{
|
||||
$sync.ProcessRunning = $true
|
||||
|
||||
# Install all selected programs in new window
|
||||
Install-WinUtilProgramWinget -ProgramsToInstall $WingetInstall -Manage "Uninstalling"
|
||||
if($packagesWinget.Count -gt 0){
|
||||
Install-WinUtilProgramWinget -ProgramsToInstall $packagesWinget -Manage "Uninstalling"
|
||||
}
|
||||
if($packagesChoco.Count -gt 0){
|
||||
Install-WinUtilProgramChoco -ProgramsToInstall $packagesChoco -Manage "Uninstalling"
|
||||
}
|
||||
|
||||
$ButtonType = [System.Windows.MessageBoxButton]::OK
|
||||
$MessageboxTitle = "Uninstalls are Finished "
|
||||
@ -51,7 +69,7 @@ function Invoke-WPFUnInstall {
|
||||
}
|
||||
Catch {
|
||||
Write-Host "==========================================="
|
||||
Write-Host "-- Winget failed to install ---"
|
||||
Write-Host "Error: $_"
|
||||
Write-Host "==========================================="
|
||||
}
|
||||
$sync.ProcessRunning = $False
|
||||
|
@ -145,8 +145,8 @@ Invoke-WPFRunspace -ScriptBlock {
|
||||
# Print the logo
|
||||
Invoke-WPFFormVariables
|
||||
|
||||
# Check if Chocolatey is installed
|
||||
Install-WinUtilChoco
|
||||
# Install Winget if not already present
|
||||
Install-WinUtilWinget
|
||||
|
||||
# Set the titlebar
|
||||
$sync["Form"].title = $sync["Form"].title + " " + $sync.version
|
||||
@ -271,10 +271,14 @@ Add-Type @"
|
||||
"@
|
||||
}
|
||||
|
||||
foreach ($proc in (Get-Process | Where-Object { $_.MainWindowTitle -and $_.MainWindowTitle -like "*titus*" })) {
|
||||
if ($proc.Id -ne [System.IntPtr]::Zero) {
|
||||
foreach ($proc in (Get-Process | Where-Object { $_.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)"
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -363,6 +367,16 @@ Add-Type @"
|
||||
|
||||
})
|
||||
|
||||
# Load Checkboxes and Labels outside of the Filter fuction only once on startup for performance reasons
|
||||
$filter = Get-WinUtilVariables -Type CheckBox
|
||||
$CheckBoxes = $sync.GetEnumerator() | Where-Object { $psitem.Key -in $filter }
|
||||
|
||||
$filter = Get-WinUtilVariables -Type Label
|
||||
$labels = @{}
|
||||
$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
|
||||
|
||||
$sync["CheckboxFilter"].Add_TextChanged({
|
||||
|
||||
if ($sync.CheckboxFilter.Text -ne "") {
|
||||
@ -372,8 +386,7 @@ $sync["CheckboxFilter"].Add_TextChanged({
|
||||
$sync.CheckboxFilterClear.Visibility = "Collapsed"
|
||||
}
|
||||
|
||||
$filter = Get-WinUtilVariables -Type CheckBox
|
||||
$CheckBoxes = $sync.GetEnumerator() | Where-Object { $psitem.Key -in $filter }
|
||||
$activeApplications = @()
|
||||
|
||||
foreach ($CheckBox in $CheckBoxes) {
|
||||
# Check if the checkbox is null or if it doesn't have content
|
||||
@ -390,6 +403,7 @@ $sync["CheckboxFilter"].Add_TextChanged({
|
||||
|
||||
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"
|
||||
@ -403,7 +417,21 @@ $sync["CheckboxFilter"].Add_TextChanged({
|
||||
}
|
||||
}
|
||||
}
|
||||
$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"}
|
||||
})
|
||||
|
||||
# Define event handler for button click
|
||||
|
@ -44,21 +44,16 @@ $sync.version = "#{replaceme}"
|
||||
$sync.configs = @{}
|
||||
$sync.ProcessRunning = $false
|
||||
|
||||
$currentPid = [System.Security.Principal.WindowsIdentity]::GetCurrent()
|
||||
$principal = new-object System.Security.Principal.WindowsPrincipal($currentPid)
|
||||
$adminRole=[System.Security.Principal.WindowsBuiltInRole]::Administrator
|
||||
|
||||
|
||||
if ($principal.IsInRole($adminRole))
|
||||
{
|
||||
$Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Admin)"
|
||||
clear-host
|
||||
}
|
||||
else
|
||||
# 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
|
||||
|
@ -1,5 +1,5 @@
|
||||
# Battery drains too fast.
|
||||
When your battery on teh laptop drains too fast please perform these steps and report the results back to Winutil community.
|
||||
When your battery on the laptop drains too fast, please perform these steps and report the results back to the Winutil community.
|
||||
|
||||
1. **Check Battery Health:**
|
||||
- Open a Command Prompt as an administrator.
|
||||
@ -80,4 +80,4 @@ When your battery on teh laptop drains too fast please perform these steps and r
|
||||
- Check settings/preferences of individual applications for power-related options.
|
||||
- Uninstall unnecessary or problematic software.
|
||||
|
||||
By following these detailed instructions, you should be able to thoroughly diagnose and address battery drain issues on your Windows laptop. Adjust settings as needed to optimize power management and improve battery life.
|
||||
By following these detailed instructions, you should be able to thoroughly diagnose and address battery drain issues on your Windows laptop. Adjust settings as needed to optimize power management and improve battery life.
|
||||
|
@ -21,7 +21,7 @@ This error code typically indicates an issue related to Windows Management Instr
|
||||
- Press `Win + R` to open the Run dialog.
|
||||
- Type `services.msc` and press Enter.
|
||||
- Locate "Windows Management Instrumentation" in the list.
|
||||
- Make sure its status is set to "Running" and the startup type is set to "Automatic."
|
||||
- Make sure to set its status to "Running" and the startup type to "Automatic."
|
||||
|
||||
5. **Check for Security Software Interference:**
|
||||
Security software can sometimes interfere with WMI operations. Temporarily disable your antivirus or security software and check if the issue persists.
|
||||
@ -31,9 +31,9 @@ This error code typically indicates an issue related to Windows Management Instr
|
||||
|
||||
- Press `Win + X` and select "Event Viewer."
|
||||
- Navigate to "Windows Logs" -> "Application" or "System."
|
||||
- Look for entries with the source related to WMI or the application you're using to mount the ISO.
|
||||
- Look for entries with the source related to WMI or the application use to mount the ISO.
|
||||
|
||||
7. **ISO File Integrity:**
|
||||
Ensure that the ISO file you are trying to mount is not corrupted. Try mounting a different ISO file to see if the issue persists.
|
||||
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 may be required. Consider seeking assistance from Microsoft support or community forums for more specific guidance based on your system configuration and the software you are using to mount the ISO.
|
||||
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.
|
@ -922,4 +922,4 @@ try {
|
||||
}
|
||||
Write-Warning "Error: $($_.Exception.Message)`n"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
2635
winutil.ps1
2635
winutil.ps1
File diff suppressed because it is too large
Load Diff
1047
xaml/inputApp.xaml
1047
xaml/inputApp.xaml
File diff suppressed because it is too large
Load Diff
@ -1,43 +0,0 @@
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Border Grid.Row="1" Grid.Column="0">
|
||||
<StackPanel Background="{MainBackgroundColor}" SnapsToDevicePixels="True">
|
||||
<Label Content="Features" FontSize="16"/>
|
||||
<CheckBox Name="WPFFeaturesdotnet" Content="All .Net Framework (2,3,4)" Margin="5,0" ToolTip=".NET and .NET Framework is a developer platform made up of tools, programming languages, and libraries for building many different types of applications."/>
|
||||
<CheckBox Name="WPFFeatureshyperv" Content="HyperV Virtualization" Margin="5,0" ToolTip="Hyper-V is a hardware virtualization product developed by Microsoft that allows users to create and manage virtual machines."/>
|
||||
<CheckBox Name="WPFFeatureslegacymedia" Content="Legacy Media (WMP, DirectPlay)" Margin="5,0" ToolTip="Enables legacy programs from previous versions of windows"/>
|
||||
<CheckBox Name="WPFFeaturenfs" Content="NFS - Network File System" Margin="5,0" ToolTip="Network File System (NFS) is a mechanism for storing files on a network."/>
|
||||
<CheckBox Name="WPFFeatureEnableSearchSuggestions" Content="Enable Search Box Web Suggestions in Registry(explorer restart)" Margin="5,0" ToolTip="Enables web suggestions when searching using Windows Search."/>
|
||||
<CheckBox Name="WPFFeatureDisableSearchSuggestions" Content="Disable Search Box Web Suggestions in Registry(explorer restart)" Margin="5,0" ToolTip="Disables web suggestions when searching using Windows Search."/>
|
||||
<CheckBox Name="WPFFeatureRegBackup" Content="Enable Daily Registry Backup Task 12.30am" Margin="5,0" ToolTip="Enables daily registry backup, previously disabled by Microsoft in Windows 10 1803."/>
|
||||
<CheckBox Name="WPFFeatureEnableLegacyRecovery" Content="Enable Legacy F8 Boot Recovery" Margin="5,0" ToolTip="Enables Advanced Boot Options screen that lets you start Windows in advanced troubleshooting modes."/>
|
||||
<CheckBox Name="WPFFeatureDisableLegacyRecovery" Content="Disable Legacy F8 Boot Recovery" Margin="5,0" ToolTip="Disables Advanced Boot Options screen that lets you start Windows in advanced troubleshooting modes."/>
|
||||
<CheckBox Name="WPFFeaturewsl" Content="Windows Subsystem for Linux" Margin="5,0" ToolTip="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."/>
|
||||
<CheckBox Name="WPFFeaturesandbox" Content="Windows Sandbox" Margin="5,0" ToolTip="Windows Sandbox is a lightweight virtual machine that provides a temporary desktop environment to safely run applications and programs in isolation."/>
|
||||
<Button Name="WPFFeatureInstall" Content="Install Features" HorizontalAlignment = "Left" Width="150" Margin="5" Padding="20,5" />
|
||||
<Label Content="Fixes" FontSize="16"/>
|
||||
<Button Name="WPFPanelAutologin" Content="Set Up Autologin" HorizontalAlignment = "Left" Width="300" Margin="5" Padding="20,5" />
|
||||
<Button Name="WPFFixesUpdate" Content="Reset Windows Update" HorizontalAlignment = "Left" Width="300" Margin="5" Padding="20,5" />
|
||||
<Button Name="WPFFixesNetwork" Content="Reset Network" HorizontalAlignment = "Left" Width="300" Margin="5" Padding="20,5" />
|
||||
<Button Name="WPFPanelDISM" Content="System Corruption Scan" HorizontalAlignment = "Left" Width="300" Margin="5" Padding="20,5" />
|
||||
<Button Name="WPFFixesWinget" Content="WinGet Reinstall" HorizontalAlignment = "Left" Width="300" Margin="5" Padding="20,5" />
|
||||
<Button Name="WPFRunAdobeCCCleanerTool" Content="Remove Adobe Creative Cloud" HorizontalAlignment = "Left" Width="300" Margin="5" Padding="20,5" />
|
||||
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Grid.Row="1" Grid.Column="1">
|
||||
<StackPanel Background="{MainBackgroundColor}" SnapsToDevicePixels="True">
|
||||
<Label Content="Legacy Windows Panels" FontSize="16"/>
|
||||
<Button Name="WPFPanelcontrol" Content="Control Panel" HorizontalAlignment = "Left" Width="200" Margin="5" Padding="20,5" />
|
||||
<Button Name="WPFPanelnetwork" Content="Network Connections" HorizontalAlignment = "Left" Width="200" Margin="5" Padding="20,5" />
|
||||
<Button Name="WPFPanelpower" Content="Power Panel" HorizontalAlignment = "Left" Width="200" Margin="5" Padding="20,5" />
|
||||
<Button Name="WPFPanelregion" Content="Region" HorizontalAlignment = "Left" Width="200" Margin="5" Padding="20,5" />
|
||||
<Button Name="WPFPanelsound" Content="Sound Settings" HorizontalAlignment = "Left" Width="200" Margin="5" Padding="20,5" />
|
||||
<Button Name="WPFPanelsystem" Content="System Properties" HorizontalAlignment = "Left" Width="200" Margin="5" Padding="20,5" />
|
||||
<Button Name="WPFPaneluser" Content="User Accounts" HorizontalAlignment = "Left" Width="200" Margin="5" Padding="20,5" />
|
||||
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
@ -1,101 +0,0 @@
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Border Grid.Row="1" Grid.Column="0">
|
||||
<StackPanel Background="{MainBackgroundColor}" SnapsToDevicePixels="True">
|
||||
<Label Content="Essential Tweaks" FontSize="16"/>
|
||||
<CheckBox Name="WPFTweaksRestorePoint" Content="Create Restore Point" IsChecked="True" Margin="5,0" ToolTip="Creates a restore point at runtime in case a revert is needed from WinUtil modifications"/>
|
||||
<CheckBox Name="WPFTweaksEndTaskOnTaskbar" Content="Enable End Task With Right Click" Margin="5,0" ToolTip="Enables option to end task when right clicking a program in the taskbar"/>
|
||||
<CheckBox Name="WPFTweaksOO" Content="Run OO Shutup" Margin="5,0" ToolTip="Runs OO Shutup and applies the recommended Tweaks. https://www.oo-software.com/en/shutup10"/>
|
||||
<CheckBox Name="WPFTweaksTele" Content="Disable Telemetry" Margin="5,0" ToolTip="Disables Microsoft Telemetry. Note: This will lock many Edge Browser settings. Microsoft spies heavily on you when using the Edge browser."/>
|
||||
<CheckBox Name="WPFTweaksWifi" Content="Disable Wifi-Sense" Margin="5,0" ToolTip="Wifi Sense is a spying service that phones home all nearby scanned wifi networks and your current geo location."/>
|
||||
<CheckBox Name="WPFTweaksAH" Content="Disable Activity History" Margin="5,0" ToolTip="This erases recent docs, clipboard, and run history."/>
|
||||
<CheckBox Name="WPFTweaksDeleteTempFiles" Content="Delete Temporary Files" Margin="5,0" ToolTip="Erases TEMP Folders"/>
|
||||
<CheckBox Name="WPFTweaksDiskCleanup" Content="Run Disk Cleanup" Margin="5,0" ToolTip="Runs Disk Cleanup on Drive C: and removes old Windows Updates."/>
|
||||
<CheckBox Name="WPFTweaksLoc" Content="Disable Location Tracking" Margin="5,0" ToolTip="Disables Location Tracking...DUH!"/>
|
||||
<CheckBox Name="WPFTweaksAdobe" Content="Disable Adobe Services" Margin="5,0" ToolTip="Disables many of the services that come with Adobe and run in the background."/>
|
||||
<CheckBox Name="WPFTweaksHome" Content="Disable Homegroup" Margin="5,0" ToolTip="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."/>
|
||||
<CheckBox Name="WPFTweaksStorage" Content="Disable Storage Sense" Margin="5,0" ToolTip="Storage Sense deletes temp files automatically."/>
|
||||
<CheckBox Name="WPFTweaksHiber" Content="Disable Hibernation" Margin="5,0" ToolTip="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."/>
|
||||
<CheckBox Name="WPFTweaksDVR" Content="Disable GameDVR" Margin="5,0" ToolTip="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."/>
|
||||
<CheckBox Name="WPFTweaksTeredo" Content="Disable Teredo" Margin="5,0" ToolTip="Teredo network tunneling is a ipv6 feature that can cause additional latency."/>
|
||||
<CheckBox Name="WPFTweaksServices" Content="Set Services to Manual" Margin="5,0" ToolTip="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."/>
|
||||
<Label Content="Advanced Tweaks - CAUTION" FontSize="16"/>
|
||||
<CheckBox Name="WPFTweaksDisplay" Content="Set Display for Performance" Margin="5,0" ToolTip="Sets the system preferences to performance. You can do this manually with sysdm.cpl as well."/>
|
||||
<CheckBox Name="WPFTweaksUTC" Content="Set Time to UTC (Dual Boot)" Margin="5,0" ToolTip="Essential for computers that are dual booting. Fixes the time sync with Linux Systems."/>
|
||||
<CheckBox Name="WPFTweaksDisableNotifications" Content="Disable Notification Tray/Calendar" Margin="5,0" ToolTip="Disables all Notifications INCLUDING Calendar"/>
|
||||
<CheckBox Name="WPFTweaksDeBloat" Content="Remove ALL MS Store Apps - NOT RECOMMENDED" Margin="5,0" ToolTip="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!"/>
|
||||
<CheckBox Name="WPFTweaksRemoveCopilot" Content="Disables Microsoft Copilot" Margin="5,0" ToolTip="Disables MS Copilot AI built into Windows since 23H2."/>
|
||||
<CheckBox Name="WPFTweaksRemoveEdge" Content="Remove Microsoft Edge - NOT RECOMMENDED" Margin="5,0" ToolTip="Removes MS Edge when it gets reinstalled by updates."/>
|
||||
<CheckBox Name="WPFTweaksRemoveOnedrive" Content="Remove OneDrive" Margin="5,0" ToolTip="Copies OneDrive files to Default Home Folders and Uninstalls it."/>
|
||||
<CheckBox Name="WPFTweaksRightClickMenu" Content="Set Classic Right-Click Menu " Margin="5,0" ToolTip="Great Windows 11 tweak to bring back good context menus when right clicking things in explorer."/>
|
||||
<CheckBox Name="WPFTweaksEnableipsix" Content="Enable IPv6" Margin="5,0" ToolTip="Enables IPv6."/>
|
||||
<CheckBox Name="WPFTweaksDisableipsix" Content="Disable IPv6" Margin="5,0" ToolTip="Disables IPv6."/>
|
||||
<Button Name="WPFOOSUbutton" Content="Customize OO Shutup Tweaks" HorizontalAlignment = "Left" Width="220" Margin="5" Padding="20,5" />
|
||||
<StackPanel Orientation="Horizontal" Margin="0,5,0,0">
|
||||
<Label Content="DNS" HorizontalAlignment="Left" VerticalAlignment="Center"/>
|
||||
<ComboBox Name="WPFchangedns" Height="32" Width="186" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="5,5">
|
||||
<ComboBoxItem IsSelected="True" Content="Default"/>
|
||||
<ComboBoxItem Content="DHCP"/>
|
||||
<ComboBoxItem Content="Google"/>
|
||||
<ComboBoxItem Content="Cloudflare"/>
|
||||
<ComboBoxItem Content="Cloudflare_Malware"/>
|
||||
<ComboBoxItem Content="Cloudflare_Malware_Adult"/>
|
||||
<ComboBoxItem Content="Level3"/>
|
||||
<ComboBoxItem Content="Open_DNS"/>
|
||||
<ComboBoxItem Content="Quad9"/>
|
||||
</ComboBox>
|
||||
</StackPanel><Button Name="WPFTweaksbutton" Content="Run Tweaks" HorizontalAlignment = "Left" Width="160" Margin="5" Padding="20,5" />
|
||||
<Button Name="WPFUndoall" Content="Undo Selected Tweaks" HorizontalAlignment = "Left" Width="160" Margin="5" Padding="20,5" />
|
||||
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Grid.Row="1" Grid.Column="1">
|
||||
<StackPanel Background="{MainBackgroundColor}" SnapsToDevicePixels="True">
|
||||
<Label Content="Customize Preferences" FontSize="16"/>
|
||||
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
|
||||
<Label Content="Dark Theme" Style="{StaticResource labelfortweaks}" ToolTip="Enable/Disable Dark Mode." />
|
||||
<CheckBox Name="WPFToggleDarkMode" Style="{StaticResource ColorfulToggleSwitchStyle}" Margin="2.5,0"/>
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
|
||||
<Label Content="Bing Search in Start Menu" Style="{StaticResource labelfortweaks}" ToolTip="If enable then includes web search results from Bing in your Start Menu search." />
|
||||
<CheckBox Name="WPFToggleBingSearch" Style="{StaticResource ColorfulToggleSwitchStyle}" Margin="2.5,0"/>
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
|
||||
<Label Content="NumLock on Startup" Style="{StaticResource labelfortweaks}" ToolTip="Toggle the Num Lock key state when your computer starts." />
|
||||
<CheckBox Name="WPFToggleNumLock" Style="{StaticResource ColorfulToggleSwitchStyle}" Margin="2.5,0"/>
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
|
||||
<Label Content="Verbose Logon Messages" Style="{StaticResource labelfortweaks}" ToolTip="Show detailed messages during the login process for troubleshooting and diagnostics." />
|
||||
<CheckBox Name="WPFToggleVerboseLogon" Style="{StaticResource ColorfulToggleSwitchStyle}" Margin="2.5,0"/>
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
|
||||
<Label Content="Show File Extensions" Style="{StaticResource labelfortweaks}" ToolTip="If enabled then File extensions (e.g., .txt, .jpg) are visible." />
|
||||
<CheckBox Name="WPFToggleShowExt" Style="{StaticResource ColorfulToggleSwitchStyle}" Margin="2.5,0"/>
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
|
||||
<Label Content="Snap Assist Flyout" Style="{StaticResource labelfortweaks}" ToolTip="If enabled then Snap preview is disabled when maximize button is hovered." />
|
||||
<CheckBox Name="WPFToggleSnapFlyout" Style="{StaticResource ColorfulToggleSwitchStyle}" Margin="2.5,0"/>
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
|
||||
<Label Content="Mouse Acceleration" Style="{StaticResource labelfortweaks}" ToolTip="If Enabled then Cursor movement is affected by the speed of your physical mouse movements." />
|
||||
<CheckBox Name="WPFToggleMouseAcceleration" Style="{StaticResource ColorfulToggleSwitchStyle}" Margin="2.5,0"/>
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
|
||||
<Label Content="Sticky Keys" Style="{StaticResource labelfortweaks}" ToolTip="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." />
|
||||
<CheckBox Name="WPFToggleStickyKeys" Style="{StaticResource ColorfulToggleSwitchStyle}" Margin="2.5,0"/>
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
|
||||
<Label Content="Taskbar Widgets" Style="{StaticResource labelfortweaks}" ToolTip="If Enabled then Widgets Icon in Taskbar will be shown." />
|
||||
<CheckBox Name="WPFToggleTaskbarWidgets" Style="{StaticResource ColorfulToggleSwitchStyle}" Margin="2.5,0"/>
|
||||
</StackPanel>
|
||||
<Label Content="Performance Plans" FontSize="16"/>
|
||||
<Button Name="WPFAddUltPerf" Content="Add and Activate Ultimate Performance Profile" HorizontalAlignment = "Left" Width="300" Margin="5" Padding="20,5" />
|
||||
<Button Name="WPFRemoveUltPerf" Content="Remove Ultimate Performance Profile" HorizontalAlignment = "Left" Width="300" Margin="5" Padding="20,5" />
|
||||
<Label Content="Shortcuts" FontSize="16"/>
|
||||
<Button Name="WPFWinUtilShortcut" Content="Create WinUtil Shortcut" HorizontalAlignment = "Left" Width="300" Margin="5" Padding="20,5" />
|
||||
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
@ -408,41 +408,71 @@
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="{x:Type ToggleButton}">
|
||||
<Grid x:Name="toggleSwitch" Margin="10,0,0,0">
|
||||
<Border x:Name="Border" CornerRadius="11"
|
||||
Background="#FFFFFFFF"
|
||||
Width="50" Height="25">
|
||||
<Border.Effect>
|
||||
<DropShadowEffect ShadowDepth="0.5" Direction="0" Opacity="0.3" />
|
||||
</Border.Effect>
|
||||
<Ellipse x:Name="Ellipse" Fill="#FFFFFFFF" Stretch="Uniform"
|
||||
Margin="2 2 2 1"
|
||||
Stroke="Gray" StrokeThickness="0.2"
|
||||
HorizontalAlignment="Left" Width="22">
|
||||
<Ellipse.Effect>
|
||||
<DropShadowEffect BlurRadius="10" ShadowDepth="1" Opacity="0.3" Direction="260" />
|
||||
</Ellipse.Effect>
|
||||
</Ellipse>
|
||||
</Border>
|
||||
<Grid x:Name="toggleSwitch">
|
||||
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Column="0" x:Name="txtToggle" VerticalAlignment="Center" FontWeight="DemiBold" Foreground="{MainForegroundColor}" FontSize="12">
|
||||
<TextBlock.Style>
|
||||
<Style TargetType="TextBlock">
|
||||
<Setter Property="Text" Value="Off"/>
|
||||
<Setter Property="Margin" Value="4,0,4,0"/>
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsChecked}" Value="True">
|
||||
<Setter Property="Text" Value="On"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</TextBlock.Style>
|
||||
</TextBlock>
|
||||
|
||||
<Border Grid.Column="1" x:Name="Border" CornerRadius="8"
|
||||
BorderThickness="1"
|
||||
Width="34" Height="17">
|
||||
<Ellipse x:Name="Ellipse" Fill="{MainForegroundColor}" Stretch="Uniform"
|
||||
Margin="2,2,2,1"
|
||||
HorizontalAlignment="Left" Width="12">
|
||||
</Ellipse>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
||||
<ControlTemplate.Triggers>
|
||||
<Trigger Property="ToggleButton.IsChecked" Value="False">
|
||||
<Setter TargetName="Border" Property="Background" Value="#C2283B" />
|
||||
<Setter TargetName="Ellipse" Property="Margin" Value="2 2 2 1" />
|
||||
<Trigger Property="IsMouseOver" Value="True">
|
||||
<Setter TargetName="Border" Property="BorderBrush" Value="{MainForegroundColor}" />
|
||||
<Setter TargetName="Border" Property="Background" Value="{LinkHoverForegroundColor}"/>
|
||||
<Setter Property="Cursor" Value="Hand" />
|
||||
<Setter Property="Panel.ZIndex" Value="1000"/>
|
||||
</Trigger>
|
||||
<Trigger Property="ToggleButton.IsChecked" Value="False">
|
||||
<Setter TargetName="Border" Property="Background" Value="{MainBackgroundColor}" />
|
||||
<Setter TargetName="Border" Property="BorderBrush" Value="{MainForegroundColor}" />
|
||||
<Setter TargetName="Ellipse" Property="Fill" Value="{MainForegroundColor}" />
|
||||
|
||||
</Trigger>
|
||||
|
||||
<Trigger Property="ToggleButton.IsChecked" Value="True">
|
||||
<Setter TargetName="Border" Property="Background" Value="{MainBackgroundColor}" />
|
||||
<Setter TargetName="Border" Property="BorderBrush" Value="{MainForegroundColor}" />
|
||||
<Setter TargetName="Ellipse" Property="Fill" Value="{MainForegroundColor}" />
|
||||
|
||||
<Trigger.EnterActions>
|
||||
<BeginStoryboard>
|
||||
<Storyboard>
|
||||
<ColorAnimation Storyboard.TargetName="Border"
|
||||
Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"
|
||||
To="#34A543" Duration="0:0:0.1" />
|
||||
To="{ToggleButtonOnColor}" Duration="0:0:0.1" />
|
||||
<ColorAnimation Storyboard.TargetName="Border"
|
||||
Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)"
|
||||
To="{ToggleButtonOnColor}" Duration="0:0:0.1" />
|
||||
|
||||
<ColorAnimation Storyboard.TargetName="Ellipse"
|
||||
Storyboard.TargetProperty="(Fill).(SolidColorBrush.Color)"
|
||||
To="White" Duration="0:0:0.1" />
|
||||
<ThicknessAnimation Storyboard.TargetName="Ellipse"
|
||||
Storyboard.TargetProperty="Margin"
|
||||
To="26 2 2 1" Duration="0:0:0.1" />
|
||||
To="18,2,2,2" Duration="0:0:0.1" />
|
||||
</Storyboard>
|
||||
</BeginStoryboard>
|
||||
</Trigger.EnterActions>
|
||||
@ -451,15 +481,15 @@
|
||||
<Storyboard>
|
||||
<ColorAnimation Storyboard.TargetName="Border"
|
||||
Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"
|
||||
To="#C2283B" Duration="0:0:0.1" />
|
||||
To="{MainBackgroundColor}" Duration="0:0:0.1" />
|
||||
|
||||
<ThicknessAnimation Storyboard.TargetName="Ellipse"
|
||||
Storyboard.TargetProperty="Margin"
|
||||
To="2 2 2 1" Duration="0:0:0.1" />
|
||||
To="2,2,2,1" Duration="0:0:0.1" />
|
||||
|
||||
</Storyboard>
|
||||
</BeginStoryboard>
|
||||
</Trigger.ExitActions>
|
||||
<Setter Property="Foreground" Value="{DynamicResource IdealForegroundColorBrush}" />
|
||||
</Trigger>
|
||||
</ControlTemplate.Triggers>
|
||||
</ControlTemplate>
|
||||
@ -696,8 +726,7 @@
|
||||
{{InstallPanel_tweaks}}
|
||||
<StackPanel Background="{MainBackgroundColor}" Orientation="Horizontal" HorizontalAlignment="Left" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Margin="10">
|
||||
<Label Content="Recommended Selections:" FontSize="14" VerticalAlignment="Center"/>
|
||||
<Button Name="WPFdesktop" Content=" Desktop " Margin="1"/>
|
||||
<Button Name="WPFlaptop" Content=" Laptop " Margin="1"/>
|
||||
<Button Name="WPFstandard" Content=" Standard " Margin="1"/>
|
||||
<Button Name="WPFminimal" Content=" Minimal " Margin="1"/>
|
||||
<Button Name="WPFclear" Content=" Clear " Margin="1"/>
|
||||
<Button Name="WPFGetInstalledTweaks" Content=" Get Installed " Margin="1"/>
|
||||
@ -773,20 +802,29 @@
|
||||
</TextBlock>
|
||||
<CheckBox x:Name="WPFMicrowinISOScratchDir" Content="Use ISO directory for ScratchDir " IsChecked="False" Margin="1"
|
||||
ToolTip="Use ISO directory for ScratchDir " />
|
||||
|
||||
<Button Name="MicrowinScratchDirBT" Margin="2" Padding="1">
|
||||
<Button.Content>
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*" /> <!-- Takes the remaining space -->
|
||||
<ColumnDefinition Width="30" /> <!-- Fixed width for Button -->
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBox Name="MicrowinScratchDirBox" Background="Transparent" BorderBrush="{MainForegroundColor}"
|
||||
Text="Scratch" Padding="0"
|
||||
ToolTip="Alt Path For Scratch Directory" BorderThickness="1"
|
||||
Margin="0,0,0,3" HorizontalAlignment="Left"
|
||||
IsReadOnly="False"
|
||||
Height="Auto"
|
||||
Width="110"
|
||||
Foreground="{ButtonForegroundColor}"
|
||||
/>
|
||||
</Button.Content>
|
||||
</Button>
|
||||
Text="Scratch"
|
||||
Margin="2"
|
||||
IsReadOnly="False"
|
||||
ToolTip="Alt Path For Scratch Directory"
|
||||
Grid.Column="0"
|
||||
VerticalAlignment="Center"
|
||||
Foreground="{LabelboxForegroundColor}">
|
||||
</TextBox>
|
||||
<Button Name="MicrowinScratchDirBT"
|
||||
Grid.Column="1"
|
||||
Margin="2"
|
||||
Padding="1" VerticalAlignment="Center">
|
||||
<Button.Content>
|
||||
...
|
||||
</Button.Content>
|
||||
</Button>
|
||||
</Grid>
|
||||
<TextBox Name="MicrowinFinalIsoLocation" Background="Transparent" BorderBrush="{MainForegroundColor}"
|
||||
Text="ISO location will be printed here"
|
||||
Margin="2"
|
||||
@ -821,6 +859,7 @@
|
||||
Foreground="{LabelboxForegroundColor}"
|
||||
ToolTip="Path to unpacked drivers all sys and inf files for devices that need drivers"
|
||||
/>
|
||||
<CheckBox Name="MicrowinImportDrivers" Content="Import drivers from current system" Margin="5,0" IsChecked="False" ToolTip="Export all third-party drivers from your system and inject them to the MicroWin image"/>
|
||||
<Rectangle Fill="{MainForegroundColor}" Height="2" HorizontalAlignment="Stretch" Margin="0,10,0,10"/>
|
||||
<CheckBox Name="WPFMicrowinCopyToUsb" Content="Copy to Ventoy" Margin="5,0" IsChecked="False" ToolTip="Copy to USB disk with a label Ventoy"/>
|
||||
<Rectangle Fill="{MainForegroundColor}" Height="2" HorizontalAlignment="Stretch" Margin="0,10,0,10"/>
|
||||
|
Reference in New Issue
Block a user