mirror of
https://github.com/ChrisTitusTech/winutil
synced 2026-02-04 15:00:09 +00:00
Compare commits
74 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cfaf139a6a | ||
|
|
becfba603d | ||
|
|
2b68976e7b | ||
|
|
5369d9d99b | ||
|
|
8b3e1280df | ||
|
|
ce77be324b | ||
|
|
6168e93d4c | ||
|
|
d98118e322 | ||
|
|
f69f107d9d | ||
|
|
f3c3613d26 | ||
|
|
b265675560 | ||
|
|
e0237642c8 | ||
|
|
aedaa2f789 | ||
|
|
8c2f9075a0 | ||
|
|
c9e6861ad4 | ||
|
|
43ec73684e | ||
|
|
bfbb643543 | ||
|
|
067ec31086 | ||
|
|
63221a7cb9 | ||
|
|
7e40d379d8 | ||
|
|
c766c974cf | ||
|
|
7d2804c706 | ||
|
|
2ee9047dd6 | ||
|
|
21c49d6a75 | ||
|
|
351a77043e | ||
|
|
c8bb38f3a9 | ||
|
|
5fb5e43cc7 | ||
|
|
eeb410e985 | ||
|
|
8eaf6ddd9c | ||
|
|
3c54e0ea3f | ||
|
|
d17e8bcd98 | ||
|
|
ef1fc2ae59 | ||
|
|
7d1fb52277 | ||
|
|
95988fca80 | ||
|
|
451040b5b1 | ||
|
|
47cb6b9273 | ||
|
|
69233b1d8a | ||
|
|
b621d9104e | ||
|
|
1f81eec8f1 | ||
|
|
72cbdca556 | ||
|
|
d5127b14a3 | ||
|
|
e2c84d9834 | ||
|
|
c454c93563 | ||
|
|
70b1274425 | ||
|
|
3b26620627 | ||
|
|
eeee941eb3 | ||
|
|
242fa6f210 | ||
|
|
634ef3266c | ||
|
|
a87c301636 | ||
|
|
674d1368bb | ||
|
|
c7495059fd | ||
|
|
dff974144f | ||
|
|
7db0b8a857 | ||
|
|
af7030d536 | ||
|
|
40b2894ed1 | ||
|
|
92728e65fd | ||
|
|
a6daeccb8c | ||
|
|
4eee519e76 | ||
|
|
54e367a13b | ||
|
|
e2e9089d6f | ||
|
|
aa1b1d2c18 | ||
|
|
0cf4a1fae8 | ||
|
|
c8dfc529d6 | ||
|
|
88ec1eddf8 | ||
|
|
a6e9e096ef | ||
|
|
0ee064c191 | ||
|
|
ff0ca400ed | ||
|
|
94d7bb719e | ||
|
|
8622892827 | ||
|
|
af09bcbf0b | ||
|
|
e2732da2db | ||
|
|
3bd6003171 | ||
|
|
a921d0c6fa | ||
|
|
01c8739a8b |
2
.github/CONTRIBUTING.md
vendored
2
.github/CONTRIBUTING.md
vendored
@@ -87,7 +87,7 @@ graph TD
|
|||||||
|
|
||||||
### Testing your changes
|
### Testing your changes
|
||||||
|
|
||||||
* To test to see if your changes work as intended run following commands in a powershell teminal as admin:
|
* To test to see if your changes work as intended run following commands in a powershell terminal as admin:
|
||||||
|
|
||||||
* Change the directory where you are running the commands to the forked project.
|
* Change the directory where you are running the commands to the forked project.
|
||||||
* `cd {path to the folder with the compile.ps1}`
|
* `cd {path to the folder with the compile.ps1}`
|
||||||
|
|||||||
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -1,4 +1,4 @@
|
|||||||
<!--Before you make this PR have you followed the docs here? - https://christitustech.github.io/winutil/contribute/ -->
|
<!--Before you make this PR have you followed the docs here? - https://winutil.christitus.com/contributing/ -->
|
||||||
|
|
||||||
## Type of Change
|
## Type of Change
|
||||||
- [ ] New feature
|
- [ ] New feature
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- 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
|
||||||
|
|||||||
2
.github/workflows/compile-check.yaml
vendored
2
.github/workflows/compile-check.yaml
vendored
@@ -13,7 +13,7 @@ jobs:
|
|||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Sources
|
- name: Checkout Sources
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Compile and Syntaxcheck winutil.ps1
|
- name: Compile and Syntaxcheck winutil.ps1
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
|
|||||||
2
.github/workflows/pre-release.yaml
vendored
2
.github/workflows/pre-release.yaml
vendored
@@ -14,7 +14,7 @@ jobs:
|
|||||||
CERTIFICATE_BASE64: ${{ secrets.CERTIFICATE_BASE64 }}
|
CERTIFICATE_BASE64: ${{ secrets.CERTIFICATE_BASE64 }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repository
|
- name: Checkout Repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Compile project
|
- name: Compile project
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
|
|||||||
2
.github/workflows/remove-winutil.yaml
vendored
2
.github/workflows/remove-winutil.yaml
vendored
@@ -11,7 +11,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Check if winutil.ps1 exists
|
- name: Check if winutil.ps1 exists
|
||||||
id: check_existence
|
id: check_existence
|
||||||
|
|||||||
2
.github/workflows/sponsors.yaml
vendored
2
.github/workflows/sponsors.yaml
vendored
@@ -11,7 +11,7 @@ jobs:
|
|||||||
if: (github.event_name == 'schedule' && github.repository == 'ChrisTitusTech/winutil') || (github.event_name != 'schedule')
|
if: (github.event_name == 'schedule' && github.repository == 'ChrisTitusTech/winutil') || (github.event_name != 'schedule')
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout 🛎️
|
- name: Checkout 🛎️
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Generate Sponsors 💖
|
- name: Generate Sponsors 💖
|
||||||
uses: JamesIves/github-sponsors-readme-action@v1
|
uses: JamesIves/github-sponsors-readme-action@v1
|
||||||
|
|||||||
4
.github/workflows/unittests.yaml
vendored
4
.github/workflows/unittests.yaml
vendored
@@ -8,7 +8,7 @@ jobs:
|
|||||||
name: PS Script Analyzer
|
name: PS Script Analyzer
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
- name: lint
|
- name: lint
|
||||||
uses: devblackops/github-action-psscriptanalyzer@master
|
uses: devblackops/github-action-psscriptanalyzer@master
|
||||||
with:
|
with:
|
||||||
@@ -22,7 +22,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Install Pester
|
- name: Install Pester
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -54,3 +54,5 @@ winutil.ps1
|
|||||||
.github/site/
|
.github/site/
|
||||||
|
|
||||||
binary/
|
binary/
|
||||||
|
|
||||||
|
.preprocessor_hashes.json
|
||||||
19
Compile.ps1
19
Compile.ps1
@@ -51,7 +51,24 @@ Update-Progress "Pre-req: Running Preprocessor..." 0
|
|||||||
$preprocessingFilePath = ".\tools\Invoke-Preprocessing.ps1"
|
$preprocessingFilePath = ".\tools\Invoke-Preprocessing.ps1"
|
||||||
. $preprocessingFilePath
|
. $preprocessingFilePath
|
||||||
|
|
||||||
$excludedFiles = @('.\.git\', '.\.gitignore', '.\.gitattributes', '.\.github\CODEOWNERS', '.\LICENSE', "$preprocessingFilePath", '*.png', '*.exe','.\.preprocessor_hashes.json')
|
$excludedFiles = @()
|
||||||
|
|
||||||
|
# Add directories only if they exist
|
||||||
|
if (Test-Path '.\.git\') { $excludedFiles += '.\.git\' }
|
||||||
|
if (Test-Path '.\binary\') { $excludedFiles += '.\binary\' }
|
||||||
|
|
||||||
|
# Add files that should always be excluded
|
||||||
|
$excludedFiles += @(
|
||||||
|
'.\.gitignore',
|
||||||
|
'.\.gitattributes',
|
||||||
|
'.\.github\CODEOWNERS',
|
||||||
|
'.\LICENSE',
|
||||||
|
"$preprocessingFilePath",
|
||||||
|
'*.png',
|
||||||
|
'*.exe',
|
||||||
|
'.\.preprocessor_hashes.json'
|
||||||
|
)
|
||||||
|
|
||||||
$msg = "Pre-req: Code Formatting"
|
$msg = "Pre-req: Code Formatting"
|
||||||
Invoke-Preprocessing -WorkingDir "$workingdir" -ExcludedFiles $excludedFiles -ProgressStatusMessage $msg
|
Invoke-Preprocessing -WorkingDir "$workingdir" -ExcludedFiles $excludedFiles -ProgressStatusMessage $msg
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ irm "https://christitus.com/win" | iex
|
|||||||
irm "https://christitus.com/windev" | iex
|
irm "https://christitus.com/windev" | iex
|
||||||
```
|
```
|
||||||
|
|
||||||
If you have Issues, refer to [Known Issues](https://winutil.christitus.com/knownissues/)
|
If you have Issues, refer to [Known Issues](https://winutil.christitus.com/knownissues/) or [Create Issue](https://github.com/ChrisTitusTech/winutil/issues)
|
||||||
|
|
||||||
## 🎓 Documentation
|
## 🎓 Documentation
|
||||||
|
|
||||||
@@ -79,7 +79,7 @@ You'll see a new file named `winutil.ps1`, which's created by `Compile.ps1` scri
|
|||||||
|
|
||||||
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/TriHydera"><img src="https://github.com/TriHydera.png" width="60px" alt="User avatar: TriHydera" /></a><a href="https://github.com/DelDongo"><img src="https://github.com/DelDongo.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/markamos"><img src="https://github.com/markamos.png" width="60px" alt="User avatar: Mark Amos" /></a><a href="https://github.com/dwelfusius"><img src="https://github.com/dwelfusius.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/mews-se"><img src="https://github.com/mews-se.png" width="60px" alt="User avatar: Martin Stockzell" /></a><a href="https://github.com/jdiegmueller"><img src="https://github.com/jdiegmueller.png" width="60px" alt="User avatar: Jason A. Diegmueller" /></a><a href="https://github.com/robertsandrock"><img src="https://github.com/robertsandrock.png" width="60px" alt="User avatar: RMS" /></a><a href="https://github.com/KenichiQaz"><img src="https://github.com/KenichiQaz.png" width="60px" alt="User avatar: Stefan" /></a><a href="https://github.com/paulsheets"><img src="https://github.com/paulsheets.png" width="60px" alt="User avatar: Paul" /></a><a href="https://github.com/djones369"><img src="https://github.com/djones369.png" width="60px" alt="User avatar: Dave J. - WhamGeek" /></a><a href="https://github.com/anthonymendez"><img src="https://github.com/anthonymendez.png" width="60px" alt="User avatar: Anthony Mendez" /></a><a href="https://github.com/FatBastard0"><img src="https://github.com/FatBastard0.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/DursleyGuy"><img src="https://github.com/DursleyGuy.png" width="60px" alt="User avatar: DursleyGuy" /></a><a href="https://github.com/realmuddy"><img src="https://github.com/realmuddy.png" width="60px" alt="User avatar: Phillip Waters" /></a><a href="https://github.com/quaszi"><img src="https://github.com/quaszi.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/DwayneTheRockLobster1"><img src="https://github.com/DwayneTheRockLobster1.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/KieraKujisawa"><img src="https://github.com/KieraKujisawa.png" width="60px" alt="User avatar: Kiera Meredith" /></a><a href="https://github.com/felicabrera"><img src="https://github.com/felicabrera.png" width="60px" alt="User avatar: Felipe Cabrera" /></a><a href="https://github.com/singhchandan27"><img src="https://github.com/singhchandan27.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/danhively"><img src="https://github.com/danhively.png" width="60px" alt="User avatar: Dan Hively" /></a><a href="https://github.com/Yamil-Serrano"><img src="https://github.com/Yamil-Serrano.png" width="60px" alt="User avatar: Neowizen" /></a><!-- sponsors -->
|
<!-- sponsors --><a href="https://github.com/markamos"><img src="https://github.com/markamos.png" width="60px" alt="User avatar: Mark Amos" /></a><a href="https://github.com/dwelfusius"><img src="https://github.com/dwelfusius.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/mews-se"><img src="https://github.com/mews-se.png" width="60px" alt="User avatar: Martin Stockzell" /></a><a href="https://github.com/jdiegmueller"><img src="https://github.com/jdiegmueller.png" width="60px" alt="User avatar: Jason A. Diegmueller" /></a><a href="https://github.com/robertsandrock"><img src="https://github.com/robertsandrock.png" width="60px" alt="User avatar: RMS" /></a><a href="https://github.com/KenichiQaz"><img src="https://github.com/KenichiQaz.png" width="60px" alt="User avatar: Stefan" /></a><a href="https://github.com/paulsheets"><img src="https://github.com/paulsheets.png" width="60px" alt="User avatar: Paul" /></a><a href="https://github.com/djones369"><img src="https://github.com/djones369.png" width="60px" alt="User avatar: Dave J (WhamGeek)" /></a><a href="https://github.com/anthonymendez"><img src="https://github.com/anthonymendez.png" width="60px" alt="User avatar: Anthony Mendez" /></a><a href="https://github.com/FatBastard0"><img src="https://github.com/FatBastard0.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/DursleyGuy"><img src="https://github.com/DursleyGuy.png" width="60px" alt="User avatar: DursleyGuy" /></a><a href="https://github.com/realmuddy"><img src="https://github.com/realmuddy.png" width="60px" alt="User avatar: Phillip Waters" /></a><a href="https://github.com/quaszi"><img src="https://github.com/quaszi.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/DwayneTheRockLobster1"><img src="https://github.com/DwayneTheRockLobster1.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/KieraKujisawa"><img src="https://github.com/KieraKujisawa.png" width="60px" alt="User avatar: Kiera Meredith" /></a><a href="https://github.com/novello-dev"><img src="https://github.com/novello-dev.png" width="60px" alt="User avatar: João Pedro Novello" /></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 🍻.
|
||||||
|
|||||||
@@ -143,6 +143,15 @@
|
|||||||
"link": "https://github.com/sharkdp/bat",
|
"link": "https://github.com/sharkdp/bat",
|
||||||
"winget": "sharkdp.bat"
|
"winget": "sharkdp.bat"
|
||||||
},
|
},
|
||||||
|
"beeper": {
|
||||||
|
"category": "Communications",
|
||||||
|
"choco": "na",
|
||||||
|
"content": "Beeper",
|
||||||
|
"description": "All your chats in one app",
|
||||||
|
"link": "https://www.beeper.com/",
|
||||||
|
"winget": "Beeper.Beeper"
|
||||||
|
},
|
||||||
|
|
||||||
"bitwarden": {
|
"bitwarden": {
|
||||||
"category": "Utilities",
|
"category": "Utilities",
|
||||||
"choco": "bitwarden",
|
"choco": "bitwarden",
|
||||||
@@ -375,6 +384,22 @@
|
|||||||
"link": "https://discord.com/",
|
"link": "https://discord.com/",
|
||||||
"winget": "Discord.Discord"
|
"winget": "Discord.Discord"
|
||||||
},
|
},
|
||||||
|
"dismtools": {
|
||||||
|
"category": "Microsoft Tools",
|
||||||
|
"choco": "na",
|
||||||
|
"content": "DISMTools",
|
||||||
|
"description": "DISMTools is a fast, customizable GUI for the DISM utility, supporting Windows images from Windows 7 onward. It handles installations on any drive, offers project support, and lets users tweak settings like color modes, language, and DISM versions; powered by both native DISM and a managed DISM API.",
|
||||||
|
"link": "https://github.com/CodingWonders/DISMTools",
|
||||||
|
"winget": "CodingWondersSoftware.DISMTools.Stable"
|
||||||
|
},
|
||||||
|
"ntlite": {
|
||||||
|
"category": "Microsoft Tools",
|
||||||
|
"choco": "ntlite-free",
|
||||||
|
"content": "NTLite",
|
||||||
|
"description": "Integrate updates, drivers, automate Windows and application setup, speedup Windows deployment process and have it all set for the next time.",
|
||||||
|
"link": "https://ntlite.com",
|
||||||
|
"winget": "Nlitesoft.NTLite"
|
||||||
|
},
|
||||||
"ditto": {
|
"ditto": {
|
||||||
"category": "Utilities",
|
"category": "Utilities",
|
||||||
"choco": "ditto",
|
"choco": "ditto",
|
||||||
@@ -495,6 +520,14 @@
|
|||||||
"link": "https://emulationstation.org/",
|
"link": "https://emulationstation.org/",
|
||||||
"winget": "Emulationstation.Emulationstation"
|
"winget": "Emulationstation.Emulationstation"
|
||||||
},
|
},
|
||||||
|
"enteauth": {
|
||||||
|
"category": "Utilities",
|
||||||
|
"choco": "ente-auth",
|
||||||
|
"content": "Ente Auth",
|
||||||
|
"description": "Ente Auth is a free, cross-platform, end-to-end encrypted authenticator app.",
|
||||||
|
"link": "https://ente.io/auth/",
|
||||||
|
"winget": "ente-io.auth-desktop"
|
||||||
|
},
|
||||||
"epicgames": {
|
"epicgames": {
|
||||||
"category": "Games",
|
"category": "Games",
|
||||||
"choco": "epicgameslauncher",
|
"choco": "epicgameslauncher",
|
||||||
@@ -1155,7 +1188,7 @@
|
|||||||
"category": "Communications",
|
"category": "Communications",
|
||||||
"choco": "element-desktop",
|
"choco": "element-desktop",
|
||||||
"content": "Element",
|
"content": "Element",
|
||||||
"description": "Element is a client for Matrix—an open network for secure, decentralized communication.",
|
"description": "Element is a client for Matrix; an open network for secure, decentralized communication.",
|
||||||
"link": "https://element.io/",
|
"link": "https://element.io/",
|
||||||
"winget": "Element.Element"
|
"winget": "Element.Element"
|
||||||
},
|
},
|
||||||
@@ -1501,7 +1534,7 @@
|
|||||||
"content": "OpenRGB",
|
"content": "OpenRGB",
|
||||||
"description": "OpenRGB is an open-source RGB lighting control software designed to manage and control RGB lighting for various components and peripherals.",
|
"description": "OpenRGB is an open-source RGB lighting control software designed to manage and control RGB lighting for various components and peripherals.",
|
||||||
"link": "https://openrgb.org/",
|
"link": "https://openrgb.org/",
|
||||||
"winget": "CalcProgrammer1.OpenRGB"
|
"winget": "OpenRGB.OpenRGB"
|
||||||
},
|
},
|
||||||
"openscad": {
|
"openscad": {
|
||||||
"category": "Multimedia Tools",
|
"category": "Multimedia Tools",
|
||||||
@@ -1687,13 +1720,13 @@
|
|||||||
"link": "https://bitsum.com/",
|
"link": "https://bitsum.com/",
|
||||||
"winget": "BitSum.ProcessLasso"
|
"winget": "BitSum.ProcessLasso"
|
||||||
},
|
},
|
||||||
"spotify": {
|
"protonauth": {
|
||||||
"category": "Multimedia Tools",
|
"category": "Utilities",
|
||||||
"choco": "spotify",
|
"choco": "protonauth",
|
||||||
"content": "Spotify",
|
"content": "Proton Authenticator",
|
||||||
"description": "Spotify is a digital music service that gives you access to millions of songs, podcasts, and videos from artists all over the world.",
|
"description": "2FA app from Proton to securely sync and backup 2FA codes.",
|
||||||
"link": "https://www.spotify.com/",
|
"link": "https://proton.me/authenticator",
|
||||||
"winget": "Spotify.Spotify"
|
"winget": "Proton.ProtonAuthenticator"
|
||||||
},
|
},
|
||||||
"processmonitor": {
|
"processmonitor": {
|
||||||
"category": "Microsoft Tools",
|
"category": "Microsoft Tools",
|
||||||
@@ -1877,7 +1910,7 @@
|
|||||||
"content": "Session",
|
"content": "Session",
|
||||||
"description": "Session is a private and secure messaging app built on a decentralized network for user privacy and data protection.",
|
"description": "Session is a private and secure messaging app built on a decentralized network for user privacy and data protection.",
|
||||||
"link": "https://getsession.org/",
|
"link": "https://getsession.org/",
|
||||||
"winget": "Oxen.Session"
|
"winget": "Session.Session"
|
||||||
},
|
},
|
||||||
"sharex": {
|
"sharex": {
|
||||||
"category": "Multimedia Tools",
|
"category": "Multimedia Tools",
|
||||||
@@ -2683,7 +2716,7 @@
|
|||||||
"category": "Utilities",
|
"category": "Utilities",
|
||||||
"choco": "ultravnc",
|
"choco": "ultravnc",
|
||||||
"content": "UltraVNC",
|
"content": "UltraVNC",
|
||||||
"description": "UltraVNC is a powerful, easy to use and free - remote pc access softwares - that can display the screen of another computer (via internet or network) on your own screen. The program allows you to use your mouse and keyboard to control the other PC remotely. It means that you can work on a remote computer, as if you were sitting in front of it, right from your current location.",
|
"description": "UltraVNC is a powerful, easy to use and free - remote pc access software - that can display the screen of another computer (via internet or network) on your own screen. The program allows you to use your mouse and keyboard to control the other PC remotely. It means that you can work on a remote computer, as if you were sitting in front of it, right from your current location.",
|
||||||
"link": "https://uvnc.com/",
|
"link": "https://uvnc.com/",
|
||||||
"winget": "uvncbvba.UltraVnc"
|
"winget": "uvncbvba.UltraVnc"
|
||||||
},
|
},
|
||||||
@@ -2894,5 +2927,13 @@
|
|||||||
"description": "The modern, privacy-focused, performance-driven browser built on Firefox",
|
"description": "The modern, privacy-focused, performance-driven browser built on Firefox",
|
||||||
"link": "https://zen-browser.app/",
|
"link": "https://zen-browser.app/",
|
||||||
"winget": "Zen-Team.Zen-Browser"
|
"winget": "Zen-Team.Zen-Browser"
|
||||||
|
},
|
||||||
|
"Zed": {
|
||||||
|
"category": "Development",
|
||||||
|
"choco": "na",
|
||||||
|
"content": "Zed",
|
||||||
|
"description": "Zed is a modern, high-performance code editor designed from the ground up for speed and collaboration.",
|
||||||
|
"link": "https://zed.dev/",
|
||||||
|
"winget": "Zed.Zed"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,23 +46,5 @@
|
|||||||
"Secondary": "94.140.15.16",
|
"Secondary": "94.140.15.16",
|
||||||
"Primary6": "2a10:50c0::bad1:ff",
|
"Primary6": "2a10:50c0::bad1:ff",
|
||||||
"Secondary6": "2a10:50c0::bad2:ff"
|
"Secondary6": "2a10:50c0::bad2:ff"
|
||||||
},
|
|
||||||
"dns0.eu_Open":{
|
|
||||||
"Primary": "193.110.81.254",
|
|
||||||
"Secondary": "185.253.5.254",
|
|
||||||
"Primary6": "2a0f:fc80::ffff",
|
|
||||||
"Secondary6": "2a0f:fc81::ffff"
|
|
||||||
},
|
|
||||||
"dns0.eu_ZERO":{
|
|
||||||
"Primary": "193.110.81.9",
|
|
||||||
"Secondary": "185.253.5.9",
|
|
||||||
"Primary6": "2a0f:fc80::9",
|
|
||||||
"Secondary6": "2a0f:fc81::9"
|
|
||||||
},
|
|
||||||
"dns0.eu_KIDS":{
|
|
||||||
"Primary": "193.110.81.1",
|
|
||||||
"Secondary": "185.253.5.1",
|
|
||||||
"Primary6": "2a0f:fc80::1",
|
|
||||||
"Secondary6": "2a0f:fc81::1"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -81,42 +81,6 @@
|
|||||||
],
|
],
|
||||||
"link": "https://winutil.christitus.com/dev/features/features/nfs"
|
"link": "https://winutil.christitus.com/dev/features/features/nfs"
|
||||||
},
|
},
|
||||||
"WPFFeatureEnableSearchSuggestions": {
|
|
||||||
"Content": "Enable Search Box Web Suggestions in Registry(explorer restart)",
|
|
||||||
"Description": "Enables web suggestions when searching using Windows Search.",
|
|
||||||
"category": "Features",
|
|
||||||
"panel": "1",
|
|
||||||
"Order": "a015_",
|
|
||||||
"feature": [],
|
|
||||||
"InvokeScript": [
|
|
||||||
"
|
|
||||||
If (!(Test-Path 'HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer')) {
|
|
||||||
New-Item -Path 'HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer' -Force | Out-Null
|
|
||||||
}
|
|
||||||
New-ItemProperty -Path 'HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer' -Name 'DisableSearchBoxSuggestions' -Type DWord -Value 0 -Force
|
|
||||||
Stop-Process -name explorer -force
|
|
||||||
"
|
|
||||||
],
|
|
||||||
"link": "https://winutil.christitus.com/dev/features/features/enablesearchsuggestions"
|
|
||||||
},
|
|
||||||
"WPFFeatureDisableSearchSuggestions": {
|
|
||||||
"Content": "Disable Search Box Web Suggestions in Registry(explorer restart)",
|
|
||||||
"Description": "Disables web suggestions when searching using Windows Search.",
|
|
||||||
"category": "Features",
|
|
||||||
"panel": "1",
|
|
||||||
"Order": "a016_",
|
|
||||||
"feature": [],
|
|
||||||
"InvokeScript": [
|
|
||||||
"
|
|
||||||
If (!(Test-Path 'HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer')) {
|
|
||||||
New-Item -Path 'HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer' -Force | Out-Null
|
|
||||||
}
|
|
||||||
New-ItemProperty -Path 'HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer' -Name 'DisableSearchBoxSuggestions' -Type DWord -Value 1 -Force
|
|
||||||
Stop-Process -name explorer -force
|
|
||||||
"
|
|
||||||
],
|
|
||||||
"link": "https://winutil.christitus.com/dev/features/features/disablesearchsuggestions"
|
|
||||||
},
|
|
||||||
"WPFFeatureRegBackup": {
|
"WPFFeatureRegBackup": {
|
||||||
"Content": "Enable Daily Registry Backup Task 12.30am",
|
"Content": "Enable Daily Registry Backup Task 12.30am",
|
||||||
"Description": "Enables daily registry backup, previously disabled by Microsoft in Windows 10 1803.",
|
"Description": "Enables daily registry backup, previously disabled by Microsoft in Windows 10 1803.",
|
||||||
@@ -290,6 +254,14 @@
|
|||||||
"ButtonWidth": "300",
|
"ButtonWidth": "300",
|
||||||
"link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/region"
|
"link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/region"
|
||||||
},
|
},
|
||||||
|
"WPFPanelRestore": {
|
||||||
|
"Content": "Windows Restore",
|
||||||
|
"category": "Legacy Windows Panels",
|
||||||
|
"panel": "2",
|
||||||
|
"Type": "Button",
|
||||||
|
"ButtonWidth": "300",
|
||||||
|
"link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/restore"
|
||||||
|
},
|
||||||
"WPFPanelSound": {
|
"WPFPanelSound": {
|
||||||
"Content": "Sound Settings",
|
"Content": "Sound Settings",
|
||||||
"category": "Legacy Windows Panels",
|
"category": "Legacy Windows Panels",
|
||||||
@@ -298,7 +270,6 @@
|
|||||||
"ButtonWidth": "300",
|
"ButtonWidth": "300",
|
||||||
"link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/user"
|
"link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/user"
|
||||||
},
|
},
|
||||||
|
|
||||||
"WPFPanelSystem": {
|
"WPFPanelSystem": {
|
||||||
"Content": "System Properties",
|
"Content": "System Properties",
|
||||||
"category": "Legacy Windows Panels",
|
"category": "Legacy Windows Panels",
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
{
|
{
|
||||||
"Standard": [
|
"Standard": [
|
||||||
"WPFTweaksAH",
|
"WPFTweaksActivity",
|
||||||
"WPFTweaksConsumerFeatures",
|
"WPFTweaksConsumerFeatures",
|
||||||
"WPFTweaksDisableExplorerAutoDiscovery",
|
"WPFTweaksDisableExplorerAutoDiscovery",
|
||||||
"WPFTweaksDVR",
|
"WPFTweaksDVR",
|
||||||
"WPFTweaksHome",
|
|
||||||
"WPFTweaksLoc",
|
"WPFTweaksLoc",
|
||||||
"WPFTweaksServices",
|
"WPFTweaksServices",
|
||||||
"WPFTweaksStorage",
|
"WPFTweaksStorage",
|
||||||
@@ -19,7 +18,6 @@
|
|||||||
"Minimal": [
|
"Minimal": [
|
||||||
"WPFTweaksConsumerFeatures",
|
"WPFTweaksConsumerFeatures",
|
||||||
"WPFTweaksDisableExplorerAutoDiscovery",
|
"WPFTweaksDisableExplorerAutoDiscovery",
|
||||||
"WPFTweaksHome",
|
|
||||||
"WPFTweaksServices",
|
"WPFTweaksServices",
|
||||||
"WPFTweaksTele"
|
"WPFTweaksTele"
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
"AppEntryWidth": "130",
|
"AppEntryWidth": "130",
|
||||||
"AppEntryFontSize": "11",
|
"AppEntryFontSize": "11",
|
||||||
"AppEntryMargin": "1,1,1,1",
|
"AppEntryMargin": "1,1,1,1",
|
||||||
"AppEntryBorderTickness": "0",
|
"AppEntryBorderThickness": "0",
|
||||||
"CustomDialogFontSize": "12",
|
"CustomDialogFontSize": "12",
|
||||||
"CustomDialogFontSizeHeader": "14",
|
"CustomDialogFontSizeHeader": "14",
|
||||||
"CustomDialogLogoSize": "25",
|
"CustomDialogLogoSize": "25",
|
||||||
@@ -32,6 +32,7 @@
|
|||||||
"ButtonFontFamily": "Arial",
|
"ButtonFontFamily": "Arial",
|
||||||
"ButtonWidth": "200",
|
"ButtonWidth": "200",
|
||||||
"ButtonHeight": "25",
|
"ButtonHeight": "25",
|
||||||
|
"ConfigTabButtonFontSize": "14",
|
||||||
"ConfigUpdateButtonFontSize": "14",
|
"ConfigUpdateButtonFontSize": "14",
|
||||||
"SearchBarWidth": "200",
|
"SearchBarWidth": "200",
|
||||||
"SearchBarHeight": "26",
|
"SearchBarHeight": "26",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"WPFTweaksAH": {
|
"WPFTweaksActivity": {
|
||||||
"Content": "Disable Activity History",
|
"Content": "Disable Activity History",
|
||||||
"Description": "This erases recent docs, clipboard, and run history.",
|
"Description": "This erases recent docs, clipboard, and run history.",
|
||||||
"category": "Essential Tweaks",
|
"category": "Essential Tweaks",
|
||||||
@@ -63,9 +63,9 @@
|
|||||||
"WPFTweaksLaptopHibernation": {
|
"WPFTweaksLaptopHibernation": {
|
||||||
"Content": "Set Hibernation as default (good for laptops)",
|
"Content": "Set Hibernation as default (good for laptops)",
|
||||||
"Description": "Most modern laptops have connected standby enabled which drains the battery, this sets hibernation as default which will not drain the battery. See issue https://github.com/ChrisTitusTech/winutil/issues/1399",
|
"Description": "Most modern laptops have connected standby enabled which drains the battery, this sets hibernation as default which will not drain the battery. See issue https://github.com/ChrisTitusTech/winutil/issues/1399",
|
||||||
"category": "Essential Tweaks",
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a014_",
|
"Order": "a027_",
|
||||||
"registry": [
|
"registry": [
|
||||||
{
|
{
|
||||||
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Power\\PowerSettings\\238C9FA8-0AAD-41ED-83F4-97BE242C8F20\\7bc4a2f9-d8fc-4469-b07b-33eb785aaca0",
|
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Power\\PowerSettings\\238C9FA8-0AAD-41ED-83F4-97BE242C8F20\\7bc4a2f9-d8fc-4469-b07b-33eb785aaca0",
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
Write-Host \"Turn off Hibernation\"
|
Write-Host \"Turn off Hibernation\"
|
||||||
Start-Process -FilePath powercfg -ArgumentList \"/hibernate off\" -NoNewWindow -Wait
|
Start-Process -FilePath powercfg -ArgumentList \"/hibernate off\" -NoNewWindow -Wait
|
||||||
|
|
||||||
# Set standby to detault values
|
# Set standby to default values
|
||||||
Start-Process -FilePath powercfg -ArgumentList \"/change standby-timeout-ac 15\" -NoNewWindow -Wait
|
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 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-ac 15\" -NoNewWindow -Wait
|
||||||
@@ -108,26 +108,6 @@
|
|||||||
],
|
],
|
||||||
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/laptophibernation"
|
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/laptophibernation"
|
||||||
},
|
},
|
||||||
"WPFTweaksHome": {
|
|
||||||
"Content": "Disable Homegroup",
|
|
||||||
"Description": "Disables HomeGroup - HomeGroup is a password-protected home networking service that lets you share your stuff with other PCs that are currently running and connected to your network.",
|
|
||||||
"category": "Essential Tweaks",
|
|
||||||
"panel": "1",
|
|
||||||
"Order": "a005_",
|
|
||||||
"service": [
|
|
||||||
{
|
|
||||||
"Name": "HomeGroupListener",
|
|
||||||
"StartupType": "Manual",
|
|
||||||
"OriginalType": "Automatic"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Name": "HomeGroupProvider",
|
|
||||||
"StartupType": "Manual",
|
|
||||||
"OriginalType": "Automatic"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/home"
|
|
||||||
},
|
|
||||||
"WPFTweaksLoc": {
|
"WPFTweaksLoc": {
|
||||||
"Content": "Disable Location Tracking",
|
"Content": "Disable Location Tracking",
|
||||||
"Description": "Disables Location Tracking...DUH!",
|
"Description": "Disables Location Tracking...DUH!",
|
||||||
@@ -1552,11 +1532,11 @@
|
|||||||
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/services"
|
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/services"
|
||||||
},
|
},
|
||||||
"WPFTweaksBraveDebloat": {
|
"WPFTweaksBraveDebloat": {
|
||||||
"Content": "Debloat Brave",
|
"Content": "Brave Debloat",
|
||||||
"Description": "Disables various annoyances like Brave Rewards,Leo AI,Crypto Wallet and VPN",
|
"Description": "Disables various annoyances like Brave Rewards,Leo AI,Crypto Wallet and VPN",
|
||||||
"category": "Essential Tweaks",
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a016_",
|
"Order": "a022_",
|
||||||
"registry": [
|
"registry": [
|
||||||
{
|
{
|
||||||
"Path":"HKLM:\\SOFTWARE\\Policies\\BraveSoftware\\Brave",
|
"Path":"HKLM:\\SOFTWARE\\Policies\\BraveSoftware\\Brave",
|
||||||
@@ -1585,22 +1565,15 @@
|
|||||||
"Type": "DWord",
|
"Type": "DWord",
|
||||||
"Value": "0",
|
"Value": "0",
|
||||||
"OriginalValue": "<RemoveEntry>"
|
"OriginalValue": "<RemoveEntry>"
|
||||||
},
|
|
||||||
{
|
|
||||||
"Path": "HKLM:\\SOFTWARE\\Policies\\BraveSoftware\\Brave",
|
|
||||||
"Name": "SyncDisabled",
|
|
||||||
"Type": "DWord",
|
|
||||||
"Value": "1",
|
|
||||||
"OriginalValue": "<RemoveEntry>"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"WPFTweaksEdgeDebloat": {
|
"WPFTweaksEdgeDebloat": {
|
||||||
"Content": "Debloat Edge",
|
"Content": "Edge Debloat",
|
||||||
"Description": "Disables various telemetry options, popups, and other annoyances in Edge.",
|
"Description": "Disables various telemetry options, popups, and other annoyances in Edge.",
|
||||||
"category": "Essential Tweaks",
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a016_",
|
"Order": "a022_",
|
||||||
"registry": [
|
"registry": [
|
||||||
{
|
{
|
||||||
"Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\EdgeUpdate",
|
"Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\EdgeUpdate",
|
||||||
@@ -1672,13 +1645,6 @@
|
|||||||
"Value": "0",
|
"Value": "0",
|
||||||
"OriginalValue": "<RemoveEntry>"
|
"OriginalValue": "<RemoveEntry>"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
|
|
||||||
"Name": "PersonalizationReportingEnabled",
|
|
||||||
"Type": "DWord",
|
|
||||||
"Value": "0",
|
|
||||||
"OriginalValue": "<RemoveEntry>"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
|
"Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
|
||||||
"Name": "ShowMicrosoftRewards",
|
"Name": "ShowMicrosoftRewards",
|
||||||
@@ -1707,20 +1673,6 @@
|
|||||||
"Value": "0",
|
"Value": "0",
|
||||||
"OriginalValue": "<RemoveEntry>"
|
"OriginalValue": "<RemoveEntry>"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
|
|
||||||
"Name": "EdgeCollectionsEnabled",
|
|
||||||
"Type": "DWord",
|
|
||||||
"Value": "0",
|
|
||||||
"OriginalValue": "<RemoveEntry>"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
|
|
||||||
"Name": "CryptoWalletEnabled",
|
|
||||||
"Type": "DWord",
|
|
||||||
"Value": "0",
|
|
||||||
"OriginalValue": "<RemoveEntry>"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
|
"Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge",
|
||||||
"Name": "WalletDonationEnabled",
|
"Name": "WalletDonationEnabled",
|
||||||
@@ -2136,6 +2088,30 @@
|
|||||||
],
|
],
|
||||||
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/wifi"
|
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/wifi"
|
||||||
},
|
},
|
||||||
|
"WPFTweaksDisableEdge": {
|
||||||
|
"Content": "Disable Edge",
|
||||||
|
"Description": "Disables Microsoft Edge via the registry and prevents scheduled tasks from running Edge updates.",
|
||||||
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
|
"panel": "1",
|
||||||
|
"Order": "a023_",
|
||||||
|
"registry": [
|
||||||
|
{
|
||||||
|
"Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer\\DisallowRun",
|
||||||
|
"Name": "DisableEdge",
|
||||||
|
"Type": "String",
|
||||||
|
"Value": "msedge.exe",
|
||||||
|
"OriginalValue": "<RemoveEntry>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Path": "HKLM:\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer",
|
||||||
|
"Name": "DisallowRun",
|
||||||
|
"Type": "DWord",
|
||||||
|
"Value": "1",
|
||||||
|
"OriginalValue": "<RemoveEntry>"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"link": ""
|
||||||
|
},
|
||||||
"WPFTweaksUTC": {
|
"WPFTweaksUTC": {
|
||||||
"Content": "Set Time to UTC (Dual Boot)",
|
"Content": "Set Time to UTC (Dual Boot)",
|
||||||
"Description": "Essential for computers that are dual booting. Fixes the time sync with Linux Systems.",
|
"Description": "Essential for computers that are dual booting. Fixes the time sync with Linux Systems.",
|
||||||
@@ -2320,9 +2296,8 @@
|
|||||||
"Microsoft.MinecraftUWP",
|
"Microsoft.MinecraftUWP",
|
||||||
"Microsoft.GamingServices",
|
"Microsoft.GamingServices",
|
||||||
"Microsoft.GetHelp",
|
"Microsoft.GetHelp",
|
||||||
"Microsoft.Getstarted",
|
"Microsoft.GetStarted",
|
||||||
"Microsoft.Messaging",
|
"Microsoft.Messaging",
|
||||||
"Microsoft.Microsoft3DViewer",
|
|
||||||
"Microsoft.MicrosoftSolitaireCollection",
|
"Microsoft.MicrosoftSolitaireCollection",
|
||||||
"Microsoft.NetworkSpeedTest",
|
"Microsoft.NetworkSpeedTest",
|
||||||
"Microsoft.News",
|
"Microsoft.News",
|
||||||
@@ -2336,7 +2311,7 @@
|
|||||||
"Microsoft.Wallet",
|
"Microsoft.Wallet",
|
||||||
"Microsoft.Whiteboard",
|
"Microsoft.Whiteboard",
|
||||||
"Microsoft.WindowsAlarms",
|
"Microsoft.WindowsAlarms",
|
||||||
"microsoft.windowscommunicationsapps",
|
"Microsoft.WindowsCommunicationsApps",
|
||||||
"Microsoft.WindowsFeedbackHub",
|
"Microsoft.WindowsFeedbackHub",
|
||||||
"Microsoft.WindowsMaps",
|
"Microsoft.WindowsMaps",
|
||||||
"Microsoft.WindowsSoundRecorder",
|
"Microsoft.WindowsSoundRecorder",
|
||||||
@@ -2345,8 +2320,8 @@
|
|||||||
"Microsoft.MixedReality.Portal",
|
"Microsoft.MixedReality.Portal",
|
||||||
"Microsoft.ZuneMusic",
|
"Microsoft.ZuneMusic",
|
||||||
"Microsoft.ZuneVideo",
|
"Microsoft.ZuneVideo",
|
||||||
"Microsoft.Getstarted",
|
|
||||||
"Microsoft.MicrosoftOfficeHub",
|
"Microsoft.MicrosoftOfficeHub",
|
||||||
|
"MsTeams",
|
||||||
"*EclipseManager*",
|
"*EclipseManager*",
|
||||||
"*ActiproSoftwareLLC*",
|
"*ActiproSoftwareLLC*",
|
||||||
"*AdobeSystemsIncorporated.AdobePhotoshopExpress*",
|
"*AdobeSystemsIncorporated.AdobePhotoshopExpress*",
|
||||||
@@ -2366,7 +2341,7 @@
|
|||||||
"*ACGMediaPlayer*",
|
"*ACGMediaPlayer*",
|
||||||
"*Netflix*",
|
"*Netflix*",
|
||||||
"*OneCalendar*",
|
"*OneCalendar*",
|
||||||
"*LinkedInforWindows*",
|
"*LinkedInForWindows*",
|
||||||
"*HiddenCityMysteryofShadows*",
|
"*HiddenCityMysteryofShadows*",
|
||||||
"*Hulu*",
|
"*Hulu*",
|
||||||
"*HiddenCity*",
|
"*HiddenCity*",
|
||||||
@@ -2376,38 +2351,15 @@
|
|||||||
],
|
],
|
||||||
"InvokeScript": [
|
"InvokeScript": [
|
||||||
"
|
"
|
||||||
$TeamsPath = [System.IO.Path]::Combine($env:LOCALAPPDATA, 'Microsoft', 'Teams')
|
$TeamsPath = \"$Env:LocalAppData\\Microsoft\\Teams\\Update.exe\"
|
||||||
$TeamsUpdateExePath = [System.IO.Path]::Combine($TeamsPath, 'Update.exe')
|
|
||||||
|
|
||||||
Write-Host \"Stopping Teams process...\"
|
if (Test-Path $TeamsPath) {
|
||||||
Stop-Process -Name \"*teams*\" -Force -ErrorAction SilentlyContinue
|
Write-Host \"Uninstalling Teams\"
|
||||||
|
Start-Process $TeamsPath -ArgumentList -uninstall -wait
|
||||||
Write-Host \"Uninstalling Teams from AppData\\Microsoft\\Teams\"
|
|
||||||
if ([System.IO.File]::Exists($TeamsUpdateExePath)) {
|
|
||||||
# Uninstall app
|
|
||||||
$proc = Start-Process $TeamsUpdateExePath \"-uninstall -s\" -PassThru
|
|
||||||
$proc.WaitForExit()
|
|
||||||
}
|
|
||||||
|
|
||||||
Write-Host \"Removing Teams AppxPackage...\"
|
|
||||||
Get-AppxPackage \"*Teams*\" | Remove-AppxPackage -ErrorAction SilentlyContinue
|
|
||||||
Get-AppxPackage \"*Teams*\" -AllUsers | Remove-AppxPackage -AllUsers -ErrorAction SilentlyContinue
|
|
||||||
|
|
||||||
Write-Host \"Deleting Teams directory\"
|
Write-Host \"Deleting Teams directory\"
|
||||||
if ([System.IO.Directory]::Exists($TeamsPath)) {
|
Remove-Item $TeamsPath -Recurse -Force
|
||||||
Remove-Item $TeamsPath -Force -Recurse -ErrorAction SilentlyContinue
|
}
|
||||||
}
|
|
||||||
|
|
||||||
Write-Host \"Deleting Teams uninstall registry key\"
|
|
||||||
# Uninstall from Uninstall registry key UninstallString
|
|
||||||
$us = (Get-ChildItem -Path HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall, HKLM:\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall | Get-ItemProperty | Where-Object { $_.DisplayName -like '*Teams*'}).UninstallString
|
|
||||||
if ($us.Length -gt 0) {
|
|
||||||
$us = ($us.Replace('/I', '/uninstall ') + ' /quiet').Replace(' ', ' ')
|
|
||||||
$FilePath = ($us.Substring(0, $us.IndexOf('.exe') + 4).Trim())
|
|
||||||
$ProcessArgs = ($us.Substring($us.IndexOf('.exe') + 5).Trim().replace(' ', ' '))
|
|
||||||
$proc = Start-Process -FilePath $FilePath -Args $ProcessArgs -PassThru
|
|
||||||
$proc.WaitForExit()
|
|
||||||
}
|
|
||||||
"
|
"
|
||||||
],
|
],
|
||||||
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/debloat"
|
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/debloat"
|
||||||
@@ -2469,40 +2421,23 @@
|
|||||||
"category": "Essential Tweaks",
|
"category": "Essential Tweaks",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a006_",
|
"Order": "a006_",
|
||||||
"InvokeScript": [
|
"registry": [
|
||||||
"$path = \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\\TaskbarDeveloperSettings\"
|
{
|
||||||
$name = \"TaskbarEndTask\"
|
"Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\\TaskbarDeveloperSettings",
|
||||||
$value = 1
|
"Name": "TaskbarEndTask",
|
||||||
|
"Type": "DWord",
|
||||||
# Ensure the registry key exists
|
"Value": "1",
|
||||||
if (-not (Test-Path $path)) {
|
"OriginalValue": "<RemoveEntry>"
|
||||||
New-Item -Path $path -Force | Out-Null
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Set the property, creating it if it doesn't exist
|
|
||||||
New-ItemProperty -Path $path -Name $name -PropertyType DWord -Value $value -Force | Out-Null"
|
|
||||||
],
|
|
||||||
"UndoScript": [
|
|
||||||
"$path = \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\\TaskbarDeveloperSettings\"
|
|
||||||
$name = \"TaskbarEndTask\"
|
|
||||||
$value = 0
|
|
||||||
|
|
||||||
# Ensure the registry key exists
|
|
||||||
if (-not (Test-Path $path)) {
|
|
||||||
New-Item -Path $path -Force | Out-Null
|
|
||||||
}
|
|
||||||
|
|
||||||
# Set the property, creating it if it doesn't exist
|
|
||||||
New-ItemProperty -Path $path -Name $name -PropertyType DWord -Value $value -Force | Out-Null"
|
|
||||||
],
|
],
|
||||||
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/endtaskontaskbar"
|
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/endtaskontaskbar"
|
||||||
},
|
},
|
||||||
"WPFTweaksPowershell7": {
|
"WPFTweaksPowershell7": {
|
||||||
"Content": "Change Windows Terminal default: PowerShell 5 -> PowerShell 7",
|
"Content": "Change Windows Terminal default: PowerShell 5 -> PowerShell 7",
|
||||||
"Description": "This will edit the config file of the Windows Terminal replacing PowerShell 5 with PowerShell 7 and installing PS7 if necessary",
|
"Description": "This will edit the config file of the Windows Terminal replacing PowerShell 5 with PowerShell 7 and installing PS7 if necessary",
|
||||||
"category": "Essential Tweaks",
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a009_",
|
"Order": "a022_",
|
||||||
"InvokeScript": [
|
"InvokeScript": [
|
||||||
"Invoke-WPFTweakPS7 -action \"PS7\""
|
"Invoke-WPFTweakPS7 -action \"PS7\""
|
||||||
],
|
],
|
||||||
@@ -2531,11 +2466,14 @@
|
|||||||
"category": "Essential Tweaks",
|
"category": "Essential Tweaks",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a005_",
|
"Order": "a005_",
|
||||||
"InvokeScript": [
|
"registry": [
|
||||||
"Set-ItemProperty -Path \"HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\StorageSense\\Parameters\\StoragePolicy\" -Name \"01\" -Value 0 -Type Dword -Force"
|
{
|
||||||
],
|
"Path": "HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\StorageSense\\Parameters\\StoragePolicy",
|
||||||
"UndoScript": [
|
"Name": "01",
|
||||||
"Set-ItemProperty -Path \"HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\StorageSense\\Parameters\\StoragePolicy\" -Name \"01\" -Value 1 -Type Dword -Force"
|
"Type": "DWord",
|
||||||
|
"Value": "0",
|
||||||
|
"OriginalValue": "1"
|
||||||
|
}
|
||||||
],
|
],
|
||||||
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/storage"
|
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/storage"
|
||||||
},
|
},
|
||||||
@@ -2623,9 +2561,9 @@
|
|||||||
"WPFTweaksRecallOff": {
|
"WPFTweaksRecallOff": {
|
||||||
"Content": "Disable Recall",
|
"Content": "Disable Recall",
|
||||||
"Description": "Turn Recall off",
|
"Description": "Turn Recall off",
|
||||||
"category": "Essential Tweaks",
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a011_",
|
"Order": "a025_",
|
||||||
"registry": [
|
"registry": [
|
||||||
{
|
{
|
||||||
"Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsAI",
|
"Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsAI",
|
||||||
@@ -2747,95 +2685,12 @@
|
|||||||
"Order": "a031_",
|
"Order": "a031_",
|
||||||
"InvokeScript": [
|
"InvokeScript": [
|
||||||
"
|
"
|
||||||
$OneDrivePath = $($env:OneDrive)
|
Write-Host \"Uninstalling OneDrive\"
|
||||||
Write-Host \"Removing OneDrive\"
|
Start-Process \"$env:SystemRoot\\System32\\OneDriveSetup.exe\" -ArgumentList /uninstall -NoNewWindow -Wait
|
||||||
|
|
||||||
# Check both traditional and Microsoft Store installations
|
Write-Host \"Removing OneDrive leftovers\"
|
||||||
$regPath = \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OneDriveSetup.exe\"
|
Remove-Item \"$env:LocalAppData\\Microsoft\\OneDrive\" -Recurse -Force
|
||||||
$msStorePath = \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Appx\\AppxAllUserStore\\Applications\\*OneDrive*\"
|
Remove-Item \"$env:ProgramData\\Microsoft OneDrive\" -Recurse -Force
|
||||||
|
|
||||||
if (Test-Path $regPath) {
|
|
||||||
$OneDriveUninstallString = Get-ItemPropertyValue \"$regPath\" -Name \"UninstallString\"
|
|
||||||
$OneDriveExe, $OneDriveArgs = $OneDriveUninstallString.Split(\" \")
|
|
||||||
Start-Process -FilePath $OneDriveExe -ArgumentList \"$OneDriveArgs /silent\" -NoNewWindow -Wait
|
|
||||||
} elseif (Test-Path $msStorePath) {
|
|
||||||
Write-Host \"OneDrive appears to be installed via Microsoft Store\" -ForegroundColor Yellow
|
|
||||||
# Attempt to uninstall via winget
|
|
||||||
Start-Process -FilePath winget -ArgumentList \"uninstall -e --purge --accept-source-agreements Microsoft.OneDrive\" -NoNewWindow -Wait
|
|
||||||
} else {
|
|
||||||
Write-Host \"OneDrive doesn't seem to be installed\" -ForegroundColor Red
|
|
||||||
Write-Host \"Running cleanup if OneDrive path exists\" -ForegroundColor Red
|
|
||||||
}
|
|
||||||
|
|
||||||
# Check if OneDrive got Uninstalled (both paths)
|
|
||||||
if (Test-Path $OneDrivePath) {
|
|
||||||
Write-Host \"Copy downloaded Files from the OneDrive Folder to Root UserProfile\"
|
|
||||||
Start-Process -FilePath powershell -ArgumentList \"robocopy '$($OneDrivePath)' '$($env:USERPROFILE.TrimEnd())\\' /mov /e /xj\" -NoNewWindow -Wait
|
|
||||||
|
|
||||||
Write-Host \"Removing OneDrive leftovers\"
|
|
||||||
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$env:localappdata\\Microsoft\\OneDrive\"
|
|
||||||
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$env:localappdata\\OneDrive\"
|
|
||||||
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$env:programdata\\Microsoft OneDrive\"
|
|
||||||
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$env:systemdrive\\OneDriveTemp\"
|
|
||||||
reg delete \"HKEY_CURRENT_USER\\Software\\Microsoft\\OneDrive\" -f
|
|
||||||
# check if directory is empty before removing:
|
|
||||||
If ((Get-ChildItem \"$OneDrivePath\" -Recurse | Measure-Object).Count -eq 0) {
|
|
||||||
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$OneDrivePath\"
|
|
||||||
}
|
|
||||||
|
|
||||||
Write-Host \"Remove Onedrive from Explorer sidebar\"
|
|
||||||
Set-ItemProperty -Path \"HKCR:\\CLSID\\{018D5C66-4533-4307-9B53-224DE2ED1FE6}\" -Name \"System.IsPinnedToNameSpaceTree\" -Value 0
|
|
||||||
Set-ItemProperty -Path \"HKCR:\\Wow6432Node\\CLSID\\{018D5C66-4533-4307-9B53-224DE2ED1FE6}\" -Name \"System.IsPinnedToNameSpaceTree\" -Value 0
|
|
||||||
|
|
||||||
Write-Host \"Removing run hook for new users\"
|
|
||||||
reg load \"hku\\Default\" \"C:\\Users\\Default\\NTUSER.DAT\"
|
|
||||||
reg delete \"HKEY_USERS\\Default\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\" /v \"OneDriveSetup\" /f
|
|
||||||
reg unload \"hku\\Default\"
|
|
||||||
|
|
||||||
Write-Host \"Removing autostart key\"
|
|
||||||
reg delete \"HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\" /v \"OneDrive\" /f
|
|
||||||
|
|
||||||
Write-Host \"Removing startmenu entry\"
|
|
||||||
Remove-Item -Force -ErrorAction SilentlyContinue \"$env:userprofile\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\OneDrive.lnk\"
|
|
||||||
|
|
||||||
Write-Host \"Removing scheduled task\"
|
|
||||||
Get-ScheduledTask -TaskPath '\\' -TaskName 'OneDrive*' -ea SilentlyContinue | Unregister-ScheduledTask -Confirm:$false
|
|
||||||
|
|
||||||
# Add Shell folders restoring default locations
|
|
||||||
Write-Host \"Shell Fixing\"
|
|
||||||
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"AppData\" -Value \"$env:userprofile\\AppData\\Roaming\" -Type ExpandString
|
|
||||||
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Cache\" -Value \"$env:userprofile\\AppData\\Local\\Microsoft\\Windows\\INetCache\" -Type ExpandString
|
|
||||||
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Cookies\" -Value \"$env:userprofile\\AppData\\Local\\Microsoft\\Windows\\INetCookies\" -Type ExpandString
|
|
||||||
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Favorites\" -Value \"$env:userprofile\\Favorites\" -Type ExpandString
|
|
||||||
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"History\" -Value \"$env:userprofile\\AppData\\Local\\Microsoft\\Windows\\History\" -Type ExpandString
|
|
||||||
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Local AppData\" -Value \"$env:userprofile\\AppData\\Local\" -Type ExpandString
|
|
||||||
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"My Music\" -Value \"$env:userprofile\\Music\" -Type ExpandString
|
|
||||||
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"My Video\" -Value \"$env:userprofile\\Videos\" -Type ExpandString
|
|
||||||
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"NetHood\" -Value \"$env:userprofile\\AppData\\Roaming\\Microsoft\\Windows\\Network Shortcuts\" -Type ExpandString
|
|
||||||
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"PrintHood\" -Value \"$env:userprofile\\AppData\\Roaming\\Microsoft\\Windows\\Printer Shortcuts\" -Type ExpandString
|
|
||||||
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Programs\" -Value \"$env:userprofile\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\" -Type ExpandString
|
|
||||||
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Recent\" -Value \"$env:userprofile\\AppData\\Roaming\\Microsoft\\Windows\\Recent\" -Type ExpandString
|
|
||||||
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"SendTo\" -Value \"$env:userprofile\\AppData\\Roaming\\Microsoft\\Windows\\SendTo\" -Type ExpandString
|
|
||||||
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Start Menu\" -Value \"$env:userprofile\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\" -Type ExpandString
|
|
||||||
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Startup\" -Value \"$env:userprofile\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\" -Type ExpandString
|
|
||||||
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Templates\" -Value \"$env:userprofile\\AppData\\Roaming\\Microsoft\\Windows\\Templates\" -Type ExpandString
|
|
||||||
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"{374DE290-123F-4565-9164-39C4925E467B}\" -Value \"$env:userprofile\\Downloads\" -Type ExpandString
|
|
||||||
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Desktop\" -Value \"$env:userprofile\\Desktop\" -Type ExpandString
|
|
||||||
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"My Pictures\" -Value \"$env:userprofile\\Pictures\" -Type ExpandString
|
|
||||||
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"Personal\" -Value \"$env:userprofile\\Documents\" -Type ExpandString
|
|
||||||
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"{F42EE2D3-909F-4907-8871-4C22FC0BF756}\" -Value \"$env:userprofile\\Documents\" -Type ExpandString
|
|
||||||
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"{0DDD015D-B06C-45D5-8C4C-F59713854639}\" -Value \"$env:userprofile\\Pictures\" -Type ExpandString
|
|
||||||
Write-Host \"Restarting explorer\"
|
|
||||||
taskkill.exe /F /IM \"explorer.exe\"
|
|
||||||
Start-Process \"explorer.exe\"
|
|
||||||
|
|
||||||
Write-Host \"Waiting for Explorer to complete loading\"
|
|
||||||
Write-Host \"Please Note - The OneDrive folder at $OneDrivePath may still have items in it. You must manually delete it, but all the files should already be copied to the base user folder.\"
|
|
||||||
Write-Host \"If there are Files missing afterwards, please Login to Onedrive.com and Download them manually\" -ForegroundColor Yellow
|
|
||||||
Start-Sleep 5
|
|
||||||
} else {
|
|
||||||
Write-Host \"Nothing to Cleanup with OneDrive\" -ForegroundColor Red
|
|
||||||
}
|
|
||||||
"
|
"
|
||||||
],
|
],
|
||||||
"UndoScript": [
|
"UndoScript": [
|
||||||
@@ -2851,7 +2706,7 @@
|
|||||||
"Description": "Blocks ALL Razer Software installations. The hardware works fine without any software. WARNING: this will also block all Windows third-party driver installations.",
|
"Description": "Blocks ALL Razer Software installations. The hardware works fine without any software. WARNING: this will also block all Windows third-party driver installations.",
|
||||||
"category": "z__Advanced Tweaks - CAUTION",
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a032_",
|
"Order": "a021_",
|
||||||
"registry": [
|
"registry": [
|
||||||
{
|
{
|
||||||
"Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\DriverSearching",
|
"Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\DriverSearching",
|
||||||
@@ -3069,102 +2924,26 @@
|
|||||||
"Order": "a021_",
|
"Order": "a021_",
|
||||||
"InvokeScript": [
|
"InvokeScript": [
|
||||||
"
|
"
|
||||||
# Define the URL of the remote HOSTS file and the local paths
|
$hostsUrl = \"https://github.com/Ruddernation-Designs/Adobe-URL-Block-List/raw/refs/heads/master/hosts\"
|
||||||
$remoteHostsUrl = \"https://raw.githubusercontent.com/Ruddernation-Designs/Adobe-URL-Block-List/master/hosts\"
|
$hosts = \"$env:SystemRoot\\System32\\drivers\\etc\\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
|
Copy-Item $hosts \"$hosts.bak\"
|
||||||
try {
|
Invoke-WebRequest $hostsUrl -OutFile $hosts
|
||||||
Invoke-WebRequest -Uri $remoteHostsUrl -OutFile $tempHostsPath
|
ipconfig flushdns
|
||||||
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
|
Write-Host \"Added Adobe url block list from host file\"
|
||||||
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": [
|
"UndoScript": [
|
||||||
"
|
"
|
||||||
# Define the local path of the HOSTS file
|
$hosts = \"$env:SystemRoot\\System32\\drivers\\etc\\hosts\"
|
||||||
$localHostsPath = \"C:\\Windows\\System32\\drivers\\etc\\hosts\"
|
$backup = \"$hosts.bak\"
|
||||||
|
|
||||||
# Load the content of the HOSTS file
|
Copy-Item $backup $hosts
|
||||||
try {
|
Remove-Item $backup
|
||||||
$hostsContent = Get-Content $localHostsPath -ErrorAction Stop
|
ipconfig flushdns
|
||||||
} catch {
|
|
||||||
Write-Error \"Failed to load the HOSTS file. Error: $_\"
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
# Initialize flags and buffer for new content
|
Write-Host \"Removed Adobe url block list from host file\"
|
||||||
$recording = $true
|
|
||||||
$newContent = @()
|
|
||||||
|
|
||||||
# Iterate over each line of the HOSTS file
|
|
||||||
foreach ($line in $hostsContent) {
|
|
||||||
if ($line -match \"#AdobeNetBlock-start\") {
|
|
||||||
$recording = $false
|
|
||||||
}
|
|
||||||
if ($recording) {
|
|
||||||
$newContent += $line
|
|
||||||
}
|
|
||||||
if ($line -match \"#AdobeNetBlock-end\") {
|
|
||||||
$recording = $true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Write the filtered content back to the HOSTS file
|
|
||||||
try {
|
|
||||||
$newContent | Set-Content $localHostsPath -Encoding ASCII
|
|
||||||
Write-Output \"Successfully removed the AdobeNetBlock section from the HOSTS file.\"
|
|
||||||
} catch {
|
|
||||||
Write-Error \"Failed to write back to the HOSTS file. Error: $_\"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Flush the DNS resolver cache
|
|
||||||
try {
|
|
||||||
Invoke-Expression \"ipconfig /flushdns\"
|
|
||||||
Write-Output \"DNS cache flushed successfully.\"
|
|
||||||
} catch {
|
|
||||||
Write-Error \"Failed to flush DNS cache. Error: $_\"
|
|
||||||
}
|
|
||||||
"
|
"
|
||||||
],
|
],
|
||||||
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/blockadobenet"
|
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/blockadobenet"
|
||||||
@@ -3213,8 +2992,10 @@
|
|||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a002_",
|
"Order": "a002_",
|
||||||
"InvokeScript": [
|
"InvokeScript": [
|
||||||
"Get-ChildItem -Path \"C:\\Windows\\Temp\" *.* -Recurse | Remove-Item -Force -Recurse
|
"
|
||||||
Get-ChildItem -Path $env:TEMP *.* -Recurse | Remove-Item -Force -Recurse"
|
Remove-Item -Path \"$Env:Temp\\*\" -Recurse -Force
|
||||||
|
Remove-Item -Path \"$Env:SystemRoot\\Temp\\*\" -Recurse -Force
|
||||||
|
"
|
||||||
],
|
],
|
||||||
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/deletetempfiles"
|
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/deletetempfiles"
|
||||||
},
|
},
|
||||||
@@ -3268,7 +3049,7 @@
|
|||||||
"Description": "To set the IPv4 preference can have latency and security benefits on private networks where IPv6 is not configured.",
|
"Description": "To set the IPv4 preference can have latency and security benefits on private networks where IPv6 is not configured.",
|
||||||
"category": "z__Advanced Tweaks - CAUTION",
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a023_",
|
"Order": "a024_",
|
||||||
"registry": [
|
"registry": [
|
||||||
{
|
{
|
||||||
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters",
|
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters",
|
||||||
@@ -3285,7 +3066,7 @@
|
|||||||
"Description": "Teredo network tunneling is a ipv6 feature that can cause additional latency, but may cause problems with some games",
|
"Description": "Teredo network tunneling is a ipv6 feature that can cause additional latency, but may cause problems with some games",
|
||||||
"category": "z__Advanced Tweaks - CAUTION",
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a023_",
|
"Order": "a024_",
|
||||||
"registry": [
|
"registry": [
|
||||||
{
|
{
|
||||||
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters",
|
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters",
|
||||||
@@ -3308,7 +3089,7 @@
|
|||||||
"Description": "Disables IPv6.",
|
"Description": "Disables IPv6.",
|
||||||
"category": "z__Advanced Tweaks - CAUTION",
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a023_",
|
"Order": "a024_",
|
||||||
"registry": [
|
"registry": [
|
||||||
{
|
{
|
||||||
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters",
|
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters",
|
||||||
@@ -3542,7 +3323,7 @@
|
|||||||
},
|
},
|
||||||
"WPFToggleSnapFlyout": {
|
"WPFToggleSnapFlyout": {
|
||||||
"Content": "Snap Assist Flyout",
|
"Content": "Snap Assist Flyout",
|
||||||
"Description": "If enabled then Snap preview is disabled when maximize button is hovered.",
|
"Description": "If disabled then Snap preview is disabled when maximize button is hovered.",
|
||||||
"category": "Customize Preferences",
|
"category": "Customize Preferences",
|
||||||
"panel": "2",
|
"panel": "2",
|
||||||
"Order": "a107_",
|
"Order": "a107_",
|
||||||
@@ -3697,7 +3478,7 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
"WPFToggleMultiplaneOverlay": {
|
"WPFToggleMultiplaneOverlay": {
|
||||||
"Content": "Multiplane Overlay",
|
"Content": "Disable Multiplane Overlay",
|
||||||
"Description": "Disable the Multiplane Overlay which can sometimes cause issues with Graphics Cards.",
|
"Description": "Disable the Multiplane Overlay which can sometimes cause issues with Graphics Cards.",
|
||||||
"category": "Customize Preferences",
|
"category": "Customize Preferences",
|
||||||
"panel": "2",
|
"panel": "2",
|
||||||
@@ -3709,7 +3490,7 @@
|
|||||||
"Name": "OverlayTestMode",
|
"Name": "OverlayTestMode",
|
||||||
"Value": "5",
|
"Value": "5",
|
||||||
"OriginalValue": "<RemoveEntry>",
|
"OriginalValue": "<RemoveEntry>",
|
||||||
"DefaultState": "true",
|
"DefaultState": "false",
|
||||||
"Type": "DWord"
|
"Type": "DWord"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -3908,7 +3689,7 @@
|
|||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a040_",
|
"Order": "a040_",
|
||||||
"Type": "Combobox",
|
"Type": "Combobox",
|
||||||
"ComboItems": "Default DHCP Google Cloudflare Cloudflare_Malware Cloudflare_Malware_Adult Open_DNS Quad9 AdGuard_Ads_Trackers AdGuard_Ads_Trackers_Malware_Adult dns0.eu_Open dns0.eu_ZERO dns0.eu_KIDS",
|
"ComboItems": "Default DHCP Google Cloudflare Cloudflare_Malware Cloudflare_Malware_Adult Open_DNS Quad9 AdGuard_Ads_Trackers AdGuard_Ads_Trackers_Malware_Adult",
|
||||||
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/changedns"
|
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/changedns"
|
||||||
},
|
},
|
||||||
"WPFAddUltPerf": {
|
"WPFAddUltPerf": {
|
||||||
@@ -3984,7 +3765,7 @@
|
|||||||
"
|
"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"WPFTweaksDisableCrossDeviceResume": {
|
"WPFToggleDisableCrossDeviceResume": {
|
||||||
"Content": "Cross-Device Resume",
|
"Content": "Cross-Device Resume",
|
||||||
"Description": "This tweak controls the Resume function in Windows 11 24H2 and later, which allows you to resume an activity from a mobile device and vice-versa.",
|
"Description": "This tweak controls the Resume function in Windows 11 24H2 and later, which allows you to resume an activity from a mobile device and vice-versa.",
|
||||||
"category": "Customize Preferences",
|
"category": "Customize Preferences",
|
||||||
|
|||||||
@@ -58,6 +58,10 @@ public class PowerManagement {
|
|||||||
$injectDrivers = $sync.MicrowinInjectDrivers.IsChecked
|
$injectDrivers = $sync.MicrowinInjectDrivers.IsChecked
|
||||||
$importDrivers = $sync.MicrowinImportDrivers.IsChecked
|
$importDrivers = $sync.MicrowinImportDrivers.IsChecked
|
||||||
|
|
||||||
|
$WPBT = $sync.MicroWinWPBT.IsChecked
|
||||||
|
$unsupported = $sync.MicroWinUnsupported.IsChecked
|
||||||
|
$skipFla = $sync.MicroWinNoFLA.IsChecked
|
||||||
|
|
||||||
$importVirtIO = $sync.MicrowinCopyVirtIO.IsChecked
|
$importVirtIO = $sync.MicrowinCopyVirtIO.IsChecked
|
||||||
|
|
||||||
$mountDir = $sync.MicrowinMountDir.Text
|
$mountDir = $sync.MicrowinMountDir.Text
|
||||||
@@ -66,7 +70,12 @@ public class PowerManagement {
|
|||||||
# 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"
|
try {
|
||||||
|
Export-WindowsImage -SourceImagePath "$mountDir\sources\install.esd" -SourceIndex $index -DestinationImagePath "$mountDir\sources\install.wim" -CompressionType "Max"
|
||||||
|
} catch {
|
||||||
|
# Usually the case if it can't find unattend.dll on the host system. Guys, fix your corrupt messes that are your installations!
|
||||||
|
dism /english /export-image /sourceimagefile="$mountDir\sources\install.esd" /sourceindex=$index /destinationimagefile="$mountDir\sources\install.wim" /compress: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
|
||||||
@@ -166,6 +175,34 @@ public class PowerManagement {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($WPBT) {
|
||||||
|
Write-Host "Disabling WPBT Execution"
|
||||||
|
reg load HKLM\zSYSTEM "$($scratchDir)\Windows\System32\config\SYSTEM"
|
||||||
|
reg add "HKLM\zSYSTEM\ControlSet001\Control\Session Manager" /v DisableWpbtExecution /t REG_DWORD /d 1 /f
|
||||||
|
reg unload HKLM\zSYSTEM
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($skipFla) {
|
||||||
|
Write-Host "Skipping first logon animation..."
|
||||||
|
reg load HKLM\zSOFTWARE "$($scratchDir)\Windows\System32\config\SOFTWARE"
|
||||||
|
reg add "HKLM\zSOFTWARE\Microsoft\Active Setup\Installed Components\CMP_NoFla" /f
|
||||||
|
reg add "HKLM\zSOFTWARE\Microsoft\Active Setup\Installed Components\CMP_NoFla" /ve /t REG_SZ /d "Stop First Logon Animation Process" /f
|
||||||
|
reg add "HKLM\zSOFTWARE\Microsoft\Active Setup\Installed Components\CMP_NoFla" /v StubPath /t REG_EXPAND_SZ /d '""%WINDIR%\System32\cmd.exe"" /C ""taskkill /f /im firstlogonanim.exe""' /f
|
||||||
|
reg unload HKLM\zSOFTWARE
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($unsupported) {
|
||||||
|
Write-Host "Bypassing system requirements (locally)"
|
||||||
|
reg add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f
|
||||||
|
reg add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f
|
||||||
|
reg add "HKLM\SYSTEM\Setup\LabConfig" /v "BypassCPUCheck" /t REG_DWORD /d 1 /f
|
||||||
|
reg add "HKLM\SYSTEM\Setup\LabConfig" /v "BypassRAMCheck" /t REG_DWORD /d 1 /f
|
||||||
|
reg add "HKLM\SYSTEM\Setup\LabConfig" /v "BypassSecureBootCheck" /t REG_DWORD /d 1 /f
|
||||||
|
reg add "HKLM\SYSTEM\Setup\LabConfig" /v "BypassStorageCheck" /t REG_DWORD /d 1 /f
|
||||||
|
reg add "HKLM\SYSTEM\Setup\LabConfig" /v "BypassTPMCheck" /t REG_DWORD /d 1 /f
|
||||||
|
reg add "HKLM\SYSTEM\Setup\MoSetup" /v "AllowUpgradesWithUnsupportedTPMOrCPU" /t REG_DWORD /d 1 /f
|
||||||
|
}
|
||||||
|
|
||||||
if ($importVirtIO) {
|
if ($importVirtIO) {
|
||||||
Write-Host "Copying VirtIO drivers..."
|
Write-Host "Copying VirtIO drivers..."
|
||||||
Microwin-CopyVirtIO
|
Microwin-CopyVirtIO
|
||||||
@@ -221,6 +258,20 @@ public class PowerManagement {
|
|||||||
|
|
||||||
Write-Host "Create unattend.xml"
|
Write-Host "Create unattend.xml"
|
||||||
|
|
||||||
|
if (($sync.MicrowinAutoConfigBox.Text -ne "") -and (Test-Path "$($sync.MicrowinAutoConfigBox.Text)"))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Write-Host "A configuration file has been specified. Copying to WIM file..."
|
||||||
|
Copy-Item "$($sync.MicrowinAutoConfigBox.Text)" "$($scratchDir)\winutil-config.json"
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
Write-Host "The config file could not be copied. Continuing without it..."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Create unattended answer file with user information - Check condition to learn more about this functionality
|
||||||
if ($sync.MicrowinUserName.Text -eq "")
|
if ($sync.MicrowinUserName.Text -eq "")
|
||||||
{
|
{
|
||||||
Microwin-NewUnattend -userName "User"
|
Microwin-NewUnattend -userName "User"
|
||||||
@@ -242,7 +293,6 @@ public class PowerManagement {
|
|||||||
Copy-Item "$env:temp\unattend.xml" "$($scratchDir)\Windows\Panther\unattend.xml" -force
|
Copy-Item "$env:temp\unattend.xml" "$($scratchDir)\Windows\Panther\unattend.xml" -force
|
||||||
New-Item -ItemType Directory -Force -Path "$($scratchDir)\Windows\System32\Sysprep"
|
New-Item -ItemType Directory -Force -Path "$($scratchDir)\Windows\System32\Sysprep"
|
||||||
Copy-Item "$env:temp\unattend.xml" "$($scratchDir)\Windows\System32\Sysprep\unattend.xml" -force
|
Copy-Item "$env:temp\unattend.xml" "$($scratchDir)\Windows\System32\Sysprep\unattend.xml" -force
|
||||||
Copy-Item "$env:temp\unattend.xml" "$($scratchDir)\unattend.xml" -force
|
|
||||||
Write-Host "Done Copy unattend.xml"
|
Write-Host "Done Copy unattend.xml"
|
||||||
|
|
||||||
Write-Host "Create FirstRun"
|
Write-Host "Create FirstRun"
|
||||||
@@ -277,7 +327,6 @@ public class PowerManagement {
|
|||||||
reg add "HKLM\zSOFTWARE\Policies\Microsoft\Windows\Windows Chat" /v ChatIcon /t REG_DWORD /d 2 /f >$null 2>&1
|
reg add "HKLM\zSOFTWARE\Policies\Microsoft\Windows\Windows Chat" /v ChatIcon /t REG_DWORD /d 2 /f >$null 2>&1
|
||||||
reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f >$null 2>&1
|
reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f >$null 2>&1
|
||||||
reg query "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Communications" /v "ConfigureChatAutoInstall" >$null 2>&1
|
reg query "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Communications" /v "ConfigureChatAutoInstall" >$null 2>&1
|
||||||
# Write-Host Error code $LASTEXITCODE
|
|
||||||
Write-Host "Done disabling Teams"
|
Write-Host "Done disabling Teams"
|
||||||
|
|
||||||
Write-Host "Fix Windows Volume Mixer Issue"
|
Write-Host "Fix Windows Volume Mixer Issue"
|
||||||
@@ -304,11 +353,6 @@ public class PowerManagement {
|
|||||||
'CrossDeviceUpdate'
|
'CrossDeviceUpdate'
|
||||||
) | ForEach-Object {
|
) | ForEach-Object {
|
||||||
Write-Host "Removing Windows Expedited App: $_"
|
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 delete "HKLM\zSOFTWARE\Microsoft\WindowsUpdate\Orchestrator\UScheduler_Oobe\$_" /f | Out-Null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -316,7 +360,6 @@ public class PowerManagement {
|
|||||||
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
|
||||||
Write-Host "Setting all services to start manually"
|
Write-Host "Setting all services to start manually"
|
||||||
reg add "HKLM\zSOFTWARE\CurrentControlSet\Services" /v Start /t REG_DWORD /d 3 /f
|
reg add "HKLM\zSOFTWARE\CurrentControlSet\Services" /v Start /t REG_DWORD /d 3 /f
|
||||||
# Write-Host $LASTEXITCODE
|
|
||||||
|
|
||||||
Write-Host "Enabling Local Accounts on OOBE"
|
Write-Host "Enabling Local Accounts on OOBE"
|
||||||
reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v "BypassNRO" /t REG_DWORD /d "1" /f
|
reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v "BypassNRO" /t REG_DWORD /d "1" /f
|
||||||
@@ -371,7 +414,12 @@ public class PowerManagement {
|
|||||||
try {
|
try {
|
||||||
|
|
||||||
Write-Host "Exporting image into $mountDir\sources\install2.wim"
|
Write-Host "Exporting image into $mountDir\sources\install2.wim"
|
||||||
Export-WindowsImage -SourceImagePath "$mountDir\sources\install.wim" -SourceIndex $index -DestinationImagePath "$mountDir\sources\install2.wim" -CompressionType "Max"
|
try {
|
||||||
|
Export-WindowsImage -SourceImagePath "$mountDir\sources\install.wim" -SourceIndex $index -DestinationImagePath "$mountDir\sources\install2.wim" -CompressionType "Max"
|
||||||
|
} catch {
|
||||||
|
# Usually the case if it can't find unattend.dll on the host system. Guys, fix your corrupt messes that are your installations!
|
||||||
|
dism /english /export-image /sourceimagefile="$mountDir\sources\install.wim" /sourceindex=$index /destinationimagefile="$mountDir\sources\install2.wim" /compress:max
|
||||||
|
}
|
||||||
Write-Host "Remove old '$mountDir\sources\install.wim' and rename $mountDir\sources\install2.wim"
|
Write-Host "Remove old '$mountDir\sources\install.wim' and rename $mountDir\sources\install2.wim"
|
||||||
Remove-Item "$mountDir\sources\install.wim"
|
Remove-Item "$mountDir\sources\install.wim"
|
||||||
Rename-Item "$mountDir\sources\install2.wim" "$mountDir\sources\install.wim"
|
Rename-Item "$mountDir\sources\install2.wim" "$mountDir\sources\install.wim"
|
||||||
@@ -385,6 +433,20 @@ public class PowerManagement {
|
|||||||
}
|
}
|
||||||
Write-Host "Windows image completed. Continuing with boot.wim."
|
Write-Host "Windows image completed. Continuing with boot.wim."
|
||||||
|
|
||||||
|
$esd = $sync.MicroWinESD.IsChecked
|
||||||
|
if ($esd) {
|
||||||
|
Write-Host "Converting install image to ESD."
|
||||||
|
try {
|
||||||
|
Export-WindowsImage -SourceImagePath "$mountDir\sources\install.wim" -SourceIndex $index -DestinationImagePath "$mountDir\sources\install.esd" -CompressionType "Recovery"
|
||||||
|
Remove-Item "$mountDir\sources\install.wim"
|
||||||
|
Write-Host "Converted install image to ESD."
|
||||||
|
} catch {
|
||||||
|
Start-Process -FilePath "$env:SystemRoot\System32\dism.exe" -ArgumentList "/export-image /sourceimagefile:`"$mountDir\sources\install.wim`" /sourceindex:1 /destinationimagefile:`"$mountDir\sources\install.esd`" /compress:recovery" -Wait -NoNewWindow
|
||||||
|
Remove-Item "$mountDir\sources\install.wim"
|
||||||
|
Write-Host "Converted install image to ESD."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# Next step boot image
|
# Next step boot image
|
||||||
Write-Host "Mounting boot image $mountDir\sources\boot.wim into $scratchDir"
|
Write-Host "Mounting boot image $mountDir\sources\boot.wim into $scratchDir"
|
||||||
Mount-WindowsImage -ImagePath "$mountDir\sources\boot.wim" -Index 2 -Path "$scratchDir"
|
Mount-WindowsImage -ImagePath "$mountDir\sources\boot.wim" -Index 2 -Path "$scratchDir"
|
||||||
@@ -481,6 +543,7 @@ public class PowerManagement {
|
|||||||
Write-Host "Reason: $($exitCode.Message)"
|
Write-Host "Reason: $($exitCode.Message)"
|
||||||
Invoke-MicrowinBusyInfo -action "warning" -message $exitCode.Message
|
Invoke-MicrowinBusyInfo -action "warning" -message $exitCode.Message
|
||||||
Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning"
|
Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning"
|
||||||
|
[System.Windows.MessageBox]::Show("MicroWin failed to make the ISO.", "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error)
|
||||||
} catch {
|
} catch {
|
||||||
# Could not get error description from Windows APIs
|
# Could not get error description from Windows APIs
|
||||||
}
|
}
|
||||||
@@ -488,7 +551,6 @@ public class PowerManagement {
|
|||||||
|
|
||||||
Toggle-MicrowinPanel 1
|
Toggle-MicrowinPanel 1
|
||||||
|
|
||||||
#$sync.MicrowinFinalIsoLocation.Text = "$env:temp\microwin.iso"
|
|
||||||
$sync.MicrowinFinalIsoLocation.Text = "$($SaveDialog.FileName)"
|
$sync.MicrowinFinalIsoLocation.Text = "$($SaveDialog.FileName)"
|
||||||
# Allow the machine to sleep again (optional)
|
# Allow the machine to sleep again (optional)
|
||||||
[PowerManagement]::SetThreadExecutionState(0)
|
[PowerManagement]::SetThreadExecutionState(0)
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ function Invoke-MicrowinGetIso {
|
|||||||
Function to get the path to Iso file for MicroWin, unpack that isom=, read basic information and populate the UI Options
|
Function to get the path to Iso file for MicroWin, unpack that isom=, read basic information and populate the UI Options
|
||||||
#>
|
#>
|
||||||
|
|
||||||
Write-Host "Invoking WPFGetIso"
|
Write-Debug "Invoking WPFGetIso"
|
||||||
|
|
||||||
if($sync.ProcessRunning) {
|
if($sync.ProcessRunning) {
|
||||||
$msg = "GetIso process is currently running."
|
$msg = "GetIso process is currently running."
|
||||||
@@ -73,10 +73,11 @@ function Invoke-MicrowinGetIso {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Invoke-MicrowinBusyInfo -action "wip" -message "Downloading Windows ISO... (This may take a long time)" -interactive $false
|
Invoke-MicrowinBusyInfo -action "wip" -message "Downloading Windows ISO... (This may take a long time)" -interactive $false
|
||||||
& $fidopath -Win 'Windows 11' -Rel $sync["ISORelease"].SelectedItem -Arch "x64" -Lang $lang -Ed "Windows 11 Home/Pro/Edu"
|
& $fidopath -Win 'Windows 11' -Rel Latest -Arch "x64" -Lang $lang
|
||||||
if (-not $?)
|
if (-not $?)
|
||||||
{
|
{
|
||||||
Write-Host "Could not download the ISO file. Look at the output of the console for more information."
|
Write-Host "Could not download the ISO file. Look at the output of the console for more information."
|
||||||
|
Write-Host "If you get an error about scripts is disabled on this system please close WinUtil and run - 'Set-ExecutionPolicy -ExecutionPolicy Unrestricted' and select 'A' and retry using MicroWin again."
|
||||||
$msg = "The ISO file could not be downloaded"
|
$msg = "The ISO file could not be downloaded"
|
||||||
Invoke-MicrowinBusyInfo -action "warning" -message $msg
|
Invoke-MicrowinBusyInfo -action "warning" -message $msg
|
||||||
Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning"
|
Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning"
|
||||||
@@ -131,7 +132,7 @@ function Invoke-MicrowinGetIso {
|
|||||||
if (!$downloadFromGitHub) {
|
if (!$downloadFromGitHub) {
|
||||||
# only show the message to people who did check the box to download from github, if you check the box
|
# only show the message to people who did check the box to download from github, if you check the box
|
||||||
# you consent to downloading it, no need to show extra dialogs
|
# 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.")
|
[System.Windows.MessageBox]::Show("oscdimg.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
|
# the step below needs choco to download oscdimg
|
||||||
# Install Choco if not already present
|
# Install Choco if not already present
|
||||||
Install-WinUtilChoco
|
Install-WinUtilChoco
|
||||||
@@ -148,7 +149,7 @@ function Invoke-MicrowinGetIso {
|
|||||||
[System.Windows.MessageBox]::Show($msg)
|
[System.Windows.MessageBox]::Show($msg)
|
||||||
return
|
return
|
||||||
} else {
|
} else {
|
||||||
[System.Windows.MessageBox]::Show("oscdimge.exe is not found on the system, winutil will now attempt do download and install it from github. This might take a long time.")
|
[System.Windows.MessageBox]::Show("oscdimg.exe is not found on the system, winutil will now attempt do download and install it from github. This might take a long time.")
|
||||||
Invoke-MicrowinBusyInfo -action "wip" -message "Downloading oscdimg.exe..." -interactive $false
|
Invoke-MicrowinBusyInfo -action "wip" -message "Downloading oscdimg.exe..." -interactive $false
|
||||||
Microwin-GetOscdimg -oscdimgPath $oscdimgPath
|
Microwin-GetOscdimg -oscdimgPath $oscdimgPath
|
||||||
$oscdImgFound = Test-Path $oscdimgPath -PathType Leaf
|
$oscdImgFound = Test-Path $oscdimgPath -PathType Leaf
|
||||||
@@ -199,7 +200,7 @@ function Invoke-MicrowinGetIso {
|
|||||||
$msg = "Failed to mount the image. Error: $($_.Exception.Message)"
|
$msg = "Failed to mount the image. Error: $($_.Exception.Message)"
|
||||||
Write-Error $msg
|
Write-Error $msg
|
||||||
Write-Error "This is NOT winutil's problem, your ISO might be corrupt, or there is a problem on the system"
|
Write-Error "This is NOT winutil's problem, your ISO might be corrupt, or there is a problem on the system"
|
||||||
Write-Host "Please refer to this wiki for more details: https://christitustech.github.io/winutil/KnownIssues/#troubleshoot-errors-during-microwin-usage" -ForegroundColor Red
|
Write-Host "Please refer to this wiki for more details: https://winutil.christitus.com/knownissues/" -ForegroundColor Red
|
||||||
Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning"
|
Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning"
|
||||||
Invoke-MicrowinBusyInfo -action "warning" -message $msg
|
Invoke-MicrowinBusyInfo -action "warning" -message $msg
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
function Microwin-NewCheckInstall {
|
function Microwin-NewCheckInstall {
|
||||||
|
|
||||||
# using here string to embedd firstrun
|
# using here string to embed firstrun
|
||||||
$checkInstall = @'
|
$checkInstall = @'
|
||||||
@echo off
|
@echo off
|
||||||
if exist "%HOMEDRIVE%\windows\cpu.txt" (
|
if exist "%HOMEDRIVE%\windows\cpu.txt" (
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
function Microwin-NewFirstRun {
|
function Microwin-NewFirstRun {
|
||||||
|
|
||||||
# using here string to embedd firstrun
|
# using here string to embed firstrun
|
||||||
$firstRun = @'
|
$firstRun = @'
|
||||||
# Set the global error action preference to continue
|
# Set the global error action preference to continue
|
||||||
$ErrorActionPreference = "Continue"
|
$ErrorActionPreference = "Continue"
|
||||||
@@ -34,7 +34,9 @@ function Microwin-NewFirstRun {
|
|||||||
|
|
||||||
$taskbarPath = "$env:AppData\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar"
|
$taskbarPath = "$env:AppData\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar"
|
||||||
# Delete all files on the Taskbar
|
# Delete all files on the Taskbar
|
||||||
Get-ChildItem -Path $taskbarPath -File | Remove-Item -Force
|
if (Test-Path "$taskbarPath") {
|
||||||
|
Get-ChildItem -Path $taskbarPath -File | Remove-Item -Force
|
||||||
|
}
|
||||||
Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "FavoritesRemovedChanges"
|
Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "FavoritesRemovedChanges"
|
||||||
Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "FavoritesChanges"
|
Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "FavoritesChanges"
|
||||||
Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "Favorites"
|
Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "Favorites"
|
||||||
@@ -85,6 +87,31 @@ function Microwin-NewFirstRun {
|
|||||||
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings\Windows.SystemToast.StartupApp" /v Enabled /t REG_DWORD /d 0 /f
|
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings\Windows.SystemToast.StartupApp" /v Enabled /t REG_DWORD /d 0 /f
|
||||||
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings\Microsoft.SkyDrive.Desktop" /f
|
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings\Microsoft.SkyDrive.Desktop" /f
|
||||||
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings\Microsoft.SkyDrive.Desktop" /v Enabled /t REG_DWORD /d 0 /f
|
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings\Microsoft.SkyDrive.Desktop" /v Enabled /t REG_DWORD /d 0 /f
|
||||||
|
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings\Windows.SystemToast.AccountHealth" /f
|
||||||
|
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings\Windows.SystemToast.AccountHealth" /v Enabled /t REG_DWORD /d 0 /f
|
||||||
|
|
||||||
|
# This will set List view in Start menu on Win11 25H2. This will not do anything in 24H2 and older
|
||||||
|
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Start" /v AllAppsViewMode /t REG_DWORD /d 2 /f
|
||||||
|
|
||||||
|
# This will disable the Recommendations in 25H2. This is much simpler than the method used in 24H2 that requires the Education Environment policy
|
||||||
|
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v Start_IrisRecommendations /t REG_DWORD /d 0 /f
|
||||||
|
|
||||||
|
# Other Start Menu settings
|
||||||
|
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v Start_AccountNotifications /t REG_DWORD /d 0 /f
|
||||||
|
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Start" /v ShowAllPinsList /t REG_DWORD /d 0 /f
|
||||||
|
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Start" /v ShowFrequentList /t REG_DWORD /d 0 /f
|
||||||
|
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Start" /v ShowRecentList /t REG_DWORD /d 0 /f
|
||||||
|
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v Start_TrackDocs /t REG_DWORD /d 0 /f
|
||||||
|
|
||||||
|
Clear-Host
|
||||||
|
Write-Host "The taskbar will take around a minute to show up, but you can start using your computer now. Try pressing the Windows key to open the Start menu, or Windows + E to launch File Explorer."
|
||||||
|
Start-Sleep -Seconds 10
|
||||||
|
|
||||||
|
if (Test-Path -Path "$env:HOMEDRIVE\winutil-config.json")
|
||||||
|
{
|
||||||
|
Write-Host "Configuration file detected. Applying..."
|
||||||
|
iex "& { $(irm christitus.com/win) } -Config `"$env:HOMEDRIVE\winutil-config.json`" -Run"
|
||||||
|
}
|
||||||
|
|
||||||
'@
|
'@
|
||||||
$firstRun | Out-File -FilePath "$env:temp\FirstStartup.ps1" -Force
|
$firstRun | Out-File -FilePath "$env:temp\FirstStartup.ps1" -Force
|
||||||
|
|||||||
@@ -41,7 +41,7 @@
|
|||||||
$selectedAppRemoveButton.Add_MouseEnter({ $this.Foreground = "Red" })
|
$selectedAppRemoveButton.Add_MouseEnter({ $this.Foreground = "Red" })
|
||||||
$selectedAppRemoveButton.Add_MouseLeave({ $this.SetResourceReference([Windows.Controls.Control]::ForegroundProperty, "MainForegroundColor") })
|
$selectedAppRemoveButton.Add_MouseLeave({ $this.SetResourceReference([Windows.Controls.Control]::ForegroundProperty, "MainForegroundColor") })
|
||||||
$selectedAppRemoveButton.Add_Click({
|
$selectedAppRemoveButton.Add_Click({
|
||||||
$sync.($this.Tag).isChecked = $false # On click of the remove button, we only have to uncheck the corresponding checkbox. This will kick of all neccessary changes to update the UI
|
$sync.($this.Tag).isChecked = $false # On click of the remove button, we only have to uncheck the corresponding checkbox. This will kick of all necessary changes to update the UI
|
||||||
})
|
})
|
||||||
[System.Windows.Controls.Grid]::SetColumn($selectedAppRemoveButton, 1)
|
[System.Windows.Controls.Grid]::SetColumn($selectedAppRemoveButton, 1)
|
||||||
$selectedAppGrid.Children.Add($selectedAppRemoveButton)
|
$selectedAppGrid.Children.Add($selectedAppRemoveButton)
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ function Get-LocalizedYesNo {
|
|||||||
#>
|
#>
|
||||||
|
|
||||||
# Run choice and capture its options as output
|
# Run choice and capture its options as output
|
||||||
# The output shows the options for Yes and No as "[Y,N]?" in the (partitially) localized format.
|
# The output shows the options for Yes and No as "[Y,N]?" in the (partially) localized format.
|
||||||
# eg. English: [Y,N]?
|
# eg. English: [Y,N]?
|
||||||
# Dutch: [Y,N]?
|
# Dutch: [Y,N]?
|
||||||
# German: [J,N]?
|
# German: [J,N]?
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
Also creates an overlay with a progress bar and text to indicate that an install or uninstall is in progress
|
Also creates an overlay with a progress bar and text to indicate that an install or uninstall is in progress
|
||||||
|
|
||||||
.PARAMETER TargetElement
|
.PARAMETER TargetElement
|
||||||
The element to which the AppArea shoud be added
|
The element to which the AppArea should be added
|
||||||
|
|
||||||
#>
|
#>
|
||||||
param($TargetElement)
|
param($TargetElement)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
function Initialize-InstallAppEntry {
|
function Initialize-InstallAppEntry {
|
||||||
<#
|
<#
|
||||||
.SYNOPSIS
|
.SYNOPSIS
|
||||||
Creates the app entry to be placed on the isntall tab for a given app
|
Creates the app entry to be placed on the install tab for a given app
|
||||||
Used to as part of the Install Tab UI generation
|
Used to as part of the Install Tab UI generation
|
||||||
.PARAMETER TargetElement
|
.PARAMETER TargetElement
|
||||||
The Element into which the Apps should be placed
|
The Element into which the Apps should be placed
|
||||||
@@ -24,7 +24,9 @@ function Initialize-InstallCategoryAppList {
|
|||||||
$toggleButton = New-Object Windows.Controls.Label
|
$toggleButton = New-Object Windows.Controls.Label
|
||||||
$toggleButton.Content = "$Category"
|
$toggleButton.Content = "$Category"
|
||||||
$toggleButton.Tag = "CategoryToggleButton"
|
$toggleButton.Tag = "CategoryToggleButton"
|
||||||
$sync.$Category = $Category
|
$toggleButton.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "HeaderFontSize")
|
||||||
|
$toggleButton.SetResourceReference([Windows.Controls.Control]::FontFamilyProperty, "HeaderFontFamily")
|
||||||
|
$sync.$Category = $toggleButton
|
||||||
|
|
||||||
$null = $TargetElement.Items.Add($toggleButton)
|
$null = $TargetElement.Items.Add($toggleButton)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,24 +30,16 @@ Function Install-WinUtilProgramWinget {
|
|||||||
.PARAMETER wingetId
|
.PARAMETER wingetId
|
||||||
The Id of the Program that Winget should Install/Uninstall
|
The Id of the Program that Winget should Install/Uninstall
|
||||||
|
|
||||||
.PARAMETER scope
|
|
||||||
Determines the installation mode. Can be "user" or "machine" (For more info look at the winget documentation)
|
|
||||||
|
|
||||||
.PARAMETER credential
|
|
||||||
The PSCredential Object of the user that should be used to run winget
|
|
||||||
|
|
||||||
.NOTES
|
.NOTES
|
||||||
Invoke Winget uses the public variable $Action defined outside the function to determine if a Program should be installed or removed
|
Invoke Winget uses the public variable $Action defined outside the function to determine if a Program should be installed or removed
|
||||||
#>
|
#>
|
||||||
param (
|
param (
|
||||||
[string]$wingetId,
|
[string]$wingetId
|
||||||
[string]$scope = "",
|
|
||||||
[PScredential]$credential = $null
|
|
||||||
)
|
)
|
||||||
|
|
||||||
$commonArguments = "--id $wingetId --silent"
|
$commonArguments = "--id $wingetId --silent"
|
||||||
$arguments = if ($Action -eq "Install") {
|
$arguments = if ($Action -eq "Install") {
|
||||||
"install $commonArguments --accept-source-agreements --accept-package-agreements $(if ($scope) {" --scope $scope"})"
|
"install $commonArguments --accept-source-agreements --accept-package-agreements"
|
||||||
} else {
|
} else {
|
||||||
"uninstall $commonArguments"
|
"uninstall $commonArguments"
|
||||||
}
|
}
|
||||||
@@ -60,10 +52,6 @@ Function Install-WinUtilProgramWinget {
|
|||||||
NoNewWindow = $true
|
NoNewWindow = $true
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($credential) {
|
|
||||||
$processParams.credential = $credential
|
|
||||||
}
|
|
||||||
|
|
||||||
return (Start-Process @processParams).ExitCode
|
return (Start-Process @processParams).ExitCode
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,28 +75,6 @@ Function Install-WinUtilProgramWinget {
|
|||||||
return $true
|
return $true
|
||||||
}
|
}
|
||||||
|
|
||||||
Write-Host "Attempt installation of $($Program) with User scope"
|
|
||||||
$status = Invoke-Winget -wingetId $Program -scope "user"
|
|
||||||
if ($status -eq 0) {
|
|
||||||
Write-Host "$($Program) installed successfully with User scope."
|
|
||||||
return $true
|
|
||||||
} elseif ($status -eq -1978335189) {
|
|
||||||
Write-Host "$($Program) No applicable update found"
|
|
||||||
return $true
|
|
||||||
}
|
|
||||||
|
|
||||||
$userAcknowledgment = [System.Windows.MessageBox]::Show("You need to input your password to install $($Program) with specific user credentials.", "User credential Prompt", [System.Windows.MessageBoxButton]::Ok)
|
|
||||||
if ($userAcknowledgment -eq 'Ok') {
|
|
||||||
$getcreds = Get-Credential $env:USERNAME
|
|
||||||
$status = Invoke-Winget -wingetId $Program -credential $getcreds
|
|
||||||
if ($status -eq 0) {
|
|
||||||
Write-Host "$($Program) installed successfully with User prompt."
|
|
||||||
return $true
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Write-Host "Skipping installation with specific user credentials."
|
|
||||||
}
|
|
||||||
|
|
||||||
Write-Host "Failed to install $($Program)."
|
Write-Host "Failed to install $($Program)."
|
||||||
return $false
|
return $false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,6 +52,10 @@ function Install-WinUtilWinget {
|
|||||||
|
|
||||||
# Check if Windows version supports Repair-WinGetPackageManager (24H2 and above)
|
# Check if Windows version supports Repair-WinGetPackageManager (24H2 and above)
|
||||||
if ([System.Environment]::OSVersion.Version.Build -ge 26100) {
|
if ([System.Environment]::OSVersion.Version.Build -ge 26100) {
|
||||||
|
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
|
||||||
|
Set-PSRepository -Name PSGallery -InstallationPolicy Trusted
|
||||||
|
Install-Module "Microsoft.WinGet.Client" -Force
|
||||||
|
Import-Module Microsoft.WinGet.Client
|
||||||
Repair-WinGetPackageManager -Force -Latest -Verbose
|
Repair-WinGetPackageManager -Force -Latest -Verbose
|
||||||
# Verify if repair was successful
|
# Verify if repair was successful
|
||||||
$wingetCmd = Get-Command winget -ErrorAction Stop
|
$wingetCmd = Get-Command winget -ErrorAction Stop
|
||||||
|
|||||||
@@ -25,10 +25,12 @@ function Invoke-WinUtilFontScaling {
|
|||||||
|
|
||||||
# Define an array for resources to be scaled
|
# Define an array for resources to be scaled
|
||||||
$fontResources = @(
|
$fontResources = @(
|
||||||
|
# Fonts
|
||||||
"FontSize",
|
"FontSize",
|
||||||
"ButtonFontSize",
|
"ButtonFontSize",
|
||||||
"HeaderFontSize",
|
"HeaderFontSize",
|
||||||
"TabButtonFontSize",
|
"TabButtonFontSize",
|
||||||
|
"ConfigTabButtonFontSize",
|
||||||
"IconFontSize",
|
"IconFontSize",
|
||||||
"SettingsIconFontSize",
|
"SettingsIconFontSize",
|
||||||
"CloseIconFontSize",
|
"CloseIconFontSize",
|
||||||
@@ -38,7 +40,21 @@ function Invoke-WinUtilFontScaling {
|
|||||||
"CustomDialogFontSize",
|
"CustomDialogFontSize",
|
||||||
"CustomDialogFontSizeHeader",
|
"CustomDialogFontSizeHeader",
|
||||||
"ConfigUpdateButtonFontSize",
|
"ConfigUpdateButtonFontSize",
|
||||||
"CheckBoxBulletDecoratorSize"
|
# Buttons and UI
|
||||||
|
"CheckBoxBulletDecoratorSize",
|
||||||
|
"ButtonWidth",
|
||||||
|
"ButtonHeight",
|
||||||
|
"TabButtonWidth",
|
||||||
|
"TabButtonHeight",
|
||||||
|
"IconButtonSize",
|
||||||
|
"AppEntryWidth",
|
||||||
|
"SearchBarWidth",
|
||||||
|
"SearchBarHeight",
|
||||||
|
"CustomDialogWidth",
|
||||||
|
"CustomDialogHeight",
|
||||||
|
"CustomDialogLogoSize",
|
||||||
|
"MicroWinLogoSize",
|
||||||
|
"ToolTipWidth"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Apply scaling to each resource
|
# Apply scaling to each resource
|
||||||
|
|||||||
@@ -21,10 +21,6 @@ function Invoke-WinUtilTweaks {
|
|||||||
$KeepServiceStartup = $true
|
$KeepServiceStartup = $true
|
||||||
)
|
)
|
||||||
|
|
||||||
if ($Checkbox -contains "Toggle") {
|
|
||||||
$CheckBox = $sync.configs.tweaks.$CheckBox
|
|
||||||
}
|
|
||||||
|
|
||||||
Write-Debug "Tweaks: $($CheckBox)"
|
Write-Debug "Tweaks: $($CheckBox)"
|
||||||
if($undo) {
|
if($undo) {
|
||||||
$Values = @{
|
$Values = @{
|
||||||
@@ -54,7 +50,7 @@ function Invoke-WinUtilTweaks {
|
|||||||
$sync.configs.tweaks.$CheckBox.service | ForEach-Object {
|
$sync.configs.tweaks.$CheckBox.service | ForEach-Object {
|
||||||
$changeservice = $true
|
$changeservice = $true
|
||||||
|
|
||||||
# The check for !($undo) is required, without it the script will throw an error for accessing unavailable memeber, which's the 'OriginalService' Property
|
# The check for !($undo) is required, without it the script will throw an error for accessing unavailable member, which's the 'OriginalService' Property
|
||||||
if($KeepServiceStartup -AND !($undo)) {
|
if($KeepServiceStartup -AND !($undo)) {
|
||||||
try {
|
try {
|
||||||
# Check if the service exists
|
# Check if the service exists
|
||||||
|
|||||||
@@ -6,35 +6,35 @@ function Set-PackageManagerPreference {
|
|||||||
|
|
||||||
Reads from preference.ini if no argument sent.
|
Reads from preference.ini if no argument sent.
|
||||||
|
|
||||||
.PARAMETER preferedPackageManager
|
.PARAMETER preferredPackageManager
|
||||||
The PackageManager that was selected.
|
The PackageManager that was selected.
|
||||||
#>
|
#>
|
||||||
param(
|
param(
|
||||||
[Parameter(Position=0, Mandatory=$false)]
|
[Parameter(Position=0, Mandatory=$false)]
|
||||||
[PackageManagers]$preferedPackageManager
|
[PackageManagers]$preferredPackageManager
|
||||||
)
|
)
|
||||||
|
|
||||||
$preferencePath = "$env:LOCALAPPDATA\winutil\preferences.ini"
|
$preferencePath = "$env:LOCALAPPDATA\winutil\preferences.ini"
|
||||||
$oldChocoPath = "$env:LOCALAPPDATA\winutil\preferChocolatey.ini"
|
$oldChocoPath = "$env:LOCALAPPDATA\winutil\preferChocolatey.ini"
|
||||||
|
|
||||||
#Try loading from file if no argument given.
|
#Try loading from file if no argument given.
|
||||||
if ($null -eq $preferedPackageManager) {
|
if ($null -eq $preferredPackageManager) {
|
||||||
# Backwards compat for preferChocolatey.ini
|
# Backwards compat for preferChocolatey.ini
|
||||||
if (Test-Path -Path $oldChocoPath) {
|
if (Test-Path -Path $oldChocoPath) {
|
||||||
$preferedPackageManager = [PackageManagers]::Choco
|
$preferredPackageManager = [PackageManagers]::Choco
|
||||||
Remove-Item -Path $oldChocoPath
|
Remove-Item -Path $oldChocoPath
|
||||||
}
|
}
|
||||||
elseif (Test-Path -Path $preferencePath) {
|
elseif (Test-Path -Path $preferencePath) {
|
||||||
$potential = Get-Content -Path $preferencePath -TotalCount 1
|
$potential = Get-Content -Path $preferencePath -TotalCount 1
|
||||||
$preferedPackageManager = [PackageManagers]$potential
|
$preferredPackageManager = [PackageManagers]$potential
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Write-Debug "Creating new preference file, defaulting to winget."
|
Write-Debug "Creating new preference file, defaulting to winget."
|
||||||
$preferedPackageManager = [PackageManagers]::Winget
|
$preferredPackageManager = [PackageManagers]::Winget
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$sync["ManagerPreference"] = [PackageManagers]::$preferedPackageManager
|
$sync["ManagerPreference"] = [PackageManagers]::$preferredPackageManager
|
||||||
Write-Debug "Manager Preference changed to '$($sync["ManagerPreference"])'"
|
Write-Debug "Manager Preference changed to '$($sync["ManagerPreference"])'"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ function Set-WinUtilProgressbar{
|
|||||||
This function is used to Update the Progress Bar displayed in the winutil GUI.
|
This function is used to Update the Progress Bar displayed in the winutil GUI.
|
||||||
It will be automatically hidden if the user clicks something and no process is running
|
It will be automatically hidden if the user clicks something and no process is running
|
||||||
.PARAMETER Label
|
.PARAMETER Label
|
||||||
The Text to be overlayed onto the Progress Bar
|
The Text to be overlaid onto the Progress Bar
|
||||||
.PARAMETER PERCENT
|
.PARAMETER PERCENT
|
||||||
The percentage of the Progress Bar that should be filled (0-100)
|
The percentage of the Progress Bar that should be filled (0-100)
|
||||||
#>
|
#>
|
||||||
|
|||||||
@@ -24,8 +24,12 @@ Function Set-WinUtilService {
|
|||||||
# Check if the service exists
|
# Check if the service exists
|
||||||
$service = Get-Service -Name $Name -ErrorAction Stop
|
$service = Get-Service -Name $Name -ErrorAction Stop
|
||||||
|
|
||||||
# Service exists, proceed with changing properties
|
# Service exists, proceed with changing properties -- while handling auto delayed start for PWSH 5
|
||||||
$service | Set-Service -StartupType $StartupType -ErrorAction Stop
|
if (($PSVersionTable.PSVersion.Major -lt 7) -and ($StartupType -eq "AutomaticDelayedStart")) {
|
||||||
|
sc.exe config $Name start=delayed-auto
|
||||||
|
} else {
|
||||||
|
$service | Set-Service -StartupType $StartupType -ErrorAction Stop
|
||||||
|
}
|
||||||
} catch [System.ServiceProcess.ServiceNotFoundException] {
|
} catch [System.ServiceProcess.ServiceNotFoundException] {
|
||||||
Write-Warning "Service $Name was not found"
|
Write-Warning "Service $Name was not found"
|
||||||
} catch {
|
} catch {
|
||||||
|
|||||||
26
functions/private/Test-WinUtilInternetConnection.ps1
Normal file
26
functions/private/Test-WinUtilInternetConnection.ps1
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
function Test-WinUtilInternetConnection {
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Tests if the computer has internet connectivity
|
||||||
|
.OUTPUTS
|
||||||
|
Boolean - True if connected, False if offline
|
||||||
|
#>
|
||||||
|
try {
|
||||||
|
# Test multiple reliable endpoints
|
||||||
|
$testSites = @(
|
||||||
|
"8.8.8.8", # Google DNS
|
||||||
|
"1.1.1.1", # Cloudflare DNS
|
||||||
|
"208.67.222.222" # OpenDNS
|
||||||
|
)
|
||||||
|
|
||||||
|
foreach ($site in $testSites) {
|
||||||
|
if (Test-Connection -ComputerName $site -Count 1 -Quiet -ErrorAction SilentlyContinue) {
|
||||||
|
return $true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $false
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
return $false
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -33,7 +33,7 @@ function Test-WinUtilPackageManager {
|
|||||||
$wingetVersionFull = ($wingetInfo | Select-String -Pattern 'Package Manager v\d+\.\d+\.\d+').Matches.Value.Split(' ')[-1]
|
$wingetVersionFull = ($wingetInfo | Select-String -Pattern 'Package Manager v\d+\.\d+\.\d+').Matches.Value.Split(' ')[-1]
|
||||||
}
|
}
|
||||||
} catch [System.Management.Automation.CommandNotFoundException], [System.Management.Automation.ApplicationFailedException] {
|
} catch [System.Management.Automation.CommandNotFoundException], [System.Management.Automation.ApplicationFailedException] {
|
||||||
Write-Warning "Winget was not found due to un-availablity reasons"
|
Write-Warning "Winget was not found due to un-availability reasons"
|
||||||
$wingetExists = $false
|
$wingetExists = $false
|
||||||
} catch {
|
} catch {
|
||||||
Write-Warning "Winget was not found due to un-known reasons, The Stack Trace is:`n$($psitem.Exception.StackTrace)"
|
Write-Warning "Winget was not found due to un-known reasons, The Stack Trace is:`n$($psitem.Exception.StackTrace)"
|
||||||
@@ -41,7 +41,7 @@ function Test-WinUtilPackageManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# If Winget is available, Parse it's Version and give proper information to Terminal Output.
|
# If Winget is available, Parse it's Version and give proper information to Terminal Output.
|
||||||
# If it isn't available, the return of this funtion will be "not-installed", indicating that
|
# If it isn't available, the return of this function will be "not-installed", indicating that
|
||||||
# Winget isn't installed/available on The System.
|
# Winget isn't installed/available on The System.
|
||||||
if ($wingetExists) {
|
if ($wingetExists) {
|
||||||
# Check if Preview Version
|
# Check if Preview Version
|
||||||
@@ -55,7 +55,7 @@ function Test-WinUtilPackageManager {
|
|||||||
|
|
||||||
# Check if Winget's Version is too old.
|
# Check if Winget's Version is too old.
|
||||||
$wingetCurrentVersion = [System.Version]::Parse($wingetVersion.Trim('v'))
|
$wingetCurrentVersion = [System.Version]::Parse($wingetVersion.Trim('v'))
|
||||||
# Grabs the latest release of Winget from the Github API for version check process.
|
# Grabs the latest release of Winget from the GitHub API for version check process.
|
||||||
$response = winget search -e Microsoft.AppInstaller --accept-source-agreements
|
$response = winget search -e Microsoft.AppInstaller --accept-source-agreements
|
||||||
$wingetLatestVersion = ($response | Select-String -Pattern '\d+\.\d+\.\d+\.\d+').Matches.Value
|
$wingetLatestVersion = ($response | Select-String -Pattern '\d+\.\d+\.\d+\.\d+').Matches.Value
|
||||||
Write-Host "Latest Search Version: $wingetLatestVersion" -ForegroundColor White
|
Write-Host "Latest Search Version: $wingetLatestVersion" -ForegroundColor White
|
||||||
|
|||||||
24
functions/public/Invoke-AutoConfigDialog.ps1
Normal file
24
functions/public/Invoke-AutoConfigDialog.ps1
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
function Invoke-AutoConfigDialog {
|
||||||
|
|
||||||
|
<#
|
||||||
|
|
||||||
|
.SYNOPSIS
|
||||||
|
Sets the automatic configuration file based on a specified JSON file
|
||||||
|
|
||||||
|
#>
|
||||||
|
|
||||||
|
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null
|
||||||
|
$OFD = New-Object System.Windows.Forms.OpenFileDialog
|
||||||
|
$OFD.Filter = "JSON Files (*.json)|*.json"
|
||||||
|
$OFD.ShowDialog()
|
||||||
|
|
||||||
|
if (($OFD.FileName -eq "") -and ($sync.MicrowinAutoConfigBox.Text -eq ""))
|
||||||
|
{
|
||||||
|
Write-Host "No automatic config file has been selected. Continuing without one..."
|
||||||
|
return
|
||||||
|
}
|
||||||
|
elseif ($OFD.FileName -ne "")
|
||||||
|
{
|
||||||
|
$sync.MicrowinAutoConfigBox.Text = "$($OFD.FileName)"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,7 +4,7 @@ function Invoke-ScratchDialog {
|
|||||||
<#
|
<#
|
||||||
|
|
||||||
.SYNOPSIS
|
.SYNOPSIS
|
||||||
Enable Editable Text box Alternate Scartch path
|
Enable Editable Text box Alternate Scratch path
|
||||||
|
|
||||||
.PARAMETER Button
|
.PARAMETER Button
|
||||||
#>
|
#>
|
||||||
|
|||||||
@@ -41,11 +41,12 @@ function Invoke-WPFButton {
|
|||||||
"WPFPanelPower" {Invoke-WPFControlPanel -Panel $button}
|
"WPFPanelPower" {Invoke-WPFControlPanel -Panel $button}
|
||||||
"WPFPanelPrinter" {Invoke-WPFControlPanel -Panel $button}
|
"WPFPanelPrinter" {Invoke-WPFControlPanel -Panel $button}
|
||||||
"WPFPanelRegion" {Invoke-WPFControlPanel -Panel $button}
|
"WPFPanelRegion" {Invoke-WPFControlPanel -Panel $button}
|
||||||
|
"WPFPanelRestore" {Invoke-WPFControlPanel -Panel $button}
|
||||||
"WPFPanelSound" {Invoke-WPFControlPanel -Panel $button}
|
"WPFPanelSound" {Invoke-WPFControlPanel -Panel $button}
|
||||||
"WPFPanelSystem" {Invoke-WPFControlPanel -Panel $button}
|
"WPFPanelSystem" {Invoke-WPFControlPanel -Panel $button}
|
||||||
"WPFPanelTimedate" {Invoke-WPFControlPanel -Panel $button}
|
"WPFPanelTimedate" {Invoke-WPFControlPanel -Panel $button}
|
||||||
"WPFPanelUser" {Invoke-WPFControlPanel -Panel $button}
|
"WPFPanelUser" {Invoke-WPFControlPanel -Panel $button}
|
||||||
"WPFUpdatesdefault" {Invoke-WPFFixesUpdate}
|
"WPFUpdatesdefault" {Invoke-WPFUpdatesdefault}
|
||||||
"WPFFixesUpdate" {Invoke-WPFFixesUpdate}
|
"WPFFixesUpdate" {Invoke-WPFFixesUpdate}
|
||||||
"WPFFixesWinget" {Invoke-WPFFixesWinget}
|
"WPFFixesWinget" {Invoke-WPFFixesWinget}
|
||||||
"WPFRunAdobeCCCleanerTool" {Invoke-WPFRunAdobeCCCleanerTool}
|
"WPFRunAdobeCCCleanerTool" {Invoke-WPFRunAdobeCCCleanerTool}
|
||||||
@@ -64,5 +65,6 @@ function Invoke-WPFButton {
|
|||||||
"WPFWinUtilSSHServer" {Invoke-WPFSSHServer}
|
"WPFWinUtilSSHServer" {Invoke-WPFSSHServer}
|
||||||
"WPFselectedAppsButton" {$sync.selectedAppsPopup.IsOpen = -not $sync.selectedAppsPopup.IsOpen}
|
"WPFselectedAppsButton" {$sync.selectedAppsPopup.IsOpen = -not $sync.selectedAppsPopup.IsOpen}
|
||||||
"WPFMicrowinPanelBack" {Toggle-MicrowinPanel 1}
|
"WPFMicrowinPanelBack" {Toggle-MicrowinPanel 1}
|
||||||
|
"MicrowinAutoConfigBtn" {Invoke-AutoConfigDialog}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ function Invoke-WPFControlPanel {
|
|||||||
"WPFPanelPower" {powercfg.cpl}
|
"WPFPanelPower" {powercfg.cpl}
|
||||||
"WPFPanelPrinter" {Start-Process "shell:::{A8A91A66-3A7D-4424-8D24-04E180695C7A}"}
|
"WPFPanelPrinter" {Start-Process "shell:::{A8A91A66-3A7D-4424-8D24-04E180695C7A}"}
|
||||||
"WPFPanelRegion" {intl.cpl}
|
"WPFPanelRegion" {intl.cpl}
|
||||||
|
"WPFPanelRestore" {rstrui.exe}
|
||||||
"WPFPanelSound" {mmsys.cpl}
|
"WPFPanelSound" {mmsys.cpl}
|
||||||
"WPFPanelSystem" {sysdm.cpl}
|
"WPFPanelSystem" {sysdm.cpl}
|
||||||
"WPFPanelTimedate" {timedate.cpl}
|
"WPFPanelTimedate" {timedate.cpl}
|
||||||
|
|||||||
@@ -33,51 +33,6 @@ function Invoke-WPFInstall {
|
|||||||
try {
|
try {
|
||||||
$sync.ProcessRunning = $true
|
$sync.ProcessRunning = $true
|
||||||
if($packagesWinget.Count -gt 0 -and $packagesWinget -ne "0") {
|
if($packagesWinget.Count -gt 0 -and $packagesWinget -ne "0") {
|
||||||
Add-Type -AssemblyName System.DirectoryServices.AccountManagement
|
|
||||||
Add-Type -assembly System.Windows.Forms
|
|
||||||
$PrincipalContext = New-Object System.DirectoryServices.AccountManagement.PrincipalContext('Machine')
|
|
||||||
$user = $env:USERNAME
|
|
||||||
|
|
||||||
Get-LocalUser | Where-Object Enabled -eq $true | ForEach-Object {
|
|
||||||
try {
|
|
||||||
$myPasswordIsBlank = $PrincipalContext.ValidateCredentials($user, $null)
|
|
||||||
} catch {
|
|
||||||
$form = New-Object System.Windows.Forms.Form
|
|
||||||
$form.Text = "Set password for $user"
|
|
||||||
$form.Size = New-Object System.Drawing.Size(500, 200)
|
|
||||||
|
|
||||||
$label = New-Object System.Windows.Forms.Label
|
|
||||||
$label.Text = 'Maybe a program needs to be installed in "usermode" and you have no password set, you need to set it here. After putting a password into the text box a page asking for your password might open (not right after). If you keep the text box empty, nothing will happen.
|
|
||||||
REMEMBER THE PASSWORD FOR THE FUTURE. YOU WILL NEED FOR STUFF AND TO LOGIN IF AUTOLOGIN ISN`T SET'
|
|
||||||
$label.Size = New-Object System.Drawing.Size(480, 60)
|
|
||||||
$label.Location = New-Object System.Drawing.Point(10, 10)
|
|
||||||
$form.Controls.Add($label)
|
|
||||||
|
|
||||||
$passwordBox = New-Object System.Windows.Forms.TextBox
|
|
||||||
$passwordBox.Size = New-Object System.Drawing.Size(380, 20)
|
|
||||||
$passwordBox.UseSystemPasswordChar = $true
|
|
||||||
$passwordBox.Location = New-Object System.Drawing.Point(10, 125)
|
|
||||||
$form.Controls.Add($passwordBox)
|
|
||||||
|
|
||||||
$button = New-Object System.Windows.Forms.Button
|
|
||||||
$button.Text = 'Submit'
|
|
||||||
$button.Size = New-Object System.Drawing.Size(75, 23)
|
|
||||||
$button.Location = New-Object System.Drawing.Point(400, 125)
|
|
||||||
$button.Add_Click({
|
|
||||||
$password = $passwordBox.Text | ConvertTo-SecureString -AsPlainText -Force
|
|
||||||
if ($password) {
|
|
||||||
Set-LocalUser -Name $user -Password $password
|
|
||||||
$password.Close()
|
|
||||||
$Form.Close()
|
|
||||||
} else {
|
|
||||||
[System.Windows.Forms.MessageBox]::Show('No password entered!')
|
|
||||||
}
|
|
||||||
})
|
|
||||||
$form.Controls.Add($button)
|
|
||||||
$form.ShowDialog() | Out-Null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Show-WPFInstallAppBusy -text "Installing apps..."
|
Show-WPFInstallAppBusy -text "Installing apps..."
|
||||||
Install-WinUtilWinget
|
Install-WinUtilWinget
|
||||||
Install-WinUtilProgramWinget -Action Install -Programs $packagesWinget
|
Install-WinUtilProgramWinget -Action Install -Programs $packagesWinget
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ function Invoke-WPFInstallUpgrade {
|
|||||||
Write-Host "Upgrade Successful"
|
Write-Host "Upgrade Successful"
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
Write-Host "Error Occured. Return Code: $chocoUpgradeStatus"
|
Write-Host "Error Occurred. Return Code: $chocoUpgradeStatus"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
|||||||
@@ -140,6 +140,7 @@ function Invoke-WPFUIElements {
|
|||||||
$label.Content = $category -replace ".*__", ""
|
$label.Content = $category -replace ".*__", ""
|
||||||
$label.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "HeaderFontSize")
|
$label.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "HeaderFontSize")
|
||||||
$label.SetResourceReference([Windows.Controls.Control]::FontFamilyProperty, "HeaderFontFamily")
|
$label.SetResourceReference([Windows.Controls.Control]::FontFamilyProperty, "HeaderFontFamily")
|
||||||
|
$label.UseLayoutRounding = $true
|
||||||
$itemsControl.Items.Add($label) | Out-Null
|
$itemsControl.Items.Add($label) | Out-Null
|
||||||
$sync[$category] = $label
|
$sync[$category] = $label
|
||||||
|
|
||||||
@@ -154,6 +155,8 @@ function Invoke-WPFUIElements {
|
|||||||
$checkBox = New-Object Windows.Controls.CheckBox
|
$checkBox = New-Object Windows.Controls.CheckBox
|
||||||
$checkBox.Name = $entryInfo.Name
|
$checkBox.Name = $entryInfo.Name
|
||||||
$checkBox.HorizontalAlignment = "Right"
|
$checkBox.HorizontalAlignment = "Right"
|
||||||
|
$checkBox.UseLayoutRounding = $true
|
||||||
|
[System.Windows.Automation.AutomationProperties]::SetName($checkBox, $entryInfo.Content)
|
||||||
$dockPanel.Children.Add($checkBox) | Out-Null
|
$dockPanel.Children.Add($checkBox) | Out-Null
|
||||||
$checkBox.Style = $ColorfulToggleSwitchStyle
|
$checkBox.Style = $ColorfulToggleSwitchStyle
|
||||||
|
|
||||||
@@ -163,6 +166,7 @@ function Invoke-WPFUIElements {
|
|||||||
$label.HorizontalAlignment = "Left"
|
$label.HorizontalAlignment = "Left"
|
||||||
$label.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "FontSize")
|
$label.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "FontSize")
|
||||||
$label.SetResourceReference([Windows.Controls.Control]::ForegroundProperty, "MainForegroundColor")
|
$label.SetResourceReference([Windows.Controls.Control]::ForegroundProperty, "MainForegroundColor")
|
||||||
|
$label.UseLayoutRounding = $true
|
||||||
$dockPanel.Children.Add($label) | Out-Null
|
$dockPanel.Children.Add($label) | Out-Null
|
||||||
$itemsControl.Items.Add($dockPanel) | Out-Null
|
$itemsControl.Items.Add($dockPanel) | Out-Null
|
||||||
|
|
||||||
@@ -188,6 +192,7 @@ function Invoke-WPFUIElements {
|
|||||||
$toggleButton.ToolTip = $entryInfo.Description
|
$toggleButton.ToolTip = $entryInfo.Description
|
||||||
$toggleButton.HorizontalAlignment = "Left"
|
$toggleButton.HorizontalAlignment = "Left"
|
||||||
$toggleButton.Style = $ToggleButtonStyle
|
$toggleButton.Style = $ToggleButtonStyle
|
||||||
|
[System.Windows.Automation.AutomationProperties]::SetName($toggleButton, $entryInfo.Content[0])
|
||||||
|
|
||||||
$toggleButton.Tag = @{
|
$toggleButton.Tag = @{
|
||||||
contentOn = if ($entryInfo.Content.Count -ge 1) { $entryInfo.Content[0] } else { "" }
|
contentOn = if ($entryInfo.Content.Count -ge 1) { $entryInfo.Content[0] } else { "" }
|
||||||
@@ -217,6 +222,7 @@ function Invoke-WPFUIElements {
|
|||||||
$label.HorizontalAlignment = "Left"
|
$label.HorizontalAlignment = "Left"
|
||||||
$label.VerticalAlignment = "Center"
|
$label.VerticalAlignment = "Center"
|
||||||
$label.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "ButtonFontSize")
|
$label.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "ButtonFontSize")
|
||||||
|
$label.UseLayoutRounding = $true
|
||||||
$horizontalStackPanel.Children.Add($label) | Out-Null
|
$horizontalStackPanel.Children.Add($label) | Out-Null
|
||||||
|
|
||||||
$comboBox = New-Object Windows.Controls.ComboBox
|
$comboBox = New-Object Windows.Controls.ComboBox
|
||||||
@@ -226,11 +232,15 @@ function Invoke-WPFUIElements {
|
|||||||
$comboBox.HorizontalAlignment = "Left"
|
$comboBox.HorizontalAlignment = "Left"
|
||||||
$comboBox.VerticalAlignment = "Center"
|
$comboBox.VerticalAlignment = "Center"
|
||||||
$comboBox.SetResourceReference([Windows.Controls.Control]::MarginProperty, "ButtonMargin")
|
$comboBox.SetResourceReference([Windows.Controls.Control]::MarginProperty, "ButtonMargin")
|
||||||
|
$comboBox.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "ButtonFontSize")
|
||||||
|
$comboBox.UseLayoutRounding = $true
|
||||||
|
[System.Windows.Automation.AutomationProperties]::SetName($comboBox, $entryInfo.Content)
|
||||||
|
|
||||||
foreach ($comboitem in ($entryInfo.ComboItems -split " ")) {
|
foreach ($comboitem in ($entryInfo.ComboItems -split " ")) {
|
||||||
$comboBoxItem = New-Object Windows.Controls.ComboBoxItem
|
$comboBoxItem = New-Object Windows.Controls.ComboBoxItem
|
||||||
$comboBoxItem.Content = $comboitem
|
$comboBoxItem.Content = $comboitem
|
||||||
$comboBoxItem.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "ButtonFontSize")
|
$comboBoxItem.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "ButtonFontSize")
|
||||||
|
$comboBoxItem.UseLayoutRounding = $true
|
||||||
$comboBox.Items.Add($comboBoxItem) | Out-Null
|
$comboBox.Items.Add($comboBoxItem) | Out-Null
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -239,6 +249,19 @@ function Invoke-WPFUIElements {
|
|||||||
|
|
||||||
$comboBox.SelectedIndex = 0
|
$comboBox.SelectedIndex = 0
|
||||||
|
|
||||||
|
# Set initial text
|
||||||
|
if ($comboBox.Items.Count -gt 0) {
|
||||||
|
$comboBox.Text = $comboBox.Items[0].Content
|
||||||
|
}
|
||||||
|
|
||||||
|
# Add SelectionChanged event handler to update the text property
|
||||||
|
$comboBox.Add_SelectionChanged({
|
||||||
|
$selectedItem = $this.SelectedItem
|
||||||
|
if ($selectedItem) {
|
||||||
|
$this.Text = $selectedItem.Content
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
$sync[$entryInfo.Name] = $comboBox
|
$sync[$entryInfo.Name] = $comboBox
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -250,8 +273,10 @@ function Invoke-WPFUIElements {
|
|||||||
$button.SetResourceReference([Windows.Controls.Control]::MarginProperty, "ButtonMargin")
|
$button.SetResourceReference([Windows.Controls.Control]::MarginProperty, "ButtonMargin")
|
||||||
$button.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "ButtonFontSize")
|
$button.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "ButtonFontSize")
|
||||||
if ($entryInfo.ButtonWidth) {
|
if ($entryInfo.ButtonWidth) {
|
||||||
$button.Width = $entryInfo.ButtonWidth
|
$baseWidth = [int]$entryInfo.ButtonWidth
|
||||||
|
$button.Width = [math]::Max($baseWidth, 350)
|
||||||
}
|
}
|
||||||
|
[System.Windows.Automation.AutomationProperties]::SetName($button, $entryInfo.Content)
|
||||||
$itemsControl.Items.Add($button) | Out-Null
|
$itemsControl.Items.Add($button) | Out-Null
|
||||||
|
|
||||||
$sync[$entryInfo.Name] = $button
|
$sync[$entryInfo.Name] = $button
|
||||||
@@ -281,6 +306,8 @@ function Invoke-WPFUIElements {
|
|||||||
$radioButton.SetResourceReference([Windows.Controls.Control]::MarginProperty, "CheckBoxMargin")
|
$radioButton.SetResourceReference([Windows.Controls.Control]::MarginProperty, "CheckBoxMargin")
|
||||||
$radioButton.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "ButtonFontSize")
|
$radioButton.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "ButtonFontSize")
|
||||||
$radioButton.ToolTip = $entryInfo.Description
|
$radioButton.ToolTip = $entryInfo.Description
|
||||||
|
$radioButton.UseLayoutRounding = $true
|
||||||
|
[System.Windows.Automation.AutomationProperties]::SetName($radioButton, $entryInfo.Content)
|
||||||
|
|
||||||
if ($entryInfo.Checked -eq $true) {
|
if ($entryInfo.Checked -eq $true) {
|
||||||
$radioButton.IsChecked = $true
|
$radioButton.IsChecked = $true
|
||||||
@@ -301,6 +328,8 @@ function Invoke-WPFUIElements {
|
|||||||
$checkBox.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "FontSize")
|
$checkBox.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "FontSize")
|
||||||
$checkBox.ToolTip = $entryInfo.Description
|
$checkBox.ToolTip = $entryInfo.Description
|
||||||
$checkBox.SetResourceReference([Windows.Controls.Control]::MarginProperty, "CheckBoxMargin")
|
$checkBox.SetResourceReference([Windows.Controls.Control]::MarginProperty, "CheckBoxMargin")
|
||||||
|
$checkBox.UseLayoutRounding = $true
|
||||||
|
[System.Windows.Automation.AutomationProperties]::SetName($checkBox, $entryInfo.Content)
|
||||||
if ($entryInfo.Checked -eq $true) {
|
if ($entryInfo.Checked -eq $true) {
|
||||||
$checkBox.IsChecked = $entryInfo.Checked
|
$checkBox.IsChecked = $entryInfo.Checked
|
||||||
}
|
}
|
||||||
@@ -312,6 +341,7 @@ function Invoke-WPFUIElements {
|
|||||||
$textBlock.Text = "(?)"
|
$textBlock.Text = "(?)"
|
||||||
$textBlock.ToolTip = $entryInfo.Link
|
$textBlock.ToolTip = $entryInfo.Link
|
||||||
$textBlock.Style = $HoverTextBlockStyle
|
$textBlock.Style = $HoverTextBlockStyle
|
||||||
|
$textBlock.UseLayoutRounding = $true
|
||||||
|
|
||||||
$horizontalStackPanel.Children.Add($textBlock) | Out-Null
|
$horizontalStackPanel.Children.Add($textBlock) | Out-Null
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,9 @@ function Invoke-WPFUpdatesdefault {
|
|||||||
Resets Windows Update settings to default
|
Resets Windows Update settings to default
|
||||||
|
|
||||||
#>
|
#>
|
||||||
|
|
||||||
|
Write-Host "Restoring Windows Update registry settings..." -ForegroundColor Yellow
|
||||||
|
|
||||||
If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU")) {
|
If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU")) {
|
||||||
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Force | Out-Null
|
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Force | Out-Null
|
||||||
}
|
}
|
||||||
@@ -15,17 +18,99 @@ function Invoke-WPFUpdatesdefault {
|
|||||||
}
|
}
|
||||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config" -Name "DODownloadMode" -Type DWord -Value 1
|
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config" -Name "DODownloadMode" -Type DWord -Value 1
|
||||||
|
|
||||||
|
# Reset WaaSMedicSvc registry settings to defaults
|
||||||
|
Write-Host "Restoring WaaSMedicSvc settings..." -ForegroundColor Yellow
|
||||||
|
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\WaaSMedicSvc" -Name "Start" -Type DWord -Value 3 -ErrorAction SilentlyContinue
|
||||||
|
Remove-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\WaaSMedicSvc" -Name "FailureActions" -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
|
# Restore update services to their default state
|
||||||
|
Write-Host "Restoring update services..." -ForegroundColor Yellow
|
||||||
|
|
||||||
$services = @(
|
$services = @(
|
||||||
"BITS"
|
@{Name = "BITS"; StartupType = "Manual"},
|
||||||
"wuauserv"
|
@{Name = "wuauserv"; StartupType = "Manual"},
|
||||||
|
@{Name = "UsoSvc"; StartupType = "Automatic"},
|
||||||
|
@{Name = "uhssvc"; StartupType = "Disabled"},
|
||||||
|
@{Name = "WaaSMedicSvc"; StartupType = "Manual"}
|
||||||
)
|
)
|
||||||
|
|
||||||
foreach ($service in $services) {
|
foreach ($service in $services) {
|
||||||
# -ErrorAction SilentlyContinue is so it doesn't write an error to stdout if a service doesn't exist
|
try {
|
||||||
|
Write-Host "Restoring $($service.Name) to $($service.StartupType)..."
|
||||||
|
$serviceObj = Get-Service -Name $service.Name -ErrorAction SilentlyContinue
|
||||||
|
if ($serviceObj) {
|
||||||
|
Set-Service -Name $service.Name -StartupType $service.StartupType -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
Write-Host "Setting $service StartupType to Automatic"
|
# Reset failure actions to default using sc command
|
||||||
Get-Service -Name $service -ErrorAction SilentlyContinue | Set-Service -StartupType Automatic
|
Start-Process -FilePath "sc.exe" -ArgumentList "failure `"$($service.Name)`" reset= 86400 actions= restart/60000/restart/60000/restart/60000" -Wait -WindowStyle Hidden -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
|
# Start the service if it should be running
|
||||||
|
if ($service.StartupType -eq "Automatic") {
|
||||||
|
Start-Service -Name $service.Name -ErrorAction SilentlyContinue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Host "Warning: Could not restore service $($service.Name) - $($_.Exception.Message)" -ForegroundColor Yellow
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Restore renamed DLLs if they exist
|
||||||
|
Write-Host "Restoring renamed update service DLLs..." -ForegroundColor Yellow
|
||||||
|
|
||||||
|
$dlls = @("WaaSMedicSvc", "wuaueng")
|
||||||
|
|
||||||
|
foreach ($dll in $dlls) {
|
||||||
|
$dllPath = "C:\Windows\System32\$dll.dll"
|
||||||
|
$backupPath = "C:\Windows\System32\${dll}_BAK.dll"
|
||||||
|
|
||||||
|
if ((Test-Path $backupPath) -and !(Test-Path $dllPath)) {
|
||||||
|
try {
|
||||||
|
# Take ownership of backup file
|
||||||
|
Start-Process -FilePath "takeown.exe" -ArgumentList "/f `"$backupPath`"" -Wait -WindowStyle Hidden -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
|
# Grant full control to everyone
|
||||||
|
Start-Process -FilePath "icacls.exe" -ArgumentList "`"$backupPath`" /grant *S-1-1-0:F" -Wait -WindowStyle Hidden -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
|
# Rename back to original
|
||||||
|
Rename-Item -Path $backupPath -NewName "$dll.dll" -ErrorAction SilentlyContinue
|
||||||
|
Write-Host "Restored ${dll}_BAK.dll to $dll.dll"
|
||||||
|
|
||||||
|
# Restore ownership to TrustedInstaller
|
||||||
|
Start-Process -FilePath "icacls.exe" -ArgumentList "`"$dllPath`" /setowner `"NT SERVICE\TrustedInstaller`"" -Wait -WindowStyle Hidden -ErrorAction SilentlyContinue
|
||||||
|
Start-Process -FilePath "icacls.exe" -ArgumentList "`"$dllPath`" /remove *S-1-1-0" -Wait -WindowStyle Hidden -ErrorAction SilentlyContinue
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Host "Warning: Could not restore $dll.dll - $($_.Exception.Message)" -ForegroundColor Yellow
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Enable update related scheduled tasks
|
||||||
|
Write-Host "Enabling update related scheduled tasks..." -ForegroundColor Yellow
|
||||||
|
|
||||||
|
$taskPaths = @(
|
||||||
|
'\Microsoft\Windows\InstallService\*'
|
||||||
|
'\Microsoft\Windows\UpdateOrchestrator\*'
|
||||||
|
'\Microsoft\Windows\UpdateAssistant\*'
|
||||||
|
'\Microsoft\Windows\WaaSMedic\*'
|
||||||
|
'\Microsoft\Windows\WindowsUpdate\*'
|
||||||
|
'\Microsoft\WindowsUpdate\*'
|
||||||
|
)
|
||||||
|
|
||||||
|
foreach ($taskPath in $taskPaths) {
|
||||||
|
try {
|
||||||
|
$tasks = Get-ScheduledTask -TaskPath $taskPath -ErrorAction SilentlyContinue
|
||||||
|
foreach ($task in $tasks) {
|
||||||
|
Enable-ScheduledTask -TaskName $task.TaskName -TaskPath $task.TaskPath -ErrorAction SilentlyContinue
|
||||||
|
Write-Host "Enabled task: $($task.TaskName)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Host "Warning: Could not enable tasks in path $taskPath - $($_.Exception.Message)" -ForegroundColor Yellow
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Write-Host "Enabling driver offering through Windows Update..."
|
Write-Host "Enabling driver offering through Windows Update..."
|
||||||
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Device Metadata" -Name "PreventDeviceMetadataFromNetwork" -ErrorAction SilentlyContinue
|
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Device Metadata" -Name "PreventDeviceMetadataFromNetwork" -ErrorAction SilentlyContinue
|
||||||
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching" -Name "DontPromptForWindowsUpdate" -ErrorAction SilentlyContinue
|
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching" -Name "DontPromptForWindowsUpdate" -ErrorAction SilentlyContinue
|
||||||
@@ -39,6 +124,7 @@ function Invoke-WPFUpdatesdefault {
|
|||||||
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "BranchReadinessLevel" -ErrorAction SilentlyContinue
|
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "BranchReadinessLevel" -ErrorAction SilentlyContinue
|
||||||
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "DeferFeatureUpdatesPeriodInDays" -ErrorAction SilentlyContinue
|
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "DeferFeatureUpdatesPeriodInDays" -ErrorAction SilentlyContinue
|
||||||
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "DeferQualityUpdatesPeriodInDays" -ErrorAction SilentlyContinue
|
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "DeferQualityUpdatesPeriodInDays" -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
Write-Host "==================================================="
|
Write-Host "==================================================="
|
||||||
Write-Host "--- Windows Update Settings Reset to Default ---"
|
Write-Host "--- Windows Update Settings Reset to Default ---"
|
||||||
Write-Host "==================================================="
|
Write-Host "==================================================="
|
||||||
@@ -62,4 +148,6 @@ function Invoke-WPFUpdatesdefault {
|
|||||||
Write-Host "==================================================="
|
Write-Host "==================================================="
|
||||||
Write-Host "--- Windows Local Policies Reset to Default ---"
|
Write-Host "--- Windows Local Policies Reset to Default ---"
|
||||||
Write-Host "==================================================="
|
Write-Host "==================================================="
|
||||||
|
|
||||||
|
Write-Host "Note: A system restart may be required for all changes to take full effect." -ForegroundColor Yellow
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,30 +6,130 @@ function Invoke-WPFUpdatesdisable {
|
|||||||
|
|
||||||
.NOTES
|
.NOTES
|
||||||
Disabling Windows Update is not recommended. This is only for advanced users who know what they are doing.
|
Disabling Windows Update is not recommended. This is only for advanced users who know what they are doing.
|
||||||
|
This function requires administrator privileges and will attempt to run as SYSTEM for certain operations.
|
||||||
|
|
||||||
#>
|
#>
|
||||||
|
|
||||||
|
Write-Host "Configuring registry settings..." -ForegroundColor Yellow
|
||||||
|
|
||||||
If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU")) {
|
If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU")) {
|
||||||
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Force | Out-Null
|
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Force | Out-Null
|
||||||
}
|
}
|
||||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "NoAutoUpdate" -Type DWord -Value 1
|
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "NoAutoUpdate" -Type DWord -Value 1
|
||||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "AUOptions" -Type DWord -Value 1
|
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "AUOptions" -Type DWord -Value 1
|
||||||
|
|
||||||
If (!(Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config")) {
|
If (!(Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config")) {
|
||||||
New-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config" -Force | Out-Null
|
New-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config" -Force | Out-Null
|
||||||
}
|
}
|
||||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config" -Name "DODownloadMode" -Type DWord -Value 0
|
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config" -Name "DODownloadMode" -Type DWord -Value 0
|
||||||
|
|
||||||
|
# Additional registry settings
|
||||||
|
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\WaaSMedicSvc" -Name "Start" -Type DWord -Value 4 -ErrorAction SilentlyContinue
|
||||||
|
$failureActions = [byte[]](0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xd4,0x01,0x00,0x00,0x00,0x00,0x00,0xe0,0x93,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00)
|
||||||
|
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\WaaSMedicSvc" -Name "FailureActions" -Type Binary -Value $failureActions -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
|
# Disable and stop update related services
|
||||||
|
Write-Host "Disabling update services..." -ForegroundColor Yellow
|
||||||
|
|
||||||
$services = @(
|
$services = @(
|
||||||
"BITS"
|
"BITS"
|
||||||
"wuauserv"
|
"wuauserv"
|
||||||
|
"UsoSvc"
|
||||||
|
"uhssvc"
|
||||||
|
"WaaSMedicSvc"
|
||||||
)
|
)
|
||||||
|
|
||||||
foreach ($service in $services) {
|
foreach ($service in $services) {
|
||||||
# -ErrorAction SilentlyContinue is so it doesn't write an error to stdout if a service doesn't exist
|
try {
|
||||||
|
Write-Host "Stopping and disabling $service..."
|
||||||
|
$serviceObj = Get-Service -Name $service -ErrorAction SilentlyContinue
|
||||||
|
if ($serviceObj) {
|
||||||
|
Stop-Service -Name $service -Force -ErrorAction SilentlyContinue
|
||||||
|
Set-Service -Name $service -StartupType Disabled -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
Write-Host "Setting $service StartupType to Disabled"
|
# Set failure actions to nothing using sc command
|
||||||
Get-Service -Name $service -ErrorAction SilentlyContinue | Set-Service -StartupType Disabled
|
Start-Process -FilePath "sc.exe" -ArgumentList "failure `"$service`" reset= 0 actions= `"`"" -Wait -WindowStyle Hidden -ErrorAction SilentlyContinue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Host "Warning: Could not process service $service - $($_.Exception.Message)" -ForegroundColor Yellow
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Write-Host "================================="
|
|
||||||
Write-Host "--- Updates ARE DISABLED ---"
|
# Rename critical update service DLLs (requires SYSTEM privileges)
|
||||||
Write-Host "================================="
|
Write-Host "Attempting to rename critical update service DLLs..." -ForegroundColor Yellow
|
||||||
|
|
||||||
|
$dlls = @("WaaSMedicSvc", "wuaueng")
|
||||||
|
|
||||||
|
foreach ($dll in $dlls) {
|
||||||
|
$dllPath = "C:\Windows\System32\$dll.dll"
|
||||||
|
$backupPath = "C:\Windows\System32\${dll}_BAK.dll"
|
||||||
|
|
||||||
|
if (Test-Path $dllPath) {
|
||||||
|
try {
|
||||||
|
# Take ownership
|
||||||
|
Start-Process -FilePath "takeown.exe" -ArgumentList "/f `"$dllPath`"" -Wait -WindowStyle Hidden -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
|
# Grant full control to everyone
|
||||||
|
Start-Process -FilePath "icacls.exe" -ArgumentList "`"$dllPath`" /grant *S-1-1-0:F" -Wait -WindowStyle Hidden -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
|
# Rename file
|
||||||
|
if (!(Test-Path $backupPath)) {
|
||||||
|
Rename-Item -Path $dllPath -NewName "${dll}_BAK.dll" -ErrorAction SilentlyContinue
|
||||||
|
Write-Host "Renamed $dll.dll to ${dll}_BAK.dll"
|
||||||
|
|
||||||
|
# Restore ownership to TrustedInstaller
|
||||||
|
Start-Process -FilePath "icacls.exe" -ArgumentList "`"$backupPath`" /setowner `"NT SERVICE\TrustedInstaller`"" -Wait -WindowStyle Hidden -ErrorAction SilentlyContinue
|
||||||
|
Start-Process -FilePath "icacls.exe" -ArgumentList "`"$backupPath`" /remove *S-1-1-0" -Wait -WindowStyle Hidden -ErrorAction SilentlyContinue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Host "Warning: Could not rename $dll.dll - $($_.Exception.Message)" -ForegroundColor Yellow
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Delete downloaded update files
|
||||||
|
Write-Host "Cleaning up downloaded update files..." -ForegroundColor Yellow
|
||||||
|
|
||||||
|
try {
|
||||||
|
$softwareDistPath = "C:\Windows\SoftwareDistribution"
|
||||||
|
if (Test-Path $softwareDistPath) {
|
||||||
|
Get-ChildItem -Path $softwareDistPath -Recurse -Force | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
|
||||||
|
Write-Host "Cleared SoftwareDistribution folder"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Host "Warning: Could not fully clear SoftwareDistribution folder - $($_.Exception.Message)" -ForegroundColor Yellow
|
||||||
|
}
|
||||||
|
|
||||||
|
# Disable update related scheduled tasks
|
||||||
|
Write-Host "Disabling update related scheduled tasks..." -ForegroundColor Yellow
|
||||||
|
|
||||||
|
$taskPaths = @(
|
||||||
|
'\Microsoft\Windows\InstallService\*'
|
||||||
|
'\Microsoft\Windows\UpdateOrchestrator\*'
|
||||||
|
'\Microsoft\Windows\UpdateAssistant\*'
|
||||||
|
'\Microsoft\Windows\WaaSMedic\*'
|
||||||
|
'\Microsoft\Windows\WindowsUpdate\*'
|
||||||
|
'\Microsoft\WindowsUpdate\*'
|
||||||
|
)
|
||||||
|
|
||||||
|
foreach ($taskPath in $taskPaths) {
|
||||||
|
try {
|
||||||
|
$tasks = Get-ScheduledTask -TaskPath $taskPath -ErrorAction SilentlyContinue
|
||||||
|
foreach ($task in $tasks) {
|
||||||
|
Disable-ScheduledTask -TaskName $task.TaskName -TaskPath $task.TaskPath -ErrorAction SilentlyContinue
|
||||||
|
Write-Host "Disabled task: $($task.TaskName)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Host "Warning: Could not disable tasks in path $taskPath - $($_.Exception.Message)" -ForegroundColor Yellow
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "=================================" -ForegroundColor Green
|
||||||
|
Write-Host "--- Updates ARE DISABLED ---" -ForegroundColor Green
|
||||||
|
Write-Host "===================================" -ForegroundColor Green
|
||||||
|
Write-Host "Note: Some operations may require a system restart to take full effect." -ForegroundColor Yellow
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ function Invoke-WPFtweaksbutton {
|
|||||||
|
|
||||||
Write-Debug "Number of tweaks to process: $($Tweaks.Count)"
|
Write-Debug "Number of tweaks to process: $($Tweaks.Count)"
|
||||||
|
|
||||||
# The leading "," in the ParameterList is nessecary because we only provide one argument and powershell cannot be convinced that we want a nested loop with only one argument otherwise
|
# The leading "," in the ParameterList is necessary because we only provide one argument and powershell cannot be convinced that we want a nested loop with only one argument otherwise
|
||||||
Invoke-WPFRunspace -ParameterList @(,("tweaks",$tweaks)) -DebugPreference $DebugPreference -ScriptBlock {
|
Invoke-WPFRunspace -ParameterList @(,("tweaks",$tweaks)) -DebugPreference $DebugPreference -ScriptBlock {
|
||||||
param(
|
param(
|
||||||
$tweaks,
|
$tweaks,
|
||||||
|
|||||||
@@ -310,38 +310,74 @@ $sync["Form"].Add_ContentRendered({
|
|||||||
Write-Debug "Unable to retrieve information about the primary monitor."
|
Write-Debug "Unable to retrieve information about the primary monitor."
|
||||||
}
|
}
|
||||||
|
|
||||||
Invoke-WPFTab "WPFTab1BT"
|
# Check internet connectivity and disable install tab if offline
|
||||||
|
#$isOnline = Test-WinUtilInternetConnection
|
||||||
|
$isOnline = $true # Temporarily force online mode until we can resolve false negatives
|
||||||
|
|
||||||
|
if (-not $isOnline) {
|
||||||
|
# Disable the install tab
|
||||||
|
$sync.WPFTab1BT.IsEnabled = $false
|
||||||
|
$sync.WPFTab1BT.Opacity = 0.5
|
||||||
|
$sync.WPFTab1BT.ToolTip = "Internet connection required for installing applications"
|
||||||
|
|
||||||
|
# Disable install-related buttons
|
||||||
|
$sync.WPFInstall.IsEnabled = $false
|
||||||
|
$sync.WPFUninstall.IsEnabled = $false
|
||||||
|
$sync.WPFInstallUpgrade.IsEnabled = $false
|
||||||
|
$sync.WPFGetInstalled.IsEnabled = $false
|
||||||
|
|
||||||
|
# Show offline indicator
|
||||||
|
Write-Host "Offline mode detected - Install tab disabled" -ForegroundColor Yellow
|
||||||
|
|
||||||
|
# Optionally switch to a different tab if install tab was going to be default
|
||||||
|
Invoke-WPFTab "WPFTab2BT" # Switch to Tweaks tab instead
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
# Online - ensure install tab is enabled
|
||||||
|
$sync.WPFTab1BT.IsEnabled = $true
|
||||||
|
$sync.WPFTab1BT.Opacity = 1.0
|
||||||
|
$sync.WPFTab1BT.ToolTip = $null
|
||||||
|
Invoke-WPFTab "WPFTab1BT" # Default to install tab
|
||||||
|
}
|
||||||
|
|
||||||
$sync["Form"].Focus()
|
$sync["Form"].Focus()
|
||||||
|
|
||||||
# maybe this is not the best place to load and execute config file?
|
# maybe this is not the best place to load and execute config file?
|
||||||
# maybe community can help?
|
# maybe community can help?
|
||||||
if ($PARAM_CONFIG) {
|
if ($PARAM_CONFIG -and -not [string]::IsNullOrWhiteSpace($PARAM_CONFIG)) {
|
||||||
Invoke-WPFImpex -type "import" -Config $PARAM_CONFIG
|
Invoke-WPFImpex -type "import" -Config $PARAM_CONFIG
|
||||||
if ($PARAM_RUN) {
|
if ($PARAM_RUN) {
|
||||||
|
# Wait for any existing process to complete before starting
|
||||||
while ($sync.ProcessRunning) {
|
while ($sync.ProcessRunning) {
|
||||||
Start-Sleep -Seconds 5
|
Start-Sleep -Seconds 5
|
||||||
}
|
}
|
||||||
Start-Sleep -Seconds 5
|
Start-Sleep -Seconds 5
|
||||||
|
|
||||||
Write-Host "Applying tweaks..."
|
Write-Host "Applying tweaks..."
|
||||||
Invoke-WPFtweaksbutton
|
if (-not $sync.ProcessRunning) {
|
||||||
while ($sync.ProcessRunning) {
|
Invoke-WPFtweaksbutton
|
||||||
Start-Sleep -Seconds 5
|
while ($sync.ProcessRunning) {
|
||||||
|
Start-Sleep -Seconds 5
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Start-Sleep -Seconds 5
|
Start-Sleep -Seconds 5
|
||||||
|
|
||||||
Write-Host "Installing features..."
|
Write-Host "Installing features..."
|
||||||
Invoke-WPFFeatureInstall
|
if (-not $sync.ProcessRunning) {
|
||||||
while ($sync.ProcessRunning) {
|
Invoke-WPFFeatureInstall
|
||||||
Start-Sleep -Seconds 5
|
while ($sync.ProcessRunning) {
|
||||||
|
Start-Sleep -Seconds 5
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Start-Sleep -Seconds 5
|
Start-Sleep -Seconds 5
|
||||||
|
|
||||||
Write-Host "Installing applications..."
|
Write-Host "Installing applications..."
|
||||||
while ($sync.ProcessRunning) {
|
if (-not $sync.ProcessRunning) {
|
||||||
Start-Sleep -Seconds 1
|
Invoke-WPFInstall
|
||||||
|
while ($sync.ProcessRunning) {
|
||||||
|
Start-Sleep -Seconds 1
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Invoke-WPFInstall
|
|
||||||
Start-Sleep -Seconds 5
|
Start-Sleep -Seconds 5
|
||||||
|
|
||||||
Write-Host "Done."
|
Write-Host "Done."
|
||||||
@@ -352,18 +388,13 @@ $sync["Form"].Add_ContentRendered({
|
|||||||
|
|
||||||
# Add event handlers for the RadioButtons
|
# Add event handlers for the RadioButtons
|
||||||
$sync["ISOdownloader"].add_Checked({
|
$sync["ISOdownloader"].add_Checked({
|
||||||
$sync["ISORelease"].Visibility = [System.Windows.Visibility]::Visible
|
|
||||||
$sync["ISOLanguage"].Visibility = [System.Windows.Visibility]::Visible
|
$sync["ISOLanguage"].Visibility = [System.Windows.Visibility]::Visible
|
||||||
})
|
})
|
||||||
|
|
||||||
$sync["ISOmanual"].add_Checked({
|
$sync["ISOmanual"].add_Checked({
|
||||||
$sync["ISORelease"].Visibility = [System.Windows.Visibility]::Collapsed
|
|
||||||
$sync["ISOLanguage"].Visibility = [System.Windows.Visibility]::Collapsed
|
$sync["ISOLanguage"].Visibility = [System.Windows.Visibility]::Collapsed
|
||||||
})
|
})
|
||||||
|
|
||||||
$sync["ISORelease"].Items.Add("24H2") | Out-Null
|
|
||||||
$sync["ISORelease"].SelectedItem = "24H2"
|
|
||||||
|
|
||||||
$sync["ISOLanguage"].Items.Add("System Language ($(Microwin-GetLangFromCulture -langName $((Get-Culture).Name)))") | Out-Null
|
$sync["ISOLanguage"].Items.Add("System Language ($(Microwin-GetLangFromCulture -langName $((Get-Culture).Name)))") | Out-Null
|
||||||
if ($currentCulture -ne "English International") {
|
if ($currentCulture -ne "English International") {
|
||||||
$sync["ISOLanguage"].Items.Add("English International") | Out-Null
|
$sync["ISOLanguage"].Items.Add("English International") | Out-Null
|
||||||
@@ -481,7 +512,7 @@ $sync["AboutMenuItem"].Add_Click({
|
|||||||
Author : <a href="https://github.com/ChrisTitusTech">@christitustech</a>
|
Author : <a href="https://github.com/ChrisTitusTech">@christitustech</a>
|
||||||
UI : <a href="https://github.com/MyDrift-user">@MyDrift-user</a>, <a href="https://github.com/Marterich">@Marterich</a>
|
UI : <a href="https://github.com/MyDrift-user">@MyDrift-user</a>, <a href="https://github.com/Marterich">@Marterich</a>
|
||||||
Runspace : <a href="https://github.com/DeveloperDurp">@DeveloperDurp</a>, <a href="https://github.com/Marterich">@Marterich</a>
|
Runspace : <a href="https://github.com/DeveloperDurp">@DeveloperDurp</a>, <a href="https://github.com/Marterich">@Marterich</a>
|
||||||
MicroWin : <a href="https://github.com/KonTy">@KonTy</a>, <a href="https://github.com/CodingWonders">@CodingWonders</a>
|
MicroWin : <a href="https://github.com/KonTy">@KonTy</a>, <a href="https://github.com/CodingWonders">@CodingWonders</a>, <a href="https://github.com/Real-MullaC">@Real-MullaC</a>
|
||||||
GitHub : <a href="https://github.com/ChrisTitusTech/winutil">ChrisTitusTech/winutil</a>
|
GitHub : <a href="https://github.com/ChrisTitusTech/winutil">ChrisTitusTech/winutil</a>
|
||||||
Version : <a href="https://github.com/ChrisTitusTech/winutil/releases/tag/$($sync.version)">$($sync.version)</a>
|
Version : <a href="https://github.com/ChrisTitusTech/winutil/releases/tag/$($sync.version)">$($sync.version)</a>
|
||||||
"@
|
"@
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ function Invoke-Preprocessing {
|
|||||||
.EXAMPLE
|
.EXAMPLE
|
||||||
Invoke-Preprocessing -WorkingDir "DRIVE:\Path\To\Folder\" -ExcludedFiles @('file.txt', '.\.git\', '*.png') -ProgressStatusMessage "Doing Preprocessing"
|
Invoke-Preprocessing -WorkingDir "DRIVE:\Path\To\Folder\" -ExcludedFiles @('file.txt', '.\.git\', '*.png') -ProgressStatusMessage "Doing Preprocessing"
|
||||||
|
|
||||||
Calls 'Invoke-Preprocessing' function using Named Paramters, with 'WorkingDir' (Mandatory Parameter) which's used as the base folder when searching for files recursively (using 'Get-ChildItem'), other two paramters are, in order from right to left, the Optional 'ExcludeFiles', which can be a path to a file, folder, or pattern-matched (like '*.png'), and the 'ProgressStatusMessage', which's used in Progress Bar.
|
Calls 'Invoke-Preprocessing' function using Named Parameters, with 'WorkingDir' (Mandatory Parameter) which's used as the base folder when searching for files recursively (using 'Get-ChildItem'), other two parameters are, in order from right to left, the Optional 'ExcludeFiles', which can be a path to a file, folder, or pattern-matched (like '*.png'), and the 'ProgressStatusMessage', which's used in Progress Bar.
|
||||||
|
|
||||||
.EXAMPLE
|
.EXAMPLE
|
||||||
Invoke-Preprocessing -WorkingDir "DRIVE:\Path\To\Folder\" -ExcludedFiles @('file.txt', '.\.git\', '*.png') -ProgressStatusMessage "Doing Preprocessing" -ProgressActivity "Re-Formatting Code"
|
Invoke-Preprocessing -WorkingDir "DRIVE:\Path\To\Folder\" -ExcludedFiles @('file.txt', '.\.git\', '*.png') -ProgressStatusMessage "Doing Preprocessing" -ProgressActivity "Re-Formatting Code"
|
||||||
@@ -51,7 +51,7 @@ function Invoke-Preprocessing {
|
|||||||
)
|
)
|
||||||
|
|
||||||
if (-NOT (Test-Path -PathType Container -Path "$WorkingDir")) {
|
if (-NOT (Test-Path -PathType Container -Path "$WorkingDir")) {
|
||||||
throw "[Invoke-Preprocessing] Invalid Paramter Value for 'WorkingDir', passed value: '$WorkingDir'. Either the path is a File or Non-Existing/Invlid, please double check your code."
|
throw "[Invoke-Preprocessing] Invalid Parameter Value for 'WorkingDir', passed value: '$WorkingDir'. Either the path is a File or Non-Existing/Invlid, please double check your code."
|
||||||
}
|
}
|
||||||
|
|
||||||
$InternalExcludedFiles = [System.Collections.Generic.List[string]]::new($ExcludedFiles.Count)
|
$InternalExcludedFiles = [System.Collections.Generic.List[string]]::new($ExcludedFiles.Count)
|
||||||
@@ -63,6 +63,10 @@ function Invoke-Preprocessing {
|
|||||||
if ($ExcludedFiles.Count -gt 0) {
|
if ($ExcludedFiles.Count -gt 0) {
|
||||||
ForEach ($excludedFile in $ExcludedFiles) {
|
ForEach ($excludedFile in $ExcludedFiles) {
|
||||||
$filePath = "$(($WorkingDir -replace ('\\$', '')) + '\' + ($excludedFile -replace ('\.\\', '')))"
|
$filePath = "$(($WorkingDir -replace ('\\$', '')) + '\' + ($excludedFile -replace ('\.\\', '')))"
|
||||||
|
# Only attempt to create the directory if the excludedFile ends with '\'
|
||||||
|
if ($excludedFile -match '\\$' -and -not (Test-Path "$filePath")) {
|
||||||
|
New-Item -Path "$filePath" -ItemType Directory -Force | Out-Null
|
||||||
|
}
|
||||||
$files = Get-ChildItem -Recurse -Path "$filePath" -File -Force
|
$files = Get-ChildItem -Recurse -Path "$filePath" -File -Force
|
||||||
if ($files.Count -gt 0) {
|
if ($files.Count -gt 0) {
|
||||||
ForEach ($file in $files) {
|
ForEach ($file in $files) {
|
||||||
|
|||||||
@@ -10,8 +10,8 @@
|
|||||||
WindowStyle="None"
|
WindowStyle="None"
|
||||||
Width="Auto"
|
Width="Auto"
|
||||||
Height="Auto"
|
Height="Auto"
|
||||||
MaxWidth="1380"
|
MinWidth="800"
|
||||||
MaxHeight="800"
|
MinHeight="600"
|
||||||
Title="WinUtil">
|
Title="WinUtil">
|
||||||
<WindowChrome.WindowChrome>
|
<WindowChrome.WindowChrome>
|
||||||
<WindowChrome CaptionHeight="0" CornerRadius="10"/>
|
<WindowChrome CaptionHeight="0" CornerRadius="10"/>
|
||||||
@@ -534,11 +534,18 @@
|
|||||||
Height="{DynamicResource CheckBoxBulletDecoratorSize *0.85}"
|
Height="{DynamicResource CheckBoxBulletDecoratorSize *0.85}"
|
||||||
Margin="2"
|
Margin="2"
|
||||||
SnapsToDevicePixels="True"/>
|
SnapsToDevicePixels="True"/>
|
||||||
<Path x:Name="CheckMark"
|
<Viewbox x:Name="CheckMarkContainer"
|
||||||
Stroke="{DynamicResource ToggleButtonOnColor}"
|
Width="{DynamicResource CheckBoxBulletDecoratorSize}"
|
||||||
StrokeThickness="2"
|
Height="{DynamicResource CheckBoxBulletDecoratorSize}"
|
||||||
Data="M 0 5 L 5 10 L 12 0"
|
HorizontalAlignment="Center"
|
||||||
Visibility="Collapsed"/>
|
VerticalAlignment="Center"
|
||||||
|
Visibility="Collapsed">
|
||||||
|
<Path x:Name="CheckMark"
|
||||||
|
Stroke="{DynamicResource ToggleButtonOnColor}"
|
||||||
|
StrokeThickness="1.5"
|
||||||
|
Data="M 0 5 L 5 10 L 12 0"
|
||||||
|
Stretch="Uniform"/>
|
||||||
|
</Viewbox>
|
||||||
</Grid>
|
</Grid>
|
||||||
</BulletDecorator.Bullet>
|
</BulletDecorator.Bullet>
|
||||||
<ContentPresenter Margin="4,0,0,0"
|
<ContentPresenter Margin="4,0,0,0"
|
||||||
@@ -549,7 +556,7 @@
|
|||||||
</Grid>
|
</Grid>
|
||||||
<ControlTemplate.Triggers>
|
<ControlTemplate.Triggers>
|
||||||
<Trigger Property="IsChecked" Value="True">
|
<Trigger Property="IsChecked" Value="True">
|
||||||
<Setter TargetName="CheckMark" Property="Visibility" Value="Visible"/>
|
<Setter TargetName="CheckMarkContainer" Property="Visibility" Value="Visible"/>
|
||||||
</Trigger>
|
</Trigger>
|
||||||
<Trigger Property="IsMouseOver" Value="True">
|
<Trigger Property="IsMouseOver" Value="True">
|
||||||
<!--Setter TargetName="Border" Property="Background" Value="{DynamicResource ButtonBackgroundPressedColor}"/-->
|
<!--Setter TargetName="Border" Property="Background" Value="{DynamicResource ButtonBackgroundPressedColor}"/-->
|
||||||
@@ -569,22 +576,24 @@
|
|||||||
<Setter.Value>
|
<Setter.Value>
|
||||||
<ControlTemplate TargetType="RadioButton">
|
<ControlTemplate TargetType="RadioButton">
|
||||||
<StackPanel Orientation="Horizontal" Margin="{DynamicResource CheckBoxMargin}">
|
<StackPanel Orientation="Horizontal" Margin="{DynamicResource CheckBoxMargin}">
|
||||||
<Grid Width="14" Height="14">
|
<Viewbox Width="{DynamicResource CheckBoxBulletDecoratorSize}" Height="{DynamicResource CheckBoxBulletDecoratorSize}">
|
||||||
<Ellipse x:Name="OuterCircle"
|
<Grid Width="14" Height="14">
|
||||||
Stroke="{DynamicResource ToggleButtonOffColor}"
|
<Ellipse x:Name="OuterCircle"
|
||||||
Fill="{DynamicResource ButtonBackgroundColor}"
|
Stroke="{DynamicResource ToggleButtonOffColor}"
|
||||||
StrokeThickness="1"
|
Fill="{DynamicResource ButtonBackgroundColor}"
|
||||||
Width="14"
|
StrokeThickness="1"
|
||||||
Height="14"
|
Width="14"
|
||||||
SnapsToDevicePixels="True"/>
|
Height="14"
|
||||||
<Ellipse x:Name="InnerCircle"
|
SnapsToDevicePixels="True"/>
|
||||||
Fill="{DynamicResource ToggleButtonOnColor}"
|
<Ellipse x:Name="InnerCircle"
|
||||||
Width="8"
|
Fill="{DynamicResource ToggleButtonOnColor}"
|
||||||
Height="8"
|
Width="8"
|
||||||
Visibility="Collapsed"
|
Height="8"
|
||||||
HorizontalAlignment="Center"
|
Visibility="Collapsed"
|
||||||
VerticalAlignment="Center"/>
|
HorizontalAlignment="Center"
|
||||||
</Grid>
|
VerticalAlignment="Center"/>
|
||||||
|
</Grid>
|
||||||
|
</Viewbox>
|
||||||
<ContentPresenter Margin="4,0,0,0"
|
<ContentPresenter Margin="4,0,0,0"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
RecognizesAccessKey="True"/>
|
RecognizesAccessKey="True"/>
|
||||||
@@ -892,63 +901,69 @@
|
|||||||
</Window.Resources>
|
</Window.Resources>
|
||||||
<Grid Background="{DynamicResource MainBackgroundColor}" ShowGridLines="False" Name="WPFMainGrid" Width="Auto" Height="Auto" HorizontalAlignment="Stretch">
|
<Grid Background="{DynamicResource MainBackgroundColor}" ShowGridLines="False" Name="WPFMainGrid" Width="Auto" Height="Auto" HorizontalAlignment="Stretch">
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="{DynamicResource TabRowHeightInPixels}"/>
|
<RowDefinition Height="Auto"/>
|
||||||
<RowDefinition Height=".9*"/>
|
<RowDefinition Height="*"/>
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<DockPanel Name="NavDockPanel" HorizontalAlignment="Stretch" Background="{DynamicResource MainBackgroundColor}" SnapsToDevicePixels="True" Grid.Row="0" Width="Auto">
|
<Grid Grid.Row="0" Background="{DynamicResource MainBackgroundColor}">
|
||||||
<StackPanel Name="NavLogoPanel" Orientation="Horizontal" HorizontalAlignment="Left" Background="{DynamicResource MainBackgroundColor}" SnapsToDevicePixels="True" Margin="10,0,20,0">
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="Auto"/> <!-- Navigation buttons -->
|
||||||
|
<ColumnDefinition Width="*"/> <!-- Search bar and buttons -->
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
|
<!-- Navigation Buttons Panel -->
|
||||||
|
<StackPanel Name="NavDockPanel" Orientation="Horizontal" Grid.Column="0" Margin="5,5,10,5">
|
||||||
|
<StackPanel Name="NavLogoPanel" Orientation="Horizontal" HorizontalAlignment="Left" Background="{DynamicResource MainBackgroundColor}" SnapsToDevicePixels="True" Margin="10,0,20,0">
|
||||||
|
</StackPanel>
|
||||||
|
<ToggleButton Margin="0,0,5,0" Height="{DynamicResource TabButtonHeight}" Width="{DynamicResource TabButtonWidth}"
|
||||||
|
Background="{DynamicResource ButtonInstallBackgroundColor}" Foreground="white" FontWeight="Bold" Name="WPFTab1BT">
|
||||||
|
<ToggleButton.Content>
|
||||||
|
<TextBlock FontSize="{DynamicResource TabButtonFontSize}" Background="Transparent" Foreground="{DynamicResource ButtonInstallForegroundColor}" >
|
||||||
|
<Underline>I</Underline>nstall
|
||||||
|
</TextBlock>
|
||||||
|
</ToggleButton.Content>
|
||||||
|
</ToggleButton>
|
||||||
|
<ToggleButton Margin="0,0,5,0" Height="{DynamicResource TabButtonHeight}" Width="{DynamicResource TabButtonWidth}"
|
||||||
|
Background="{DynamicResource ButtonTweaksBackgroundColor}" Foreground="{DynamicResource ButtonTweaksForegroundColor}" FontWeight="Bold" Name="WPFTab2BT">
|
||||||
|
<ToggleButton.Content>
|
||||||
|
<TextBlock FontSize="{DynamicResource TabButtonFontSize}" Background="Transparent" Foreground="{DynamicResource ButtonTweaksForegroundColor}">
|
||||||
|
<Underline>T</Underline>weaks
|
||||||
|
</TextBlock>
|
||||||
|
</ToggleButton.Content>
|
||||||
|
</ToggleButton>
|
||||||
|
<ToggleButton Margin="0,0,5,0" Height="{DynamicResource TabButtonHeight}" Width="{DynamicResource TabButtonWidth}"
|
||||||
|
Background="{DynamicResource ButtonConfigBackgroundColor}" Foreground="{DynamicResource ButtonConfigForegroundColor}" FontWeight="Bold" Name="WPFTab3BT">
|
||||||
|
<ToggleButton.Content>
|
||||||
|
<TextBlock FontSize="{DynamicResource TabButtonFontSize}" Background="Transparent" Foreground="{DynamicResource ButtonConfigForegroundColor}">
|
||||||
|
<Underline>C</Underline>onfig
|
||||||
|
</TextBlock>
|
||||||
|
</ToggleButton.Content>
|
||||||
|
</ToggleButton>
|
||||||
|
<ToggleButton Margin="0,0,5,0" Height="{DynamicResource TabButtonHeight}" Width="{DynamicResource TabButtonWidth}"
|
||||||
|
Background="{DynamicResource ButtonUpdatesBackgroundColor}" Foreground="{DynamicResource ButtonUpdatesForegroundColor}" FontWeight="Bold" Name="WPFTab4BT">
|
||||||
|
<ToggleButton.Content>
|
||||||
|
<TextBlock FontSize="{DynamicResource TabButtonFontSize}" Background="Transparent" Foreground="{DynamicResource ButtonUpdatesForegroundColor}">
|
||||||
|
<Underline>U</Underline>pdates
|
||||||
|
</TextBlock>
|
||||||
|
</ToggleButton.Content>
|
||||||
|
</ToggleButton>
|
||||||
|
<ToggleButton Margin="0,0,5,0" Height="{DynamicResource TabButtonHeight}" Width="{DynamicResource TabButtonWidth}"
|
||||||
|
Background="{DynamicResource ButtonUpdatesBackgroundColor}" Foreground="{DynamicResource ButtonUpdatesForegroundColor}" FontWeight="Bold" Name="WPFTab5BT">
|
||||||
|
<ToggleButton.Content>
|
||||||
|
<TextBlock FontSize="{DynamicResource TabButtonFontSize}" Background="Transparent" Foreground="{DynamicResource ButtonUpdatesForegroundColor}">
|
||||||
|
<Underline>M</Underline>icroWin
|
||||||
|
</TextBlock>
|
||||||
|
</ToggleButton.Content>
|
||||||
|
</ToggleButton>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<ToggleButton Margin="0,0,5,0" HorizontalAlignment="Left" Height="{DynamicResource TabButtonHeight}" Width="{DynamicResource TabButtonWidth}"
|
|
||||||
Background="{DynamicResource ButtonInstallBackgroundColor}" Foreground="white" FontWeight="Bold" Name="WPFTab1BT">
|
<!-- Search Bar and Action Buttons -->
|
||||||
<ToggleButton.Content>
|
<Grid Name="GridBesideNavDockPanel" Grid.Column="1" Background="{DynamicResource MainBackgroundColor}" ShowGridLines="False" Height="Auto">
|
||||||
<TextBlock FontSize="{DynamicResource TabButtonFontSize}" Background="Transparent" Foreground="{DynamicResource ButtonInstallForegroundColor}" >
|
|
||||||
<Underline>I</Underline>nstall
|
|
||||||
</TextBlock>
|
|
||||||
</ToggleButton.Content>
|
|
||||||
</ToggleButton>
|
|
||||||
<ToggleButton Margin="0,0,5,0" HorizontalAlignment="Left" Height="{DynamicResource TabButtonHeight}" Width="{DynamicResource TabButtonWidth}"
|
|
||||||
Background="{DynamicResource ButtonTweaksBackgroundColor}" Foreground="{DynamicResource ButtonTweaksForegroundColor}" FontWeight="Bold" Name="WPFTab2BT">
|
|
||||||
<ToggleButton.Content>
|
|
||||||
<TextBlock FontSize="{DynamicResource TabButtonFontSize}" Background="Transparent" Foreground="{DynamicResource ButtonTweaksForegroundColor}">
|
|
||||||
<Underline>T</Underline>weaks
|
|
||||||
</TextBlock>
|
|
||||||
</ToggleButton.Content>
|
|
||||||
</ToggleButton>
|
|
||||||
<ToggleButton Margin="0,0,5,0" HorizontalAlignment="Left" Height="{DynamicResource TabButtonHeight}" Width="{DynamicResource TabButtonWidth}"
|
|
||||||
Background="{DynamicResource ButtonConfigBackgroundColor}" Foreground="{DynamicResource ButtonConfigForegroundColor}" FontWeight="Bold" Name="WPFTab3BT">
|
|
||||||
<ToggleButton.Content>
|
|
||||||
<TextBlock FontSize="{DynamicResource TabButtonFontSize}" Background="Transparent" Foreground="{DynamicResource ButtonConfigForegroundColor}">
|
|
||||||
<Underline>C</Underline>onfig
|
|
||||||
</TextBlock>
|
|
||||||
</ToggleButton.Content>
|
|
||||||
</ToggleButton>
|
|
||||||
<ToggleButton Margin="0,0,5,0" HorizontalAlignment="Left" Height="{DynamicResource TabButtonHeight}" Width="{DynamicResource TabButtonWidth}"
|
|
||||||
Background="{DynamicResource ButtonUpdatesBackgroundColor}" Foreground="{DynamicResource ButtonUpdatesForegroundColor}" FontWeight="Bold" Name="WPFTab4BT">
|
|
||||||
<ToggleButton.Content>
|
|
||||||
<TextBlock FontSize="{DynamicResource TabButtonFontSize}" Background="Transparent" Foreground="{DynamicResource ButtonUpdatesForegroundColor}">
|
|
||||||
<Underline>U</Underline>pdates
|
|
||||||
</TextBlock>
|
|
||||||
</ToggleButton.Content>
|
|
||||||
</ToggleButton>
|
|
||||||
<ToggleButton Margin="0,0,5,0" HorizontalAlignment="Left" Height="{DynamicResource TabButtonHeight}" Width="{DynamicResource TabButtonWidth}"
|
|
||||||
Background="{DynamicResource ButtonUpdatesBackgroundColor}" Foreground="{DynamicResource ButtonUpdatesForegroundColor}" FontWeight="Bold" Name="WPFTab5BT">
|
|
||||||
<ToggleButton.Content>
|
|
||||||
<TextBlock FontSize="{DynamicResource TabButtonFontSize}" Background="Transparent" Foreground="{DynamicResource ButtonUpdatesForegroundColor}">
|
|
||||||
<Underline>M</Underline>icroWin
|
|
||||||
</TextBlock>
|
|
||||||
</ToggleButton.Content>
|
|
||||||
</ToggleButton>
|
|
||||||
<Grid Name="GridBesideNavDockPanel" Background="{DynamicResource MainBackgroundColor}" ShowGridLines="False" Width="Auto" Height="Auto" HorizontalAlignment="Stretch">
|
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="*"/> <!-- Main content area -->
|
<ColumnDefinition Width="2*"/> <!-- Search bar area - priority space -->
|
||||||
<ColumnDefinition Width="Auto"/><!-- Space for options button -->
|
<ColumnDefinition Width="Auto"/><!-- Buttons area -->
|
||||||
<ColumnDefinition Width="Auto"/><!-- Space for close button -->
|
|
||||||
<ColumnDefinition Width="Auto"/>
|
|
||||||
<ColumnDefinition Width="Auto"/>
|
|
||||||
<ColumnDefinition Width="Auto"/><!-- Space for Font Scaling button-->
|
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
@@ -960,27 +975,28 @@
|
|||||||
Consider using a Math Solver, will help in making
|
Consider using a Math Solver, will help in making
|
||||||
development of these things much easier
|
development of these things much easier
|
||||||
-->
|
-->
|
||||||
<TextBox
|
<Border Grid.Column="0" Margin="5,0,0,0" Width="{DynamicResource SearchBarWidth}" Height="{DynamicResource SearchBarHeight}" VerticalAlignment="Center" HorizontalAlignment="Left">
|
||||||
Grid.Column="0"
|
<Grid>
|
||||||
Width="{DynamicResource SearchBarWidth}"
|
<TextBox
|
||||||
Height="{DynamicResource SearchBarHeight}"
|
Width="{DynamicResource SearchBarWidth}"
|
||||||
FontSize="{DynamicResource SearchBarTextBoxFontSize}"
|
Height="{DynamicResource SearchBarHeight}"
|
||||||
VerticalAlignment="Center" HorizontalAlignment="Left"
|
FontSize="{DynamicResource SearchBarTextBoxFontSize}"
|
||||||
BorderThickness="1"
|
VerticalAlignment="Center" HorizontalAlignment="Left"
|
||||||
Name="SearchBar"
|
BorderThickness="1"
|
||||||
Foreground="{DynamicResource MainForegroundColor}" Background="{DynamicResource MainBackgroundColor}"
|
Name="SearchBar"
|
||||||
Padding="3,3,30,0"
|
Foreground="{DynamicResource MainForegroundColor}" Background="{DynamicResource MainBackgroundColor}"
|
||||||
Margin="5,0,0,0"
|
Padding="3,3,30,0"
|
||||||
ToolTip="Press Ctrl-F and type app name to filter application list below. Press Esc to reset the filter">
|
ToolTip="Press Ctrl-F and type app name to filter application list below. Press Esc to reset the filter">
|
||||||
</TextBox>
|
</TextBox>
|
||||||
<TextBlock
|
<TextBlock
|
||||||
Grid.Column="0"
|
VerticalAlignment="Center" HorizontalAlignment="Right"
|
||||||
VerticalAlignment="Center" HorizontalAlignment="Left"
|
FontFamily="Segoe MDL2 Assets"
|
||||||
FontFamily="Segoe MDL2 Assets"
|
Foreground="{DynamicResource ButtonBackgroundSelectedColor}"
|
||||||
Foreground="{DynamicResource ButtonBackgroundSelectedColor}"
|
FontSize="{DynamicResource IconFontSize}"
|
||||||
FontSize="{DynamicResource IconFontSize}"
|
Margin="0,0,8,0" Width="Auto" Height="Auto">
|
||||||
Margin="180,0,0,0">
|
</TextBlock>
|
||||||
</TextBlock>
|
</Grid>
|
||||||
|
</Border>
|
||||||
<!--
|
<!--
|
||||||
TODO:
|
TODO:
|
||||||
Make this ClearButton Positioning react to
|
Make this ClearButton Positioning react to
|
||||||
@@ -992,23 +1008,25 @@
|
|||||||
VerticalAlignment="Center" HorizontalAlignment="Left"
|
VerticalAlignment="Center" HorizontalAlignment="Left"
|
||||||
Name="SearchBarClearButton"
|
Name="SearchBarClearButton"
|
||||||
Style="{StaticResource SearchBarClearButtonStyle}"
|
Style="{StaticResource SearchBarClearButtonStyle}"
|
||||||
Margin="210,0,0,0" Visibility="Collapsed">
|
Margin="213,0,0,0" Visibility="Collapsed">
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
<Button Name="ThemeButton"
|
<!-- Buttons Container -->
|
||||||
Style="{StaticResource HoverButtonStyle}"
|
<StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="5,5,5,5">
|
||||||
Grid.Column="2" BorderBrush="Transparent"
|
<Button Name="ThemeButton"
|
||||||
|
Style="{StaticResource HoverButtonStyle}"
|
||||||
|
BorderBrush="Transparent"
|
||||||
Background="{DynamicResource MainBackgroundColor}"
|
Background="{DynamicResource MainBackgroundColor}"
|
||||||
Foreground="{DynamicResource MainForegroundColor}"
|
Foreground="{DynamicResource MainForegroundColor}"
|
||||||
FontSize="{DynamicResource SettingsIconFontSize}"
|
FontSize="{DynamicResource SettingsIconFontSize}"
|
||||||
Width="{DynamicResource IconButtonSize}" Height="{DynamicResource IconButtonSize}"
|
Width="{DynamicResource IconButtonSize}" Height="{DynamicResource IconButtonSize}"
|
||||||
HorizontalAlignment="Right" VerticalAlignment="Top"
|
HorizontalAlignment="Right" VerticalAlignment="Top"
|
||||||
Margin="0,5,5,0"
|
Margin="0,0,2,0"
|
||||||
FontFamily="Segoe MDL2 Assets"
|
FontFamily="Segoe MDL2 Assets"
|
||||||
Content="N/A"
|
Content="N/A"
|
||||||
ToolTip="Change the Winutil UI Theme"
|
ToolTip="Change the Winutil UI Theme"
|
||||||
/>
|
/>
|
||||||
<Popup Grid.Column="2" Name="ThemePopup"
|
<Popup Name="ThemePopup"
|
||||||
IsOpen="False"
|
IsOpen="False"
|
||||||
PlacementTarget="{Binding ElementName=ThemeButton}" Placement="Bottom"
|
PlacementTarget="{Binding ElementName=ThemeButton}" Placement="Bottom"
|
||||||
HorizontalAlignment="Right" VerticalAlignment="Top">
|
HorizontalAlignment="Right" VerticalAlignment="Top">
|
||||||
@@ -1033,20 +1051,20 @@
|
|||||||
</Border>
|
</Border>
|
||||||
</Popup>
|
</Popup>
|
||||||
|
|
||||||
<Button Name="FontScalingButton"
|
<Button Name="FontScalingButton"
|
||||||
Style="{StaticResource HoverButtonStyle}"
|
Style="{StaticResource HoverButtonStyle}"
|
||||||
Grid.Column="3" BorderBrush="Transparent"
|
BorderBrush="Transparent"
|
||||||
Background="{DynamicResource MainBackgroundColor}"
|
Background="{DynamicResource MainBackgroundColor}"
|
||||||
Foreground="{DynamicResource MainForegroundColor}"
|
Foreground="{DynamicResource MainForegroundColor}"
|
||||||
FontSize="{DynamicResource SettingsIconFontSize}"
|
FontSize="{DynamicResource SettingsIconFontSize}"
|
||||||
Width="{DynamicResource IconButtonSize}" Height="{DynamicResource IconButtonSize}"
|
Width="{DynamicResource IconButtonSize}" Height="{DynamicResource IconButtonSize}"
|
||||||
HorizontalAlignment="Right" VerticalAlignment="Top"
|
HorizontalAlignment="Right" VerticalAlignment="Top"
|
||||||
Margin="0,5,5,0"
|
Margin="0,0,2,0"
|
||||||
FontFamily="Segoe MDL2 Assets"
|
FontFamily="Segoe MDL2 Assets"
|
||||||
Content=""
|
Content=""
|
||||||
ToolTip="Adjust Font Scaling for Accessibility"
|
ToolTip="Adjust Font Scaling for Accessibility"
|
||||||
/>
|
/>
|
||||||
<Popup Grid.Column="3" Name="FontScalingPopup"
|
<Popup Name="FontScalingPopup"
|
||||||
IsOpen="False"
|
IsOpen="False"
|
||||||
PlacementTarget="{Binding ElementName=FontScalingButton}" Placement="Bottom"
|
PlacementTarget="{Binding ElementName=FontScalingButton}" Placement="Bottom"
|
||||||
HorizontalAlignment="Right" VerticalAlignment="Top">
|
HorizontalAlignment="Right" VerticalAlignment="Top">
|
||||||
@@ -1101,18 +1119,18 @@
|
|||||||
</Border>
|
</Border>
|
||||||
</Popup>
|
</Popup>
|
||||||
|
|
||||||
<Button Name="SettingsButton"
|
<Button Name="SettingsButton"
|
||||||
Style="{StaticResource HoverButtonStyle}"
|
Style="{StaticResource HoverButtonStyle}"
|
||||||
Grid.Column="4" BorderBrush="Transparent"
|
BorderBrush="Transparent"
|
||||||
Background="{DynamicResource MainBackgroundColor}"
|
Background="{DynamicResource MainBackgroundColor}"
|
||||||
Foreground="{DynamicResource MainForegroundColor}"
|
Foreground="{DynamicResource MainForegroundColor}"
|
||||||
FontSize="{DynamicResource SettingsIconFontSize}"
|
FontSize="{DynamicResource SettingsIconFontSize}"
|
||||||
Width="{DynamicResource IconButtonSize}" Height="{DynamicResource IconButtonSize}"
|
Width="{DynamicResource IconButtonSize}" Height="{DynamicResource IconButtonSize}"
|
||||||
HorizontalAlignment="Right" VerticalAlignment="Top"
|
HorizontalAlignment="Right" VerticalAlignment="Top"
|
||||||
Margin="5,5,5,0"
|
Margin="0,0,2,0"
|
||||||
FontFamily="Segoe MDL2 Assets"
|
FontFamily="Segoe MDL2 Assets"
|
||||||
Content=""/>
|
Content=""/>
|
||||||
<Popup Grid.Column="3" Name="SettingsPopup"
|
<Popup Name="SettingsPopup"
|
||||||
IsOpen="False"
|
IsOpen="False"
|
||||||
PlacementTarget="{Binding ElementName=SettingsButton}" Placement="Bottom"
|
PlacementTarget="{Binding ElementName=SettingsButton}" Placement="Bottom"
|
||||||
HorizontalAlignment="Right" VerticalAlignment="Top">
|
HorizontalAlignment="Right" VerticalAlignment="Top">
|
||||||
@@ -1135,19 +1153,18 @@
|
|||||||
</Border>
|
</Border>
|
||||||
</Popup>
|
</Popup>
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
Grid.Column="5"
|
Content="×" BorderThickness="0"
|
||||||
Content="×" BorderThickness="0"
|
|
||||||
BorderBrush="Transparent"
|
BorderBrush="Transparent"
|
||||||
Background="{DynamicResource MainBackgroundColor}"
|
Background="{DynamicResource MainBackgroundColor}"
|
||||||
Width="{DynamicResource IconButtonSize}" Height="{DynamicResource IconButtonSize}"
|
Width="{DynamicResource IconButtonSize}" Height="{DynamicResource IconButtonSize}"
|
||||||
HorizontalAlignment="Right" VerticalAlignment="Top"
|
HorizontalAlignment="Right" VerticalAlignment="Top"
|
||||||
Margin="0,5,5,0"
|
Margin="0,0,0,0"
|
||||||
FontFamily="{DynamicResource FontFamily}"
|
FontFamily="{DynamicResource FontFamily}"
|
||||||
Foreground="{DynamicResource MainForegroundColor}" FontSize="{DynamicResource CloseIconFontSize}" Name="WPFCloseButton" />
|
Foreground="{DynamicResource MainForegroundColor}" FontSize="{DynamicResource CloseIconFontSize}" Name="WPFCloseButton" />
|
||||||
|
</StackPanel>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
</Grid>
|
||||||
</DockPanel>
|
|
||||||
|
|
||||||
<TabControl Name="WPFTabNav" Background="Transparent" Width="Auto" Height="Auto" BorderBrush="Transparent" BorderThickness="0" Grid.Row="1" Grid.Column="0" Padding="-1">
|
<TabControl Name="WPFTabNav" Background="Transparent" Width="Auto" Height="Auto" BorderBrush="Transparent" BorderThickness="0" Grid.Row="1" Grid.Column="0" Padding="-1">
|
||||||
<TabItem Header="Install" Visibility="Collapsed" Name="WPFTab1">
|
<TabItem Header="Install" Visibility="Collapsed" Name="WPFTab1">
|
||||||
@@ -1155,7 +1172,7 @@
|
|||||||
|
|
||||||
<Grid Grid.Row="0" Grid.Column="0" Margin="{DynamicResource TabContentMargin}">
|
<Grid Grid.Row="0" Grid.Column="0" Margin="{DynamicResource TabContentMargin}">
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="225" />
|
<ColumnDefinition Width="Auto" />
|
||||||
<ColumnDefinition Width="*" />
|
<ColumnDefinition Width="*" />
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
@@ -1175,20 +1192,22 @@
|
|||||||
<RowDefinition Height="Auto" />
|
<RowDefinition Height="Auto" />
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
|
|
||||||
<ScrollViewer VerticalScrollBarVisibility="Auto" Grid.Row="0" Margin="{DynamicResource TabContentMargin}">
|
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" Grid.Row="0" Margin="{DynamicResource TabContentMargin}">
|
||||||
<Grid Background="Transparent">
|
<Grid Background="Transparent">
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="45px"/>
|
<RowDefinition Height="Auto"/>
|
||||||
<RowDefinition Height="*"/>
|
<RowDefinition Height="*"/>
|
||||||
<RowDefinition Height="Auto"/>
|
<RowDefinition Height="Auto"/>
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
|
|
||||||
<StackPanel Background="{DynamicResource MainBackgroundColor}" Orientation="Horizontal" HorizontalAlignment="Left" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Margin="5">
|
<StackPanel Background="{DynamicResource MainBackgroundColor}" Orientation="Vertical" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Margin="5">
|
||||||
<Label Content="Recommended Selections:" FontSize="{DynamicResource FontSize}" VerticalAlignment="Center" Margin="2"/>
|
<Label Content="Recommended Selections:" FontSize="{DynamicResource FontSize}" VerticalAlignment="Center" Margin="2"/>
|
||||||
<Button Name="WPFstandard" Content=" Standard " Margin="2"/>
|
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left" Margin="0,2,0,0">
|
||||||
<Button Name="WPFminimal" Content=" Minimal " Margin="2"/>
|
<Button Name="WPFstandard" Content=" Standard " Margin="2" Width="{DynamicResource ButtonWidth}" Height="{DynamicResource ButtonHeight}"/>
|
||||||
<Button Name="WPFClearTweaksSelection" Content=" Clear " Margin="2"/>
|
<Button Name="WPFminimal" Content=" Minimal " Margin="2" Width="{DynamicResource ButtonWidth}" Height="{DynamicResource ButtonHeight}"/>
|
||||||
<Button Name="WPFGetInstalledTweaks" Content=" Get Installed " Margin="2"/>
|
<Button Name="WPFClearTweaksSelection" Content=" Clear " Margin="2" Width="{DynamicResource ButtonWidth}" Height="{DynamicResource ButtonHeight}"/>
|
||||||
|
<Button Name="WPFGetInstalledTweaks" Content=" Get Installed " Margin="2" Width="{DynamicResource ButtonWidth}" Height="{DynamicResource ButtonHeight}"/>
|
||||||
|
</StackPanel>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<Grid Name="tweakspanel" Grid.Row="1">
|
<Grid Name="tweakspanel" Grid.Row="1">
|
||||||
@@ -1206,22 +1225,22 @@
|
|||||||
</Grid>
|
</Grid>
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
<Border Grid.Row="1" Background="{DynamicResource MainBackgroundColor}" BorderBrush="{DynamicResource BorderColor}" BorderThickness="1" CornerRadius="5" HorizontalAlignment="Stretch" Padding="10">
|
<Border Grid.Row="1" Background="{DynamicResource MainBackgroundColor}" BorderBrush="{DynamicResource BorderColor}" BorderThickness="1" CornerRadius="5" HorizontalAlignment="Stretch" Padding="10">
|
||||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center" Grid.Column="0">
|
<WrapPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center" Grid.Column="0">
|
||||||
<Button Name="WPFTweaksbutton" Content="Run Tweaks" Margin="5"/>
|
<Button Name="WPFTweaksbutton" Content="Run Tweaks" Margin="5" Width="{DynamicResource ButtonWidth}" Height="{DynamicResource ButtonHeight}"/>
|
||||||
<Button Name="WPFUndoall" Content="Undo Selected Tweaks" Margin="5"/>
|
<Button Name="WPFUndoall" Content="Undo Selected Tweaks" Margin="5" Width="{DynamicResource ButtonWidth}" Height="{DynamicResource ButtonHeight}"/>
|
||||||
</StackPanel>
|
</WrapPanel>
|
||||||
</Border>
|
</Border>
|
||||||
</Grid>
|
</Grid>
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem Header="Config" Visibility="Collapsed" Name="WPFTab3">
|
<TabItem Header="Config" Visibility="Collapsed" Name="WPFTab3">
|
||||||
<ScrollViewer VerticalScrollBarVisibility="Auto" Margin="{DynamicResource TabContentMargin}">
|
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" Margin="{DynamicResource TabContentMargin}">
|
||||||
<Grid Name="featurespanel" Grid.Row="1" Background="Transparent">
|
<Grid Name="featurespanel" Grid.Row="1" Background="Transparent">
|
||||||
</Grid>
|
</Grid>
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem Header="Updates" Visibility="Collapsed" Name="WPFTab4">
|
<TabItem Header="Updates" Visibility="Collapsed" Name="WPFTab4">
|
||||||
<ScrollViewer VerticalScrollBarVisibility="Auto" Margin="{DynamicResource TabContentMargin}">
|
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" Margin="{DynamicResource TabContentMargin}">
|
||||||
<Grid Background="Transparent">
|
<Grid Background="Transparent" MaxWidth="{Binding ActualWidth, RelativeSource={RelativeSource AncestorType=ScrollViewer}}">
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="Auto"/> <!-- Row for the 3 columns -->
|
<RowDefinition Height="Auto"/> <!-- Row for the 3 columns -->
|
||||||
<RowDefinition Height="Auto"/> <!-- Row for Windows Version -->
|
<RowDefinition Height="Auto"/> <!-- Row for Windows Version -->
|
||||||
@@ -1238,7 +1257,7 @@
|
|||||||
<!-- Default Settings -->
|
<!-- Default Settings -->
|
||||||
<Border Grid.Column="0" Style="{StaticResource BorderStyle}">
|
<Border Grid.Column="0" Style="{StaticResource BorderStyle}">
|
||||||
<StackPanel>
|
<StackPanel>
|
||||||
<Button Name="WPFFixesUpdate"
|
<Button Name="WPFUpdatesdefault"
|
||||||
FontSize="{DynamicResource ConfigTabButtonFontSize}"
|
FontSize="{DynamicResource ConfigTabButtonFontSize}"
|
||||||
Content="Default Settings"
|
Content="Default Settings"
|
||||||
Margin="10,5"
|
Margin="10,5"
|
||||||
@@ -1316,8 +1335,8 @@
|
|||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem Header="MicroWin" Visibility="Collapsed" Name="WPFTab5">
|
<TabItem Header="MicroWin" Visibility="Collapsed" Name="WPFTab5">
|
||||||
<ScrollViewer VerticalScrollBarVisibility="Auto" Margin="{DynamicResource TabContentMargin}">
|
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" Margin="{DynamicResource TabContentMargin}">
|
||||||
<Grid Width="Auto" Height="Auto">
|
<Grid MaxWidth="{Binding ActualWidth, RelativeSource={RelativeSource AncestorType=ScrollViewer}}">
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
<ColumnDefinition Width="3*"/>
|
<ColumnDefinition Width="3*"/>
|
||||||
@@ -1331,7 +1350,7 @@
|
|||||||
HorizontalAlignment="Stretch">
|
HorizontalAlignment="Stretch">
|
||||||
<StackPanel Name="MicrowinMain" Background="{DynamicResource MainBackgroundColor}" SnapsToDevicePixels="True" Grid.Column="0" Grid.Row="0">
|
<StackPanel Name="MicrowinMain" Background="{DynamicResource MainBackgroundColor}" SnapsToDevicePixels="True" Grid.Column="0" Grid.Row="0">
|
||||||
<StackPanel Name="MicrowinISOPanel" Background="Transparent" SnapsToDevicePixels="True" Margin="1">
|
<StackPanel Name="MicrowinISOPanel" Background="Transparent" SnapsToDevicePixels="True" Margin="1">
|
||||||
<CheckBox x:Name="WPFMicrowinDownloadFromGitHub" Content="Download oscdimg.exe from CTT Github repo" IsChecked="True" Margin="{DynamicResource MicrowinCheckBoxMargin}" />
|
<CheckBox x:Name="WPFMicrowinDownloadFromGitHub" Content="Download oscdimg.exe from CTT GitHub repo" IsChecked="True" Margin="{DynamicResource MicrowinCheckBoxMargin}" />
|
||||||
<TextBlock Margin="5" Padding="1" TextWrapping="Wrap" Foreground="{DynamicResource ComboBoxForegroundColor}">
|
<TextBlock Margin="5" Padding="1" TextWrapping="Wrap" Foreground="{DynamicResource ComboBoxForegroundColor}">
|
||||||
Choose a Windows ISO file that you've downloaded <LineBreak/>
|
Choose a Windows ISO file that you've downloaded <LineBreak/>
|
||||||
Check the status in the console
|
Check the status in the console
|
||||||
@@ -1375,7 +1394,6 @@
|
|||||||
/>
|
/>
|
||||||
<RadioButton x:Name="ISOmanual" Content="Select your own ISO" GroupName="Options" Margin="0,10,0,0" IsChecked="True"/>
|
<RadioButton x:Name="ISOmanual" Content="Select your own ISO" GroupName="Options" Margin="0,10,0,0" IsChecked="True"/>
|
||||||
<RadioButton x:Name="ISOdownloader" Content="Get newest ISO automatically" GroupName="Options" Margin="0,5,0,5"/>
|
<RadioButton x:Name="ISOdownloader" Content="Get newest ISO automatically" GroupName="Options" Margin="0,5,0,5"/>
|
||||||
<ComboBox x:Name="ISORelease" Visibility="Collapsed"/>
|
|
||||||
<ComboBox x:Name="ISOLanguage" Visibility="Collapsed"/>
|
<ComboBox x:Name="ISOLanguage" Visibility="Collapsed"/>
|
||||||
<Button Name="WPFGetIso" Margin="2" Padding="15">
|
<Button Name="WPFGetIso" Margin="2" Padding="15">
|
||||||
<Button.Content>
|
<Button.Content>
|
||||||
@@ -1459,6 +1477,38 @@
|
|||||||
Foreground="{DynamicResource LabelboxForegroundColor}"
|
Foreground="{DynamicResource LabelboxForegroundColor}"
|
||||||
/>
|
/>
|
||||||
<Rectangle Fill="{DynamicResource MainForegroundColor}" Height="2" HorizontalAlignment="Stretch" Margin="0,10,0,10"/>
|
<Rectangle Fill="{DynamicResource MainForegroundColor}" Height="2" HorizontalAlignment="Stretch" Margin="0,10,0,10"/>
|
||||||
|
<TextBlock Margin="6" Padding="1" TextWrapping="Wrap"><Bold>Tweaks (leave empty for default settings)</Bold></TextBlock>
|
||||||
|
<CheckBox Name="MicroWinWPBT" Margin="{DynamicResource MicrowinCheckBoxMargin}" IsChecked="False" ToolTip="If enabled then allows your computer vendor to execute a program each time it boots. It enables computer vendors to force install anti-theft software, software drivers, or a software program conveniently. This could also be a security risk."><AccessText TextWrapping="Wrap" Text="Disable Windows Platform Binary Table (WPBT) (ADVANCED TWEAK)" /></CheckBox>
|
||||||
|
<CheckBox Name="MicroWinUnsupported" Margin="{DynamicResource MicrowinCheckBoxMargin}" IsChecked="False" ToolTip="If enabled then it will allow you to upgrade your PC to Windows 11 if your PC does not support Windows 11 yet. This is good for if you do not have a USB and want to upgrade to Windows 11 on unsupported hardware."><AccessText TextWrapping="Wrap" Text="Allow this PC to upgrade to Windows 11" /></CheckBox>
|
||||||
|
<CheckBox Name="MicroWinESD" Margin="{DynamicResource MicrowinCheckBoxMargin}" IsChecked="False" ToolTip="The ESD file format compresses the installation image even further, therefore reducing ISO file sizes a little more. Select this if you have a small USB."><AccessText TextWrapping="Wrap" Text="Convert this image to ESD (This will take longer)" /></CheckBox>
|
||||||
|
<CheckBox Name="MicroWinNoFLA" Margin="{DynamicResource MicrowinCheckBoxMargin}" IsChecked="True" ToolTip="The First Logon Animation is an animation that is played when a user logs on for the first time. It can artificially increase wait times. Select this option to automatically close the first logon animation and reach the desktop quicker (additional system preparation will still be done)"><AccessText TextWrapping="Wrap" Text="Skip First Logon Animation" /></CheckBox>
|
||||||
|
<TextBlock Margin="6" Padding="1" TextWrapping="Wrap">WinUtil configuration file (JSON)</TextBlock>
|
||||||
|
<Grid>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="*" /> <!-- Takes the remaining space -->
|
||||||
|
<ColumnDefinition Width="32" /> <!-- Fixed width for Button -->
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<TextBox Name="MicrowinAutoConfigBox" Background="Transparent" BorderBrush="{DynamicResource MainForegroundColor}"
|
||||||
|
Text=""
|
||||||
|
Margin="2"
|
||||||
|
IsReadOnly="False"
|
||||||
|
Grid.Column="0"
|
||||||
|
ToolTip="Path of your configuration file"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Foreground="{DynamicResource LabelboxForegroundColor}">
|
||||||
|
</TextBox>
|
||||||
|
<Button Name="MicrowinAutoConfigBtn"
|
||||||
|
Width="Auto"
|
||||||
|
Height="Auto"
|
||||||
|
Grid.Column="1"
|
||||||
|
Margin="2"
|
||||||
|
Padding="1" VerticalAlignment="Center">
|
||||||
|
<Button.Content>
|
||||||
|
...
|
||||||
|
</Button.Content>
|
||||||
|
</Button>
|
||||||
|
</Grid>
|
||||||
|
<Rectangle Fill="{DynamicResource MainForegroundColor}" Height="2" HorizontalAlignment="Stretch" Margin="0,10,0,10"/>
|
||||||
<Button Name="WPFMicrowin" Content="Start the process" Margin="2" Padding="15"/>
|
<Button Name="WPFMicrowin" Content="Start the process" Margin="2" Padding="15"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<StackPanel HorizontalAlignment="Left" SnapsToDevicePixels="True" Margin="1" Visibility="Collapsed">
|
<StackPanel HorizontalAlignment="Left" SnapsToDevicePixels="True" Margin="1" Visibility="Collapsed">
|
||||||
@@ -1527,7 +1577,7 @@
|
|||||||
May take several minutes to process the ISO depending on your machine and connection <LineBreak/>
|
May take several minutes to process the ISO depending on your machine and connection <LineBreak/>
|
||||||
- Put it somewhere on the C:\ drive so it is easily accessible <LineBreak/>
|
- Put it somewhere on the C:\ drive so it is easily accessible <LineBreak/>
|
||||||
- Launch WinUtil and MicroWin <LineBreak/>
|
- Launch WinUtil and MicroWin <LineBreak/>
|
||||||
- Click on the "Select Windows ISO" button and wait for WinUtil to process the image <LineBreak/>
|
- Click on the "Get Windows ISO" button and wait for WinUtil to process the image <LineBreak/>
|
||||||
It will be processed and unpacked which may take some time <LineBreak/>
|
It will be processed and unpacked which may take some time <LineBreak/>
|
||||||
- Once complete, choose which Windows flavor you want to base your image on <LineBreak/>
|
- Once complete, choose which Windows flavor you want to base your image on <LineBreak/>
|
||||||
- Click the "Start Process" button <LineBreak/>
|
- Click the "Start Process" button <LineBreak/>
|
||||||
|
|||||||
Reference in New Issue
Block a user