mirror of
https://github.com/ChrisTitusTech/winutil.git
synced 2025-07-06 13:13:50 -05:00
Compare commits
14 Commits
24.08.07
...
e90156adb9
Author | SHA1 | Date | |
---|---|---|---|
e90156adb9 | |||
5d7d121e1f | |||
0919e78693 | |||
41ac93d09a | |||
5994105fba | |||
0bce9e2647 | |||
723e1a132d | |||
5acbfbd253 | |||
1945fe288d | |||
6ff815eed3 | |||
138c5de5d3 | |||
c619d02724 | |||
a0d15f1584 | |||
c5f29df2b2 |
2
.github/dependabot.yml
vendored
2
.github/dependabot.yml
vendored
@ -7,5 +7,3 @@ updates:
|
|||||||
ignore:
|
ignore:
|
||||||
- dependency-name: "actions/stale"
|
- dependency-name: "actions/stale"
|
||||||
versions: '>= 9'
|
versions: '>= 9'
|
||||||
- dependency-name: "actions/setup-python"
|
|
||||||
versions: '> 4'
|
|
||||||
|
17
.github/workflows/close-discussion-on-pr.yaml
vendored
17
.github/workflows/close-discussion-on-pr.yaml
vendored
@ -9,7 +9,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Check if PR was merged
|
- name: Check if PR was merged
|
||||||
if: github.event.pull_request.merged == true
|
if: github.event.pull_request.merged == true
|
||||||
@ -30,14 +30,19 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
for discussion_id in $discussion_ids; do
|
for discussion_id in $discussion_ids; do
|
||||||
echo "Closing discussion #$discussion_id"
|
echo "Attempting to close discussion #$discussion_id"
|
||||||
response=$(curl -s -o /dev/null -w "%{http_code}" -X PATCH -H "Authorization: token $GITHUB_TOKEN" \
|
response=$(curl -s -X PATCH -H "Authorization: token $GITHUB_TOKEN" \
|
||||||
|
-H "Accept: application/vnd.github.v3+json" \
|
||||||
-d '{"state": "closed"}' \
|
-d '{"state": "closed"}' \
|
||||||
"https://api.github.com/repos/${{ github.repository }}/discussions/$discussion_id")
|
"https://api.github.com/repos/${{ github.repository }}/discussions/$discussion_id")
|
||||||
|
|
||||||
if [ "$response" -ne 200 ]; then
|
if echo "$response" | jq -e '.id' > /dev/null; then
|
||||||
echo "Failed to close discussion #$discussion_id. HTTP status code: $response"
|
echo "Successfully closed discussion #$discussion_id"
|
||||||
exit 1
|
else
|
||||||
|
error_message=$(echo "$response" | jq -r '.message // "Unknown error"')
|
||||||
|
echo "Warning: Failed to close discussion #$discussion_id. Error: $error_message"
|
||||||
|
echo "Full response: $response"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
shell: bash
|
shell: bash
|
||||||
|
continue-on-error: true
|
||||||
|
30
.github/workflows/github-pages.yaml
vendored
30
.github/workflows/github-pages.yaml
vendored
@ -1,25 +1,31 @@
|
|||||||
name: GitHub Pages Deploy
|
name: GitHub Pages Deploy
|
||||||
|
|
||||||
on:
|
on:
|
||||||
release:
|
release:
|
||||||
types: [published, prereleased]
|
types: [published, prereleased]
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
deploy:
|
deploy:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- name: Checkout Repository
|
||||||
- uses: actions/setup-python@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
python-version: 3.x
|
fetch-depth: '0' # Fetch all commit history for all branches as well as tags.
|
||||||
- uses: actions/cache@v4
|
|
||||||
|
- name: Setup Python
|
||||||
|
uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
key: ${{ github.ref }}
|
python-version: 3.x # Install latest Stable release of Python 3
|
||||||
path: .cache
|
cache: 'pip' # caching pip dependencies
|
||||||
- run: pip install mkdocs-material
|
|
||||||
- run: pip install pillow cairosvg
|
- name: Install Necessary Dependencies using 'pip install -r requirements.txt'
|
||||||
- run: pip install mkdocs-awesome-pages-plugin
|
run: pip install -r requirements.txt
|
||||||
- run: pip install mkdocs-git-revision-date-localized-plugin
|
|
||||||
- run: pip install mkdocs-minify-plugin
|
- name: Build & Deploy using 'mkdocs'
|
||||||
- run: mkdocs gh-deploy --force
|
run: mkdocs gh-deploy --force
|
||||||
|
2
.github/workflows/pre-release.yaml
vendored
2
.github/workflows/pre-release.yaml
vendored
@ -69,7 +69,7 @@ jobs:
|
|||||||
if ($signature.Status -ne 'Valid') { throw "Code signing failed" }
|
if ($signature.Status -ne 'Valid') { throw "Code signing failed" }
|
||||||
|
|
||||||
- name: Upload winutil.ps1 as artifact
|
- name: Upload winutil.ps1 as artifact
|
||||||
uses: actions/upload-artifact@v2
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: winutil
|
name: winutil
|
||||||
path: ./winutil.ps1
|
path: ./winutil.ps1
|
||||||
|
@ -46,18 +46,20 @@
|
|||||||
### Overview
|
### Overview
|
||||||
|
|
||||||
``` mermaid
|
``` mermaid
|
||||||
graph LR
|
%%{init: {"flowchart": {"curve": "cardinal"}} }%%
|
||||||
|
graph TD
|
||||||
A[Fork Project] --> B[Clone Repository];
|
A[Fork Project] --> B[Clone Repository];
|
||||||
B --> C[Create New Branch];
|
B --> C[Create New Branch];
|
||||||
C --> D[Make Changes];
|
C --> D[Make Changes];
|
||||||
D --> G[Test Changes];
|
D --> G[Test Changes];
|
||||||
G --> H{Tests Passed?};
|
G --> H{Tests Passed?};
|
||||||
H -->|Yes| E[Commit Changes];
|
H -->|Yes| E[Commit Changes];
|
||||||
E --> F[Push Branch];
|
|
||||||
H -->|No| J[Fix Issues];
|
H -->|No| J[Fix Issues];
|
||||||
|
J --> G;
|
||||||
|
E --> F[Push Branch];
|
||||||
F --> K[Create Pull Request];
|
F --> K[Create Pull Request];
|
||||||
K --> L[Fill out PR template];
|
K --> L[Fill out PR template];
|
||||||
J --> G;
|
classDef default stroke:#333,stroke-width:4px,font-size:12pt;
|
||||||
```
|
```
|
||||||
!!! info
|
!!! info
|
||||||
|
|
||||||
@ -65,8 +67,10 @@ graph LR
|
|||||||
|
|
||||||
### Fork the Repo
|
### Fork the Repo
|
||||||
* Fork the WinUtil Repository [here](https://github.com/ChrisTitusTech/winutil) to create a copy that will be available in your repository list.
|
* Fork the WinUtil Repository [here](https://github.com/ChrisTitusTech/winutil) to create a copy that will be available in your repository list.
|
||||||
|
|
||||||

|

|
||||||

|
|
||||||
|

|
||||||
|
|
||||||
### Clone the Fork
|
### Clone the Fork
|
||||||
!!! tip
|
!!! tip
|
||||||
@ -89,15 +93,22 @@ graph LR
|
|||||||
* `cd {path to the folder with the compile.ps1}`
|
* `cd {path to the folder with the compile.ps1}`
|
||||||
* Run the following command to compile and run WinUtil:
|
* Run the following command to compile and run WinUtil:
|
||||||
* `.\Compile.ps1 -run`
|
* `.\Compile.ps1 -run`
|
||||||
* 
|
|
||||||
|

|
||||||
|
|
||||||
* After seeing that your changes work properly, feel free to commit the changes to the repository and make a PR. For help on that, follow the documentation below.
|
* After seeing that your changes work properly, feel free to commit the changes to the repository and make a PR. For help on that, follow the documentation below.
|
||||||
|
|
||||||
### Committing the changes
|
### Committing the changes
|
||||||
* Before committing your changes, please discard changes made to the `winutil.ps1` file, like the following:
|
* Before committing your changes, please discard changes made to the `winutil.ps1` file, like the following:
|
||||||
- 
|
|
||||||
|

|
||||||
|
|
||||||
* Now, commit your changes once you are happy with the result.
|
* Now, commit your changes once you are happy with the result.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
* Push the changes to upload them to your fork on github.com.
|
* Push the changes to upload them to your fork on github.com.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### Making a PR
|
### Making a PR
|
||||||
|
@ -1 +0,0 @@
|
|||||||
"enabled": ["AT", "BE", "BG", "CH", "CY", "CZ", "DE", "DK", "EE", "ES", "FI", "FR", "GF", "GP", "GR", "HR", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MT", "MQ", "NL", "NO", "PL", "PT", "RE", "RO", "SE", "SI", "SK", "YT"]
|
|
@ -52,7 +52,7 @@ If you have Issues, refer to [Known Issues](https://christitustech.github.io/win
|
|||||||
|
|
||||||
These are the sponsors that help keep this project alive with monthly contributions.
|
These are the sponsors that help keep this project alive with monthly contributions.
|
||||||
|
|
||||||
<!-- sponsors --><a href="https://github.com/GregoryNavasarkian"><img src="https://github.com/GregoryNavasarkian.png" width="60px" alt="Gregory Navasarkian" /></a><a href="https://github.com/ysaito8015"><img src="https://github.com/ysaito8015.png" width="60px" alt="Yusuke Saito" /></a><a href="https://github.com/TriHydera"><img src="https://github.com/TriHydera.png" width="60px" alt="TriHydera" /></a><a href="https://github.com/jozozovko"><img src="https://github.com/jozozovko.png" width="60px" alt="" /></a><a href="https://github.com/DelDongo"><img src="https://github.com/DelDongo.png" width="60px" alt="" /></a><a href="https://github.com/markamos"><img src="https://github.com/markamos.png" width="60px" alt="Mark Amos" /></a><a href="https://github.com/dwelfusius"><img src="https://github.com/dwelfusius.png" width="60px" alt="" /></a><a href="https://github.com/mews-se"><img src="https://github.com/mews-se.png" width="60px" alt="" /></a><a href="https://github.com/jdiegmueller"><img src="https://github.com/jdiegmueller.png" width="60px" alt="Jason A. Diegmueller" /></a><a href="https://github.com/AlanTristar"><img src="https://github.com/AlanTristar.png" width="60px" alt="" /></a><a href="https://github.com/JennJones89"><img src="https://github.com/JennJones89.png" width="60px" alt="" /></a><a href="https://github.com/zepled112"><img src="https://github.com/zepled112.png" width="60px" alt="wyatt" /></a><a href="https://github.com/Owen-3456"><img src="https://github.com/Owen-3456.png" width="60px" alt="Owen" /></a><a href="https://github.com/altugtekiner"><img src="https://github.com/altugtekiner.png" width="60px" alt="" /></a><a href="https://github.com/getsmor"><img src="https://github.com/getsmor.png" width="60px" alt="" /></a><a href="https://github.com/robertsandrock"><img src="https://github.com/robertsandrock.png" width="60px" alt="" /></a><a href="https://github.com/jeffnesbit"><img src="https://github.com/jeffnesbit.png" width="60px" alt="" /></a><a href="https://github.com/mmomega"><img src="https://github.com/mmomega.png" width="60px" alt="" /></a><a href="https://github.com/KenichiQaz"><img src="https://github.com/KenichiQaz.png" width="60px" alt="Stefan" /></a><a href="https://github.com/thaddl"><img src="https://github.com/thaddl.png" width="60px" alt="thaddl" /></a><a href="https://github.com/paulsheets"><img src="https://github.com/paulsheets.png" width="60px" alt="Paul" /></a><a href="https://github.com/djones369"><img src="https://github.com/djones369.png" width="60px" alt="Dave Jones" /></a><a href="https://github.com/anthonymendez"><img src="https://github.com/anthonymendez.png" width="60px" alt="Anthony Mendez" /></a><a href="https://github.com/woobe-studio"><img src="https://github.com/woobe-studio.png" width="60px" alt="Michael Wozniak" /></a><!-- sponsors -->
|
<!-- sponsors --><a href="https://github.com/GregoryNavasarkian"><img src="https://github.com/GregoryNavasarkian.png" width="60px" alt="Gregory Navasarkian" /></a><a href="https://github.com/ysaito8015"><img src="https://github.com/ysaito8015.png" width="60px" alt="Yusuke Saito" /></a><a href="https://github.com/TriHydera"><img src="https://github.com/TriHydera.png" width="60px" alt="TriHydera" /></a><a href="https://github.com/jozozovko"><img src="https://github.com/jozozovko.png" width="60px" alt="" /></a><a href="https://github.com/DelDongo"><img src="https://github.com/DelDongo.png" width="60px" alt="" /></a><a href="https://github.com/markamos"><img src="https://github.com/markamos.png" width="60px" alt="Mark Amos" /></a><a href="https://github.com/dwelfusius"><img src="https://github.com/dwelfusius.png" width="60px" alt="" /></a><a href="https://github.com/mews-se"><img src="https://github.com/mews-se.png" width="60px" alt="" /></a><a href="https://github.com/jdiegmueller"><img src="https://github.com/jdiegmueller.png" width="60px" alt="Jason A. Diegmueller" /></a><a href="https://github.com/AlanTristar"><img src="https://github.com/AlanTristar.png" width="60px" alt="" /></a><a href="https://github.com/JennJones89"><img src="https://github.com/JennJones89.png" width="60px" alt="" /></a><a href="https://github.com/zepled112"><img src="https://github.com/zepled112.png" width="60px" alt="wyatt" /></a><a href="https://github.com/altugtekiner"><img src="https://github.com/altugtekiner.png" width="60px" alt="" /></a><a href="https://github.com/getsmor"><img src="https://github.com/getsmor.png" width="60px" alt="" /></a><a href="https://github.com/robertsandrock"><img src="https://github.com/robertsandrock.png" width="60px" alt="" /></a><a href="https://github.com/jeffnesbit"><img src="https://github.com/jeffnesbit.png" width="60px" alt="" /></a><a href="https://github.com/mmomega"><img src="https://github.com/mmomega.png" width="60px" alt="" /></a><a href="https://github.com/KenichiQaz"><img src="https://github.com/KenichiQaz.png" width="60px" alt="Stefan" /></a><a href="https://github.com/thaddl"><img src="https://github.com/thaddl.png" width="60px" alt="thaddl" /></a><a href="https://github.com/paulsheets"><img src="https://github.com/paulsheets.png" width="60px" alt="Paul" /></a><a href="https://github.com/djones369"><img src="https://github.com/djones369.png" width="60px" alt="Dave Jones" /></a><a href="https://github.com/anthonymendez"><img src="https://github.com/anthonymendez.png" width="60px" alt="Anthony Mendez" /></a><a href="https://github.com/woobe-studio"><img src="https://github.com/woobe-studio.png" width="60px" alt="Michael Wozniak" /></a><a href="https://github.com/xBandaku"><img src="https://github.com/xBandaku.png" width="60px" alt="xPandaku" /></a><!-- sponsors -->
|
||||||
|
|
||||||
## 🏅 Thanks to all Contributors
|
## 🏅 Thanks to all Contributors
|
||||||
Thanks a lot for spending your time helping Winutil grow. Thanks a lot! Keep rocking 🍻.
|
Thanks a lot for spending your time helping Winutil grow. Thanks a lot! Keep rocking 🍻.
|
||||||
|
@ -2556,7 +2556,7 @@
|
|||||||
},
|
},
|
||||||
"WPFTweaksRemoveEdge": {
|
"WPFTweaksRemoveEdge": {
|
||||||
"Content": "Remove Microsoft Edge",
|
"Content": "Remove Microsoft Edge",
|
||||||
"Description": "Removes MS Edge when it gets reinstalled by updates. Credit: Techie Jack",
|
"Description": "Removes MS Edge when it gets reinstalled by updates. Credit: Psyirius",
|
||||||
"category": "z__Advanced Tweaks - CAUTION",
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a029_",
|
"Order": "a029_",
|
||||||
|
138
edgeremoval.ps1
138
edgeremoval.ps1
@ -1,138 +0,0 @@
|
|||||||
$msedgeProcess = Get-Process -Name "msedge" -ErrorAction SilentlyContinue
|
|
||||||
$widgetsProcess = Get-Process -Name "widgets" -ErrorAction SilentlyContinue
|
|
||||||
# Checking if Microsoft Edge is running
|
|
||||||
if ($msedgeProcess) {
|
|
||||||
Stop-Process -Name "msedge" -Force
|
|
||||||
} else {
|
|
||||||
Write-Output "msedge process is not running."
|
|
||||||
}
|
|
||||||
# Checking if Widgets is running
|
|
||||||
if ($widgetsProcess) {
|
|
||||||
Stop-Process -Name "widgets" -Force
|
|
||||||
} else {
|
|
||||||
Write-Output "widgets process is not running."
|
|
||||||
}
|
|
||||||
|
|
||||||
function Uninstall-Process {
|
|
||||||
param (
|
|
||||||
[Parameter(Mandatory = $true)]
|
|
||||||
[string]$Key
|
|
||||||
)
|
|
||||||
|
|
||||||
$originalNation = [microsoft.win32.registry]::GetValue('HKEY_USERS\.DEFAULT\Control Panel\International\Geo', 'Nation', [Microsoft.Win32.RegistryValueKind]::String)
|
|
||||||
|
|
||||||
# Set Nation to 84 (France) temporarily
|
|
||||||
[microsoft.win32.registry]::SetValue('HKEY_USERS\.DEFAULT\Control Panel\International\Geo', 'Nation', 68, [Microsoft.Win32.RegistryValueKind]::String) | Out-Null
|
|
||||||
|
|
||||||
# credits to he3als for the Acl commands
|
|
||||||
$fileName = "IntegratedServicesRegionPolicySet.json"
|
|
||||||
$pathISRPS = [Environment]::SystemDirectory + "\" + $fileName
|
|
||||||
$aclISRPS = Get-Acl -Path $pathISRPS
|
|
||||||
$aclISRPSBackup = [System.Security.AccessControl.FileSecurity]::new()
|
|
||||||
$aclISRPSBackup.SetSecurityDescriptorSddlForm($acl.Sddl)
|
|
||||||
if (Test-Path -Path $pathISRPS) {
|
|
||||||
try {
|
|
||||||
$admin = [System.Security.Principal.NTAccount]$(New-Object System.Security.Principal.SecurityIdentifier('S-1-5-32-544')).Translate([System.Security.Principal.NTAccount]).Value
|
|
||||||
|
|
||||||
$aclISRPS.SetOwner($admin)
|
|
||||||
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule($admin, 'FullControl', 'Allow')
|
|
||||||
$aclISRPS.AddAccessRule($rule)
|
|
||||||
Set-Acl -Path $pathISRPS -AclObject $aclISRPS
|
|
||||||
|
|
||||||
Rename-Item -Path $pathISRPS -NewName ($fileName + '.bak') -Force
|
|
||||||
}
|
|
||||||
catch {
|
|
||||||
Write-Error "[$Mode] Failed to set owner for $pathISRPS"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$baseKey = 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate'
|
|
||||||
$registryPath = $baseKey + '\ClientState\' + $Key
|
|
||||||
|
|
||||||
if (!(Test-Path -Path $registryPath)) {
|
|
||||||
Write-Host "[$Mode] Registry key not found: $registryPath"
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
Remove-ItemProperty -Path $registryPath -Name "experiment_control_labels" -ErrorAction SilentlyContinue | Out-Null
|
|
||||||
|
|
||||||
$uninstallString = (Get-ItemProperty -Path $registryPath).UninstallString
|
|
||||||
$uninstallArguments = (Get-ItemProperty -Path $registryPath).UninstallArguments
|
|
||||||
|
|
||||||
if ([string]::IsNullOrEmpty($uninstallString) -or [string]::IsNullOrEmpty($uninstallArguments)) {
|
|
||||||
Write-Host "[$Mode] Cannot find uninstall methods for $Mode"
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
$uninstallArguments += " --force-uninstall --delete-profile"
|
|
||||||
|
|
||||||
# $uninstallCommand = "`"$uninstallString`"" + $uninstallArguments
|
|
||||||
if (!(Test-Path -Path $uninstallString)) {
|
|
||||||
Write-Host "[$Mode] setup.exe not found at: $uninstallString"
|
|
||||||
return
|
|
||||||
}
|
|
||||||
Start-Process -FilePath $uninstallString -ArgumentList $uninstallArguments -Wait -NoNewWindow -Verbose
|
|
||||||
|
|
||||||
# Restore Acl
|
|
||||||
if (Test-Path -Path ($pathISRPS + '.bak')) {
|
|
||||||
Rename-Item -Path ($pathISRPS + '.bak') -NewName $fileName -Force
|
|
||||||
Set-Acl -Path $pathISRPS -AclObject $aclISRPSBackup
|
|
||||||
}
|
|
||||||
|
|
||||||
# Restore Nation
|
|
||||||
[microsoft.win32.registry]::SetValue('HKEY_USERS\.DEFAULT\Control Panel\International\Geo', 'Nation', $originalNation, [Microsoft.Win32.RegistryValueKind]::String) | Out-Null
|
|
||||||
|
|
||||||
if ((Get-ItemProperty -Path $baseKey).IsEdgeStableUninstalled -eq 1) {
|
|
||||||
Write-Host "[$Mode] Edge Stable has been successfully uninstalled"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function Uninstall-Edge {
|
|
||||||
Remove-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge" -Name "NoRemove" -ErrorAction SilentlyContinue | Out-Null
|
|
||||||
|
|
||||||
[microsoft.win32.registry]::SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdateDev", "AllowUninstall", 1, [Microsoft.Win32.RegistryValueKind]::DWord) | Out-Null
|
|
||||||
|
|
||||||
Uninstall-Process -Key '{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}'
|
|
||||||
|
|
||||||
@( "$env:ProgramData\Microsoft\Windows\Start Menu\Programs",
|
|
||||||
"$env:PUBLIC\Desktop",
|
|
||||||
"$env:USERPROFILE\Desktop" ) | ForEach-Object {
|
|
||||||
$shortcutPath = Join-Path -Path $_ -ChildPath "Microsoft Edge.lnk"
|
|
||||||
if (Test-Path -Path $shortcutPath) {
|
|
||||||
Remove-Item -Path $shortcutPath -Force
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
function Uninstall-WebView {
|
|
||||||
Remove-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft EdgeWebView" -Name "NoRemove" -ErrorAction SilentlyContinue | Out-Null
|
|
||||||
|
|
||||||
# Force to use system-wide WebView2
|
|
||||||
# [microsoft.win32.registry]::SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge\WebView2\BrowserExecutableFolder", "*", "%%SystemRoot%%\System32\Microsoft-Edge-WebView")
|
|
||||||
|
|
||||||
Uninstall-Process -Key '{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}'
|
|
||||||
}
|
|
||||||
|
|
||||||
function Uninstall-EdgeUpdate {
|
|
||||||
Remove-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge Update" -Name "NoRemove" -ErrorAction SilentlyContinue | Out-Null
|
|
||||||
|
|
||||||
$registryPath = 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate'
|
|
||||||
if (!(Test-Path -Path $registryPath)) {
|
|
||||||
Write-Host "Registry key not found: $registryPath"
|
|
||||||
return
|
|
||||||
}
|
|
||||||
$uninstallCmdLine = (Get-ItemProperty -Path $registryPath).UninstallCmdLine
|
|
||||||
|
|
||||||
if ([string]::IsNullOrEmpty($uninstallCmdLine)) {
|
|
||||||
Write-Host "Cannot find uninstall methods for $Mode"
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
Write-Output "Uninstalling: $uninstallCmdLine"
|
|
||||||
Start-Process cmd.exe "/c $uninstallCmdLine" -WindowStyle Hidden -Wait
|
|
||||||
}
|
|
||||||
|
|
||||||
Uninstall-Edge
|
|
||||||
# "WebView" { Uninstall-WebView }
|
|
||||||
# "EdgeUpdate" { Uninstall-EdgeUpdate }
|
|
@ -51,7 +51,7 @@ function ConvertTo-Icon {
|
|||||||
# Handle the thrown exception here...
|
# Handle the thrown exception here...
|
||||||
}
|
}
|
||||||
|
|
||||||
This Example make use of '-overrideIconFile' Optional Parameter, the default for this paramter is $true.
|
This Example make use of '-overrideIconFile' Optional Parameter, the default for this parameter is $true.
|
||||||
By doing '-overrideIconFile $false', the 'ConvertTo-Icon' function will raise an exception that needs to be catched throw a 'catch' Code Block,
|
By doing '-overrideIconFile $false', the 'ConvertTo-Icon' function will raise an exception that needs to be catched throw a 'catch' Code Block,
|
||||||
otherwise it'll crash the running PowerShell instance/process.
|
otherwise it'll crash the running PowerShell instance/process.
|
||||||
|
|
||||||
|
@ -140,8 +140,9 @@ Function Get-WinUtilToggleStatus {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($ToggleSwitch -eq "WPFToggleDetailedBSoD") {
|
if ($ToggleSwitch -eq "WPFToggleDetailedBSoD") {
|
||||||
$DetailedBSoD = (Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl').DisplayParameters
|
$DetailedBSoD1 = (Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl').DisplayParameters
|
||||||
if($DetailedBSoD -eq 0) {
|
$DetailedBSoD2 = (Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl').DisableEmoticon
|
||||||
|
if (($DetailedBSoD1 -eq 0) -or ($DetailedBSoD2 -eq 0) -or !$DetailedBSoD1 -or !$DetailedBSoD2) {
|
||||||
return $false
|
return $false
|
||||||
} else {
|
} else {
|
||||||
return $true
|
return $true
|
||||||
|
@ -157,7 +157,7 @@ function Remove-ProvisionedPackages([switch]$keepSecurity = $false) {
|
|||||||
$status = "Removing Provisioned $($appx.PackageName)"
|
$status = "Removing Provisioned $($appx.PackageName)"
|
||||||
Write-Progress -Activity "Removing Provisioned Apps" -Status $status -PercentComplete ($counter++/$appxProvisionedPackages.Count*100)
|
Write-Progress -Activity "Removing Provisioned Apps" -Status $status -PercentComplete ($counter++/$appxProvisionedPackages.Count*100)
|
||||||
try {
|
try {
|
||||||
Remove-AppxProvisionedPackage -Path $scratchDir -PackageName $appx.PackageName -ErrorAction SilentlyContinue
|
Remove-AppxProvisionedPackage -Path "$scratchDir" -PackageName $appx.PackageName -ErrorAction SilentlyContinue
|
||||||
} catch {
|
} catch {
|
||||||
Write-Host "Application $($appx.PackageName) could not be removed"
|
Write-Host "Application $($appx.PackageName) could not be removed"
|
||||||
continue
|
continue
|
||||||
@ -175,9 +175,9 @@ function Copy-ToUSB([string]$fileToCopy) {
|
|||||||
$destinationPath = "$($volume.DriveLetter):\"
|
$destinationPath = "$($volume.DriveLetter):\"
|
||||||
#Copy-Item -Path $fileToCopy -Destination $destinationPath -Force
|
#Copy-Item -Path $fileToCopy -Destination $destinationPath -Force
|
||||||
# Get the total size of the file
|
# Get the total size of the file
|
||||||
$totalSize = (Get-Item $fileToCopy).length
|
$totalSize = (Get-Item "$fileToCopy").length
|
||||||
|
|
||||||
Copy-Item -Path $fileToCopy -Destination $destinationPath -Verbose -Force -Recurse -Container -PassThru |
|
Copy-Item -Path "$fileToCopy" -Destination "$destinationPath" -Verbose -Force -Recurse -Container -PassThru |
|
||||||
ForEach-Object {
|
ForEach-Object {
|
||||||
# Calculate the percentage completed
|
# Calculate the percentage completed
|
||||||
$completed = ($_.BytesTransferred / $totalSize) * 100
|
$completed = ($_.BytesTransferred / $totalSize) * 100
|
||||||
|
@ -18,6 +18,10 @@ Function Invoke-WinUtilDetailedBSoD {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$Path = "HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl"
|
$Path = "HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl"
|
||||||
|
$dwords = ("DisplayParameters", "DisableEmoticon")
|
||||||
|
foreach ($name in $dwords) {
|
||||||
|
Set-ItemProperty -Path $Path -Name $name -Value $value
|
||||||
|
}
|
||||||
Set-ItemProperty -Path $Path -Name DisplayParameters -Value $value
|
Set-ItemProperty -Path $Path -Name DisplayParameters -Value $value
|
||||||
} catch [System.Security.SecurityException] {
|
} catch [System.Security.SecurityException] {
|
||||||
Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
|
Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
|
||||||
|
@ -1,28 +1,12 @@
|
|||||||
Function Uninstall-WinUtilEdgeBrowser {
|
Function Uninstall-WinUtilEdgeBrowser {
|
||||||
|
|
||||||
<#
|
<#
|
||||||
|
|
||||||
.SYNOPSIS
|
.SYNOPSIS
|
||||||
This will uninstall edge by changing the region to Ireland and uninstalling edge the changing it back
|
Uninstall the Edge Browser (Chromium) from the system in an elegant way.
|
||||||
|
.DESCRIPTION
|
||||||
|
This will switch up the region to one of the EEA countries temporarily and uninstall the Edge Browser (Chromium).
|
||||||
#>
|
#>
|
||||||
|
|
||||||
$msedgeProcess = Get-Process -Name "msedge" -ErrorAction SilentlyContinue
|
function Uninstall-EdgeClient {
|
||||||
$widgetsProcess = Get-Process -Name "widgets" -ErrorAction SilentlyContinue
|
|
||||||
# Checking if Microsoft Edge is running
|
|
||||||
if ($msedgeProcess) {
|
|
||||||
Stop-Process -Name "msedge" -Force
|
|
||||||
} else {
|
|
||||||
Write-Output "msedge process is not running."
|
|
||||||
}
|
|
||||||
# Checking if Widgets is running
|
|
||||||
if ($widgetsProcess) {
|
|
||||||
Stop-Process -Name "widgets" -Force
|
|
||||||
} else {
|
|
||||||
Write-Output "widgets process is not running."
|
|
||||||
}
|
|
||||||
|
|
||||||
function Uninstall-Process {
|
|
||||||
param (
|
param (
|
||||||
[Parameter(Mandatory = $true)]
|
[Parameter(Mandatory = $true)]
|
||||||
[string]$Key
|
[string]$Key
|
||||||
@ -30,30 +14,10 @@ function Uninstall-Process {
|
|||||||
|
|
||||||
$originalNation = [microsoft.win32.registry]::GetValue('HKEY_USERS\.DEFAULT\Control Panel\International\Geo', 'Nation', [Microsoft.Win32.RegistryValueKind]::String)
|
$originalNation = [microsoft.win32.registry]::GetValue('HKEY_USERS\.DEFAULT\Control Panel\International\Geo', 'Nation', [Microsoft.Win32.RegistryValueKind]::String)
|
||||||
|
|
||||||
# Set Nation to 84 (France) temporarily
|
# Set Nation to any of the EEA regions temporarily
|
||||||
[microsoft.win32.registry]::SetValue('HKEY_USERS\.DEFAULT\Control Panel\International\Geo', 'Nation', 68, [Microsoft.Win32.RegistryValueKind]::String) | Out-Null
|
# Refer: https://learn.microsoft.com/en-us/windows/win32/intl/table-of-geographical-locations
|
||||||
|
$tmpNation = 68 # Ireland
|
||||||
# credits to he3als for the Acl commands
|
[microsoft.win32.registry]::SetValue('HKEY_USERS\.DEFAULT\Control Panel\International\Geo', 'Nation', $tmpNation, [Microsoft.Win32.RegistryValueKind]::String) | Out-Null
|
||||||
$fileName = "IntegratedServicesRegionPolicySet.json"
|
|
||||||
$pathISRPS = [Environment]::SystemDirectory + "\" + $fileName
|
|
||||||
$aclISRPS = Get-Acl -Path $pathISRPS
|
|
||||||
$aclISRPSBackup = [System.Security.AccessControl.FileSecurity]::new()
|
|
||||||
$aclISRPSBackup.SetSecurityDescriptorSddlForm($acl.Sddl)
|
|
||||||
if (Test-Path -Path $pathISRPS) {
|
|
||||||
try {
|
|
||||||
$admin = [System.Security.Principal.NTAccount]$(New-Object System.Security.Principal.SecurityIdentifier('S-1-5-32-544')).Translate([System.Security.Principal.NTAccount]).Value
|
|
||||||
|
|
||||||
$aclISRPS.SetOwner($admin)
|
|
||||||
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule($admin, 'FullControl', 'Allow')
|
|
||||||
$aclISRPS.AddAccessRule($rule)
|
|
||||||
Set-Acl -Path $pathISRPS -AclObject $aclISRPS
|
|
||||||
|
|
||||||
Rename-Item -Path $pathISRPS -NewName ($fileName + '.bak') -Force
|
|
||||||
}
|
|
||||||
catch {
|
|
||||||
Write-Error "[$Mode] Failed to set owner for $pathISRPS"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$baseKey = 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate'
|
$baseKey = 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate'
|
||||||
$registryPath = $baseKey + '\ClientState\' + $Key
|
$registryPath = $baseKey + '\ClientState\' + $Key
|
||||||
@ -63,6 +27,9 @@ function Uninstall-Process {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Remove the status flag
|
||||||
|
Remove-ItemProperty -Path $baseKey -Name "IsEdgeStableUninstalled" -ErrorAction SilentlyContinue | Out-Null
|
||||||
|
|
||||||
Remove-ItemProperty -Path $registryPath -Name "experiment_control_labels" -ErrorAction SilentlyContinue | Out-Null
|
Remove-ItemProperty -Path $registryPath -Name "experiment_control_labels" -ErrorAction SilentlyContinue | Out-Null
|
||||||
|
|
||||||
$uninstallString = (Get-ItemProperty -Path $registryPath).UninstallString
|
$uninstallString = (Get-ItemProperty -Path $registryPath).UninstallString
|
||||||
@ -73,6 +40,7 @@ function Uninstall-Process {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Extra arguments to nuke it
|
||||||
$uninstallArguments += " --force-uninstall --delete-profile"
|
$uninstallArguments += " --force-uninstall --delete-profile"
|
||||||
|
|
||||||
# $uninstallCommand = "`"$uninstallString`"" + $uninstallArguments
|
# $uninstallCommand = "`"$uninstallString`"" + $uninstallArguments
|
||||||
@ -82,48 +50,34 @@ function Uninstall-Process {
|
|||||||
}
|
}
|
||||||
Start-Process -FilePath $uninstallString -ArgumentList $uninstallArguments -Wait -NoNewWindow -Verbose
|
Start-Process -FilePath $uninstallString -ArgumentList $uninstallArguments -Wait -NoNewWindow -Verbose
|
||||||
|
|
||||||
# Restore Acl
|
# Restore Nation back to the original
|
||||||
if (Test-Path -Path ($pathISRPS + '.bak')) {
|
|
||||||
Rename-Item -Path ($pathISRPS + '.bak') -NewName $fileName -Force
|
|
||||||
Set-Acl -Path $pathISRPS -AclObject $aclISRPSBackup
|
|
||||||
}
|
|
||||||
|
|
||||||
# Restore Nation
|
|
||||||
[microsoft.win32.registry]::SetValue('HKEY_USERS\.DEFAULT\Control Panel\International\Geo', 'Nation', $originalNation, [Microsoft.Win32.RegistryValueKind]::String) | Out-Null
|
[microsoft.win32.registry]::SetValue('HKEY_USERS\.DEFAULT\Control Panel\International\Geo', 'Nation', $originalNation, [Microsoft.Win32.RegistryValueKind]::String) | Out-Null
|
||||||
|
|
||||||
|
# might not exist in some cases
|
||||||
if ((Get-ItemProperty -Path $baseKey).IsEdgeStableUninstalled -eq 1) {
|
if ((Get-ItemProperty -Path $baseKey).IsEdgeStableUninstalled -eq 1) {
|
||||||
Write-Host "[$Mode] Edge Stable has been successfully uninstalled"
|
Write-Host "[$Mode] Edge Stable has been successfully uninstalled"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function Uninstall-Edge {
|
function Uninstall-Edge {
|
||||||
Remove-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge" -Name "NoRemove" -ErrorAction SilentlyContinue | Out-Null
|
Remove-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge" -Name "NoRemove" -ErrorAction SilentlyContinue | Out-Null
|
||||||
|
|
||||||
[microsoft.win32.registry]::SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdateDev", "AllowUninstall", 1, [Microsoft.Win32.RegistryValueKind]::DWord) | Out-Null
|
[microsoft.win32.registry]::SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdateDev", "AllowUninstall", 1, [Microsoft.Win32.RegistryValueKind]::DWord) | Out-Null
|
||||||
|
|
||||||
Uninstall-Process -Key '{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}'
|
Uninstall-EdgeClient -Key '{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}'
|
||||||
|
|
||||||
@( "$env:ProgramData\Microsoft\Windows\Start Menu\Programs",
|
|
||||||
"$env:PUBLIC\Desktop",
|
|
||||||
"$env:USERPROFILE\Desktop" ) | ForEach-Object {
|
|
||||||
$shortcutPath = Join-Path -Path $_ -ChildPath "Microsoft Edge.lnk"
|
|
||||||
if (Test-Path -Path $shortcutPath) {
|
|
||||||
Remove-Item -Path $shortcutPath -Force
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
function Uninstall-WebView {
|
||||||
|
# FIXME: might not work on some systems
|
||||||
|
|
||||||
function Uninstall-WebView {
|
|
||||||
Remove-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft EdgeWebView" -Name "NoRemove" -ErrorAction SilentlyContinue | Out-Null
|
Remove-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft EdgeWebView" -Name "NoRemove" -ErrorAction SilentlyContinue | Out-Null
|
||||||
|
|
||||||
# Force to use system-wide WebView2
|
Uninstall-EdgeClient -Key '{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}'
|
||||||
# [microsoft.win32.registry]::SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge\WebView2\BrowserExecutableFolder", "*", "%%SystemRoot%%\System32\Microsoft-Edge-WebView")
|
}
|
||||||
|
|
||||||
Uninstall-Process -Key '{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}'
|
function Uninstall-EdgeUpdate {
|
||||||
}
|
# FIXME: might not work on some systems
|
||||||
|
|
||||||
function Uninstall-EdgeUpdate {
|
|
||||||
Remove-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge Update" -Name "NoRemove" -ErrorAction SilentlyContinue | Out-Null
|
Remove-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge Update" -Name "NoRemove" -ErrorAction SilentlyContinue | Out-Null
|
||||||
|
|
||||||
$registryPath = 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate'
|
$registryPath = 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate'
|
||||||
@ -138,15 +92,10 @@ function Uninstall-EdgeUpdate {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
Write-Output "Uninstalling: $uninstallCmdLine"
|
|
||||||
Start-Process cmd.exe "/c $uninstallCmdLine" -WindowStyle Hidden -Wait
|
Start-Process cmd.exe "/c $uninstallCmdLine" -WindowStyle Hidden -Wait
|
||||||
}
|
}
|
||||||
|
|
||||||
Uninstall-Edge
|
Uninstall-Edge
|
||||||
# "WebView" { Uninstall-WebView }
|
# Uninstall-WebView - WebView is needed for Visual Studio and some MS Store Games like Forza
|
||||||
# "EdgeUpdate" { Uninstall-EdgeUpdate }
|
Uninstall-EdgeUpdate
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -76,7 +76,7 @@ function Invoke-WPFGetIso {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Write-Host "File path $($filePath)"
|
Write-Host "File path $($filePath)"
|
||||||
if (-not (Test-Path -Path $filePath -PathType Leaf)) {
|
if (-not (Test-Path -Path "$filePath" -PathType Leaf)) {
|
||||||
$msg = "File you've chosen doesn't exist"
|
$msg = "File you've chosen doesn't exist"
|
||||||
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error)
|
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error)
|
||||||
return
|
return
|
||||||
@ -85,7 +85,7 @@ function Invoke-WPFGetIso {
|
|||||||
Set-WinUtilTaskbaritem -state "Indeterminate" -overlay "logo"
|
Set-WinUtilTaskbaritem -state "Indeterminate" -overlay "logo"
|
||||||
|
|
||||||
# Detect the file size of the ISO and compare it with the free space of the system drive
|
# Detect the file size of the ISO and compare it with the free space of the system drive
|
||||||
$isoSize = (Get-Item -Path $filePath).Length
|
$isoSize = (Get-Item -Path "$filePath").Length
|
||||||
Write-Debug "Size of ISO file: $($isoSize) bytes"
|
Write-Debug "Size of ISO file: $($isoSize) bytes"
|
||||||
# Use this procedure to get the free space of the drive depending on where the user profile folder is stored.
|
# Use this procedure to get the free space of the drive depending on where the user profile folder is stored.
|
||||||
# This is done to guarantee a dynamic solution, as the installation drive may be mounted to a letter different than C
|
# This is done to guarantee a dynamic solution, as the installation drive may be mounted to a letter different than C
|
||||||
@ -122,7 +122,7 @@ function Invoke-WPFGetIso {
|
|||||||
# there is probably a better way of doing this, I don't have time to figure this out
|
# there is probably a better way of doing this, I don't have time to figure this out
|
||||||
$sync.MicrowinIsoDrive.Text = $driveLetter
|
$sync.MicrowinIsoDrive.Text = $driveLetter
|
||||||
|
|
||||||
$mountedISOPath = (Split-Path -Path $filePath)
|
$mountedISOPath = (Split-Path -Path "$filePath")
|
||||||
if ($sync.MicrowinScratchDirBox.Text.Trim() -eq "Scratch") {
|
if ($sync.MicrowinScratchDirBox.Text.Trim() -eq "Scratch") {
|
||||||
$sync.MicrowinScratchDirBox.Text =""
|
$sync.MicrowinScratchDirBox.Text =""
|
||||||
}
|
}
|
||||||
@ -186,7 +186,7 @@ function Invoke-WPFGetIso {
|
|||||||
$wimFile = "$mountDir\sources\install.wim"
|
$wimFile = "$mountDir\sources\install.wim"
|
||||||
Write-Host "Getting image information $wimFile"
|
Write-Host "Getting image information $wimFile"
|
||||||
|
|
||||||
if ((-not (Test-Path -Path $wimFile -PathType Leaf)) -and (-not (Test-Path -Path $wimFile.Replace(".wim", ".esd").Trim() -PathType Leaf))) {
|
if ((-not (Test-Path -Path "$wimFile" -PathType Leaf)) -and (-not (Test-Path -Path "$($wimFile.Replace(".wim", ".esd").Trim())" -PathType Leaf))) {
|
||||||
$msg = "Neither install.wim nor install.esd exist in the image, this could happen if you use unofficial Windows images. Please don't use shady images from the internet, use only official images. Here are instructions how to download ISO images if the Microsoft website is not showing the link to download and ISO. https://www.techrepublic.com/article/how-to-download-a-windows-10-iso-file-without-using-the-media-creation-tool/"
|
$msg = "Neither install.wim nor install.esd exist in the image, this could happen if you use unofficial Windows images. Please don't use shady images from the internet, use only official images. Here are instructions how to download ISO images if the Microsoft website is not showing the link to download and ISO. https://www.techrepublic.com/article/how-to-download-a-windows-10-iso-file-without-using-the-media-creation-tool/"
|
||||||
Write-Host $msg
|
Write-Host $msg
|
||||||
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error)
|
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error)
|
||||||
|
@ -63,11 +63,11 @@ public class PowerManagement {
|
|||||||
$scratchDir = $sync.MicrowinScratchDir.Text
|
$scratchDir = $sync.MicrowinScratchDir.Text
|
||||||
|
|
||||||
# Detect if the Windows image is an ESD file and convert it to WIM
|
# Detect if the Windows image is an ESD file and convert it to WIM
|
||||||
if (-not (Test-Path -Path $mountDir\sources\install.wim -PathType Leaf) -and (Test-Path -Path $mountDir\sources\install.esd -PathType Leaf)) {
|
if (-not (Test-Path -Path "$mountDir\sources\install.wim" -PathType Leaf) -and (Test-Path -Path "$mountDir\sources\install.esd" -PathType Leaf)) {
|
||||||
Write-Host "Exporting Windows image to a WIM file, keeping the index we want to work on. This can take several minutes, depending on the performance of your computer..."
|
Write-Host "Exporting Windows image to a WIM file, keeping the index we want to work on. This can take several minutes, depending on the performance of your computer..."
|
||||||
Export-WindowsImage -SourceImagePath $mountDir\sources\install.esd -SourceIndex $index -DestinationImagePath $mountDir\sources\install.wim -CompressionType "Max"
|
Export-WindowsImage -SourceImagePath $mountDir\sources\install.esd -SourceIndex $index -DestinationImagePath $mountDir\sources\install.wim -CompressionType "Max"
|
||||||
if ($?) {
|
if ($?) {
|
||||||
Remove-Item -Path $mountDir\sources\install.esd -Force
|
Remove-Item -Path "$mountDir\sources\install.esd" -Force
|
||||||
# Since we've already exported the image index we wanted, switch to the first one
|
# Since we've already exported the image index we wanted, switch to the first one
|
||||||
$index = 1
|
$index = 1
|
||||||
} else {
|
} else {
|
||||||
@ -116,7 +116,7 @@ public class PowerManagement {
|
|||||||
if (Test-Path "$env:TEMP\DRV_EXPORT") {
|
if (Test-Path "$env:TEMP\DRV_EXPORT") {
|
||||||
Remove-Item "$env:TEMP\DRV_EXPORT" -Recurse -Force
|
Remove-Item "$env:TEMP\DRV_EXPORT" -Recurse -Force
|
||||||
}
|
}
|
||||||
if (($injectDrivers -and (Test-Path $sync.MicrowinDriverLocation.Text))) {
|
if (($injectDrivers -and (Test-Path "$($sync.MicrowinDriverLocation.Text)"))) {
|
||||||
Write-Host "Using specified driver source..."
|
Write-Host "Using specified driver source..."
|
||||||
dism /english /online /export-driver /destination="$($sync.MicrowinDriverLocation.Text)" | Out-Host
|
dism /english /online /export-driver /destination="$($sync.MicrowinDriverLocation.Text)" | Out-Host
|
||||||
if ($?) {
|
if ($?) {
|
||||||
@ -174,12 +174,13 @@ public class PowerManagement {
|
|||||||
Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Windows Defender" -Directory
|
Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Windows Defender" -Directory
|
||||||
Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Windows Defender"
|
Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Windows Defender"
|
||||||
}
|
}
|
||||||
if (!$keepEdge) {
|
# if (!$keepEdge) {
|
||||||
Write-Host "Removing Edge"
|
# # this is destructive and might result in touching SystemApps is not recommended unless you going complete rogue on trimming edge and telemetry
|
||||||
Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Microsoft" -mask "*edge*" -Directory
|
# Write-Host "Removing Edge"
|
||||||
Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Microsoft" -mask "*edge*" -Directory
|
# Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Microsoft" -mask "*edge*" -Directory
|
||||||
Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*edge*" -Directory
|
# Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Microsoft" -mask "*edge*" -Directory
|
||||||
}
|
# Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*edge*" -Directory
|
||||||
|
# }
|
||||||
|
|
||||||
Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\DiagTrack" -Directory
|
Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\DiagTrack" -Directory
|
||||||
Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\InboxApps" -Directory
|
Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\InboxApps" -Directory
|
||||||
@ -283,24 +284,72 @@ public class PowerManagement {
|
|||||||
reg add "HKLM\zSYSTEM\Setup\MoSetup" /v "AllowUpgradesWithUnsupportedTPMOrCPU" /t REG_DWORD /d 1 /f
|
reg add "HKLM\zSYSTEM\Setup\MoSetup" /v "AllowUpgradesWithUnsupportedTPMOrCPU" /t REG_DWORD /d 1 /f
|
||||||
|
|
||||||
if (!$keepEdge) {
|
if (!$keepEdge) {
|
||||||
Write-Host "Removing Edge icon from taskbar"
|
# Undo changes made by -> Dism Add-Edge Edge.wim (Trust Me: this is the non-destructive way to unintegrate Edge)
|
||||||
reg delete "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Taskband" /v "Favorites" /f >$null 2>&1
|
|
||||||
reg delete "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Taskband" /v "FavoritesChanges" /f >$null 2>&1
|
Write-Host "Removing Edge"
|
||||||
reg delete "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Taskband" /v "Pinned" /f >$null 2>&1
|
|
||||||
reg delete "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Taskband" /v "LayoutCycle" /f >$null 2>&1
|
# Microsoft Edge
|
||||||
Write-Host "Edge icon removed from taskbar"
|
reg delete "HKLM\zSOFTWARE\Microsoft\Active Setup\Installed Components\{9459C573-B17A-45AE-9F64-1857B5D58CEE}" /f | Out-Null
|
||||||
if (Test-Path "HKLM:\zSOFTWARE\WOW6432Node") {
|
|
||||||
# Remove leftovers of 64-bit installations
|
reg delete "HKLM\zSOFTWARE\Wow6432Node\Microsoft\EdgeUpdate\Clients\{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" /f | Out-Null
|
||||||
# ---
|
reg delete "HKLM\zSOFTWARE\Wow6432Node\Microsoft\EdgeUpdate\ClientState\{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" /f | Out-Null
|
||||||
# Remove registry values first...
|
|
||||||
reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge" /va /f > $null 2>&1
|
reg delete "HKLM\zSOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge" /f | Out-Null
|
||||||
reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge Update" /va /f > $null 2>&1
|
|
||||||
reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft EdgeWebView" /va /f > $null 2>&1
|
if (Test-Path "$scratchDir\Program Files (x86)\Microsoft\Edge" -Type Container) {
|
||||||
# ...then the registry keys
|
Remove-Item "$scratchDir\Program Files (x86)\Microsoft\Edge" -Recurse -Force | Out-Null
|
||||||
reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge" /f > $null 2>&1
|
|
||||||
reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge Update" /f > $null 2>&1
|
|
||||||
reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft EdgeWebView" /f > $null 2>&1
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Extra
|
||||||
|
reg delete "HKLM\zSOFTWARE\Microsoft\MicrosoftEdge" /f | Out-Null
|
||||||
|
|
||||||
|
# Microsoft EdgeWebView
|
||||||
|
reg delete "HKLM\zSOFTWARE\Wow6432Node\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}" /f | Out-Null
|
||||||
|
reg delete "HKLM\zSOFTWARE\Wow6432Node\Microsoft\EdgeUpdate\ClientState\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}" /f | Out-Null
|
||||||
|
|
||||||
|
reg delete "HKLM\zSOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft EdgeWebView" /f | Out-Null
|
||||||
|
|
||||||
|
if (Test-Path "$scratchDir\Program Files (x86)\Microsoft\EdgeWebView" -Type Container) {
|
||||||
|
Remove-Item "$scratchDir\Program Files (x86)\Microsoft\EdgeWebView" -Recurse -Force | Out-Null
|
||||||
|
}
|
||||||
|
|
||||||
|
# Edge Core
|
||||||
|
if (Test-Path "$scratchDir\Program Files (x86)\Microsoft\EdgeCore" -Type Container) {
|
||||||
|
Remove-Item "$scratchDir\Program Files (x86)\Microsoft\EdgeCore" -Recurse -Force | Out-Null
|
||||||
|
}
|
||||||
|
|
||||||
|
# Microsoft Edge Update
|
||||||
|
reg delete "HKLM\zSOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\MicrosoftEdgeUpdate.exe" /f | Out-Null
|
||||||
|
|
||||||
|
reg delete "HKLM\zSOFTWARE\Wow6432Node\Microsoft\EdgeUpdate" /f | Out-Null
|
||||||
|
reg delete "HKLM\zSOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge Update" /f | Out-Null
|
||||||
|
|
||||||
|
# Microsoft Edge Update :: Services
|
||||||
|
reg delete "HKLM\zSYSTEM\ControlSet001\Services\edgeupdate" /f | Out-Null
|
||||||
|
reg delete "HKLM\zSYSTEM\ControlSet001\Services\edgeupdatem" /f | Out-Null
|
||||||
|
|
||||||
|
if (Test-Path "$scratchDir\Program Files (x86)\Microsoft\EdgeUpdate" -Type Container) {
|
||||||
|
Remove-Item "$scratchDir\Program Files (x86)\Microsoft\EdgeUpdate" -Recurse -Force | Out-Null
|
||||||
|
}
|
||||||
|
|
||||||
|
# Prevent EdgeChromium from Installing in the future
|
||||||
|
reg add "HKLM\zSOFTWARE\Microsoft\EdgeUpdate" /v "DoNotUpdateToEdgeWithChromium" /t REG_DWORD /d "1" /f | Out-Null
|
||||||
|
}
|
||||||
|
|
||||||
|
# Prevent Windows Update Installing so called Expedited Apps
|
||||||
|
@(
|
||||||
|
'EdgeUpdate',
|
||||||
|
'DevHomeUpdate',
|
||||||
|
'OutlookUpdate',
|
||||||
|
'CrossDeviceUpdate'
|
||||||
|
) | ForEach-Object {
|
||||||
|
Write-Host "Removing Windows Expedited App: $_"
|
||||||
|
|
||||||
|
# Copied here After Installation (Online)
|
||||||
|
# reg delete "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Orchestrator\UScheduler\$_" /f | Out-Null
|
||||||
|
|
||||||
|
# When in Offline Image
|
||||||
|
reg delete "HKLM\zSOFTWARE\Microsoft\WindowsUpdate\Orchestrator\UScheduler_Oobe\$_" /f | Out-Null
|
||||||
}
|
}
|
||||||
|
|
||||||
reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
|
reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
|
||||||
@ -341,7 +390,7 @@ public class PowerManagement {
|
|||||||
Write-Host "Cleanup complete."
|
Write-Host "Cleanup complete."
|
||||||
|
|
||||||
Write-Host "Unmounting image..."
|
Write-Host "Unmounting image..."
|
||||||
Dismount-WindowsImage -Path $scratchDir -Save
|
Dismount-WindowsImage -Path "$scratchDir" -Save
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -403,7 +452,7 @@ public class PowerManagement {
|
|||||||
reg unload HKLM\zSYSTEM
|
reg unload HKLM\zSYSTEM
|
||||||
|
|
||||||
Write-Host "Unmounting image..."
|
Write-Host "Unmounting image..."
|
||||||
Dismount-WindowsImage -Path $scratchDir -Save
|
Dismount-WindowsImage -Path "$scratchDir" -Save
|
||||||
|
|
||||||
Write-Host "Creating ISO image"
|
Write-Host "Creating ISO image"
|
||||||
|
|
||||||
@ -417,7 +466,7 @@ public class PowerManagement {
|
|||||||
|
|
||||||
Write-Host "[INFO] Using oscdimg.exe from: $oscdimgPath"
|
Write-Host "[INFO] Using oscdimg.exe from: $oscdimgPath"
|
||||||
|
|
||||||
$oscdimgProc = Start-Process -FilePath "$oscdimgPath" -ArgumentList "-m -o -u2 -udfver102 -bootdata:2#p0,e,b$mountDir\boot\etfsboot.com#pEF,e,b$mountDir\efi\microsoft\boot\efisys.bin `"$mountDir`" `"$($SaveDialog.FileName)`"" -Wait -PassThru -NoNewWindow
|
$oscdimgProc = Start-Process -FilePath "$oscdimgPath" -ArgumentList "-m -o -u2 -udfver102 -bootdata:2#p0,e,b`"$mountDir\boot\etfsboot.com`"#pEF,e,b`"$mountDir\efi\microsoft\boot\efisys.bin`" `"$mountDir`" `"$($SaveDialog.FileName)`"" -Wait -PassThru -NoNewWindow
|
||||||
|
|
||||||
$LASTEXITCODE = $oscdimgProc.ExitCode
|
$LASTEXITCODE = $oscdimgProc.ExitCode
|
||||||
|
|
||||||
|
51
requirements.txt
Normal file
51
requirements.txt
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
Babel==2.15.0
|
||||||
|
bracex==2.5
|
||||||
|
cairocffi==1.7.1
|
||||||
|
CairoSVG==2.7.1
|
||||||
|
certifi==2024.7.4
|
||||||
|
cffi==1.17.0
|
||||||
|
charset-normalizer==3.3.2
|
||||||
|
click==8.1.7
|
||||||
|
colorama==0.4.6
|
||||||
|
csscompressor==0.9.5
|
||||||
|
cssselect2==0.7.0
|
||||||
|
defusedxml==0.7.1
|
||||||
|
ghp-import==2.1.0
|
||||||
|
gitdb==4.0.11
|
||||||
|
GitPython==3.1.43
|
||||||
|
htmlmin2==0.1.13
|
||||||
|
idna==3.7
|
||||||
|
Jinja2==3.1.4
|
||||||
|
jsmin==3.0.1
|
||||||
|
Markdown==3.6
|
||||||
|
MarkupSafe==2.1.5
|
||||||
|
mergedeep==1.3.4
|
||||||
|
mkdocs==1.6.0
|
||||||
|
mkdocs-awesome-pages-plugin==2.9.3
|
||||||
|
mkdocs-get-deps==0.2.0
|
||||||
|
mkdocs-git-revision-date-localized-plugin==1.2.6
|
||||||
|
mkdocs-material==9.5.31
|
||||||
|
mkdocs-material-extensions==1.3.1
|
||||||
|
mkdocs-minify-plugin==0.8.0
|
||||||
|
natsort==8.4.0
|
||||||
|
packaging==24.1
|
||||||
|
paginate==0.5.6
|
||||||
|
pathspec==0.12.1
|
||||||
|
pillow==10.4.0
|
||||||
|
platformdirs==4.2.2
|
||||||
|
pycparser==2.22
|
||||||
|
Pygments==2.18.0
|
||||||
|
pymdown-extensions==10.9
|
||||||
|
python-dateutil==2.9.0.post0
|
||||||
|
pytz==2024.1
|
||||||
|
PyYAML==6.0.2
|
||||||
|
pyyaml_env_tag==0.1
|
||||||
|
regex==2024.7.24
|
||||||
|
requests==2.32.3
|
||||||
|
six==1.16.0
|
||||||
|
smmap==5.0.1
|
||||||
|
tinycss2==1.3.0
|
||||||
|
urllib3==2.2.2
|
||||||
|
watchdog==4.0.1
|
||||||
|
wcmatch==9.0
|
||||||
|
webencodings==0.5.1
|
@ -28,7 +28,7 @@ function Get-LatestRelease {
|
|||||||
function RedirectToLatestPreRelease {
|
function RedirectToLatestPreRelease {
|
||||||
$latestRelease = Get-LatestRelease
|
$latestRelease = Get-LatestRelease
|
||||||
if ($latestRelease) {
|
if ($latestRelease) {
|
||||||
$url = "https://raw.githubusercontent.com/ChrisTitusTech/winutil/$latestRelease/winutil.ps1"
|
$url = "https://github.com/ChrisTitusTech/winutil/releases/download/$latestRelease/winutil.ps1"
|
||||||
} else {
|
} else {
|
||||||
Write-Host 'Unable to determine latest pre-release version.' -ForegroundColor Red
|
Write-Host 'Unable to determine latest pre-release version.' -ForegroundColor Red
|
||||||
Write-Host "Using latest Full Release"
|
Write-Host "Using latest Full Release"
|
||||||
|
Reference in New Issue
Block a user