Compare commits

...
Author SHA1 Message Date
Jeffrey b9924b16ab Fix uninstallation of user-scope apps in WinGet with deferred uninstall 2026-10-07 23:35:59 +02:00
Federico TensiandGitHub 0fb974c8a0 Add Italian (it-IT) translations (#786) 2026-10-05 23:42:56 +02:00
JeffreyandGitHub 8485566cc6 Add performance warning to Xbox Game Overlay descriptions (#787) 2026-10-05 21:32:29 +02:00
Jeffrey 641cc0da18 Update app names & descriptions 2026-10-05 21:25:54 +02:00
YWZsaXRvandGitHub 96a4e02058 Add pt-BR app names and descriptions (#781) 2026-10-05 20:57:53 +02:00
JeffreyandGitHub 0bc0c9a49e Add settings UI for theme and language (#780) 2026-10-04 22:43:56 +02:00
JeffreyandGitHub 680f21ccfa Add warning to 'Hide Home' feature tooltips regarding Quick access links (#779) 2026-10-04 20:52:47 +02:00
JeffreyandGitHub bbdb9365f4 Add Dutch (nl-NL) translations (#778) 2026-10-03 19:00:17 +02:00
Yaşar ArabacıandGitHub 6092513435 Add an option to disable Google Chrome AI features (#763) 2026-10-03 01:02:07 +02:00
EvilGorilla13andGitHub 872d6b0bd5 Optimize installed app detection (#771) 2026-10-03 00:48:15 +02:00
JeffreyandGitHub 8b736ddd50 Allow home screen buttons to expand to fit localized labels (#775) 2026-10-01 21:55:49 +02:00
68e2a7e385 Feature/pt-BR-translation (#768)
Co-authored-by: 2ButAqUxVy <2ButAqUxVy@users.noreply.github.com>
Co-authored-by: YWZsaXRv <YWZsaXRv@users.noreply.github.com>
2026-10-01 21:47:54 +02:00
SashankandGitHub 6feebba878 Add localization for app names and descriptions (#769)
* Translate app names and descriptions in Config/Apps.json

* Document Apps section and first-ID translation key for multi-ID apps

* Fix app list breaking when "Only show installed" runs translation in an isolated runspace
2026-10-01 21:25:34 +02:00
SashankandGitHub 32024662f3 Add localization framework for the GUI (en-US baseline) (#764)
Credit to @jmolinap2 for their work in #643, which was used as inspiration.
2026-09-10 17:48:43 +02:00
Raphire 6012b02ea2 Update CONTRIBUTING.md 2026-08-30 12:24:51 +02:00
Raphire 687ddea148 Update CONTRIBUTING.md 2026-08-30 12:16:28 +02:00
Jeffrey 9b75b1a4e6 Update CONTRIBUTING.md 2026-08-30 02:04:45 +02:00
Jeffrey f431c56159 Bump version 2026-08-24 22:13:23 +02:00
JeffreyandGitHub ef8811d28d Improve error reporting & handling (#741) 2026-08-24 20:34:50 +02:00
Jeffrey fff1fcd0b2 update tooltips, labels and category for Desktop Spotlight feature 2026-08-22 02:31:59 +02:00
Ryan DuguidandGitHub 4a50e52be9 Add an option to hide the desktop Spotlight icon without disabling wallpaper rotation (#746) 2026-08-22 02:30:36 +02:00
JeffreyandGitHub 26d2bcb4a6 fix: improve error reporting when fetching files from GitHub (#753) 2026-08-21 22:15:05 +02:00
Ryan DuguidandGitHub 460eb75e1e Add FeatureId and launcher parameter contract tests (#751) 2026-08-21 21:43:55 +02:00
JeffreyandGitHub 1a26934499 Improve error handling in Set-StoreSearchSuggestionsDisabled (#739) 2026-08-16 18:49:15 +02:00
SashankandGitHub 5072958b10 fix: match tweak presets and app-removal scope by stable ID instead of translatable text (#737) 2026-08-16 17:52:58 +02:00
JeffreyandGitHub 31feaeb6f5 Fix ForceRemoveEdge switch (#736) 2026-08-12 21:10:47 +02:00
Jeffrey dd929f8eec Surface errors when writing to file 2026-08-12 17:31:50 +02:00
Jeffrey b21be418cd fix: force removal of empty LastUsedSettings.json file 2026-08-12 16:40:26 +02:00
Jeffrey 25fb9f3725 Improve GUI error messaging 2026-08-12 16:38:14 +02:00
JeffreyandGitHub d1338cd027 Enhance app removal verification and error reporting (#735) 2026-08-12 15:56:29 +02:00
Jeffrey 9505a5a374 Update README ExecutionPolicy override instructions 2026-08-12 12:14:26 +02:00
JeffreyandGitHub c0599cba1f feat: add timeout for WinGet uninstall to prevent hanging (#731) 2026-08-09 01:24:27 +02:00
5c838384d6 fix: remove Mark-of-the-Web from script files at startup (#724)
Co-authored-by: Jeffrey <9938813+Raphire@users.noreply.github.com>
2026-08-09 01:24:14 +02:00
Jeffrey 6957ce4220 Update GUI logo 2026-08-01 16:16:24 +02:00
SashankandGitHub 0f30b62221 fix: support QWord, ExpandString and MultiString in the .reg fallback writer (#715) 2026-07-26 22:33:28 +02:00
JeffreyandGitHub 32cedaf65d Improve registry backup safety and add optional backup skipping (#710) 2026-07-25 20:05:49 +02:00
JeffreyandGitHub 68cacfce89 fix: force stop widget processes to prevent prompt (#713) 2026-07-23 22:23:00 +02:00
JeffreyandGitHub a9c1736e46 refactor: rename NoRestartExplorer parameter to SkipExplorerRestart (#709)
The old `NoRestartExplorer` parameter is kept as an alias and will
continue to work, but is considered deprecated
2026-07-19 22:58:03 +02:00
JeffreyandGitHub 9c033dbf98 Add comprehensive test suite, fix minor issues, rename function and file names to match approved verbs (#708) 2026-07-19 22:06:07 +02:00
Hill PatelandGitHub a7292e4f35 fix(registry-restore): reject Data/Kind mismatches before restore begins (#704) 2026-07-19 01:53:04 +02:00
KushidaandGitHub f739a0e474 fix: escape Windows Terminal path (#702) 2026-07-18 15:16:39 +02:00
JeffreyandGitHub 63b1f61fd1 Update README.md 2026-07-17 12:45:45 +02:00
de817399e6 fix: honor cancellation during changes (#700)
Co-authored-by: Jeffrey <9938813+Raphire@users.noreply.github.com>
2026-07-14 22:06:40 +02:00
Jeffrey 8fa1332ff0 Update download messages for development and stable versions of Win11Debloat 2026-07-14 21:18:39 +02:00
Jeffrey ce36b8edfb Bump version 2026-07-11 20:07:47 +02:00
JeffreyandGitHub 3b78e8d4ed Fix: Show reboot warning for undoing features that require it (#699) 2026-07-11 20:04:51 +02:00
Jeffrey 74dedc00e9 Add tooltip to user selection selectbox 2026-07-11 00:04:08 +02:00
Jeffrey 5571700634 Disabling Window Snapping now warns users that a reboot is required to apply 2026-07-09 22:02:18 +02:00
Jeffrey c2ea697552 Hide irrelevant Settings home page settings in Windows 10 2026-07-09 22:01:33 +02:00
JeffreyandGitHub ce8c10042e Fix issues with domain accounts & fix run.bat breaking when launched from path with certain characters (#693) 2026-07-08 23:18:04 +02:00
JeffreyandGitHub 89a5d508d8 Fix win10 icons by falling back to Segoe MDL2 Assets (#696) 2026-07-08 23:16:01 +02:00
Jeffrey e38aafe01e Update README.md 2026-07-08 21:40:33 +02:00
Jeffrey d336f98b39 Update feature wording 2026-07-08 21:38:48 +02:00
Raphire a70a2ccbd6 Update README.md 2026-07-08 19:30:25 +02:00
JeffreyandGitHub 0ef789cc3a Add option to prevent auto install of device apps & add LG monitor app removal (#695)
* Add support for removing LG monitor app

* Add option to prevent auto install of device companion apps via Windows Update

* Update CONTRIBUTING.md with missing Apps.json fields
2026-07-08 17:54:13 +02:00
HetCreepandGitHub 82f50d6d13 fix(startup): refuse to run under PowerShell 7 with a clear message (#676) 2026-07-08 15:22:36 +02:00
SqidyandGitHub 949515da3e Added Feature Disabling Notifications Through Win11Debloat (#690) 2026-07-06 19:29:09 +02:00
0eeb8f323a fix(elevation): quote script path and parameter values in admin relaunch (#683)
Co-authored-by: Jeffrey <9938813+Raphire@users.noreply.github.com>
2026-07-04 17:35:24 +02:00
HetCreepandGitHub a9a89c1f13 fix(store-search): correct deny permission removal in undo path (#684) 2026-07-04 13:57:50 +02:00
HetCreepandGitHub 339764eb18 Fix broken contributing link in README.md (#688) 2026-07-02 23:03:44 +02:00
3b4a5f16ad fix(restore-gui): surface registry-backup load failures to the user (#685)
Co-authored-by: Jeffrey <9938813+Raphire@users.noreply.github.com>
2026-07-02 21:16:47 +02:00
JeffreyandGitHub 9a700afaed Consolidate Get-Dev.ps1 into Get.ps1, add WhatIf support to Get.ps1 (#681) 2026-06-28 22:53:27 +02:00
Jeffrey 26b313372b Update README.md 2026-06-25 16:41:32 +02:00
209 changed files with 20261 additions and 3265 deletions
+149 -20
View File
@@ -18,7 +18,7 @@ You can help us test the latest changes and additions to the script. If you enco
You can launch the prerelease version of Win11Debloat by running this command: You can launch the prerelease version of Win11Debloat by running this command:
```ps1 ```ps1
& ([scriptblock]::Create((irm "https://debloat.raphi.re/dev"))) & ([scriptblock]::Create((irm "https://debloat.raphi.re/"))) -Dev
``` ```
# Contributing Code # Contributing Code
@@ -48,7 +48,7 @@ You can launch the prerelease version of Win11Debloat by running this command:
2. Enable script execution if necessary: 2. Enable script execution if necessary:
```powershell ```powershell
Set-ExecutionPolicy Unrestricted -Scope Process -Force Set-ExecutionPolicy Bypass -Scope Process -Force
``` ```
3. Navigate to your Win11Debloat directory 3. Navigate to your Win11Debloat directory
@@ -58,21 +58,76 @@ You can launch the prerelease version of Win11Debloat by running this command:
.\Win11Debloat.ps1 .\Win11Debloat.ps1
``` ```
## Implementation Guidelines ### Running Automated Tests
The automated tests use Pester 5 and are found in the `Tests` directory. They cover registry operations, app removal, CLI/GUI logic, and config handling. Some Windows behavior is mocked so the tests can run safely, but they do not replace manual testing on a Windows test environment.
The bootstrap option can be used to automatically install Pester on your machine and run the full suite of tests:
```powershell
.\Scripts\Run-Tests.ps1 -Bootstrap
```
After the initial setup, you can simply run the full suite with:
```powershell
.\Scripts\Run-Tests.ps1
```
For a focused test run during development, you can also call Pester directly:
```powershell
Invoke-Pester -Path .\Tests\Invoke-Changes.Tests.ps1 -Output Detailed
```
GitHub Actions runs the same suite with Windows
PowerShell 5.1 for pull requests and pushes to `master`.
## Architecture & Design
Win11Debloat is a PowerShell script with a WPF (Windows Presentation Foundation)-based GUI and command-line interface. The CLI provides an alternative to the GUI, allowing most features to be invoked directly through command-line parameters. The project uses a data-driven architecture, separating feature and application definitions from the logic that applies them.
### Entry Points
`Win11Debloat.ps1` is the main entry point and can be launched directly or through one of the provided launchers:
* `Run.bat` launches a locally downloaded copy of `Win11Debloat.ps1`.
* `Get.ps1` downloads Win11Debloat and launches `Win11Debloat.ps1`.
Both `Get.ps1` and `Win11Debloat.ps1` support [command-line parameters](https://github.com/Raphire/Win11Debloat/wiki/Command-Line-Interface), allowing Win11Debloat to be configured and run without using the GUI.
### High-Level Architecture
`Win11Debloat.ps1` loads the configuration and shared functions, then routes execution through either the WPF GUI or CLI. Both interfaces use the same underlying feature and app-removal engine.
```mermaid
flowchart TB
Main[Win11Debloat.ps1] --> GUI[WPF GUI]
Main --> CLI[CLI]
Config["Config Files (JSON)"] --> GUI
Config --> CLI
GUI --> Changes[Apply Selected Changes]
CLI --> Changes
Config --> Changes
Changes --> Regfiles[Regfiles]
Changes --> Tools[Appx / WinGet]
```
### Project Structure ### Project Structure
Understanding the project structure is essential for contributing effectively:
```text ```text
Win11Debloat/ Win11Debloat/
├── Win11Debloat.ps1 # Main PowerShell script ├── Win11Debloat.ps1 # Main PowerShell script
├── Run.bat # Batch launcher for the quick launch method ├── Run.bat # Local launcher
├── Scripts/ # Additional PowerShell scripts and functions ├── Scripts/ # Additional PowerShell scripts and functions
│ ├── Get.ps1 # Script used for the quick launch method to automatically download and run Win11debloat │ ├── Get.ps1 # Download-and-launch script
│ ├── Run-Tests.ps1 # Pester test runner (optionally bootstraps Pester)
│ ├── AppRemoval/ # App package removal logic │ ├── AppRemoval/ # App package removal logic
│ ├── CLI/ # Command-line interface helpers │ ├── CLI/ # Command-line interface helpers
│ ├── Features/ # Feature apply/undo logic (e.g. InvokeChanges.ps1, ReplaceStartMenu.ps1) │ ├── Features/ # Feature apply, undo, backup, and restore logic
│ ├── FileIO/ # File input/output helpers │ ├── FileIO/ # File input/output helpers
│ ├── GUI/ # GUI window definitions and logic │ ├── GUI/ # GUI window definitions and logic
│ ├── Helpers/ # Shared helper functions │ ├── Helpers/ # Shared helper functions
@@ -81,20 +136,24 @@ Win11Debloat/
│ ├── Apps.json # List of supported apps for removal │ ├── Apps.json # List of supported apps for removal
│ ├── DefaultSettings.json # Default configuration preset │ ├── DefaultSettings.json # Default configuration preset
│ ├── Features.json # All features with metadata │ ├── Features.json # All features with metadata
│ └── LastUsedSettings.json # Last used configuration (generated during use) │ ├── LastUsedSettings.json # Last used configuration (generated during use)
│ └── Languages/ # GUI translation files, one folder per culture code (e.g. en-US/)
├── Regfiles/ # Registry files for all features ├── Regfiles/ # Registry files for all features
│ ├── Undo/ # Registry files for reverting features │ ├── Undo/ # Registry files for reverting features
│ └── Sysprep/ # Registry files for Sysprep mode │ └── Sysprep/ # Registry files for Sysprep mode
├── Schemas/ # XAML Schemas for GUI elements ├── Schemas/ # XAML views and shared GUI resources
├── Assets/ # Static assets (icons, start menu templates) ├── Assets/ # Static assets (icons, start menu templates)
├── Tests/ # Pester tests for script and XAML contracts
├── Backups/ # Registry backups (generated during use) ├── Backups/ # Registry backups (generated during use)
└── Logs/ # Script logs (generated during use) └── Logs/ # Script logs (generated during use)
``` ```
## Implementation Guidelines
### Best Practices ### Best Practices
1. **Test Thoroughly**: Always test your changes on a Windows test environment before submitting. This includes undoing tweaks and running script as another user and in Sysprep mode. 1. **Test Thoroughly**: Always test your changes on a Windows test environment before submitting. This includes undoing tweaks and running script as another user and in Sysprep mode.
2. **Document Changes**: Update the `README.md` and other relevant documentation. Wiki documentation will be generated/updated based on the `Features.json` and `Apps.json` files. 2. **Document Changes**: Update the `README.md`, wiki, and other relevant documentation.
3. **Follow Existing Patterns**: Look at existing implementations for guidance. 3. **Follow Existing Patterns**: Look at existing implementations for guidance.
4. **Use Clear Naming**: Choose descriptive names for features, IDs, and registry files. 4. **Use Clear Naming**: Choose descriptive names for features, IDs, and registry files.
5. **Minimal Changes**: Registry files should only modify what's necessary. Avoid using policies where possible. 5. **Minimal Changes**: Registry files should only modify what's necessary. Avoid using policies where possible.
@@ -118,7 +177,7 @@ Avoid these common mistakes when contributing:
1. **Forgetting Get.ps1**: When adding a new command-line parameter, contributors often remember to add it to `Win11Debloat.ps1` but forget to add the same parameter to `Scripts/Get.ps1`. Both files **must** have matching parameters. 1. **Forgetting Get.ps1**: When adding a new command-line parameter, contributors often remember to add it to `Win11Debloat.ps1` but forget to add the same parameter to `Scripts/Get.ps1`. Both files **must** have matching parameters.
2. **Missing Registry Files**: Always create an `Undo` registry file for reversibility, aswell as a `Sysprep` registry file for applying changes to other users and Sysprep mode. 2. **Missing Registry Files**: For registry-backed features, create an `Undo` registry file for reversibility and a `Sysprep` registry file for applying changes to other users and Sysprep mode.
3. **Incorrect Registry Hives for Sysprep**: Sysprep registry files are meant to apply changes to a different user. Registry keys in the `HKEY_CURRENT_USER` hive must use `hkey_users\default` instead. Ensure you update **all** registry keys in the file. 3. **Incorrect Registry Hives for Sysprep**: Sysprep registry files are meant to apply changes to a different user. Registry keys in the `HKEY_CURRENT_USER` hive must use `hkey_users\default` instead. Ensure you update **all** registry keys in the file.
@@ -137,6 +196,8 @@ Avoid these common mistakes when contributing:
8. **Hardcoded Paths**: When writing PowerShell logic, use `$PSScriptRoot` and script variables instead of hardcoded paths. This ensures the script works regardless of where it's installed. 8. **Hardcoded Paths**: When writing PowerShell logic, use `$PSScriptRoot` and script variables instead of hardcoded paths. This ensures the script works regardless of where it's installed.
9. **Missing Translation Entry**: A new Feature, Category, UI Group, or App needs a matching entry in `Config/Languages/en-US/` (see [Localizing UI Text](#localizing-ui-text)). Without one, the GUI silently falls back to displaying the raw `FeatureId`/`CategoryId`/`GroupId`/`AppId` instead of your `Label`/`ToolTip`/`FriendlyName`/`Description` text.
## Implementing New Features ## Implementing New Features
### Adding Support for a New App ### Adding Support for a New App
@@ -146,12 +207,14 @@ Avoid these common mistakes when contributing:
To add a new app that can be removed via Win11Debloat: To add a new app that can be removed via Win11Debloat:
1. **Find the AppId**: To find the correct AppId for an app: 1. **Find the AppId**: For an Appx app, find the package name with:
```powershell ```powershell
Get-AppxPackage | Select-Object Name, PackageFullName Get-AppxPackage | Select-Object Name, PackageFullName
``` ```
For a WinGet app, use `winget list` and use its `Id` value.
2. **Edit `Config/Apps.json`**: Add a new entry to the `"Apps"` array: 2. **Edit `Config/Apps.json`**: Add a new entry to the `"Apps"` array:
```json ```json
@@ -159,14 +222,34 @@ To add a new app that can be removed via Win11Debloat:
"FriendlyName": "Display Name", "FriendlyName": "Display Name",
"AppId": "AppPackageIdentifier", "AppId": "AppPackageIdentifier",
"Description": "Brief description of the app", "Description": "Brief description of the app",
"SelectedByDefault": true|false "SelectedByDefault": false,
"Recommendation": "optional",
"RemovalMethod": "Appx"
} }
``` ```
3. **Follow the Guidelines**: **Field Descriptions**:
- `FriendlyName`: Display name shown in the GUI.
- `AppId`: The package name from `Get-AppxPackage` or the `Id` from
`winget list`, depending on removal method. Use an array when one app
requires multiple identifiers. The GUI looks up the translation entry by
the first ID in the array, key `Apps.json` by that one.
- `Description`: Brief description of the app shown in the GUI.
- `SelectedByDefault`: Set to `true` only for apps that are largely considered bloatware, otherwise set to `false`.
- `Recommendation`: Indicates how strongly the app is recommended for removal. One of:
- `safe` — safe to remove for most users
- `optional` — can be safely removed if the user doesn't need the app
- `unsafe` — should only remove if the user knows what they are doing
- `RemovalMethod`: The method used to remove the app. One of:
- `Appx` — remove as a standard Appx package via `Remove-AppxPackage` (most apps)
- `WinGet` — remove via WinGet (`winget uninstall`). Use for non-Appx apps such as Microsoft Copilot.
3. **Add the English Translation Entry**: Add a matching entry for your `AppId` to `Config/Languages/en-US/Apps.json` (see [Localizing UI Text](#localizing-ui-text)) with `FriendlyName` and `Description` matching what you set above, so the GUI shows them instead of the raw `AppId`.
4. **Follow the Guidelines**:
- Use clear, user-friendly names for `FriendlyName` - Use clear, user-friendly names for `FriendlyName`
- Set `SelectedByDefault` to `true` only for apps that are largely considered bloatware, otherwise set to `false`
- Provide a concise description explaining what the app does - Provide a concise description explaining what the app does
### Adding a New Feature ### Adding a New Feature
@@ -204,7 +287,7 @@ Windows Registry Editor Version 5.00
#### 1b. Implement the Feature Logic #### 1b. Implement the Feature Logic
If your feature requires more than just applying a registry file, add custom logic to the main script in the appropriate section. In most cases this will involve creating a new entry in the `Invoke-FeatureApply` function (in `Scripts/Features/InvokeChanges.ps1`) for your new feature. If your feature also requires custom undo logic (beyond a simple registry file import), add a corresponding entry to the `Invoke-FeatureUndo` function in the same file. If your feature requires more than just applying a registry file, add custom logic to the main script in the appropriate section. In most cases this will involve creating a new entry in the `Invoke-FeatureApply` function (in `Scripts/Features/Invoke-Changes.ps1`) for your new feature. If your feature also requires custom undo logic (beyond a simple registry file import), add a corresponding entry to the `Invoke-FeatureUndo` function in the same file.
#### 2. Add Feature to Features.json #### 2. Add Feature to Features.json
@@ -254,6 +337,14 @@ Add a corresponding parameter to both `Win11Debloat.ps1` AND `Scripts/Get.ps1`,
[switch]$YourFeatureId, [switch]$YourFeatureId,
``` ```
#### 4. Add the English Translation Entry
Add a matching entry for your `FeatureId` to `Config/Languages/en-US/Features.json` (see [Localizing UI Text](#localizing-ui-text)) so the GUI shows your `Label`/`ToolTip`/etc. instead of the raw `FeatureId`.
#### 5. Add or Update Tests
Add or update Pester coverage for the new behavior, then run the full suite.
### Adding a Feature to the Default Preset ### Adding a Feature to the Default Preset
> [!IMPORTANT] > [!IMPORTANT]
@@ -319,17 +410,22 @@ To add a new category for organizing features:
```json ```json
{ {
"CategoryId": "YourCategoryId",
"Name": "Your Category Name", "Name": "Your Category Name",
"Icon": "&#xE#### ;" "Icon": "&#xE####;"
} }
``` ```
`CategoryId` is the stable identifier used for tweak presets, app-removal scope, and localization lookups. `Name` stays as the English display fallback. Skip `CategoryId` and the category falls back to using its `Name` as the ID, which breaks translation lookups, so always set one.
> [!TIP] > [!TIP]
> Use [Segoe Fluent Icon Assets](https://learn.microsoft.com/en-us/windows/apps/design/iconography/segoe-fluent-icons-font) for icon codes. > Use [Segoe Fluent Icon Assets](https://learn.microsoft.com/en-us/windows/apps/design/iconography/segoe-fluent-icons-font) for icon codes.
### Adding UI Groups ### Adding UI Groups
UI Groups allow features to be grouped together in the GUI with a combobox (dropdown) selection: UI Groups allow features to be grouped together in the GUI with a combobox
(dropdown) selection. Add the group to the top-level `"UiGroups"` array in
`Config/Features.json` and use a unique `GroupId`:
```json ```json
{ {
@@ -351,6 +447,39 @@ UI Groups allow features to be grouped together in the GUI with a combobox (drop
} }
``` ```
>[!IMPORTANT]
> Define the referenced features before adding a group. Each `FeatureId` in a group's `Values` list must already be defined in the `"Features"` array in `Features.json`. Features referenced by a group are shown through that group rather than as standalone controls.
Add a matching entry for your `GroupId` to `Config/Languages/en-US/Features.json` (see [Localizing UI Text](#localizing-ui-text)) so the GUI shows your `Label`/`ToolTip`/option text instead of the raw `GroupId`.
### Localizing UI Text
GUI text lives in `Config/Languages/en-US/`, not hardcoded in `Schemas/*.xaml` or `Scripts/GUI/*.ps1`. Adding or changing a Feature, Category, UI Group, or App means updating the matching English entry, or the GUI falls back to showing the raw ID.
- `Config/Languages/en-US/Features.json`, under `"Features"`, keyed by `FeatureId`. Add `Label`, `ToolTip`, `ApplyText`, `UndoLabel`, and `ApplyUndoText` to match whatever fields you set in `Config/Features.json`.
- `Config/Languages/en-US/Features.json`, under `"UiGroups"`, keyed by `GroupId`. Add `Label`, `ToolTip`, and a `Values` map of `FeatureId: "Option label"` matching the group's `Values` array.
- `Config/Languages/en-US/Categories.json`, keyed by `CategoryId`. Add a `Label` for every new category.
- `Config/Languages/en-US/Apps.json`, keyed by `AppId`. Add `FriendlyName` and `Description` for every new app.
- `Config/Languages/en-US/Chrome.json`, a flat key/value map for static GUI chrome: buttons, dialog titles, tooltips not tied to a specific Feature/Category/UiGroup. Add a key here only for new static text, and reference it from XAML with a `%LANG:YourKey%` marker or from PowerShell with `Get-Translation -Key 'YourKey'`.
Check for an existing `Chrome.json` key with the same English text before adding a new one. Two keys holding identical strings is duplication waiting to drift.
Not everything needs a translation key. A `throw` guarding against a caller passing the wrong argument type, or any other error that signals a bug in the code rather than something the user did, stays as a plain English string. No user will ever see it.
A new language is its own pull request, not something bundled with unrelated changes.
### Adding a New Language
1. **Create the language folder**: copy `Config/Languages/en-US/` to `Config/Languages/<culture-code>/`, using the .NET culture code the GUI should match (`nl-NL`, `es-ES`). This is also the folder matched against the user's Windows display language: exact match first, then a language-only prefix match (`nl-BE` falls back to `nl-NL` if that's the only Dutch folder present), then `en-US` if nothing matches.
2. **Translate the four files** (`Chrome.json`, `Features.json`, `Categories.json`, `Apps.json`), keeping every key name exactly as it is in `en-US`. Only the values change. Leave a key untranslated and the GUI shows the `en-US` text for it instead of a blank or a crash, so a translation can land incrementally.
3. **Add the language's plural rule**. Strings using the `_one`/`_other` suffix convention (see `AppsSelectedCount_one` in `en-US/Chrome.json`) need a matching `case` in `Get-PluralCategory` (`Scripts/FileIO/Import-LanguageFile.ps1`), keyed by language prefix (`'nl'`). Several languages share English's rule, singular at exactly 1, plural otherwise, and can reuse it as-is. Others need more categories: CLDR defines `zero`/`one`/`two`/`few`/`many`/`other`. Match your key suffixes to whatever categories your language's rule actually uses.
4. **Check your coverage**. Dot-source `Scripts/FileIO/Import-LanguageFile.ps1` and run `Test-LanguageKeyCoverage -LanguageCode '<culture-code>'` to diff your key set against `en-US`. Check `ResolvedLanguageCode` matches the folder you meant to test, `MissingKeys` is the same fallback-eligible gap from step 2, fine to leave for later, and `ExtraKeys` usually means a typo'd key name that nothing will ever look up.
5. **Test it**. Run `.\Win11Debloat.ps1 -Language '<culture-code>'` to launch the GUI in that language regardless of your Windows display language, and click through every tab, dialog, and tooltip.
## Submitting a Pull Request ## Submitting a Pull Request
1. **Commit your changes** with clear, descriptive commit messages: 1. **Commit your changes** with clear, descriptive commit messages:
@@ -371,7 +500,7 @@ UI Groups allow features to be grouped together in the GUI with a combobox (drop
- Go to the original Win11Debloat repository - Go to the original Win11Debloat repository
- Click "New Pull Request" - Click "New Pull Request"
- Select your fork and branch - Select your fork and branch
- Provide a clear description of your changes, include references to the registry keys used - Provide a clear description of your changes. For registry changes, include the registry keys used
- Reference any related issues - Reference any related issues
4. **Respond to feedback**: Be prepared to make adjustments based on code review feedback. 4. **Respond to feedback**: Be prepared to make adjustments based on code review feedback.
+26
View File
@@ -0,0 +1,26 @@
name: Tests
on:
pull_request:
push:
branches:
- master
workflow_dispatch:
permissions:
contents: read
jobs:
pester:
name: Pester (Windows PowerShell 5.1)
runs-on: windows-latest
timeout-minutes: 15
steps:
- name: Check out repository
uses: actions/checkout@v4
with:
persist-credentials: false
- name: Run tests
shell: powershell
run: ./Scripts/Run-Tests.ps1 -Bootstrap
+25 -16
View File
@@ -20,7 +20,7 @@
{ {
"FriendlyName": "Cortana", "FriendlyName": "Cortana",
"AppId": "Microsoft.549981C3F5F10", "AppId": "Microsoft.549981C3F5F10",
"Description": "Microsoft Cortana voice assistant (Discontinued)", "Description": "Microsoft Cortana voice assistant (discontinued)",
"SelectedByDefault": true, "SelectedByDefault": true,
"Recommendation": "safe", "Recommendation": "safe",
"RemovalMethod": "Appx" "RemovalMethod": "Appx"
@@ -28,7 +28,7 @@
{ {
"FriendlyName": "Bing Finance", "FriendlyName": "Bing Finance",
"AppId": "Microsoft.BingFinance", "AppId": "Microsoft.BingFinance",
"Description": "Finance news and tracking via Bing (Discontinued)", "Description": "Finance news and tracking via Bing (discontinued)",
"SelectedByDefault": true, "SelectedByDefault": true,
"Recommendation": "safe", "Recommendation": "safe",
"RemovalMethod": "Appx" "RemovalMethod": "Appx"
@@ -36,7 +36,7 @@
{ {
"FriendlyName": "Bing Food And Drink", "FriendlyName": "Bing Food And Drink",
"AppId": "Microsoft.BingFoodAndDrink", "AppId": "Microsoft.BingFoodAndDrink",
"Description": "Recipes and food news via Bing (Discontinued)", "Description": "Recipes and food news via Bing (discontinued)",
"SelectedByDefault": true, "SelectedByDefault": true,
"Recommendation": "safe", "Recommendation": "safe",
"RemovalMethod": "Appx" "RemovalMethod": "Appx"
@@ -44,7 +44,7 @@
{ {
"FriendlyName": "Bing Health And Fitness", "FriendlyName": "Bing Health And Fitness",
"AppId": "Microsoft.BingHealthAndFitness", "AppId": "Microsoft.BingHealthAndFitness",
"Description": "Health and fitness tracking/news via Bing (Discontinued)", "Description": "Health and fitness tracking/news via Bing (discontinued)",
"SelectedByDefault": true, "SelectedByDefault": true,
"Recommendation": "safe", "Recommendation": "safe",
"RemovalMethod": "Appx" "RemovalMethod": "Appx"
@@ -52,7 +52,7 @@
{ {
"FriendlyName": "Bing News", "FriendlyName": "Bing News",
"AppId": "Microsoft.BingNews", "AppId": "Microsoft.BingNews",
"Description": "News aggregator via Bing (Replaced by Microsoft News/Start)", "Description": "News aggregator via Bing (discontinued)",
"SelectedByDefault": true, "SelectedByDefault": true,
"Recommendation": "safe", "Recommendation": "safe",
"RemovalMethod": "Appx" "RemovalMethod": "Appx"
@@ -60,7 +60,7 @@
{ {
"FriendlyName": "Bing Sports", "FriendlyName": "Bing Sports",
"AppId": "Microsoft.BingSports", "AppId": "Microsoft.BingSports",
"Description": "Sports news and scores via Bing (Discontinued)", "Description": "Sports news and scores via Bing (discontinued)",
"SelectedByDefault": true, "SelectedByDefault": true,
"Recommendation": "safe", "Recommendation": "safe",
"RemovalMethod": "Appx" "RemovalMethod": "Appx"
@@ -76,7 +76,7 @@
{ {
"FriendlyName": "Bing Travel", "FriendlyName": "Bing Travel",
"AppId": "Microsoft.BingTravel", "AppId": "Microsoft.BingTravel",
"Description": "Travel planning and news via Bing (Discontinued)", "Description": "Travel planning and news via Bing (discontinued)",
"SelectedByDefault": true, "SelectedByDefault": true,
"Recommendation": "safe", "Recommendation": "safe",
"RemovalMethod": "Appx" "RemovalMethod": "Appx"
@@ -196,7 +196,7 @@
{ {
"FriendlyName": "Microsoft News", "FriendlyName": "Microsoft News",
"AppId": "Microsoft.News", "AppId": "Microsoft.News",
"Description": "News aggregator (Replaced Bing News, now part of Microsoft Start)", "Description": "Microsoft News app for Windows",
"SelectedByDefault": true, "SelectedByDefault": true,
"Recommendation": "safe", "Recommendation": "safe",
"RemovalMethod": "Appx" "RemovalMethod": "Appx"
@@ -244,7 +244,7 @@
{ {
"FriendlyName": "Skype (UWP)", "FriendlyName": "Skype (UWP)",
"AppId": "Microsoft.SkypeApp", "AppId": "Microsoft.SkypeApp",
"Description": "Skype communication app, Universal Windows Platform version (Discontinued)", "Description": "Skype communication app, Universal Windows Platform version (discontinued)",
"SelectedByDefault": true, "SelectedByDefault": true,
"Recommendation": "safe", "Recommendation": "safe",
"RemovalMethod": "Appx" "RemovalMethod": "Appx"
@@ -260,7 +260,7 @@
{ {
"FriendlyName": "Dev Home", "FriendlyName": "Dev Home",
"AppId": "Microsoft.Windows.DevHome", "AppId": "Microsoft.Windows.DevHome",
"Description": "Developer dashboard and tool configuration utility (Discontinued)", "Description": "Developer dashboard and tool configuration utility (discontinued)",
"SelectedByDefault": true, "SelectedByDefault": true,
"Recommendation": "safe", "Recommendation": "safe",
"RemovalMethod": "Appx" "RemovalMethod": "Appx"
@@ -300,7 +300,7 @@
{ {
"FriendlyName": "Xbox Console Companion", "FriendlyName": "Xbox Console Companion",
"AppId": "Microsoft.XboxApp", "AppId": "Microsoft.XboxApp",
"Description": "Old Xbox Console Companion App (Discontinued)", "Description": "Old Xbox Console Companion App (discontinued)",
"SelectedByDefault": true, "SelectedByDefault": true,
"Recommendation": "safe", "Recommendation": "safe",
"RemovalMethod": "Appx" "RemovalMethod": "Appx"
@@ -308,7 +308,7 @@
{ {
"FriendlyName": "Movies & TV", "FriendlyName": "Movies & TV",
"AppId": "Microsoft.ZuneVideo", "AppId": "Microsoft.ZuneVideo",
"Description": "Movies & TV app for renting/buying/playing video content (Rebranded as \"Films & TV\")", "Description": "Microsoft Movies & TV app for playing previously purchased movies and TV shows on Windows",
"SelectedByDefault": true, "SelectedByDefault": true,
"Recommendation": "safe", "Recommendation": "safe",
"RemovalMethod": "Appx" "RemovalMethod": "Appx"
@@ -812,7 +812,7 @@
{ {
"FriendlyName": "Mail & Calendar", "FriendlyName": "Mail & Calendar",
"AppId": "Microsoft.windowscommunicationsapps", "AppId": "Microsoft.windowscommunicationsapps",
"Description": "Mail & Calendar app suite (Discontinued)", "Description": "Mail & Calendar app suite (discontinued)",
"SelectedByDefault": false, "SelectedByDefault": false,
"Recommendation": "safe", "Recommendation": "safe",
"RemovalMethod": "Appx" "RemovalMethod": "Appx"
@@ -852,7 +852,7 @@
{ {
"FriendlyName": "Xbox Game Overlay", "FriendlyName": "Xbox Game Overlay",
"AppId": "Microsoft.XboxGameOverlay", "AppId": "Microsoft.XboxGameOverlay",
"Description": "Game overlay, required/useful for some games (Part of Xbox Game Bar)", "Description": "Game overlay, required or useful for some games (part of Xbox Game Bar). Warning: Uninstalling this app may reduce game performance on PCs with certain modern processors.",
"SelectedByDefault": false, "SelectedByDefault": false,
"Recommendation": "optional", "Recommendation": "optional",
"RemovalMethod": "Appx" "RemovalMethod": "Appx"
@@ -860,7 +860,7 @@
{ {
"FriendlyName": "Xbox Gaming Overlay", "FriendlyName": "Xbox Gaming Overlay",
"AppId": "Microsoft.XboxGamingOverlay", "AppId": "Microsoft.XboxGamingOverlay",
"Description": "Game overlay, required/useful for some games (Part of Xbox Game Bar)", "Description": "Game overlay, required or useful for some games (part of Xbox Game Bar). Warning: Uninstalling this app may reduce game performance on PCs with certain modern processors.",
"SelectedByDefault": false, "SelectedByDefault": false,
"Recommendation": "optional", "Recommendation": "optional",
"RemovalMethod": "Appx" "RemovalMethod": "Appx"
@@ -921,6 +921,14 @@
"Recommendation": "optional", "Recommendation": "optional",
"RemovalMethod": "Appx" "RemovalMethod": "Appx"
}, },
{
"FriendlyName": "LG Monitor App",
"AppId": "LGElectronics.LGMonitorApp",
"Description": "LG OEM software for controlling your LG monitor, Windows Update may silently reinstall this app if you have an LG monitor connected",
"SelectedByDefault": false,
"Recommendation": "optional",
"RemovalMethod": "Appx"
},
{ {
"FriendlyName": "HP AI Experience Center", "FriendlyName": "HP AI Experience Center",
"AppId": "AD2F1837.HPAIExperienceCenter", "AppId": "AD2F1837.HPAIExperienceCenter",
@@ -1132,7 +1140,7 @@
] ]
}, },
{ {
"Name": "OEM software (Dell, HP, Lenovo)", "Name": "OEM software (Dell, HP, Lenovo, LG)",
"AppIds": [ "AppIds": [
"AD2F1837.HPAIExperienceCenter", "AD2F1837.HPAIExperienceCenter",
"AD2F1837.HPConnectedMusic", "AD2F1837.HPConnectedMusic",
@@ -1156,6 +1164,7 @@
"AD2F1837.myHP", "AD2F1837.myHP",
"E046963F.LenovoCompanion", "E046963F.LenovoCompanion",
"LenovoCompanyLimited.LenovoVantageService", "LenovoCompanyLimited.LenovoVantageService",
"LGElectronics.LGMonitorApp",
"DellInc.DellSupportAssistforPCs", "DellInc.DellSupportAssistforPCs",
"DellInc.DellDigitalDelivery", "DellInc.DellDigitalDelivery",
"DellInc.DellMobileConnect" "DellInc.DellMobileConnect"
+1 -1
View File
@@ -70,4 +70,4 @@
"Value": true "Value": true
} }
] ]
} }
+122 -9
View File
@@ -2,55 +2,94 @@
"Version": "1.0", "Version": "1.0",
"Categories": [ "Categories": [
{ {
"CategoryId": "PrivacySuggestedContent",
"Name": "Privacy & Suggested Content", "Name": "Privacy & Suggested Content",
"Icon": "&#xE72E;" "Icon": "&#xE72E;"
}, },
{ {
"CategoryId": "System",
"Name": "System", "Name": "System",
"Icon": "&#xe770;" "Icon": "&#xe770;"
}, },
{ {
"CategoryId": "StartMenuSearch",
"Name": "Start Menu & Search", "Name": "Start Menu & Search",
"Icon": "&#xe8fc;" "Icon": "&#xe8fc;"
}, },
{ {
"CategoryId": "AI",
"Name": "AI", "Name": "AI",
"Icon": "&#xe794;" "Icon": "&#xe794;"
}, },
{ {
"CategoryId": "WindowsUpdate",
"Name": "Windows Update", "Name": "Windows Update",
"Icon": "&#xe895;" "Icon": "&#xe895;"
}, },
{ {
"CategoryId": "Taskbar",
"Name": "Taskbar", "Name": "Taskbar",
"Icon": "&#xe75b;" "Icon": "&#xe75b;"
}, },
{ {
"CategoryId": "Appearance",
"Name": "Appearance", "Name": "Appearance",
"Icon": "&#xE771;" "Icon": "&#xE771;"
}, },
{ {
"CategoryId": "FileExplorer",
"Name": "File Explorer", "Name": "File Explorer",
"Icon": "&#xec50;" "Icon": "&#xec50;"
}, },
{ {
"CategoryId": "Gaming",
"Name": "Gaming", "Name": "Gaming",
"Icon": "&#xE7FC;" "Icon": "&#xE7FC;"
}, },
{ {
"CategoryId": "MultiTasking",
"Name": "Multi-tasking", "Name": "Multi-tasking",
"Icon": "&#xE7C4;" "Icon": "&#xE7C4;"
}, },
{ {
"CategoryId": "OptionalWindowsFeatures",
"Name": "Optional Windows Features", "Name": "Optional Windows Features",
"Icon": "&#xefda;" "Icon": "&#xefda;"
}, },
{ {
"CategoryId": "Other",
"Name": "Other", "Name": "Other",
"Icon": "&#xE713;" "Icon": "&#xE713;"
} }
], ],
"UiGroups": [ "UiGroups": [
{
"GroupId": "DesktopSpotlight",
"Label": "Windows spotlight on the desktop",
"ToolTip": "This setting controls the Windows spotlight desktop background option. Keep the rotating wallpaper with or without the 'Learn about this picture' shortcut, or disable Windows spotlight entirely.",
"Category": "Appearance",
"Priority": 4,
"Values": [
{
"Label": "Show 'Learn about this picture' shortcut (Default)",
"FeatureIds": [
"EnableDesktopSpotlight"
]
},
{
"Label": "Hide 'Learn about this picture' shortcut",
"FeatureIds": [
"HideDesktopSpotlightIcon"
]
},
{
"Label": "Disable Windows spotlight desktop background",
"FeatureIds": [
"DisableDesktopSpotlight"
]
}
]
},
{ {
"GroupId": "SearchIcon", "GroupId": "SearchIcon",
"Label": "Taskbar search style", "Label": "Taskbar search style",
@@ -380,6 +419,7 @@
"Label": "Disable telemetry, tracking & targeted ads", "Label": "Disable telemetry, tracking & targeted ads",
"ToolTip": "This setting disables telemetry, diagnostic data collection, activity history, app-launch tracking, targeted ads and more. It limits the data that is sent to Microsoft about your device and usage. If you are a Windows Insider, updates may be blocked until optional diagnostic data collection is turned back on.", "ToolTip": "This setting disables telemetry, diagnostic data collection, activity history, app-launch tracking, targeted ads and more. It limits the data that is sent to Microsoft about your device and usage. If you are a Windows Insider, updates may be blocked until optional diagnostic data collection is turned back on.",
"Category": "Privacy & Suggested Content", "Category": "Privacy & Suggested Content",
"Priority": 1,
"RegistryKey": "Disable_Telemetry.reg", "RegistryKey": "Disable_Telemetry.reg",
"ApplyText": "Disabling telemetry and diagnostic data collection", "ApplyText": "Disabling telemetry and diagnostic data collection",
"UndoLabel": "Enable telemetry, tracking & targeted ads", "UndoLabel": "Enable telemetry, tracking & targeted ads",
@@ -393,6 +433,7 @@
"Label": "Disable tips, tricks & suggested content throughout Windows", "Label": "Disable tips, tricks & suggested content throughout Windows",
"ToolTip": "This setting removes many annoying distractions from Windows. This includes things like notifications, reminders and sync provider ads. It also prevents automated installation of suggested apps.", "ToolTip": "This setting removes many annoying distractions from Windows. This includes things like notifications, reminders and sync provider ads. It also prevents automated installation of suggested apps.",
"Category": "Privacy & Suggested Content", "Category": "Privacy & Suggested Content",
"Priority": 2,
"RegistryKey": "Disable_Windows_Suggestions.reg", "RegistryKey": "Disable_Windows_Suggestions.reg",
"ApplyText": "Disabling tips, tricks, suggestions and ads throughout Windows", "ApplyText": "Disabling tips, tricks, suggestions and ads throughout Windows",
"UndoLabel": "Enable tips, tricks & suggested content throughout Windows", "UndoLabel": "Enable tips, tricks & suggested content throughout Windows",
@@ -401,11 +442,26 @@
"MinVersion": null, "MinVersion": null,
"MaxVersion": null "MaxVersion": null
}, },
{
"FeatureId": "DisableNotifications",
"Label": "Disable Windows Notifications (From apps and other senders)",
"ToolTip": "Disables native Windows notifications from apps and other senders, this includes notifications from apps like Discord, WhatsApp, Teams, and Slack.",
"Category": "Privacy & Suggested Content",
"Priority": 3,
"RegistryKey": "Disable_Notifications.reg",
"ApplyText": "Disabling Windows notifications and reminders",
"UndoLabel": "Enable Windows notifications and reminders",
"ApplyUndoText": "Enabling Windows notifications and reminders",
"RegistryUndoKey": "Enable_Notifications.reg",
"MinVersion": null,
"MaxVersion": null
},
{ {
"FeatureId": "DisableLocationServices", "FeatureId": "DisableLocationServices",
"Label": "Disable Windows location services & app location access", "Label": "Disable Windows location services & app location access",
"ToolTip": "This will turn off Windows Location Services and deny apps access to your location. This feature uses policies, which will lock down certain settings.", "ToolTip": "This will turn off Windows Location Services and deny apps access to your location. This feature uses policies, which will lock down certain settings.",
"Category": "Privacy & Suggested Content", "Category": "Privacy & Suggested Content",
"Priority": 4,
"RegistryKey": "Disable_Location_Services.reg", "RegistryKey": "Disable_Location_Services.reg",
"ApplyText": "Disabling Windows location services and app location access", "ApplyText": "Disabling Windows location services and app location access",
"UndoLabel": "Enable Windows location services & app location access", "UndoLabel": "Enable Windows location services & app location access",
@@ -419,6 +475,7 @@
"Label": "Disable Find My Device location tracking", "Label": "Disable Find My Device location tracking",
"ToolTip": "This will turn off the 'Find My Device' feature, which periodically sends your device's location to Microsoft. This feature uses policies, which will lock down certain settings.", "ToolTip": "This will turn off the 'Find My Device' feature, which periodically sends your device's location to Microsoft. This feature uses policies, which will lock down certain settings.",
"Category": "Privacy & Suggested Content", "Category": "Privacy & Suggested Content",
"Priority": 5,
"RegistryKey": "Disable_Find_My_Device.reg", "RegistryKey": "Disable_Find_My_Device.reg",
"ApplyText": "Disabling Find My Device location tracking", "ApplyText": "Disabling Find My Device location tracking",
"UndoLabel": "Enable Find My Device location tracking", "UndoLabel": "Enable Find My Device location tracking",
@@ -432,6 +489,7 @@
"Label": "Disable tips & tricks on the lock screen", "Label": "Disable tips & tricks on the lock screen",
"ToolTip": "This will turn off the lockscreen spotlight option and disable the tips, tricks and fun facts that appear on the lock screen.", "ToolTip": "This will turn off the lockscreen spotlight option and disable the tips, tricks and fun facts that appear on the lock screen.",
"Category": "Privacy & Suggested Content", "Category": "Privacy & Suggested Content",
"Priority": 6,
"RegistryKey": "Disable_Lockscreen_Tips.reg", "RegistryKey": "Disable_Lockscreen_Tips.reg",
"ApplyText": "Disabling tips & tricks on the lock screen", "ApplyText": "Disabling tips & tricks on the lock screen",
"UndoLabel": "Enable tips & tricks on the lock screen", "UndoLabel": "Enable tips & tricks on the lock screen",
@@ -440,19 +498,45 @@
"MinVersion": null, "MinVersion": null,
"MaxVersion": null "MaxVersion": null
}, },
{
"FeatureId": "EnableDesktopSpotlight",
"Label": "Enable Windows spotlight desktop background and shortcut",
"ToolTip": "Restores the Windows spotlight desktop background and the 'Learn about this picture' shortcut.",
"Category": "Appearance",
"RegistryKey": "Enable_Desktop_Spotlight.reg",
"ApplyText": "Restoring the Windows spotlight desktop background and shortcut",
"UndoLabel": null,
"ApplyUndoText": null,
"RegistryUndoKey": null,
"MinVersion": null,
"MaxVersion": null
},
{ {
"FeatureId": "DisableDesktopSpotlight", "FeatureId": "DisableDesktopSpotlight",
"Label": "Disable Windows Spotlight for desktop", "Label": "Disable Windows spotlight desktop background",
"ToolTip": "This will turn off the 'Windows Spotlight' feature for the desktop background, which shows different background images and occasionally tips and fun facts on the desktop. This feature uses policies, which will lock down certain settings.", "ToolTip": "Turns off Windows spotlight for the desktop background, which displays rotating images and may show tips and fun facts. This feature uses policies, which will lock down certain settings.",
"Category": "Privacy & Suggested Content", "Category": "Appearance",
"RegistryKey": "Disable_Desktop_Spotlight.reg", "RegistryKey": "Disable_Desktop_Spotlight.reg",
"ApplyText": "Disabling the 'Windows Spotlight' desktop background option", "ApplyText": "Disabling the Windows spotlight desktop background",
"UndoLabel": "Enable Windows Spotlight for desktop", "UndoLabel": "Enable Windows spotlight desktop background",
"ApplyUndoText": "Enabling the 'Windows Spotlight' desktop background option", "ApplyUndoText": "Restoring the Windows spotlight desktop background and shortcut",
"RegistryUndoKey": "Enable_Desktop_Spotlight.reg", "RegistryUndoKey": "Enable_Desktop_Spotlight.reg",
"MinVersion": null, "MinVersion": null,
"MaxVersion": null "MaxVersion": null
}, },
{
"FeatureId": "HideDesktopSpotlightIcon",
"Label": "Hide the 'Learn about this picture' desktop shortcut",
"ToolTip": "Hides the 'Learn about this picture' desktop shortcut while keeping Windows spotlight wallpaper rotation enabled. It does not disable Windows spotlight.",
"Category": "Appearance",
"RegistryKey": "Hide_Desktop_Spotlight_Icon.reg",
"ApplyText": "Hiding the Windows spotlight 'Learn about this picture' desktop shortcut",
"UndoLabel": "Show the 'Learn about this picture' desktop shortcut",
"ApplyUndoText": "Showing the Windows spotlight 'Learn about this picture' desktop shortcut",
"RegistryUndoKey": "Show_Desktop_Spotlight_Icon.reg",
"MinVersion": null,
"MaxVersion": null
},
{ {
"FeatureId": "DisableEdgeAds", "FeatureId": "DisableEdgeAds",
"Label": "Disable ads, suggestions and newsfeed in Edge", "Label": "Disable ads, suggestions and newsfeed in Edge",
@@ -667,7 +751,7 @@
"UndoLabel": "Show Microsoft 365 Copilot ads in Settings Home", "UndoLabel": "Show Microsoft 365 Copilot ads in Settings Home",
"ApplyUndoText": "Enabling Microsoft 365 Copilot ads in Settings Home", "ApplyUndoText": "Enabling Microsoft 365 Copilot ads in Settings Home",
"RegistryUndoKey": "Enable_Settings_365_Ads.reg", "RegistryUndoKey": "Enable_Settings_365_Ads.reg",
"MinVersion": null, "MinVersion": 22000,
"MaxVersion": null "MaxVersion": null
}, },
{ {
@@ -680,7 +764,7 @@
"UndoLabel": "Show Settings 'Home' page", "UndoLabel": "Show Settings 'Home' page",
"ApplyUndoText": "Enabling the Settings Home page", "ApplyUndoText": "Enabling the Settings Home page",
"RegistryUndoKey": "Enable_Settings_Home.reg", "RegistryUndoKey": "Enable_Settings_Home.reg",
"MinVersion": null, "MinVersion": 22000,
"MaxVersion": null "MaxVersion": null
}, },
{ {
@@ -695,6 +779,18 @@
"RegistryUndoKey": "Enable_Edge_AI_Features.reg", "RegistryUndoKey": "Enable_Edge_AI_Features.reg",
"MinVersion": 22621, "MinVersion": 22621,
"MaxVersion": null "MaxVersion": null
},{
"FeatureId": "DisableChromeAI",
"Label": "Disable AI features in Google Chrome",
"ToolTip": "Disables Google Chrome's built-in AI tools and integrations, including Gemini, AI search & suggestions, writing assistance, autofill and more. It also removes local AI models. This feature uses policies, which will lock down certain settings.",
"Category": "AI",
"RegistryKey": "Disable_Chrome_AI_Features.reg",
"ApplyText": "Disabling AI features in Google Chrome",
"UndoLabel": "Enable AI features in Google Chrome",
"ApplyUndoText": "Enabling AI features in Google Chrome",
"RegistryUndoKey": "Enable_Chrome_AI_Features.reg",
"MinVersion": 22621,
"MaxVersion": null
}, },
{ {
"FeatureId": "DisablePaintAI", "FeatureId": "DisablePaintAI",
@@ -732,6 +828,7 @@
"UndoLabel": "Disable dark theme for system and apps", "UndoLabel": "Disable dark theme for system and apps",
"ApplyUndoText": "Disabling dark mode for system and apps", "ApplyUndoText": "Disabling dark mode for system and apps",
"RegistryUndoKey": "Enable_Light_Mode.reg", "RegistryUndoKey": "Enable_Light_Mode.reg",
"Priority": 1,
"MinVersion": null, "MinVersion": null,
"MaxVersion": null "MaxVersion": null
}, },
@@ -800,6 +897,7 @@
"UndoLabel": "Enable window snapping", "UndoLabel": "Enable window snapping",
"ApplyUndoText": "Enabling window snapping", "ApplyUndoText": "Enabling window snapping",
"RegistryUndoKey": "Enable_Window_Snapping.reg", "RegistryUndoKey": "Enable_Window_Snapping.reg",
"RequiresReboot": true,
"MinVersion": null, "MinVersion": null,
"MaxVersion": null "MaxVersion": null
}, },
@@ -1265,7 +1363,7 @@
{ {
"FeatureId": "HideHome", "FeatureId": "HideHome",
"Label": "Hide 'Home' from navigation pane", "Label": "Hide 'Home' from navigation pane",
"ToolTip": "Hides the 'Home' section from the File Explorer navigation pane.", "ToolTip": "Hides the 'Home' section from the File Explorer navigation pane. Warning: This may prevent Quick access links from updating until you restart your PC or Windows Explorer.",
"Category": "File Explorer", "Category": "File Explorer",
"Priority": 5, "Priority": 5,
"RegistryKey": "Hide_Home_from_Explorer.reg", "RegistryKey": "Hide_Home_from_Explorer.reg",
@@ -1300,6 +1398,7 @@
"UndoLabel": "Enable transparency effects", "UndoLabel": "Enable transparency effects",
"ApplyUndoText": "Enabling transparency effects", "ApplyUndoText": "Enabling transparency effects",
"RegistryUndoKey": "Enable_Transparency.reg", "RegistryUndoKey": "Enable_Transparency.reg",
"Priority": 2,
"MinVersion": null, "MinVersion": null,
"MaxVersion": null "MaxVersion": null
}, },
@@ -1313,6 +1412,7 @@
"UndoLabel": "Enable animations and visual effects", "UndoLabel": "Enable animations and visual effects",
"ApplyUndoText": "Enabling animations and visual effects", "ApplyUndoText": "Enabling animations and visual effects",
"RegistryUndoKey": "Enable_Animations.reg", "RegistryUndoKey": "Enable_Animations.reg",
"Priority": 3,
"RequiresReboot": true, "RequiresReboot": true,
"MinVersion": null, "MinVersion": null,
"MaxVersion": null "MaxVersion": null
@@ -1356,6 +1456,19 @@
"MinVersion": null, "MinVersion": null,
"MaxVersion": null "MaxVersion": null
}, },
{
"FeatureId": "DisableDeviceAutoAppDownload",
"Label": "Prevent Windows from auto-installing device companion apps",
"ToolTip": "Stops Windows from silently installing device companion apps via Windows Update when you connect certain devices, like monitors from LG and Alienware. These devices will still work as expected, this only stops Windows Update from automatically installing additional apps without consent.",
"Category": "Windows Update",
"RegistryKey": "Disable_Device_Auto_App_Download.reg",
"ApplyText": "Preventing automatic installation of device companion apps",
"UndoLabel": "Allow automatic installation of device companion apps",
"ApplyUndoText": "Allowing automatic installation of device companion apps",
"RegistryUndoKey": "Enable_Device_Auto_App_Download.reg",
"MinVersion": null,
"MaxVersion": null
},
{ {
"FeatureId": "ForceRemoveEdge", "FeatureId": "ForceRemoveEdge",
"Label": "Forcefully uninstall Microsoft Edge. NOT RECOMMENDED!", "Label": "Forcefully uninstall Microsoft Edge. NOT RECOMMENDED!",
+566
View File
@@ -0,0 +1,566 @@
{
"Clipchamp.Clipchamp": {
"FriendlyName": "Clipchamp",
"Description": "Video editor from Microsoft"
},
"Microsoft.3DBuilder": {
"FriendlyName": "3D Builder",
"Description": "Basic 3D modeling software"
},
"Microsoft.549981C3F5F10": {
"FriendlyName": "Cortana",
"Description": "Microsoft Cortana voice assistant (discontinued)"
},
"Microsoft.BingFinance": {
"FriendlyName": "Bing Finance",
"Description": "Finance news and tracking via Bing (discontinued)"
},
"Microsoft.BingFoodAndDrink": {
"FriendlyName": "Bing Food And Drink",
"Description": "Recipes and food news via Bing (discontinued)"
},
"Microsoft.BingHealthAndFitness": {
"FriendlyName": "Bing Health And Fitness",
"Description": "Health and fitness tracking/news via Bing (discontinued)"
},
"Microsoft.BingNews": {
"FriendlyName": "Bing News",
"Description": "News aggregator via Bing (discontinued)"
},
"Microsoft.BingSports": {
"FriendlyName": "Bing Sports",
"Description": "Sports news and scores via Bing (discontinued)"
},
"Microsoft.BingTranslator": {
"FriendlyName": "Bing Translator",
"Description": "Translation service via Bing"
},
"Microsoft.BingTravel": {
"FriendlyName": "Bing Travel",
"Description": "Travel planning and news via Bing (discontinued)"
},
"Microsoft.BingWeather": {
"FriendlyName": "Bing Weather",
"Description": "Weather forecast via Bing"
},
"XP9CXNGPPJ97XX": {
"FriendlyName": "Microsoft Copilot",
"Description": "AI assistant integrated into Windows"
},
"Microsoft.Windows.AIHub": {
"FriendlyName": "Copilot+ AI Hub",
"Description": "Copilot+ AI Hub app (Windows 11 24H2+)"
},
"Microsoft.PCManager": {
"FriendlyName": "Microsoft PC Manager",
"Description": "Microsoft PC Manager system cleanup and optimization tool (often preinstalled)"
},
"Microsoft.Getstarted": {
"FriendlyName": "Get Started",
"Description": "Tips and introductory guide for Windows (Cannot be uninstalled in Windows 11)"
},
"Microsoft.Messaging": {
"FriendlyName": "Messaging",
"Description": "Messaging app, often integrates with Skype (Largely discontinued)"
},
"Microsoft.Microsoft3DViewer": {
"FriendlyName": "3D Viewer",
"Description": "Viewer for 3D models (discontinued)"
},
"Microsoft.MicrosoftJournal": {
"FriendlyName": "Microsoft Journal",
"Description": "Digital note-taking app optimized for pen input"
},
"Microsoft.MicrosoftOfficeHub": {
"FriendlyName": "Office Hub",
"Description": "Hub to access Microsoft Office apps and documents (Precursor to Microsoft 365 app)"
},
"Microsoft.MicrosoftPowerBIForWindows": {
"FriendlyName": "Power BI",
"Description": "Business analytics service client"
},
"Microsoft.MicrosoftSolitaireCollection": {
"FriendlyName": "Solitaire Collection",
"Description": "Collection of solitaire card games"
},
"Microsoft.MicrosoftStickyNotes": {
"FriendlyName": "Sticky Notes",
"Description": "App for creating and syncing quick notes"
},
"Microsoft.MixedReality.Portal": {
"FriendlyName": "Mixed Reality Portal",
"Description": "Portal for Windows Mixed Reality headsets"
},
"Microsoft.NetworkSpeedTest": {
"FriendlyName": "Network Speed Test",
"Description": "Internet connection speed test utility"
},
"Microsoft.News": {
"FriendlyName": "Microsoft News",
"Description": "Microsoft News app for Windows"
},
"Microsoft.Office.OneNote": {
"FriendlyName": "OneNote",
"Description": "Digital note-taking app (Universal Windows Platform version)"
},
"Microsoft.Office.Sway": {
"FriendlyName": "Sway",
"Description": "Presentation and storytelling app"
},
"Microsoft.OneConnect": {
"FriendlyName": "One Connect",
"Description": "Mobile Operator management app (Replaced by Mobile Plans)"
},
"Microsoft.Print3D": {
"FriendlyName": "Print 3D",
"Description": "3D printing preparation software"
},
"Microsoft.PowerAutomateDesktop": {
"FriendlyName": "Power Automate",
"Description": "Desktop automation tool (RPA)"
},
"Microsoft.SkypeApp": {
"FriendlyName": "Skype (UWP)",
"Description": "Skype communication app, Universal Windows Platform version (discontinued)"
},
"Microsoft.Todos": {
"FriendlyName": "Microsoft To Do",
"Description": "To-do list and task management app"
},
"Microsoft.Windows.DevHome": {
"FriendlyName": "Dev Home",
"Description": "Developer dashboard and tool configuration utility (discontinued)"
},
"Microsoft.WindowsAlarms": {
"FriendlyName": "Clock",
"Description": "App for alarms, timers, stopwatch, and focus sessions"
},
"Microsoft.WindowsFeedbackHub": {
"FriendlyName": "Feedback Hub",
"Description": "App for providing feedback to Microsoft on Windows"
},
"Microsoft.WindowsMaps": {
"FriendlyName": "Windows Maps",
"Description": "Maps and navigation app (discontinued)"
},
"Microsoft.WindowsSoundRecorder": {
"FriendlyName": "Sound Recorder",
"Description": "Basic audio recording app"
},
"Microsoft.XboxApp": {
"FriendlyName": "Xbox Console Companion",
"Description": "Old Xbox Console Companion App (discontinued)"
},
"Microsoft.ZuneVideo": {
"FriendlyName": "Movies & TV",
"Description": "App for renting/buying/playing video content (discontinued)"
},
"MicrosoftCorporationII.MicrosoftFamily": {
"FriendlyName": "Microsoft Family Safety",
"Description": "App for managing family screen time, content filters, and activity reports"
},
"MicrosoftCorporationII.QuickAssist": {
"FriendlyName": "Quick Assist",
"Description": "Remote assistance tool"
},
"MicrosoftTeams": {
"FriendlyName": "Microsoft Teams (Old)",
"Description": "Old Microsoft Teams personal (MS Store version)"
},
"MSTeams": {
"FriendlyName": "Microsoft Teams (New)",
"Description": "New Microsoft Teams app (Work/School or Personal)"
},
"ACGMediaPlayer": {
"FriendlyName": "ACG Media Player",
"Description": "Media player app"
},
"ActiproSoftwareLLC": {
"FriendlyName": "Actipro Software",
"Description": "Potentially UI controls or software components, often bundled by OEMs"
},
"AdobeSystemsIncorporated.AdobePhotoshopExpress": {
"FriendlyName": "Adobe Photoshop Express",
"Description": "Basic photo editing app from Adobe"
},
"Amazon.com.Amazon": {
"FriendlyName": "Amazon",
"Description": "Amazon shopping app"
},
"AmazonVideo.PrimeVideo": {
"FriendlyName": "Prime Video",
"Description": "Amazon Prime Video streaming service app"
},
"Asphalt8Airborne": {
"FriendlyName": "Asphalt 8",
"Description": "Racing game"
},
"AutodeskSketchBook": {
"FriendlyName": "Autodesk SketchBook",
"Description": "Digital drawing and sketching app"
},
"CaesarsSlotsFreeCasino": {
"FriendlyName": "Caesars Slots",
"Description": "Casino slot machine game"
},
"COOKINGFEVER": {
"FriendlyName": "Cooking Fever",
"Description": "Restaurant simulation game"
},
"CyberLinkMediaSuiteEssentials": {
"FriendlyName": "CyberLink Media Suite",
"Description": "Multimedia software suite (often preinstalled by OEMs)"
},
"DisneyMagicKingdoms": {
"FriendlyName": "Disney Magic Kingdoms",
"Description": "Disney theme park building game"
},
"Disney.37853FC22B2CE": {
"FriendlyName": "Disney+",
"Description": "Disney+ streaming service app"
},
"DrawboardPDF": {
"FriendlyName": "Drawboard PDF",
"Description": "PDF viewing and annotation app, often focused on pen input"
},
"Duolingo-LearnLanguagesforFree": {
"FriendlyName": "Duolingo",
"Description": "Language learning app"
},
"EclipseManager": {
"FriendlyName": "Eclipse Manager",
"Description": "Often related to specific OEM software or utilities (e.g. for managing screen settings)"
},
"FACEBOOK.FACEBOOK": {
"FriendlyName": "Facebook",
"Description": "Facebook social media app"
},
"FarmVille2CountryEscape": {
"FriendlyName": "FarmVille 2",
"Description": "Farming simulation game"
},
"Flipboard": {
"FriendlyName": "Flipboard",
"Description": "News and social network aggregator styled as a magazine"
},
"HiddenCity": {
"FriendlyName": "Hidden City",
"Description": "Hidden object puzzle adventure game"
},
"HULULLC.HULUPLUS": {
"FriendlyName": "Hulu",
"Description": "Hulu streaming service app"
},
"iHeartRadio": {
"FriendlyName": "iHeartRadio",
"Description": "Internet radio streaming app"
},
"Facebook.Instagram": {
"FriendlyName": "Instagram",
"Description": "Instagram social media app"
},
"king.com.BubbleWitch3Saga": {
"FriendlyName": "Bubble Witch 3",
"Description": "Puzzle game from King"
},
"king.com.CandyCrushSaga": {
"FriendlyName": "Candy Crush Saga",
"Description": "Puzzle game from King"
},
"king.com.CandyCrushSodaSaga": {
"FriendlyName": "Candy Crush Soda",
"Description": "Puzzle game from King"
},
"LinkedInforWindows": {
"FriendlyName": "LinkedIn",
"Description": "LinkedIn professional networking app"
},
"MarchofEmpires": {
"FriendlyName": "March of Empires",
"Description": "Strategy game"
},
"4DF9E0F8.Netflix": {
"FriendlyName": "Netflix",
"Description": "Netflix streaming service app"
},
"NYTCrossword": {
"FriendlyName": "NYT Crossword",
"Description": "New York Times crossword puzzle app"
},
"OneCalendar": {
"FriendlyName": "One Calendar",
"Description": "Calendar aggregation app"
},
"PandoraMediaInc": {
"FriendlyName": "Pandora",
"Description": "Pandora music streaming app"
},
"PhototasticCollage": {
"FriendlyName": "Phototastic Collage",
"Description": "Photo collage creation app"
},
"PicsArt-PhotoStudio": {
"FriendlyName": "PicsArt",
"Description": "Photo editing and creative app"
},
"PolarrPhotoEditorAcademicEdition": {
"FriendlyName": "Polarr Photo Editor",
"Description": "Photo editing app (Academic Edition)"
},
"flaregamesGmbH.RoyalRevolt": {
"FriendlyName": "Royal Revolt",
"Description": "Tower defense / strategy game"
},
"Sidia.LiveWallpaper": {
"FriendlyName": "Live Wallpaper",
"Description": "Live wallpaper app"
},
"SlingTV": {
"FriendlyName": "Sling TV",
"Description": "Live TV streaming service app"
},
"SpotifyAB.SpotifyMusic": {
"FriendlyName": "Spotify",
"Description": "Spotify music streaming app"
},
"BytedancePte.Ltd.TikTok": {
"FriendlyName": "TikTok",
"Description": "TikTok short-form video app"
},
"TuneInRadio": {
"FriendlyName": "TuneIn Radio",
"Description": "Internet radio streaming app"
},
"WinZipUniversal": {
"FriendlyName": "WinZip",
"Description": "File compression and extraction utility (Universal Windows Platform version)"
},
"Microsoft.BingSearch": {
"FriendlyName": "Bing Search",
"Description": "Web Search from Microsoft Bing (Integrates into Windows Search)"
},
"Microsoft.Edge": {
"FriendlyName": "Microsoft Edge",
"Description": "Windows' default browser, WARNING: Removing this app also removes the only browser from Windows Sandbox and could affect other apps"
},
"Microsoft.GamingApp": {
"FriendlyName": "Xbox app",
"Description": "Xbox gaming app for Windows, required to install some PC games"
},
"Microsoft.GetHelp": {
"FriendlyName": "Get Help",
"Description": "Required for some Windows 11 Troubleshooters and support interactions"
},
"Microsoft.M365Companions": {
"FriendlyName": "Microsoft 365 Companions",
"Description": "Microsoft 365 (Business) Calendar, Files and People mini-apps, these apps may be reinstalled if enabled by your Microsoft 365 admin"
},
"Microsoft.MSPaint": {
"FriendlyName": "Paint 3D",
"Description": "3D drawing app (discontinued)"
},
"Microsoft.OneDrive": {
"FriendlyName": "OneDrive",
"Description": "OneDrive consumer cloud storage client"
},
"Microsoft.OutlookForWindows": {
"FriendlyName": "Outlook for Windows",
"Description": "New Outlook for Windows mail client"
},
"Microsoft.Paint": {
"FriendlyName": "Paint",
"Description": "Classic Paint (Traditional 2D paint application)"
},
"Microsoft.People": {
"FriendlyName": "People",
"Description": "Required for & included with Mail & Calendar (discontinued)"
},
"Microsoft.RemoteDesktop": {
"FriendlyName": "Remote Desktop",
"Description": "Remote Desktop client app"
},
"Microsoft.ScreenSketch": {
"FriendlyName": "Snipping Tool",
"Description": "Capture, annotate, save, and share screenshots"
},
"Microsoft.StartExperiencesApp": {
"FriendlyName": "Widgets Experience",
"Description": "This app powers Windows Widgets My Feed"
},
"Microsoft.Whiteboard": {
"FriendlyName": "Whiteboard",
"Description": "Digital collaborative whiteboard app"
},
"Microsoft.Windows.Photos": {
"FriendlyName": "Photos",
"Description": "Default photo viewing and basic editing app"
},
"Microsoft.WindowsCalculator": {
"FriendlyName": "Calculator",
"Description": "Calculator app"
},
"Microsoft.WindowsCamera": {
"FriendlyName": "Camera",
"Description": "Camera app for using built-in or connected cameras"
},
"Microsoft.windowscommunicationsapps": {
"FriendlyName": "Mail & Calendar",
"Description": "Mail & Calendar app suite (discontinued)"
},
"Microsoft.WindowsNotepad": {
"FriendlyName": "Notepad",
"Description": "Notepad text editor app"
},
"Microsoft.WindowsStore": {
"FriendlyName": "Microsoft Store",
"Description": "Microsoft Store, WARNING: This app cannot be reinstalled easily if removed!"
},
"Microsoft.WindowsTerminal": {
"FriendlyName": "Windows Terminal",
"Description": "Default terminal app in windows 11 (Command Prompt, PowerShell, WSL), WARNING: Do not remove if you launched Win11Debloat from Windows Terminal, as this will cause the script to fail."
},
"Microsoft.Xbox.TCUI": {
"FriendlyName": "Xbox TCUI Framework",
"Description": "UI framework, seems to be required for Microsoft Store, photos and certain games"
},
"Microsoft.XboxGameOverlay": {
"FriendlyName": "Xbox Game Overlay",
"Description": "Game overlay, required or useful for some games (part of Xbox Game Bar). Warning: Uninstalling this app may reduce game performance on PCs with certain modern processors."
},
"Microsoft.XboxGamingOverlay": {
"FriendlyName": "Xbox Gaming Overlay",
"Description": "Game overlay, required or useful for some games (part of Xbox Game Bar). Warning: Uninstalling this app may reduce game performance on PCs with certain modern processors."
},
"Microsoft.XboxIdentityProvider": {
"FriendlyName": "Xbox Identity Provider",
"Description": "Xbox sign-in framework, required for some games and Xbox services"
},
"Microsoft.XboxSpeechToTextOverlay": {
"FriendlyName": "Xbox Speech To Text",
"Description": "Accessibility feature required for some games, WARNING: This app cannot be reinstalled easily!"
},
"Microsoft.YourPhone": {
"FriendlyName": "Phone Link",
"Description": "Phone link (Connects Android/iOS phone to PC)"
},
"Microsoft.ZuneMusic": {
"FriendlyName": "Media Player",
"Description": "Modern Media Player (Replaced Groove Music, plays local audio/video)"
},
"MicrosoftWindows.CrossDevice": {
"FriendlyName": "Cross Device Experience",
"Description": "Phone integration within File Explorer, Camera and more (Part of Phone Link features)"
},
"MicrosoftWindows.Client.WebExperience": {
"FriendlyName": "Windows Web Experience Pack",
"Description": "Helps deliver and update certain features, like Widgets, through the Microsoft Store"
},
"Microsoft.WidgetsPlatformRuntime": {
"FriendlyName": "Widgets Platform Runtime",
"Description": "Runtime required for Windows Widgets to function"
},
"LGElectronics.LGMonitorApp": {
"FriendlyName": "LG Monitor App",
"Description": "LG OEM software for controlling your LG monitor, Windows Update may silently reinstall this app if you have an LG monitor connected"
},
"AD2F1837.HPAIExperienceCenter": {
"FriendlyName": "HP AI Experience Center",
"Description": "HP OEM software, AI-enhanced features and support"
},
"AD2F1837.HPConnectedMusic": {
"FriendlyName": "HP Connected Music",
"Description": "HP OEM software for music (Potentially discontinued)"
},
"AD2F1837.HPConnectedPhotopoweredbySnapfish": {
"FriendlyName": "HP Connected Photo",
"Description": "HP OEM software for photos, integrated with Snapfish (Potentially discontinued)"
},
"AD2F1837.HPDesktopSupportUtilities": {
"FriendlyName": "HP Desktop Support Utilities",
"Description": "HP OEM software providing desktop support tools"
},
"AD2F1837.HPEasyClean": {
"FriendlyName": "HP Easy Clean",
"Description": "Temporarily disables input devices for cleaning"
},
"AD2F1837.HPFileViewer": {
"FriendlyName": "HP File Viewer",
"Description": "HP OEM software for viewing specific file types"
},
"AD2F1837.HPJumpStarts": {
"FriendlyName": "HP JumpStarts",
"Description": "HP OEM software for tutorials, app discovery, or quick access to HP features"
},
"AD2F1837.HPPCHardwareDiagnosticsWindows": {
"FriendlyName": "HP PC Hardware Diagnostics",
"Description": "HP OEM software for PC hardware diagnostics"
},
"AD2F1837.HPPowerManager": {
"FriendlyName": "HP Power Manager",
"Description": "HP OEM software for managing power settings and battery"
},
"AD2F1837.HPPrinterControl": {
"FriendlyName": "HP Printer Control",
"Description": "HP OEM software for managing HP printers"
},
"AD2F1837.HPPrivacySettings": {
"FriendlyName": "HP Privacy Settings",
"Description": "HP OEM software for managing privacy settings"
},
"AD2F1837.HPQuickDrop": {
"FriendlyName": "HP QuickDrop",
"Description": "HP OEM software for quick file transfer between devices (discontinued)"
},
"AD2F1837.HPQuickTouch": {
"FriendlyName": "HP QuickTouch",
"Description": "HP OEM software, possibly for touch-specific shortcuts or controls"
},
"AD2F1837.HPRegistration": {
"FriendlyName": "HP Registration",
"Description": "HP OEM software for product registration"
},
"AD2F1837.HPSupportAssistant": {
"FriendlyName": "HP Support Assistant",
"Description": "HP OEM software for support, updates, and troubleshooting"
},
"AD2F1837.HPSureShieldAI": {
"FriendlyName": "HP Sure Shield AI",
"Description": "HP OEM security software, likely AI-based threat protection"
},
"AD2F1837.HPSystemInformation": {
"FriendlyName": "HP System Information",
"Description": "HP OEM software for displaying system information"
},
"AD2F1837.HPWelcome": {
"FriendlyName": "HP Welcome",
"Description": "HP OEM software providing a welcome experience or initial setup help"
},
"AD2F1837.HPWorkWell": {
"FriendlyName": "HP WorkWell",
"Description": "HP OEM software focused on well-being, possibly with break reminders or ergonomic tips"
},
"AD2F1837.myHP": {
"FriendlyName": "myHP",
"Description": "HP OEM central hub app for device info, support, and services"
},
"E046963F.LenovoCompanion": {
"FriendlyName": "Lenovo Vantage",
"Description": "Lenovo OEM hub app for device settings, updates, and support"
},
"LenovoCompanyLimited.LenovoVantageService": {
"FriendlyName": "Lenovo Vantage Service",
"Description": "Background service component for Lenovo Vantage"
},
"DellInc.DellSupportAssistforPCs": {
"FriendlyName": "Dell SupportAssist",
"Description": "Dell OEM support, diagnostic, and update tool"
},
"DellInc.DellDigitalDelivery": {
"FriendlyName": "Dell Digital Delivery Services",
"Description": "Dell OEM software for delivering pre-purchased software"
},
"DellInc.DellMobileConnect": {
"FriendlyName": "Dell Mobile Connect",
"Description": "Dell OEM app for linking Android/iOS phone to PC (superseded by Phone Link)"
}
}
+38
View File
@@ -0,0 +1,38 @@
{
"PrivacySuggestedContent": {
"Label": "Privacy & Suggested Content"
},
"System": {
"Label": "System"
},
"StartMenuSearch": {
"Label": "Start Menu & Search"
},
"AI": {
"Label": "AI"
},
"WindowsUpdate": {
"Label": "Windows Update"
},
"Taskbar": {
"Label": "Taskbar"
},
"Appearance": {
"Label": "Appearance"
},
"FileExplorer": {
"Label": "File Explorer"
},
"Gaming": {
"Label": "Gaming"
},
"MultiTasking": {
"Label": "Multi-tasking"
},
"OptionalWindowsFeatures": {
"Label": "Optional Windows Features"
},
"Other": {
"Label": "Other"
}
}
+360
View File
@@ -0,0 +1,360 @@
{
"TitleBarAppName": "Win11Debloat",
"MessageBoxOk": "OK",
"MessageBoxCancel": "Cancel",
"MessageBoxYes": "Yes",
"MessageBoxNo": "No",
"TitleBarSupportCreator": "Support the creator",
"TitleBarOptions": "Options",
"SettingsTitle": "Settings",
"SettingsSave": "Save",
"SettingsTheme": "Theme",
"SettingsThemeAuto": "Auto",
"SettingsThemeLight": "Light",
"SettingsThemeDark": "Dark",
"SettingsLanguage": "Language",
"SettingsLanguageAuto": "System default",
"SettingsSaveError": "Unable to save settings. Please try again.",
"TitleBarClose": "Close",
"MenuImportConfig": "Import config",
"MenuImportConfigTooltip": "Import configuration",
"MenuExportConfig": "Export config",
"MenuExportConfigTooltip": "Export configuration",
"MenuRestoreBackup": "Restore backup",
"MenuRestoreBackupTooltip": "Restore registry backup",
"MenuDocumentation": "Documentation",
"MenuReportBug": "Report a bug",
"MenuLogs": "Logs",
"MenuAbout": "About",
"HomeTabHeader": "Home",
"HomeTitle": "Welcome to Win11Debloat",
"HomeSubtitle": "Your clean Windows experience is just a few clicks away!",
"HomeUserQuestion": "What user do you want to apply changes to?",
"HomeUserSelectionAutomationName": "Apply Changes To",
"HomeUserOptionCurrentUser": "Current User",
"HomeUserOptionOtherUser": "Other User",
"HomeUserOptionSysprep": "Windows Default User (Sysprep)",
"HomeUsernamePlaceholder": "Enter username",
"HomeDefaultModeBtn": "Default Mode",
"HomeDefaultModeBtnTooltip": "Quickly select the recommended settings",
"HomeCustomSetupBtn": "Custom Setup",
"HomeCustomSetupBtnTooltip": "Manually select your preferred settings",
"AppRemovalTabHeader": "App Removal",
"AppRemovalTitle": "App Removal",
"AppRemovalSubtitle": "Select which apps you want to remove",
"AppQuickSelect": "Quick Select",
"AppQuickSelectAutomationName": "App Presets",
"AppClearSelection": "Clear Selection",
"AppClearSelectionTooltip": "Clear all selected apps",
"AppPresetDefaultApps": "Default apps",
"AppPresetDefaultAppsAutomationName": "Default selection",
"AppPresetDefaultAppsTooltip": "Select the apps that are safe to remove for most users",
"AppPresetLastUsed": "Previously selected apps",
"AppPresetLastUsedTooltip": "Select the apps that were removed the last time Win11Debloat was run",
"AppOnlyInstalledCheckbox": "Only show installed apps",
"AppOnlyInstalledCheckboxTooltip": "Only show applications that are currently installed on this system",
"AppSearchPlaceholder": "Search apps...",
"AppSearchAutomationName": "Search app",
"AppTableHeaderName": "Name",
"AppTableHeaderDescription": "Description",
"AppTableHeaderAppId": "App ID",
"AppLoadingIndicator": "Loading apps...",
"AppLegendTitle": "Legend:",
"AppLegendRecommendedTooltip": "[Recommended] Safe to remove for most users",
"AppLegendRecommended": "Recommended",
"AppLegendOptionalTooltip": "[Optional] Can be safely removed if you don't need this app",
"AppLegendOptional": "Optional",
"AppLegendNotRecommendedTooltip": "[Not Recommended] Only remove if you know what you are doing",
"AppLegendNotRecommended": "Not Recommended",
"TweaksTabHeader": "Tweaks",
"TweaksTitle": "System Tweaks",
"TweaksSubtitle": "Select what changes you want to make, you can hover over settings for more information",
"TweaksQuickSelect": "Quick Select",
"TweaksQuickSelectAutomationName": "Tweak Presets",
"TweaksClearSelection": "Clear Selection",
"TweaksClearSelectionTooltip": "Clear all selected tweaks",
"TweaksPresetDefault": "Default settings",
"TweaksPresetDefaultTooltip": "Select the settings that are recommended for most people",
"TweaksPresetLastUsed": "Previously selected settings",
"TweaksPresetLastUsedTooltip": "Select the settings that were applied the last time Win11Debloat was run",
"TweaksPresetPrivacy": "Privacy & suggested content",
"TweaksPresetPrivacyAutomationName": "All Privacy and Suggested Content",
"TweaksPresetPrivacyTooltip": "Select all tweaks related to privacy & suggested content",
"TweaksPresetAI": "AI features",
"TweaksPresetAIAutomationName": "All AI features",
"TweaksPresetAITooltip": "Select all AI related tweaks",
"TweaksDetectApplied": "Detect applied tweaks",
"TweaksDetectAppliedTooltip": "Detect all tweaks currently applied for the current user",
"TweaksSearchPlaceholder": "Search tweaks...",
"TweaksSearchAutomationName": "Search tweaks",
"DeployTabHeader": "Deployment Settings",
"DeployTitle": "Deployment Settings",
"DeploySubtitle": "Configure how the selected changes will be applied to your system",
"DeployApplyToTitle": "Changes will be applied to",
"DeployUserSelectionDescription": "The currently logged-in user profile.",
"DeployAppRemovalScopeTitle": "Apps will be removed for",
"DeployAppRemovalScopeAutomationName": "App Removal Scope",
"DeployAppRemovalScopeAllUsers": "All users",
"DeployAppRemovalScopeCurrentUser": "Current user only",
"DeployAppRemovalScopeTargetUser": "Target user only",
"DeployOptionsTitle": "Options",
"DeployOptionRegistryBackup": "Create a registry backup (Recommended)",
"DeployOptionRestorePoint": "Create a system restore point (Recommended)",
"DeployOptionRestartExplorer": "Restart the Windows Explorer process to apply all changes immediately",
"DeployReviewChanges": "Review selected changes",
"DeployApplyChanges": "Apply Changes",
"BubbleViewChanges": "View the selected changes here",
"AboutTitle": "About Win11Debloat",
"AboutVersionLabel": "Version:",
"AboutAuthorLabel": "Author:",
"AboutProjectLabel": "Project:",
"AboutDonationMessage": "Win11Debloat is a passion project that I maintain in my free time. If you've found this tool useful, please consider making a small donation to support its development. I really appreciate it!",
"AboutKofiLink": "Support me on Ko-fi",
"AppSelectionWindowTitle": "Win11Debloat Application Selection",
"AppSelectionWindowInstructions": "Check apps that you wish to remove, uncheck apps that you wish to keep",
"AppSelectionWindowCheckAll": "Check/Uncheck all",
"AppSelectionWindowCheckAllAutomationName": "Check or Uncheck all",
"AppSelectionWindowConfirm": "Confirm",
"AppSelectionWindowCancel": "Cancel",
"ApplyCancelTooltip": "Cancel",
"ApplyInProgressTitle": "Applying Changes",
"ApplyPreparing": "Preparing...",
"ApplyStepCounter": "Step {0} of {1}",
"ApplyCreatingRegistryBackup": "Creating registry backup...",
"ApplyCreatingRestorePoint": "Creating system restore point, this may take a moment...",
"ApplyCompletionTitleSuccess": "Changes Applied",
"ApplyCompletionMessageDefault": "Please note that some changes will only take effect after a reboot. Thanks for using Win11Debloat!",
"ApplyRebootRequiredHeader": "A reboot is required for these changes to take effect:",
"ApplyRebootRequiredWingetDeferred": "Uninstallation of {0}",
"ApplyCompletionTitleCancelled": "Cancelled",
"ApplyCompletionMessageCancelled": "Script execution was cancelled by the user.",
"ApplyCompletionTitleErrors": "Changes Applied with Errors",
"ApplyCompletionMessageVerificationUnavailable": "All changes were applied without errors, but Win11Debloat could not confirm that all selected apps were successfully uninstalled.",
"WingetUserScopeUninstallDeferred": "WinGet could not uninstall {0} while running as administrator because it is installed for user scope. Restart the PC or sign out and back in as {1} to complete removal.",
"ApplyCompletionMessageFailures_one": "{0} change failed. See console for details.",
"ApplyCompletionMessageFailures_other": "{0} changes failed. See console for details.",
"ApplyCompletionMessageReady": "Your system is ready. Thanks for using Win11Debloat!",
"ApplyCompletionTitleError": "Error",
"ApplyCompletionMessageError": "An error occurred while applying changes: {0}",
"NavBack": "Back",
"NavNext": "Next",
"NavProgressAppRemoval": "App Removal",
"NavProgressSystemTweaks": "System Tweaks",
"NavProgressDeploymentSettings": "Deployment Settings",
"RestoreWindowTitle": "Restore Backup",
"RestoreChooseRegistryTitle": "Restore Registry Backup",
"RestoreChooseRegistryDescription": "Restore system registry configuration from a backup",
"RestoreChooseStartMenuTitle": "Restore Start Menu Backup",
"RestoreChooseStartMenuDescription": "Restore the Start Menu pinned apps layout from a backup",
"RestoreSelectTypePrompt": "Choose what changes you want to restore.",
"RestoreRegistryStepTitle": "Restore Registry Backup",
"RestoreRegistryIntro": "This will restore any system registry changes made by Win11Debloat to the previous state. You can review the changes after selecting a backup file. Removed applications will need to be reinstalled manually.",
"RestoreRegistryWarning": "Warning: Only use backup files generated by Win11Debloat.",
"RestoreStartMenuStepTitle": "Restore Start Menu Backup",
"RestoreStartMenuIntro": "This will restore the Start Menu pinned apps layout for the selected user(s) using a backup that is automatically created by Win11Debloat. Manually created backups can also be used.",
"RestoreStartMenuScopeCurrentUser": "Current user",
"RestoreStartMenuScopeAllUsers": "All users",
"RestoreStartMenuAutoBackupCheckbox": "Automatically find Start Menu backup",
"RestoreFileLabel": "File:",
"RestoreFileNotSelected": "Not selected",
"RestoreCreatedLabel": "Created:",
"RestoreCreatedUnavailable": "N/A",
"RestoreCreatedUnknown": "Unknown",
"RestoreTargetLabel": "Target:",
"RestoreRevertibleFeaturesTitle": "The following changes will be reverted:",
"RestoreReappliedFeaturesTitle": "The following changes will be re-applied:",
"RestoreNonRevertibleFeaturesTitle": "The following changes won't be reverted:",
"RestoreWikiLink": "Visit the wiki for more information",
"RestoreStartMenuSummary": "This will replace the current Start Menu pinned apps layout for {0} with the selected backup.",
"RestoreStartMenuSummaryScopeCurrentUser": "the current user",
"RestoreStartMenuSummaryScopeAllUsers": "all users",
"RestorePrimaryActionSelectBackupFile": "Select backup file",
"RestorePrimaryActionRestoreBackup": "Restore backup",
"RestorePrimaryActionRestoreFromBackup": "Restore from backup",
"RestoreBackBtnCancel": "Cancel",
"RestoreBackBtnBack": "Back",
"RestoreInvalidBackupTitle": "Invalid Backup File",
"RestoreInvalidBackupMessage": "The selected file could not be loaded:\n{0}",
"RestoreNoBackupFoundTitle": "No Backup Found",
"RestoreNoBackupFoundMessage": "No Start Menu backup file was found for {0}. Uncheck 'Automatically find Start Menu backup' to select a backup file manually.",
"RestoreNoRestorableChangesError": "The selected backup does not contain any changes that can be restored.",
"RestoreSelectRegistryFileDialogTitle": "Select Registry Backup File",
"RestoreSelectStartMenuFileDialogTitle": "Select Start Menu Backup File",
"RestoreUnknownFeature": "Unknown feature",
"RestoreTargetUnknown": "Unknown",
"RestoreTargetDefaultUserProfile": "Default user profile",
"RestoreTargetCurrentUser": "Current user",
"RestoreTargetAllUsers": "All users",
"RestoreTargetCurrentUserNamed": "Current user ({0})",
"RestoreTargetUserNamed": "User ({0})",
"RestoreTargetUser": "User",
"RestoreBackupRestoredTitle": "Backup Restored",
"RestoreRegistryWhatIfMessage": "[WhatIf] Registry backup would be restored (no changes made).",
"RestoreRegistrySuccessMessage": "Registry backup restored successfully. Some changes may require a restart to take effect.",
"RestoreStartMenuFailedMessage": "Failed to restore the Start Menu backup.\n{0}",
"RestoreStartMenuPartialSuccessMessage": "The Start Menu backup was successfully restored for {0} user(s).\nSome users could not be restored:\n{1}",
"RestoreStartMenuWhatIfMessage": "[WhatIf] Start Menu backup would be restored (no changes made).",
"RestoreStartMenuAllUsersSuccessMessage": "The Start Menu backup was successfully restored for all users. The changes will apply the next time users sign in.",
"RestoreStartMenuCurrentUserSuccessMessage": "The Start Menu backup was successfully restored for the current user. The changes will apply the next time you sign in.",
"RestoreOperationFailedMessage": "Restore failed: {0}",
"RestoreUnexpectedError": "An unexpected error occurred.",
"ImportExportCategoryApplications": "Applications",
"ImportExportCategorySystemTweaks": "System Tweaks",
"ImportExportCategoryDeploymentSettings": "Deployment Settings",
"ImportExportCategoryDisabledTooltip": "Nothing selected in this category",
"ImportExportSchemaMissingMessage": "Import/Export window schema file could not be found.",
"ImportExportExportTitle": "Export Configuration",
"ImportExportExportPrompt": "Create a configuration file based on the currently selected settings. You can choose which settings categories you wish to include in the export.",
"ImportExportExportActionLabel": "Export Settings",
"ImportExportSelectExportFileDialogTitle": "Export Configuration",
"ImportExportWhatIfExportMessage": "[WhatIf] Configuration would be exported to this file (no file written).",
"ImportExportExportSuccessMessage": "Configuration exported successfully.",
"ImportExportExportFailedMessage": "Failed to export configuration",
"ImportExportImportTitle": "Import Configuration",
"ImportExportImportPrompt": "Choose the settings categories that you wish to import. You can review and modify the imported settings before they are applied.",
"ImportExportImportActionLabel": "Import Settings",
"ImportExportSelectImportFileDialogTitle": "Select Configuration File",
"ImportExportInvalidConfigTitle": "Invalid Config",
"ImportExportReadFailedMessage": "Failed to read configuration file",
"ImportExportInvalidConfigMessage": "Invalid configuration file: {0}",
"ImportExportImportSuccessMessage": "Configuration imported successfully.",
"ImportExportDeployUserCurrentUser": "User: Current User",
"ImportExportDeployUserOther": "User: {0}",
"ImportExportDeployUserOtherFallback": "Other User",
"ImportExportDeployUserSysprep": "User: Sysprep",
"ImportExportAppRemovalAllUsers": "App Removal: All Users",
"ImportExportAppRemovalCurrentUser": "App Removal: Current User",
"ImportExportAppRemovalOther": "App Removal: {0}",
"ImportExportOptionRestorePoint": "Restore Point",
"ImportExportOptionRegistryBackup": "Registry Backup",
"ImportExportOptionRestartExplorer": "Restart Explorer",
"ImportExportOptionsPrefix": "Options: {0}",
"ImportExportDefaultDeploymentSettings": "Default deployment settings",
"ImportExportAppsSelected_one": "{0} app selected",
"ImportExportAppsSelected_other": "{0} apps selected",
"ImportExportNoAppsSelected": "No apps selected",
"ImportExportTweaksSelected_one": "{0} tweak selected",
"ImportExportTweaksSelected_other": "{0} tweaks selected",
"ImportExportNoTweaksSelected": "No tweaks selected",
"AppSelectionWinGetLoadFailedMessage": "Unable to load list of installed apps via WinGet.",
"ErrorTitle": "Error",
"AppSelectionStatusSelected_one": "{0} app selected for removal",
"AppSelectionStatusSelected_other": "{0} apps selected for removal",
"AppRemovalScopeDescriptionAllUsers": "Apps will be removed for all users and from the Windows image to prevent reinstallation for new users.",
"AppRemovalScopeDescriptionCurrentUser": "Apps will only be removed for the current user.",
"AppRemovalScopeDescriptionTargetUser": "Apps will only be removed for the specified target user.",
"TweaksCategoryHelpTooltip": "Open the wiki for more info on '{0}' tweaks",
"TweaksOptionNoChange": "No Change",
"TweaksOptionApply": "Apply",
"TweaksOptionDisable": "Disable",
"TweaksOptionEnable": "Enable",
"TweaksAlreadyAppliedTooltip": "This tweak is already applied and cannot be undone automatically. Visit the Win11Debloat wiki for instructions on how to manually revert this change.",
"DeployChangeRemoveApps_one": "Remove {0} application",
"DeployChangeRemoveApps_other": "Remove {0} applications",
"DeployChangeUndoPrefix": "Undo: {0}",
"DeployNoChangesSelectedMessage": "No changes have been selected.",
"DeploySelectedChangesTitle": "Selected Changes",
"DeployUserDescriptionCurrentUser": "The currently logged-in user profile",
"DeployUserDescriptionCurrentUserNamed": "The currently logged-in user profile: {0}",
"DeployUserDescriptionOtherUser": "A different user profile on this system",
"DeployUserDescriptionOtherUserNamed": "A different user profile on this system: {0}",
"DeployUserDescriptionSysprep": "The default user template, affecting all new users created after this point. Useful for Sysprep deployment.",
"LogsMenuTitle": "Logs",
"LogsFolderNotFoundMessage": "No logs folder found at: {0}",
"ExportConfigFailedTitle": "Export Configuration Failed",
"ExportConfigFailedMessage": "Unable to open export configuration dialog: {0}",
"ImportConfigFailedTitle": "Import Configuration Failed",
"ImportConfigFailedMessage": "Unable to open import configuration dialog: {0}",
"RestoreBackupFailedTitle": "Restore Backup Failed",
"RestoreBackupFailedMessage": "Unable to open restore backup dialog: {0}",
"AppPresetSelectTooltip": "Select {0}",
"InvalidUsernameFallbackMessage": "Please enter a valid username.",
"InvalidUsernameTitle": "Invalid Username",
"NoChangesSelectedTitle": "No Changes Selected",
"NoChangesSelectedMessage": "No changes have been selected, please select at least one option to proceed.",
"HomeCurrentUserWithName": "Current User ({0})",
"InitializationErrorTitle": "Initialization Error",
"InitializationErrorMessage": "An error occurred during initialization: {0}",
"WhatIfModeTitle": "WhatIf Mode",
"WhatIfModeMessage": "WhatIf mode is enabled. The script will not make any changes to your system in this mode.\n\nYou can observe the actions that would be taken by the script in the console output.",
"ConfirmTitle": "Are you sure?",
"ConfirmRemoveStoreMessage": "Are you sure that you wish to uninstall the Microsoft Store? This app cannot easily be reinstalled.",
"ConfirmRemoveTerminalMessage": "Are you sure that you wish to remove Windows Terminal? Windows Terminal is the default command-line app for Windows. Ensure you are not running Win11Debloat via Windows Terminal before proceeding to avoid a mid-process failure.",
"ConfigEmptyOrUnreadable": "Configuration is empty or could not be read.",
"ConfigMissingVersion": "Configuration is missing a Version field.",
"ConfigNoImportableData": "The configuration file contains no importable data.",
"ConfigAppsMustBeStrings": "Configuration Apps entries must be strings.",
"ConfigEntriesMustHaveNameAndValue": "Configuration {0} entries must contain Name and Value properties.",
"ConfigInvalidAppRemovalScopeIndex": "AppRemovalScopeIndex must be a supported numeric value (0, 1, or 2).",
"ConfigInvalidUserSelectionIndex": "UserSelectionIndex must be a supported numeric value (0, 1, or 2).",
"ConfigScopeRequiresCurrentUserTarget": "App removal scope 'Current user only' (AppRemovalScopeIndex 1) requires the deployment target 'Current User' (UserSelectionIndex 0).",
"ConfigScopeRequiresOtherUserTarget": "App removal scope 'Target user only' (AppRemovalScopeIndex 2) requires the deployment target 'Other User' (UserSelectionIndex 1).",
"ConfigScopeRequiresOtherUsername": "App removal scope 'Target user only' (AppRemovalScopeIndex 2) requires an 'OtherUsername' value.",
"UsernameValidationEmpty": "Please enter a username",
"UsernameValidationOwnUsername": "Cannot enter your own username, use 'Current User' option instead",
"UsernameValidationNotFound": "User not found, please enter a valid username",
"UsernameValidationFound": "User found: {0}",
"RestorePointFailedTitle": "Restore Point Creation Failed",
"RestorePointFailedMessage": "Failed to create a system restore point. Do you want to continue without a restore point?",
"ForceRemoveEdgeTitle": "Force Uninstall Microsoft Edge?",
"ForceRemoveEdgeMessage": "Unable to uninstall Microsoft Edge via WinGet. Would you like to forcefully uninstall it? NOT RECOMMENDED!",
"RemovingAppsSubStep": "Removing apps ({0}/{1})",
"BackupFileNotFound": "Backup file was not found: {0}",
"BackupFileNotValidJson": "Failed to read backup file '{0}'. The file is not valid JSON.",
"BackupValidationSingleError": "Validation failed: {0}",
"BackupValidationMultipleErrors": "Validation failed with {0} errors. See console output for details.",
"BackupMissingProperty": "Missing property: {0}",
"BackupUnsupportedVersion": "Unsupported backup version '{0}'.",
"BackupUnsupportedType": "Unsupported BackupType '{0}'.",
"BackupInvalidUser": "Invalid user '{0}'",
"BackupUserScopedWrongContext": "Backup was made for '{0}' and is user-scoped. Re-run as that user; SYSTEM cannot restore a CurrentUser backup.",
"BackupUserMismatch": "Backup was made for '{0}', this does not match current user '{1}'.",
"BackupUnsupportedTarget": "Unsupported Target '{0}'.",
"BackupSelectedFeaturesMustBeStrings": "SelectedFeatures must contain non-empty string feature IDs.",
"BackupSelectedUndoFeaturesMustBeStrings": "SelectedUndoFeatures must contain non-empty string feature IDs.",
"BackupMissingSelectedFeatures": "Backup must contain at least one feature ID in SelectedFeatures or SelectedUndoFeatures.",
"BackupAllowlistValidationFailed": "Failed to validate backup: {0}",
"BackupSnapshotMissingPath": "Backup validation failed: Registry key snapshot is missing Path.",
"BackupFeatureCatalogNotLoaded": "Unable to validate registry backup allowlist because feature definitions are not loaded.",
"BackupNoAllowedRegistryPaths": "Backup contains registry snapshots but no allowed registry paths were derived from the selected features.",
"BackupFeatureNotInCatalog": "Selected feature '{0}' was not found in the current feature catalog.",
"BackupUnsupportedRegistryPath": "Backup contains unsupported registry path '{0}'.",
"BackupUnexpectedRegistryPath": "Backup contains unexpected registry path '{0}' that is not allowed by SelectedFeatures.",
"BackupUnexpectedValue": "Backup contains unexpected value '{0}' under '{1}'.",
"BackupUnsupportedValueKind": "Backup contains unsupported registry value kind '{0}' for '{1}'.",
"BackupInvalidValueData": "Backup contains invalid registry data for kind '{0}' at '{1}'.",
"BackupValueMustNotDefineKind": "Backup value '{0}' must not define Kind when Exists is false.",
"StartMenuNoBackupFoundForUser": "No start menu backup file found for user {0}.",
"StartMenuWhatIfRestoredForUser": "[WhatIf] Restored start menu for user {0}.",
"StartMenuRestoredForUser": "Restored start menu for user {0}.",
"StartMenuRestoreFailedForUser": "Failed to restore start menu for user {0}. {1}",
"StartMenuWhatIfRemovedDefaultProfile": "[WhatIf] Removed start2.bin for the default user profile.",
"StartMenuRemovedDefaultProfile": "Removed start2.bin for the default user profile.",
"StartMenuRemoveFailedDefaultProfile": "Failed to remove start2.bin for the default user profile. {0}",
"StartMenuNoUserLocationsFound": "No user start menu locations were found."
}
+744
View File
@@ -0,0 +1,744 @@
{
"Features": {
"RemoveApps": {
"Label": "Remove the apps specified with the 'Apps' parameter",
"ApplyText": "Removing selected apps"
},
"Apps": {
"Label": "The selection of apps to remove, specified as a comma separated list. Use 'Default' (or omit) to use the default apps list",
"ApplyText": "Removing selected apps"
},
"RemoveGamingApps": {
"Label": "Remove the Xbox App and Xbox Gamebar",
"ApplyText": "Removing gaming related apps"
},
"RemoveHPApps": {
"Label": "Remove HP OEM applications",
"ApplyText": "Removing HP apps"
},
"CreateRestorePoint": {
"Label": "Create a system restore point",
"ApplyText": "Creating system restore point"
},
"DisableTelemetry": {
"Label": "Disable telemetry, tracking & targeted ads",
"ToolTip": "This setting disables telemetry, diagnostic data collection, activity history, app-launch tracking, targeted ads and more. It limits the data that is sent to Microsoft about your device and usage. If you are a Windows Insider, updates may be blocked until optional diagnostic data collection is turned back on.",
"ApplyText": "Disabling telemetry and diagnostic data collection",
"UndoLabel": "Enable telemetry, tracking & targeted ads",
"ApplyUndoText": "Enabling telemetry and diagnostic data collection"
},
"DisableSuggestions": {
"Label": "Disable tips, tricks & suggested content throughout Windows",
"ToolTip": "This setting removes many annoying distractions from Windows. This includes things like notifications, reminders and sync provider ads. It also prevents automated installation of suggested apps.",
"ApplyText": "Disabling tips, tricks, suggestions and ads throughout Windows",
"UndoLabel": "Enable tips, tricks & suggested content throughout Windows",
"ApplyUndoText": "Enabling tips, tricks, suggestions and ads throughout Windows"
},
"DisableNotifications": {
"Label": "Disable Windows Notifications (From apps and other senders)",
"ToolTip": "Disables native Windows notifications from apps and other senders, this includes notifications from apps like Discord, WhatsApp, Teams, and Slack.",
"ApplyText": "Disabling Windows notifications and reminders",
"UndoLabel": "Enable Windows notifications and reminders",
"ApplyUndoText": "Enabling Windows notifications and reminders"
},
"DisableLocationServices": {
"Label": "Disable Windows location services & app location access",
"ToolTip": "This will turn off Windows Location Services and deny apps access to your location. This feature uses policies, which will lock down certain settings.",
"ApplyText": "Disabling Windows location services and app location access",
"UndoLabel": "Enable Windows location services & app location access",
"ApplyUndoText": "Enabling Windows location services and app location access"
},
"DisableFindMyDevice": {
"Label": "Disable Find My Device location tracking",
"ToolTip": "This will turn off the 'Find My Device' feature, which periodically sends your device's location to Microsoft. This feature uses policies, which will lock down certain settings.",
"ApplyText": "Disabling Find My Device location tracking",
"UndoLabel": "Enable Find My Device location tracking",
"ApplyUndoText": "Enabling Find My Device location tracking"
},
"DisableLockscreenTips": {
"Label": "Disable tips & tricks on the lock screen",
"ToolTip": "This will turn off the lockscreen spotlight option and disable the tips, tricks and fun facts that appear on the lock screen.",
"ApplyText": "Disabling tips & tricks on the lock screen",
"UndoLabel": "Enable tips & tricks on the lock screen",
"ApplyUndoText": "Enabling tips & tricks on the lock screen"
},
"EnableDesktopSpotlight": {
"Label": "Enable Windows spotlight desktop background and shortcut",
"ToolTip": "Restores the Windows spotlight desktop background and the 'Learn about this picture' shortcut.",
"ApplyText": "Restoring the Windows spotlight desktop background and shortcut"
},
"DisableDesktopSpotlight": {
"Label": "Disable Windows spotlight desktop background",
"ToolTip": "Turns off Windows spotlight for the desktop background, which displays rotating images and may show tips and fun facts. This feature uses policies, which will lock down certain settings.",
"ApplyText": "Disabling the Windows spotlight desktop background",
"UndoLabel": "Enable Windows spotlight desktop background",
"ApplyUndoText": "Restoring the Windows spotlight desktop background and shortcut"
},
"HideDesktopSpotlightIcon": {
"Label": "Hide the 'Learn about this picture' desktop shortcut",
"ToolTip": "Hides the 'Learn about this picture' desktop shortcut while keeping Windows spotlight wallpaper rotation enabled. It does not disable Windows spotlight.",
"ApplyText": "Hiding the Windows spotlight 'Learn about this picture' desktop shortcut",
"UndoLabel": "Show the 'Learn about this picture' desktop shortcut",
"ApplyUndoText": "Showing the Windows spotlight 'Learn about this picture' desktop shortcut"
},
"DisableEdgeAds": {
"Label": "Disable ads, suggestions and newsfeed in Edge",
"ToolTip": "This will turn off various distractions from Microsoft Edge such as ads, suggestions and the MSN news feed. This feature uses policies, which will lock down certain settings.",
"ApplyText": "Disabling ads, suggestions and the MSN news feed in Microsoft Edge",
"UndoLabel": "Enable ads, suggestions and newsfeed in Edge",
"ApplyUndoText": "Enabling ads, suggestions and the MSN news feed in Microsoft Edge"
},
"DisableCopilot": {
"Label": "Disable Microsoft Copilot",
"ToolTip": "This will disable and uninstall Microsoft Copilot, Windows' built-in AI assistant.",
"ApplyText": "Disabling Microsoft Copilot",
"UndoLabel": "Enable Microsoft Copilot",
"ApplyUndoText": "Enabling Microsoft Copilot"
},
"DisableRecall": {
"Label": "Disable Windows Recall",
"ToolTip": "This will disable Windows Recall, an AI-powered feature that provides quick access to recently used files, apps and activities. This feature uses policies, which will lock down certain settings.",
"ApplyText": "Disabling Windows Recall",
"UndoLabel": "Enable Windows Recall",
"ApplyUndoText": "Enabling Windows Recall"
},
"DisableClickToDo": {
"Label": "Disable Click To Do, AI text & image analysis",
"ToolTip": "This will disable Click To Do, which provides AI-powered text and image analysis features in Windows. This feature uses policies, which will lock down certain settings.",
"ApplyText": "Disabling Click to Do",
"UndoLabel": "Enable Click To Do, AI text & image analysis",
"ApplyUndoText": "Enabling Click to Do"
},
"DisableAISvcAutoStart": {
"Label": "Prevent AI service from starting automatically",
"ToolTip": "This will set the WSAIFabricSvc service to manual startup, preventing the service from starting automatically with Windows.",
"ApplyText": "Preventing AI service from starting automatically",
"UndoLabel": "Allow AI service to start automatically",
"ApplyUndoText": "Allowing AI service to start automatically"
},
"DisableDVR": {
"Label": "Disable Xbox game/screen recording",
"ToolTip": "This will disable the Xbox game/screen recording features included with the Game Bar app. This feature uses policies, which will lock down certain settings.",
"ApplyText": "Disabling Xbox game/screen recording",
"UndoLabel": "Enable Xbox game/screen recording",
"ApplyUndoText": "Enabling Xbox game/screen recording"
},
"DisableGameBarIntegration": {
"Label": "Disable Game Bar integration",
"ToolTip": "This will disable the Game Bar integration with games and controllers. This stops annoying ms-gamebar popups when launching games or connecting a controller.",
"ApplyText": "Disabling Game Bar integration",
"UndoLabel": "Enable Game Bar integration",
"ApplyUndoText": "Enabling Game Bar integration"
},
"ClearStart": {
"Label": "Remove all pinned apps from the start menu for this user only",
"ApplyText": "Removing all pinned apps from the start menu"
},
"ClearStartAllUsers": {
"Label": "Remove all pinned apps from the start menu for all existing and new users",
"ApplyText": "Removing all pinned apps from the start menu for all users"
},
"ReplaceStart": {
"Label": "Replace the start menu layout for this user only with the provided template file",
"ApplyText": "Replacing the start menu"
},
"ReplaceStartAllUsers": {
"Label": "Replace the start menu layout for all existing and new users with the provided template file",
"ApplyText": "Replacing the start menu for all users"
},
"DisableStartRecommended": {
"Label": "Hide recommended section in the start menu",
"ToolTip": "This will hide the recommended section in the start menu, which shows recently added apps, recently opened files and app recommendations. This feature uses policies, which will lock down certain settings.",
"ApplyText": "Disabling the start menu recommended section",
"UndoLabel": "Show recommended section in the start menu",
"ApplyUndoText": "Enabling the start menu recommended section"
},
"DisableStartAllApps": {
"Label": "Hide 'All Apps' section in the start menu",
"ToolTip": "This will hide the 'All Apps' section in the start menu, which shows all installed apps. WARNING: Hiding this section may make it harder to find installed apps on your system. This feature uses policies, which will lock down certain settings.",
"ApplyText": "Disabling the 'All Apps' section in the start menu",
"UndoLabel": "Show 'All Apps' section in the start menu",
"ApplyUndoText": "Enabling the 'All Apps' section in the start menu"
},
"DisableStartPhoneLink": {
"Label": "Disable Phone Link integration in the start menu",
"ToolTip": "This will remove the Phone Link integration in the start menu when you have a mobile device linked to your PC.",
"ApplyText": "Disabling the Phone Link mobile devices integration in the start menu",
"UndoLabel": "Enable Phone Link integration in the start menu",
"ApplyUndoText": "Enabling the Phone Link mobile devices integration in the start menu"
},
"DisableBing": {
"Label": "Disable Bing web search & Copilot integration in search",
"ToolTip": "This will turn off Bing web search results and Copilot integration in the Windows search experience. This feature uses policies, which will lock down certain settings.",
"ApplyText": "Disabling Bing web search & Copilot integration in Windows search",
"UndoLabel": "Enable Bing web search & Copilot integration in search",
"ApplyUndoText": "Enabling Bing web search & Copilot integration in Windows search"
},
"DisableStoreSearchSuggestions": {
"Label": "Disable Microsoft Store app suggestions in search",
"ToolTip": "This will disable the Microsoft Store app suggestions in Windows search.",
"ApplyText": "Disabling Microsoft Store app suggestions in search",
"UndoLabel": "Enable Microsoft Store app suggestions in search",
"ApplyUndoText": "Enabling Microsoft Store app suggestions in search"
},
"DisableSettings365Ads": {
"Label": "Hide Microsoft 365 Copilot ads in Settings Home",
"ToolTip": "This will turn off the Microsoft 365 Copilot ads that appear in the Settings Home page.",
"ApplyText": "Disabling Microsoft 365 Copilot ads in Settings Home",
"UndoLabel": "Show Microsoft 365 Copilot ads in Settings Home",
"ApplyUndoText": "Enabling Microsoft 365 Copilot ads in Settings Home"
},
"DisableSettingsHome": {
"Label": "Hide Settings 'Home' page",
"ToolTip": "Removes the 'Home' page from the Settings app.",
"ApplyText": "Disabling the Settings Home page",
"UndoLabel": "Show Settings 'Home' page",
"ApplyUndoText": "Enabling the Settings Home page"
},
"DisableEdgeAI": {
"Label": "Disable AI features in Microsoft Edge",
"ToolTip": "This will turn off AI features in Microsoft Edge, such as the AI-powered sidebar and Copilot features. This feature uses policies, which will lock down certain settings.",
"ApplyText": "Disabling AI features in Microsoft Edge",
"UndoLabel": "Enable AI features in Microsoft Edge",
"ApplyUndoText": "Enabling AI features in Microsoft Edge"
},
"DisablePaintAI": {
"Label": "Disable AI features in Paint",
"ToolTip": "This will turn off AI features in Paint, such as the AI-powered image generation and editing tools. This feature uses policies, which will lock down certain settings.",
"ApplyText": "Disabling AI features in Paint",
"UndoLabel": "Enable AI features in Paint",
"ApplyUndoText": "Enabling AI features in Paint"
},
"DisableNotepadAI": {
"Label": "Disable AI features in Notepad",
"ToolTip": "This will turn off AI features in Notepad, such as the AI-powered writing suggestions. This feature uses policies, which will lock down certain settings.",
"ApplyText": "Disabling AI features in Notepad",
"UndoLabel": "Enable AI features in Notepad",
"ApplyUndoText": "Enabling AI features in Notepad"
},
"EnableDarkMode": {
"Label": "Enable dark theme for system and apps",
"ToolTip": "This will set the app and system theme to dark mode.",
"ApplyText": "Enabling dark mode for system and apps",
"UndoLabel": "Disable dark theme for system and apps",
"ApplyUndoText": "Disabling dark mode for system and apps"
},
"DisableDragTray": {
"Label": "Disable 'Drag Tray' for sharing & moving files",
"ToolTip": "The Drag Tray is a new feature for sharing & moving files in Windows 11, it appears at the top of the screen when dragging files.",
"ApplyText": "Disabling Drag Tray",
"UndoLabel": "Enable 'Drag Tray' for sharing & moving files",
"ApplyUndoText": "Enabling Drag Tray"
},
"RevertContextMenu": {
"Label": "Use classic Windows 10 context menu style",
"ToolTip": "This will restore the classic Windows 10 style context menu, which is normally hidden behind the 'Show more options' entry in the new Windows 11 context menu.",
"ApplyText": "Restoring the classic Windows 10 style context menu",
"UndoLabel": "Use Windows 11 context menu style",
"ApplyUndoText": "Restoring the Windows 11 style context menu"
},
"DisableMouseAcceleration": {
"Label": "Disable Enhance Pointer Precision (mouse acceleration)",
"ToolTip": "This will disable mouse acceleration which is enabled by default in Windows. This makes mouse movement more consistent and predictable.",
"ApplyText": "Turning off Enhanced Pointer Precision",
"UndoLabel": "Enable Enhance Pointer Precision (mouse acceleration)",
"ApplyUndoText": "Turning on Enhanced Pointer Precision"
},
"DisableStickyKeys": {
"Label": "Disable Sticky Keys keyboard shortcut (5x shift)",
"ToolTip": "This will prevent the Sticky Keys dialog from appearing when you press the Shift key 5 times in a row.",
"ApplyText": "Disabling the Sticky Keys keyboard shortcut",
"UndoLabel": "Enable Sticky Keys keyboard shortcut (5x shift)",
"ApplyUndoText": "Enabling the Sticky Keys keyboard shortcut"
},
"DisableWindowSnapping": {
"Label": "Disable window snapping",
"ToolTip": "This will turn off the ability to snap windows to the sides or corners of the screen.",
"ApplyText": "Disabling window snapping",
"UndoLabel": "Enable window snapping",
"ApplyUndoText": "Enabling window snapping"
},
"DisableSnapAssist": {
"Label": "Disable showing app suggestions when snapping windows",
"ToolTip": "This will turn off app suggestions when you snap windows to the sides or corners of the screen.",
"ApplyText": "Disabling the Snap Assist suggestions",
"UndoLabel": "Enable showing app suggestions when snapping windows",
"ApplyUndoText": "Enabling the Snap Assist suggestions"
},
"DisableSnapLayouts": {
"Label": "Hide snap layout flyout at top of screen and on maximize button",
"ToolTip": "This will turn off the snap layout flyout that appears when you hover over the maximize button or drag windows to the top of the screen.",
"ApplyText": "Hiding snap layouts when dragging windows to top of the screen and on maximize button",
"UndoLabel": "Show snap layout flyout at top of screen and on maximize button",
"ApplyUndoText": "Showing snap layouts when dragging windows to top of the screen and on maximize button"
},
"HideTabsInAltTab": {
"Label": "Hide tabs from apps when snapping or pressing Alt+Tab",
"ApplyText": "Disable showing tabs from apps when snapping or pressing Alt+Tab"
},
"Show3TabsInAltTab": {
"Label": "Show 3 tabs from apps when snapping or pressing Alt+Tab",
"ApplyText": "Enable showing 3 tabs from apps when snapping or pressing Alt+Tab"
},
"Show5TabsInAltTab": {
"Label": "Show 5 tabs from apps when snapping or pressing Alt+Tab",
"ApplyText": "Enable showing 5 tabs from apps when snapping or pressing Alt+Tab"
},
"Show20TabsInAltTab": {
"Label": "Show 20 tabs from apps when snapping or pressing Alt+Tab",
"ApplyText": "Enable showing 20 tabs from apps when snapping or pressing Alt+Tab"
},
"TaskbarAlignLeft": {
"Label": "Align taskbar to the left",
"ToolTip": "By default, Windows 11 has the taskbar buttons centered. Enabling this setting will move the taskbar buttons to the left, similar to previous versions of Windows.",
"ApplyText": "Aligning taskbar buttons to the left",
"UndoLabel": "Align taskbar to the center",
"ApplyUndoText": "Aligning taskbar buttons to the center"
},
"HideSearchTb": {
"Label": "Hide search icon from the taskbar",
"ApplyText": "Hiding the search icon from the taskbar",
"UndoLabel": "Show search box on the taskbar",
"ApplyUndoText": "Changing taskbar search to search box"
},
"ShowSearchIconTb": {
"Label": "Show search icon on the taskbar",
"ApplyText": "Changing taskbar search to icon only",
"UndoLabel": "Show search box on the taskbar",
"ApplyUndoText": "Changing taskbar search to search box"
},
"ShowSearchLabelTb": {
"Label": "Show search icon with label on the taskbar",
"ApplyText": "Changing taskbar search to icon with label",
"UndoLabel": "Show search box on the taskbar",
"ApplyUndoText": "Changing taskbar search to search box"
},
"ShowSearchBoxTb": {
"Label": "Show search box on the taskbar",
"ApplyText": "Changing taskbar search to search box"
},
"HideTaskview": {
"Label": "Hide 'Task view' button on the taskbar",
"ToolTip": "This will disable the 'Task view' button on the taskbar, which allows you to see all your open windows and virtual desktops.",
"ApplyText": "Hiding the taskview button from the taskbar",
"UndoLabel": "Show 'Task view' button on the taskbar",
"ApplyUndoText": "Showing the taskview button from the taskbar"
},
"DisableWidgets": {
"Label": "Disable widgets on the taskbar & lock screen",
"ToolTip": "This will disable the widgets features in Windows, including the widgets button on the taskbar and the widgets that can appear on the lock screen.",
"ApplyText": "Disabling widgets on the taskbar & lock screen"
},
"HideChat": {
"Label": "Hide Chat (meet now) icon on the taskbar",
"ToolTip": "This will disable the Chat (meet now) icon on the taskbar.",
"ApplyText": "Hiding the chat icon from the taskbar",
"UndoLabel": "Show Chat (meet now) icon on the taskbar",
"ApplyUndoText": "Showing the chat icon from the taskbar"
},
"DisableStorageSense": {
"Label": "Disable Storage Sense automatic disk cleanup",
"ToolTip": "This will disable Storage Sense, which automatically frees up disk space by deleting temporary files, emptying the recycle bin and cleaning up files in the Downloads folder.",
"ApplyText": "Disabling Storage Sense automatic disk cleanup",
"UndoLabel": "Enable Storage Sense automatic disk cleanup",
"ApplyUndoText": "Enabling Storage Sense automatic disk cleanup"
},
"DisableFastStartup": {
"Label": "Disable fast start-up",
"ToolTip": "Fast Start-up helps your PC start faster after shutdown by saving a system image to disk. Disabling Fast Start-up can help with certain issues, but may result in slightly longer boot times.",
"ApplyText": "Disabling Fast Start-up",
"UndoLabel": "Enable fast start-up",
"ApplyUndoText": "Enabling Fast Start-up"
},
"DisableBitlockerAutoEncryption": {
"Label": "Disable BitLocker automatic device encryption",
"ToolTip": "For devices that support it, Windows 11 automatically enables BitLocker device encryption. Disabling this will turn off automatic encryption of the device, but you can still manually enable BitLocker encryption if desired. Drives that are already encrypted with BitLocker will remain encrypted when this setting is applied.",
"ApplyText": "Disabling BitLocker automatic device encryption",
"UndoLabel": "Enable BitLocker automatic device encryption",
"ApplyUndoText": "Enabling BitLocker automatic device encryption"
},
"DisableModernStandbyNetworking": {
"Label": "Disable Modern Standby network connectivity",
"ToolTip": "By default, devices that support Modern Standby maintain network connectivity while in sleep mode. Disabling network connectivity during Modern Standby can help save battery life.",
"ApplyText": "Disabling network connectivity during Modern Standby",
"UndoLabel": "Enable Modern Standby network connectivity",
"ApplyUndoText": "Enabling network connectivity during Modern Standby"
},
"EnableEndTask": {
"Label": "Show 'End Task' option in taskbar context menu",
"ToolTip": "When enabled, adds an 'End Task' option to the right-click context menu for apps in the taskbar, allowing you to quickly force close apps.",
"ApplyText": "Enabling the 'End Task' option in the taskbar right click menu",
"UndoLabel": "Hide 'End Task' option in taskbar context menu",
"ApplyUndoText": "Disabling the 'End Task' option in the taskbar right click menu"
},
"EnableLastActiveClick": {
"Label": "Enable 'Last Active Click' behavior for taskbar apps",
"ToolTip": "When enabled, clicking on an app in the taskbar will switch to the last active window of that app, instead of only showing the thumbnail preview.",
"ApplyText": "Enabling the 'Last Active Click' behavior in the taskbar app area",
"UndoLabel": "Disable 'Last Active Click' behavior for taskbar apps",
"ApplyUndoText": "Disabling the 'Last Active Click' behavior in the taskbar app area"
},
"CombineTaskbarAlways": {
"Label": "Always combine taskbar buttons and hide labels for the main display",
"ApplyText": "Setting the taskbar on the main display to always combine buttons and hide labels"
},
"CombineMMTaskbarAlways": {
"Label": "Always combine taskbar buttons and hide labels for secondary displays",
"ApplyText": "Setting the taskbar on secondary displays to always combine buttons and hide labels"
},
"CombineTaskbarWhenFull": {
"Label": "Combine taskbar buttons and hide labels when taskbar is full for the main display",
"ApplyText": "Setting the taskbar on the main display to only combine buttons and hide labels when the taskbar is full",
"UndoLabel": "Always combine taskbar buttons and hide labels for the main display",
"ApplyUndoText": "Setting the taskbar on the main display to always combine buttons and hide labels"
},
"CombineMMTaskbarWhenFull": {
"Label": "Combine taskbar buttons and hide labels when taskbar is full for secondary displays",
"ApplyText": "Setting the taskbar on secondary displays to only combine buttons and hide labels when the taskbar is full",
"UndoLabel": "Always combine taskbar buttons and hide labels for secondary displays",
"ApplyUndoText": "Setting the taskbar on secondary displays to always combine buttons and hide labels"
},
"CombineTaskbarNever": {
"Label": "Never combine taskbar buttons and show labels for the main display",
"ApplyText": "Setting the taskbar on the main display to never combine buttons or hide labels",
"UndoLabel": "Always combine taskbar buttons and hide labels for the main display",
"ApplyUndoText": "Setting the taskbar on the main display to always combine buttons and hide labels"
},
"CombineMMTaskbarNever": {
"Label": "Never combine taskbar buttons and show labels for secondary displays",
"ApplyText": "Setting the taskbar on secondary displays to never combine buttons or hide labels",
"UndoLabel": "Always combine taskbar buttons and hide labels for secondary displays",
"ApplyUndoText": "Setting the taskbar on secondary displays to always combine buttons and hide labels"
},
"MMTaskbarModeAll": {
"Label": "Show app icons on all taskbars",
"ApplyText": "Setting the taskbar to show app icons on all taskbars"
},
"MMTaskbarModeMainActive": {
"Label": "Show app icons on main taskbar and on taskbar where the windows is open",
"ApplyText": "Setting the taskbar to show app icons on main taskbar and on taskbar where the windows is open",
"UndoLabel": "Show app icons on all taskbars",
"ApplyUndoText": "Setting the taskbar to show app icons on all taskbars"
},
"MMTaskbarModeActive": {
"Label": "Show app icons only on taskbar where the window is open",
"ApplyText": "Setting the taskbar to only show app icons on the taskbar where the window is open",
"UndoLabel": "Show app icons on all taskbars",
"ApplyUndoText": "Setting the taskbar to show app icons on all taskbars"
},
"ExplorerToHome": {
"Label": "Change the default location that File Explorer opens to 'Home'",
"ApplyText": "Changing the default location that File Explorer opens to, to 'Home'"
},
"ExplorerToThisPC": {
"Label": "Change the default location that File Explorer opens to 'This PC'",
"ApplyText": "Changing the default location that File Explorer opens to, to 'This PC'",
"UndoLabel": "Change the default location that File Explorer opens to 'Home'",
"ApplyUndoText": "Changing the default location that File Explorer opens to, to 'Home'"
},
"ExplorerToDownloads": {
"Label": "Change the default location that File Explorer opens to 'Downloads'",
"ApplyText": "Changing the default location that File Explorer opens to, to 'Downloads'",
"UndoLabel": "Change the default location that File Explorer opens to 'Home'",
"ApplyUndoText": "Changing the default location that File Explorer opens to, to 'Home'"
},
"ExplorerToOneDrive": {
"Label": "Change the default location that File Explorer opens to 'OneDrive'",
"ApplyText": "Changing the default location that File Explorer opens to, to 'OneDrive'",
"UndoLabel": "Change the default location that File Explorer opens to 'Home'",
"ApplyUndoText": "Changing the default location that File Explorer opens to, to 'Home'"
},
"ShowKnownFileExt": {
"Label": "Show file extensions for known file types",
"ToolTip": "This will show file extensions for known file types. By default, Windows hides file extensions for known file types which can lead to confusion and security risks.",
"ApplyText": "Enabling file extensions for known file types",
"UndoLabel": "Hide file extensions for known file types",
"ApplyUndoText": "Disabling file extensions for known file types"
},
"ShowHiddenFolders": {
"Label": "Show hidden files, folders and drives",
"ToolTip": "By default, Windows hides certain files, folders and drives to prevent accidental modification or deletion. Turn this on to show all files in File Explorer.",
"ApplyText": "Unhiding hidden files, folders and drives",
"UndoLabel": "Hide hidden files, folders and drives",
"ApplyUndoText": "Hiding hidden files, folders and drives"
},
"HideDupliDrive": {
"Label": "Hide duplicate removable drive entries",
"ToolTip": "By default, Windows shows removable drives both under 'This PC' and in the navigation pane with its own entry. Enable this setting to only show removable drives under 'This PC'.",
"ApplyText": "Hiding duplicate removable drive entries from the File Explorer navigation pane",
"UndoLabel": "Show duplicate removable drive entries",
"ApplyUndoText": "Showing duplicate removable drive entries from the File Explorer navigation pane"
},
"HideHome": {
"Label": "Hide 'Home' from navigation pane",
"ToolTip": "Hides the 'Home' section from the File Explorer navigation pane. Warning: This may prevent Quick access links from updating until you restart your PC or Windows Explorer.",
"ApplyText": "Hiding the 'Home' section from the File Explorer navigation pane",
"UndoLabel": "Show 'Home' from navigation pane",
"ApplyUndoText": "Showing the 'Home' section from the File Explorer navigation pane"
},
"HideGallery": {
"Label": "Hide 'Gallery' from navigation pane",
"ToolTip": "Hides the 'Gallery' section from the File Explorer navigation pane.",
"ApplyText": "Hiding the 'Gallery' section from the File Explorer navigation pane",
"UndoLabel": "Show 'Gallery' from navigation pane",
"ApplyUndoText": "Showing the 'Gallery' section from the File Explorer navigation pane"
},
"DisableTransparency": {
"Label": "Disable transparency effects",
"ToolTip": "This will disable transparency effects on Windows and interfaces. Which can help improve performance on older hardware.",
"ApplyText": "Disabling transparency effects",
"UndoLabel": "Enable transparency effects",
"ApplyUndoText": "Enabling transparency effects"
},
"DisableAnimations": {
"Label": "Disable animations and visual effects",
"ToolTip": "This will disable animations and some visual effects in Windows, which can make the interface feel snappier, especially on older hardware.",
"ApplyText": "Disabling animations and visual effects",
"UndoLabel": "Enable animations and visual effects",
"ApplyUndoText": "Enabling animations and visual effects"
},
"DisableUpdateASAP": {
"Label": "Prevent getting updates as soon as they're available",
"ToolTip": "This will prevent your PC from being among the first to receive new non-security updates. Your PC will still receive these updates eventually.",
"ApplyText": "Preventing Windows from getting updates as soon as they are available",
"UndoLabel": "Allow getting updates as soon as they're available",
"ApplyUndoText": "Allowing Windows to get updates as soon as they are available"
},
"PreventUpdateAutoReboot": {
"Label": "Prevent automatic restarts after updates while signed in",
"ToolTip": "This will prevent your PC from automatically restarting after updates while any user is signed in.",
"ApplyText": "Preventing automatic restarts after updates while signed in",
"UndoLabel": "Allow automatic restarts after updates while signed in",
"ApplyUndoText": "Allowing automatic restarts after updates while signed in"
},
"DisableDeliveryOptimization": {
"Label": "Disable sharing downloaded updates with other PCs",
"ToolTip": "This will prevent your PC from sharing downloaded updates with other PCs on the local network or on the internet. This also prevents your PC from downloading updates from other PCs.",
"ApplyText": "Disabling sharing of downloaded updates with other PCs",
"UndoLabel": "Enable sharing downloaded updates with other PCs",
"ApplyUndoText": "Enabling sharing of downloaded updates with other PCs"
},
"DisableDeviceAutoAppDownload": {
"Label": "Prevent Windows from auto-installing device companion apps",
"ToolTip": "Stops Windows from silently installing device companion apps via Windows Update when you connect certain devices, like monitors from LG and Alienware. These devices will still work as expected, this only stops Windows Update from automatically installing additional apps without consent.",
"ApplyText": "Preventing automatic installation of device companion apps",
"UndoLabel": "Allow automatic installation of device companion apps",
"ApplyUndoText": "Allowing automatic installation of device companion apps"
},
"ForceRemoveEdge": {
"Label": "Forcefully uninstall Microsoft Edge. NOT RECOMMENDED!",
"ApplyText": "Forcefully uninstalling Microsoft Edge"
},
"HideOnedrive": {
"Label": "Hide 'OneDrive' from navigation pane",
"ToolTip": "Hides the 'OneDrive' section from the File Explorer navigation pane.",
"ApplyText": "Hiding the 'OneDrive' section from the File Explorer navigation pane",
"UndoLabel": "Show 'OneDrive' from navigation pane",
"ApplyUndoText": "Showing the 'OneDrive' section from the File Explorer navigation pane"
},
"Hide3dObjects": {
"Label": "Hide '3D objects' folder under 'This PC'",
"ToolTip": "Hides the '3D objects' folder from the File Explorer navigation pane.",
"ApplyText": "Hiding the '3D objects' folder from the File Explorer navigation pane",
"UndoLabel": "Show '3D objects' folder under 'This PC'",
"ApplyUndoText": "Showing the '3D objects' folder from the File Explorer navigation pane"
},
"HideMusic": {
"Label": "Hide 'Music' folder under 'This PC'",
"ToolTip": "Hides the 'Music' folder from the File Explorer navigation pane.",
"ApplyText": "Hiding the 'Music' folder from the File Explorer navigation pane",
"UndoLabel": "Show 'Music' folder under 'This PC'",
"ApplyUndoText": "Showing the 'Music' folder from the File Explorer navigation pane"
},
"AddFoldersToThisPC": {
"Label": "Add common folders back to 'This PC' page",
"ToolTip": "This setting will add common folders like Desktop, Documents, Downloads, Music, Pictures and Videos back to the 'This PC' page in File Explorer.",
"ApplyText": "Adding all common folders (Desktop, Downloads, etc.) back to 'This PC' in File Explorer",
"UndoLabel": "Remove common folders back to 'This PC' page",
"ApplyUndoText": "Removing all common folders (Desktop, Downloads, etc.) back to 'This PC' in File Explorer"
},
"HideIncludeInLibrary": {
"Label": "Hide 'Include in library' option in the context menu",
"ToolTip": "Hides the 'Include in library' option from the File Explorer context menu.",
"ApplyText": "Hiding 'Include in library' in the context menu",
"UndoLabel": "Show 'Include in library' option in the context menu",
"ApplyUndoText": "Showing 'Include in library' in the context menu"
},
"HideGiveAccessTo": {
"Label": "Hide 'Give access to' option in the context menu",
"ToolTip": "Hides the 'Give access to' option from the File Explorer context menu.",
"ApplyText": "Hiding 'Give access to' in the context menu",
"UndoLabel": "Show 'Give access to' option in the context menu",
"ApplyUndoText": "Showing 'Give access to' in the context menu"
},
"HideShare": {
"Label": "Hide 'Share' option in the context menu",
"ToolTip": "Hides the 'Share' option from the File Explorer context menu.",
"ApplyText": "Hiding 'Share' in the context menu",
"UndoLabel": "Show 'Share' option in the context menu",
"ApplyUndoText": "Showing 'Share' in the context menu"
},
"DisableBraveBloat": {
"Label": "Disable bloat in Brave browser (AI, Crypto, etc.)",
"ToolTip": "This will disable Brave's built-in AI features, Crypto wallet, News, Rewards, Talk and VPN. This feature uses policies, which will lock down certain settings.",
"ApplyText": "Disabling Brave AI, Crypto, News, Rewards, Talk and VPN in Brave browser",
"UndoLabel": "Enable Brave browser features (AI, Crypto, etc.)",
"ApplyUndoText": "Enabling Brave AI, Crypto, News, Rewards, Talk and VPN in Brave browser"
},
"EnableWindowsSandbox": {
"Label": "Enable Windows Sandbox",
"ToolTip": "Windows Sandbox is a lightweight desktop environment for safely running applications in isolation. Software installed inside the Windows Sandbox environment remains 'sandboxed' and runs separately from the host machine. Only supported on Windows 11 Pro, Workstation, and Enterprise editions.",
"ApplyText": "Enabling Windows Sandbox",
"UndoLabel": "Disable Windows Sandbox",
"ApplyUndoText": "Disabling Windows Sandbox"
},
"EnableWindowsSubsystemForLinux": {
"Label": "Enable Windows Subsystem for Linux",
"ToolTip": "Windows Subsystem for Linux allows you to run a Linux environment directly on Windows without the need for a virtual machine.",
"ApplyText": "Enabling Windows Subsystem for Linux",
"UndoLabel": "Disable Windows Subsystem for Linux",
"ApplyUndoText": "Disabling Windows Subsystem for Linux"
},
"ShowDriveLettersFirst": {
"Label": "Show drive letters before drive label",
"ToolTip": "This setting will show drive letters before the drive label in File Explorer.",
"ApplyText": "Showing drive letters before drive label",
"UndoLabel": "Show drive letters after drive label",
"ApplyUndoText": "Showing drive letters after drive label"
},
"ShowDriveLettersLast": {
"Label": "Show drive letters after drive label",
"ToolTip": "This setting will show drive letters after the drive label in File Explorer (Default Windows behavior).",
"ApplyText": "Showing drive letters after drive label"
},
"ShowNetworkDriveLettersFirst": {
"Label": "Show network drive letters before drive label",
"ToolTip": "This setting will show only network drive letters before the drive label in File Explorer.",
"ApplyText": "Showing network drive letters before drive label",
"UndoLabel": "Show drive letters after drive label",
"ApplyUndoText": "Showing drive letters after drive label"
},
"HideDriveLetters": {
"Label": "Hide all drive letters",
"ToolTip": "This setting will hide all drive letters from the File Explorer navigation pane and 'This PC'.",
"ApplyText": "Hiding all drive letters",
"UndoLabel": "Show drive letters after drive label",
"ApplyUndoText": "Showing drive letters after drive label"
},
"StartAllAppsCategory": {
"Label": "Show All Apps in Category view (Default)",
"ToolTip": "This will set the All Apps section in the start menu to show apps grouped by category.",
"ApplyText": "Setting All Apps view to Category"
},
"StartAllAppsGrid": {
"Label": "Show All Apps in Grid view",
"ToolTip": "This will set the All Apps section in the start menu to show apps in an alphabetical grid layout.",
"ApplyText": "Setting All Apps view to Grid",
"UndoLabel": "Show All Apps in Category view",
"ApplyUndoText": "Setting All Apps view to Category"
},
"StartAllAppsList": {
"Label": "Show All Apps in List view",
"ToolTip": "This will set the All Apps section in the start menu to show apps in an alphabetical list layout.",
"ApplyText": "Setting All Apps view to List",
"UndoLabel": "Show All Apps in Category view",
"ApplyUndoText": "Setting All Apps view to Category"
}
},
"UiGroups": {
"DesktopSpotlight": {
"Label": "Windows spotlight on the desktop",
"ToolTip": "This setting controls the Windows spotlight desktop background option. Keep the rotating wallpaper with or without the 'Learn about this picture' shortcut, or disable Windows spotlight entirely.",
"Values": {
"EnableDesktopSpotlight": "Show 'Learn about this picture' shortcut (Default)",
"HideDesktopSpotlightIcon": "Hide 'Learn about this picture' shortcut",
"DisableDesktopSpotlight": "Disable Windows spotlight desktop background"
}
},
"SearchIcon": {
"Label": "Taskbar search style",
"ToolTip": "This setting allows you to customize the appearance of the search box on the taskbar.",
"Values": {
"ShowSearchBoxTb": "Show search box (Default)",
"ShowSearchLabelTb": "Show search icon and label",
"ShowSearchIconTb": "Show search icon only",
"HideSearchTb": "Hide"
}
},
"MultiMon": {
"Label": "Show taskbar apps on",
"ToolTip": "This setting allows you to choose where taskbar app buttons are shown when using multiple monitors.",
"Values": {
"MMTaskbarModeAll": "All taskbars (Default)",
"MMTaskbarModeMainActive": "Main taskbar and taskbar where window is open",
"MMTaskbarModeActive": "Taskbar where window is open"
}
},
"CombineButtons": {
"Label": "Combine taskbar buttons on the main display",
"ToolTip": "This setting allows you to choose how taskbar buttons are combined on the main display.",
"Values": {
"CombineTaskbarAlways": "Always (Default)",
"CombineTaskbarWhenFull": "When taskbar is full",
"CombineTaskbarNever": "Never"
}
},
"CombineMMButtons": {
"Label": "Combine taskbar buttons on secondary displays",
"ToolTip": "This setting allows you to choose how taskbar buttons are combined on secondary displays.",
"Values": {
"CombineMMTaskbarAlways": "Always (Default)",
"CombineMMTaskbarWhenFull": "When taskbar is full",
"CombineMMTaskbarNever": "Never"
}
},
"ClearStart": {
"Label": "Remove pinned apps from the start menu",
"ToolTip": "This setting allows you to quickly remove all pinned apps from the start menu.",
"Values": {
"ClearStart": "Remove for the selected user",
"ClearStartAllUsers": "Remove for all users"
}
},
"ExplorerLocation": {
"Label": "Open File Explorer to",
"ToolTip": "This setting allows you to choose the default location that File Explorer opens to.",
"Values": {
"ExplorerToHome": "Home (Default)",
"ExplorerToThisPC": "This PC",
"ExplorerToDownloads": "Downloads",
"ExplorerToOneDrive": "OneDrive"
}
},
"DriveLetterPosition": {
"Label": "Drive letter position",
"ToolTip": "This setting allows you to choose where drive letters are shown in File Explorer.",
"Values": {
"ShowDriveLettersLast": "Show drive letters after drive label (Default)",
"ShowDriveLettersFirst": "Show drive letters before drive label",
"ShowNetworkDriveLettersFirst": "Show network drive letters before drive label",
"HideDriveLetters": "Hide all drive letters"
}
},
"ShowTabsInAltTab": {
"Label": "Show tabs from apps when snapping or pressing Alt+Tab",
"ToolTip": "This setting allows you to choose whether to show tabs from apps (such as Edge browser tabs) when snapping windows or pressing Alt+Tab.",
"Values": {
"HideTabsInAltTab": "Don't show tabs",
"Show3TabsInAltTab": "Show 3 most recent tabs (Default)",
"Show5TabsInAltTab": "Show 5 most recent tabs",
"Show20TabsInAltTab": "Show 20 most recent tabs"
}
},
"StartAllAppsView": {
"Label": "Start menu 'All Apps' view",
"ToolTip": "This setting allows you to change the layout of the 'All Apps' section in the start menu, or hide it entirely. Hiding this section may make it harder to find installed apps on your system. This feature uses policies, which will lock down certain settings.",
"Values": {
"DisableStartAllApps": "Hide",
"StartAllAppsCategory": "Category (Default)",
"StartAllAppsGrid": "Grid",
"StartAllAppsList": "List"
}
}
}
}
+566
View File
@@ -0,0 +1,566 @@
{
"Clipchamp.Clipchamp": {
"FriendlyName": "Clipchamp",
"Description": "Editor video di Microsoft"
},
"Microsoft.3DBuilder": {
"FriendlyName": "3D Builder",
"Description": "Software di base per la modellazione 3D"
},
"Microsoft.549981C3F5F10": {
"FriendlyName": "Cortana",
"Description": "Assistente vocale Microsoft Cortana (discontinuato)"
},
"Microsoft.BingFinance": {
"FriendlyName": "Bing Finance",
"Description": "Notizie finanziarie e monitoraggio tramite Bing (discontinuato)"
},
"Microsoft.BingFoodAndDrink": {
"FriendlyName": "Bing Food And Drink",
"Description": "Ricette e notizie sul cibo tramite Bing (discontinuato)"
},
"Microsoft.BingHealthAndFitness": {
"FriendlyName": "Bing Health And Fitness",
"Description": "Monitoraggio e notizie su salute e fitness tramite Bing (discontinuato)"
},
"Microsoft.BingNews": {
"FriendlyName": "Bing News",
"Description": "Aggregatore di notizie Bing (discontinuato)"
},
"Microsoft.BingSports": {
"FriendlyName": "Bing Sports",
"Description": "Notizie e risultati sportivi tramite Bing (discontinuato)"
},
"Microsoft.BingTranslator": {
"FriendlyName": "Bing Translator",
"Description": "Servizio di traduzione tramite Bing"
},
"Microsoft.BingTravel": {
"FriendlyName": "Bing Travel",
"Description": "Pianificazione di viaggi e notizie tramite Bing (discontinuato)"
},
"Microsoft.BingWeather": {
"FriendlyName": "Bing Weather",
"Description": "Previsioni meteo tramite Bing"
},
"XP9CXNGPPJ97XX": {
"FriendlyName": "Microsoft Copilot",
"Description": "Assistente IA integrato in Windows"
},
"Microsoft.Windows.AIHub": {
"FriendlyName": "Copilot+ AI Hub",
"Description": "App Copilot+ AI Hub (Windows 11 24H2+)"
},
"Microsoft.PCManager": {
"FriendlyName": "Microsoft PC Manager",
"Description": "Strumento Microsoft PC Manager per la pulizia e l'ottimizzazione del sistema (spesso preinstallato)"
},
"Microsoft.Getstarted": {
"FriendlyName": "Get Started",
"Description": "Suggerimenti e guida introduttiva per Windows (non può essere disinstallata in Windows 11)"
},
"Microsoft.Messaging": {
"FriendlyName": "Messaging",
"Description": "App di messaggistica, spesso integrata con Skype (in gran parte discontinuata)"
},
"Microsoft.Microsoft3DViewer": {
"FriendlyName": "3D Viewer",
"Description": "Visualizzatore di modelli 3D (non più supportato)"
},
"Microsoft.MicrosoftJournal": {
"FriendlyName": "Microsoft Journal",
"Description": "App per prendere appunti digitali ottimizzata per l'uso della penna"
},
"Microsoft.MicrosoftOfficeHub": {
"FriendlyName": "Office Hub",
"Description": "Hub per accedere alle app e ai documenti di Microsoft Office (precursore dell'app Microsoft 365)"
},
"Microsoft.MicrosoftPowerBIForWindows": {
"FriendlyName": "Power BI",
"Description": "Client del servizio di analisi aziendale"
},
"Microsoft.MicrosoftSolitaireCollection": {
"FriendlyName": "Solitaire Collection",
"Description": "Raccolta di giochi di solitario"
},
"Microsoft.MicrosoftStickyNotes": {
"FriendlyName": "Memo",
"Description": "App per creare memo rapidi sul desktop e sincronizzarli tra dispositivi"
},
"Microsoft.MixedReality.Portal": {
"FriendlyName": "Mixed Reality Portal",
"Description": "Portale per i visori Windows Mixed Reality"
},
"Microsoft.NetworkSpeedTest": {
"FriendlyName": "Network Speed Test",
"Description": "Utilità per testare la velocità della connessione Internet"
},
"Microsoft.News": {
"FriendlyName": "Microsoft News",
"Description": "App Microsoft News per Windows"
},
"Microsoft.Office.OneNote": {
"FriendlyName": "OneNote",
"Description": "App per prendere appunti digitali (versione Universal Windows Platform)"
},
"Microsoft.Office.Sway": {
"FriendlyName": "Sway",
"Description": "App per presentazioni e narrazione"
},
"Microsoft.OneConnect": {
"FriendlyName": "One Connect",
"Description": "App per la gestione degli operatori mobili (sostituita da Mobile Plans)"
},
"Microsoft.Print3D": {
"FriendlyName": "Print 3D",
"Description": "Software per la preparazione alla stampa 3D"
},
"Microsoft.PowerAutomateDesktop": {
"FriendlyName": "Power Automate",
"Description": "Strumento di automazione desktop (RPA)"
},
"Microsoft.SkypeApp": {
"FriendlyName": "Skype (UWP)",
"Description": "App di comunicazione Skype, versione Universal Windows Platform (discontinuata)"
},
"Microsoft.Todos": {
"FriendlyName": "Microsoft To Do",
"Description": "App per elenchi di attività e gestione delle attività"
},
"Microsoft.Windows.DevHome": {
"FriendlyName": "Dev Home",
"Description": "Dashboard per sviluppatori e utilità per la configurazione degli strumenti (discontinuata)"
},
"Microsoft.WindowsAlarms": {
"FriendlyName": "Orologio",
"Description": "App Orologio per sveglie, timer e cronometro"
},
"Microsoft.WindowsFeedbackHub": {
"FriendlyName": "Hub di Feedback",
"Description": "App per inviare feedback a Microsoft su Windows"
},
"Microsoft.WindowsMaps": {
"FriendlyName": "Mappe",
"Description": "App per mappe e navigazione (non più supportata)"
},
"Microsoft.WindowsSoundRecorder": {
"FriendlyName": "Registratore di suoni",
"Description": "App di base per la registrazione audio"
},
"Microsoft.XboxApp": {
"FriendlyName": "Xbox Console Companion",
"Description": "Vecchia app Xbox Console Companion (discontinuata)"
},
"Microsoft.ZuneVideo": {
"FriendlyName": "Film & TV",
"Description": "App per noleggiare, acquistare e riprodurre contenuti video (non più supportata)"
},
"MicrosoftCorporationII.MicrosoftFamily": {
"FriendlyName": "Family Safety",
"Description": "App per gestire il tempo di utilizzo dello schermo, i filtri dei contenuti e i report sulle attività della famiglia"
},
"MicrosoftCorporationII.QuickAssist": {
"FriendlyName": "Assistenza rapida",
"Description": "Strumento per l'assistenza remota"
},
"MicrosoftTeams": {
"FriendlyName": "Microsoft Teams (Old)",
"Description": "Vecchia versione personale di Microsoft Teams (versione del Microsoft Store)"
},
"MSTeams": {
"FriendlyName": "Microsoft Teams (New)",
"Description": "Nuova app Microsoft Teams (Lavoro/Scuola o Personale)"
},
"ACGMediaPlayer": {
"FriendlyName": "ACG Media Player",
"Description": "App per la riproduzione multimediale"
},
"ActiproSoftwareLLC": {
"FriendlyName": "Actipro Software",
"Description": "Possibili controlli dell'interfaccia utente o componenti software, spesso inclusi dai produttori OEM"
},
"AdobeSystemsIncorporated.AdobePhotoshopExpress": {
"FriendlyName": "Adobe Photoshop Express",
"Description": "App di base per la modifica delle foto di Adobe"
},
"Amazon.com.Amazon": {
"FriendlyName": "Amazon",
"Description": "App per gli acquisti su Amazon"
},
"AmazonVideo.PrimeVideo": {
"FriendlyName": "Prime Video",
"Description": "App del servizio di streaming Amazon Prime Video"
},
"Asphalt8Airborne": {
"FriendlyName": "Asphalt 8",
"Description": "Gioco di corse"
},
"AutodeskSketchBook": {
"FriendlyName": "Autodesk SketchBook",
"Description": "App per disegno e schizzi digitali"
},
"CaesarsSlotsFreeCasino": {
"FriendlyName": "Caesars Slots",
"Description": "Gioco di slot machine da casinò"
},
"COOKINGFEVER": {
"FriendlyName": "Cooking Fever",
"Description": "Gioco di simulazione di ristorante"
},
"CyberLinkMediaSuiteEssentials": {
"FriendlyName": "CyberLink Media Suite",
"Description": "Suite software multimediale (spesso preinstallata dai produttori OEM)"
},
"DisneyMagicKingdoms": {
"FriendlyName": "Disney Magic Kingdoms",
"Description": "Gioco di costruzione di un parco a tema Disney"
},
"Disney.37853FC22B2CE": {
"FriendlyName": "Disney+",
"Description": "App del servizio di streaming Disney+"
},
"DrawboardPDF": {
"FriendlyName": "Drawboard PDF",
"Description": "App per visualizzare e annotare PDF, spesso ottimizzata per l'uso della penna"
},
"Duolingo-LearnLanguagesforFree": {
"FriendlyName": "Duolingo",
"Description": "App per l'apprendimento delle lingue"
},
"EclipseManager": {
"FriendlyName": "Eclipse Manager",
"Description": "Spesso correlata a software o utilità specifici del produttore OEM (ad esempio per la gestione delle impostazioni dello schermo)"
},
"FACEBOOK.FACEBOOK": {
"FriendlyName": "Facebook",
"Description": "App di social network Facebook"
},
"FarmVille2CountryEscape": {
"FriendlyName": "FarmVille 2",
"Description": "Gioco di simulazione agricola"
},
"Flipboard": {
"FriendlyName": "Flipboard",
"Description": "Aggregatore di notizie e social network con formato simile a una rivista"
},
"HiddenCity": {
"FriendlyName": "Hidden City",
"Description": "Gioco d'avventura e rompicapo con oggetti nascosti"
},
"HULULLC.HULUPLUS": {
"FriendlyName": "Hulu",
"Description": "App del servizio di streaming Hulu"
},
"iHeartRadio": {
"FriendlyName": "iHeartRadio",
"Description": "App per lo streaming di radio Internet"
},
"Facebook.Instagram": {
"FriendlyName": "Instagram",
"Description": "App di social network Instagram"
},
"king.com.BubbleWitch3Saga": {
"FriendlyName": "Bubble Witch 3",
"Description": "Gioco di rompicapi di King"
},
"king.com.CandyCrushSaga": {
"FriendlyName": "Candy Crush Saga",
"Description": "Gioco di rompicapi di King"
},
"king.com.CandyCrushSodaSaga": {
"FriendlyName": "Candy Crush Soda",
"Description": "Gioco di rompicapi di King"
},
"LinkedInforWindows": {
"FriendlyName": "LinkedIn",
"Description": "App di networking professionale LinkedIn"
},
"MarchofEmpires": {
"FriendlyName": "March of Empires",
"Description": "Gioco di strategia"
},
"4DF9E0F8.Netflix": {
"FriendlyName": "Netflix",
"Description": "App del servizio di streaming Netflix"
},
"NYTCrossword": {
"FriendlyName": "NYT Crossword",
"Description": "App di parole crociate del New York Times"
},
"OneCalendar": {
"FriendlyName": "One Calendar",
"Description": "App per aggregare i calendari"
},
"PandoraMediaInc": {
"FriendlyName": "Pandora",
"Description": "App per lo streaming musicale Pandora"
},
"PhototasticCollage": {
"FriendlyName": "Phototastic Collage",
"Description": "App per creare collage fotografici"
},
"PicsArt-PhotoStudio": {
"FriendlyName": "PicsArt",
"Description": "App per la modifica delle foto e la creatività"
},
"PolarrPhotoEditorAcademicEdition": {
"FriendlyName": "Polarr Photo Editor",
"Description": "App per la modifica delle foto (Edizione accademica)"
},
"flaregamesGmbH.RoyalRevolt": {
"FriendlyName": "Royal Revolt",
"Description": "Gioco di difesa della torre / strategia"
},
"Sidia.LiveWallpaper": {
"FriendlyName": "Live Wallpaper",
"Description": "App per sfondi animati"
},
"SlingTV": {
"FriendlyName": "Sling TV",
"Description": "App del servizio di streaming TV in diretta"
},
"SpotifyAB.SpotifyMusic": {
"FriendlyName": "Spotify",
"Description": "App per lo streaming musicale Spotify"
},
"BytedancePte.Ltd.TikTok": {
"FriendlyName": "TikTok",
"Description": "App TikTok per video brevi"
},
"TuneInRadio": {
"FriendlyName": "TuneIn Radio",
"Description": "App per lo streaming di radio Internet"
},
"WinZipUniversal": {
"FriendlyName": "WinZip",
"Description": "Utilità per la compressione e l'estrazione di file (versione Universal Windows Platform)"
},
"Microsoft.BingSearch": {
"FriendlyName": "Bing Search",
"Description": "Ricerca web tramite Microsoft Bing (integrata nella ricerca di Windows)"
},
"Microsoft.Edge": {
"FriendlyName": "Microsoft Edge",
"Description": "Browser predefinito di Windows, ATTENZIONE: la rimozione di questa app rimuove anche l'unico browser da Windows Sandbox e potrebbe influire su altre app"
},
"Microsoft.GamingApp": {
"FriendlyName": "Xbox app",
"Description": "App Xbox per Windows, necessaria per installare alcuni giochi per PC"
},
"Microsoft.GetHelp": {
"FriendlyName": "Get Help",
"Description": "Necessaria per alcuni strumenti di risoluzione dei problemi di Windows 11 e per le interazioni con il supporto"
},
"Microsoft.M365Companions": {
"FriendlyName": "Microsoft 365 Companions",
"Description": "Mini-app Microsoft 365 (Business) per Calendario, File e Persone; queste app possono essere reinstallate se abilitate dall'amministratore di Microsoft 365"
},
"Microsoft.MSPaint": {
"FriendlyName": "Paint 3D",
"Description": "App di disegno 3D (non più supportata)"
},
"Microsoft.OneDrive": {
"FriendlyName": "OneDrive",
"Description": "Client di archiviazione cloud consumer OneDrive"
},
"Microsoft.OutlookForWindows": {
"FriendlyName": "Outlook for Windows",
"Description": "Nuovo client di posta Outlook per Windows"
},
"Microsoft.Paint": {
"FriendlyName": "Paint",
"Description": "Paint classico (app di pittura tradizionale 2D)"
},
"Microsoft.People": {
"FriendlyName": "People",
"Description": "Necessaria per Mail & Calendar e inclusa in essa (discontinuata)"
},
"Microsoft.RemoteDesktop": {
"FriendlyName": "Remote Desktop",
"Description": "App client di Desktop remoto"
},
"Microsoft.ScreenSketch": {
"FriendlyName": "Strumento di cattura",
"Description": "Strumento per acquisire schermate e aggiungere annotazioni"
},
"Microsoft.StartExperiencesApp": {
"FriendlyName": "Widgets Experience",
"Description": "Questa app fornisce il feed personale dei Widget di Windows"
},
"Microsoft.Whiteboard": {
"FriendlyName": "Whiteboard",
"Description": "App di lavagna digitale collaborativa"
},
"Microsoft.Windows.Photos": {
"FriendlyName": "Foto",
"Description": "App predefinita per visualizzare e modificare le foto di base"
},
"Microsoft.WindowsCalculator": {
"FriendlyName": "Calcolatrice",
"Description": "App Calcolatrice"
},
"Microsoft.WindowsCamera": {
"FriendlyName": "Fotocamera",
"Description": "App Fotocamera per utilizzare fotocamere integrate o collegate"
},
"Microsoft.windowscommunicationsapps": {
"FriendlyName": "Posta e Calendario",
"Description": "Suite di app Posta e Calendario (il supporto è terminato)"
},
"Microsoft.WindowsNotepad": {
"FriendlyName": "Blocco note",
"Description": "Editor di testo Blocco note"
},
"Microsoft.WindowsStore": {
"FriendlyName": "Microsoft Store",
"Description": "Microsoft Store, ATTENZIONE: questa app non può essere reinstallata facilmente se rimossa!"
},
"Microsoft.WindowsTerminal": {
"FriendlyName": "Windows Terminal",
"Description": "App terminale predefinita in Windows 11 (Prompt dei comandi, PowerShell, WSL), ATTENZIONE: non rimuoverla se hai avviato Win11Debloat da Windows Terminal, poiché lo script non riuscirebbe a completare l'esecuzione."
},
"Microsoft.Xbox.TCUI": {
"FriendlyName": "Xbox TCUI Framework",
"Description": "Framework dell'interfaccia utente, apparentemente necessario per Microsoft Store, Foto e alcuni giochi"
},
"Microsoft.XboxGameOverlay": {
"FriendlyName": "Xbox Game Overlay",
"Description": "Sovrapposizione di gioco, necessaria o utile per alcuni giochi (parte di Xbox Game Bar). ATTENZIONE: la disinstallazione può ridurre le prestazioni dei giochi su alcuni PC con processori moderni."
},
"Microsoft.XboxGamingOverlay": {
"FriendlyName": "Xbox Gaming Overlay",
"Description": "Sovrapposizione di gioco, necessaria o utile per alcuni giochi (parte di Xbox Game Bar). ATTENZIONE: la disinstallazione può ridurre le prestazioni dei giochi su alcuni PC con processori moderni."
},
"Microsoft.XboxIdentityProvider": {
"FriendlyName": "Xbox Identity Provider",
"Description": "Framework di accesso Xbox, necessario per alcuni giochi e servizi Xbox"
},
"Microsoft.XboxSpeechToTextOverlay": {
"FriendlyName": "Xbox Speech To Text",
"Description": "Funzionalità di accessibilità necessaria per alcuni giochi, ATTENZIONE: questa app non può essere reinstallata facilmente!"
},
"Microsoft.YourPhone": {
"FriendlyName": "Collegamento al telefono",
"Description": "Collegamento del telefono (connette telefoni Android/iOS al PC)"
},
"Microsoft.ZuneMusic": {
"FriendlyName": "Media Player",
"Description": "Media Player moderno (ha sostituito Groove Music e riproduce audio/video locali)"
},
"MicrosoftWindows.CrossDevice": {
"FriendlyName": "Cross Device Experience",
"Description": "Integrazione del telefono in Esplora file, Fotocamera e altro (parte delle funzionalità di Phone Link)"
},
"MicrosoftWindows.Client.WebExperience": {
"FriendlyName": "Windows Web Experience Pack",
"Description": "Contribuisce a fornire e aggiornare determinate funzionalità, come i Widget, tramite Microsoft Store"
},
"Microsoft.WidgetsPlatformRuntime": {
"FriendlyName": "Widgets Platform Runtime",
"Description": "Runtime necessario per il funzionamento dei Widget di Windows"
},
"LGElectronics.LGMonitorApp": {
"FriendlyName": "LG Monitor App",
"Description": "Software OEM LG per controllare il monitor LG; Windows Update potrebbe reinstallare automaticamente questa app se è collegato un monitor LG"
},
"AD2F1837.HPAIExperienceCenter": {
"FriendlyName": "HP AI Experience Center",
"Description": "Software OEM HP con funzionalità e supporto avanzati tramite IA"
},
"AD2F1837.HPConnectedMusic": {
"FriendlyName": "HP Connected Music",
"Description": "Software OEM HP per la musica (potenzialmente discontinuato)"
},
"AD2F1837.HPConnectedPhotopoweredbySnapfish": {
"FriendlyName": "HP Connected Photo",
"Description": "Software OEM HP per le foto, integrato con Snapfish (potenzialmente discontinuato)"
},
"AD2F1837.HPDesktopSupportUtilities": {
"FriendlyName": "HP Desktop Support Utilities",
"Description": "Software OEM HP che fornisce strumenti di supporto per il desktop"
},
"AD2F1837.HPEasyClean": {
"FriendlyName": "HP Easy Clean",
"Description": "Software OEM HP per la pulizia o l'ottimizzazione del sistema"
},
"AD2F1837.HPFileViewer": {
"FriendlyName": "HP File Viewer",
"Description": "Software OEM HP per la visualizzazione di tipi di file specifici"
},
"AD2F1837.HPJumpStarts": {
"FriendlyName": "HP JumpStarts",
"Description": "Software OEM HP per tutorial, individuazione di app o accesso rapido alle funzionalità HP"
},
"AD2F1837.HPPCHardwareDiagnosticsWindows": {
"FriendlyName": "HP PC Hardware Diagnostics",
"Description": "Software OEM HP per la diagnostica hardware del PC"
},
"AD2F1837.HPPowerManager": {
"FriendlyName": "HP Power Manager",
"Description": "Software OEM HP per la gestione delle impostazioni di alimentazione e della batteria"
},
"AD2F1837.HPPrinterControl": {
"FriendlyName": "HP Printer Control",
"Description": "Software OEM HP per la gestione delle stampanti HP"
},
"AD2F1837.HPPrivacySettings": {
"FriendlyName": "HP Privacy Settings",
"Description": "Software OEM HP per la gestione delle impostazioni della privacy"
},
"AD2F1837.HPQuickDrop": {
"FriendlyName": "HP QuickDrop",
"Description": "Software OEM HP per il trasferimento rapido di file tra dispositivi (non più supportato)"
},
"AD2F1837.HPQuickTouch": {
"FriendlyName": "HP QuickTouch",
"Description": "Software OEM HP, probabilmente per scorciatoie o controlli specifici per il touchscreen"
},
"AD2F1837.HPRegistration": {
"FriendlyName": "HP Registration",
"Description": "Software OEM HP per la registrazione del prodotto"
},
"AD2F1837.HPSupportAssistant": {
"FriendlyName": "HP Support Assistant",
"Description": "Software OEM HP per supporto, aggiornamenti e risoluzione dei problemi"
},
"AD2F1837.HPSureShieldAI": {
"FriendlyName": "HP Sure Shield AI",
"Description": "Software di sicurezza OEM HP, probabilmente per la protezione dalle minacce basata sull'IA"
},
"AD2F1837.HPSystemInformation": {
"FriendlyName": "HP System Information",
"Description": "Software OEM HP per visualizzare le informazioni di sistema"
},
"AD2F1837.HPWelcome": {
"FriendlyName": "HP Welcome",
"Description": "Software OEM HP che fornisce un'esperienza di benvenuto o assistenza per la configurazione iniziale"
},
"AD2F1837.HPWorkWell": {
"FriendlyName": "HP WorkWell",
"Description": "Software OEM HP focalizzato sul benessere, potenzialmente con promemoria per le pause o suggerimenti ergonomici"
},
"AD2F1837.myHP": {
"FriendlyName": "myHP",
"Description": "Hub centrale OEM HP per informazioni sul dispositivo, supporto e servizi"
},
"E046963F.LenovoCompanion": {
"FriendlyName": "Lenovo Vantage",
"Description": "Hub OEM Lenovo per impostazioni del dispositivo, aggiornamenti e supporto"
},
"LenovoCompanyLimited.LenovoVantageService": {
"FriendlyName": "Lenovo Vantage Service",
"Description": "Componente del servizio in background per Lenovo Vantage"
},
"DellInc.DellSupportAssistforPCs": {
"FriendlyName": "Dell SupportAssist",
"Description": "Strumento OEM Dell per supporto, diagnostica e aggiornamenti"
},
"DellInc.DellDigitalDelivery": {
"FriendlyName": "Dell Digital Delivery Services",
"Description": "Software OEM Dell per la distribuzione di software acquistato in precedenza"
},
"DellInc.DellMobileConnect": {
"FriendlyName": "Dell Mobile Connect",
"Description": "App OEM Dell per collegare un telefono Android/iOS al PC (sostituita da Phone Link)"
}
}
+38
View File
@@ -0,0 +1,38 @@
{
"PrivacySuggestedContent": {
"Label": "Privacy e contenuti suggeriti"
},
"System": {
"Label": "Sistema"
},
"StartMenuSearch": {
"Label": "Menu Start e ricerca"
},
"AI": {
"Label": "IA"
},
"WindowsUpdate": {
"Label": "Windows Update"
},
"Taskbar": {
"Label": "Barra delle applicazioni"
},
"Appearance": {
"Label": "Aspetto"
},
"FileExplorer": {
"Label": "Esplora file"
},
"Gaming": {
"Label": "Gaming"
},
"MultiTasking": {
"Label": "Multitasking"
},
"OptionalWindowsFeatures": {
"Label": "Funzionalità facoltative di Windows"
},
"Other": {
"Label": "Altro"
}
}
+335
View File
@@ -0,0 +1,335 @@
{
"TitleBarAppName": "Win11Debloat",
"MessageBoxOk": "OK",
"MessageBoxCancel": "Annulla",
"MessageBoxYes": "Sì",
"MessageBoxNo": "No",
"TitleBarSupportCreator": "Sostieni il creatore",
"TitleBarOptions": "Opzioni",
"SettingsTitle": "Impostazioni",
"SettingsSave": "Salva",
"SettingsTheme": "Tema",
"SettingsThemeAuto": "Automatico",
"SettingsThemeLight": "Chiaro",
"SettingsThemeDark": "Scuro",
"SettingsLanguage": "Lingua",
"SettingsLanguageAuto": "Predefinita di sistema",
"SettingsSaveError": "Impossibile salvare le impostazioni. Riprova.",
"TitleBarClose": "Chiudi",
"MenuImportConfig": "Importa configurazione",
"MenuImportConfigTooltip": "Importa configurazione",
"MenuExportConfig": "Esporta configurazione",
"MenuExportConfigTooltip": "Esporta configurazione",
"MenuRestoreBackup": "Ripristina backup",
"MenuRestoreBackupTooltip": "Ripristina il backup del Registro di sistema",
"MenuDocumentation": "Documentazione",
"MenuReportBug": "Segnala un bug",
"MenuLogs": "Log",
"MenuAbout": "Informazioni",
"HomeTabHeader": "Home",
"HomeTitle": "Benvenuto in Win11Debloat",
"HomeSubtitle": "Un'esperienza Windows pulita è a pochi clic di distanza!",
"HomeUserQuestion": "A quale utente vuoi applicare le modifiche?",
"HomeUserSelectionAutomationName": "Applica modifiche a",
"HomeUserOptionCurrentUser": "Utente corrente",
"HomeUserOptionOtherUser": "Altro utente",
"HomeUserOptionSysprep": "Utente predefinito di Windows (Sysprep)",
"HomeUsernamePlaceholder": "Inserisci nome utente",
"HomeDefaultModeBtn": "Modalità predefinita",
"HomeDefaultModeBtnTooltip": "Seleziona rapidamente le impostazioni consigliate",
"HomeCustomSetupBtn": "Configurazione personalizzata",
"HomeCustomSetupBtnTooltip": "Seleziona manualmente le impostazioni che preferisci",
"AppRemovalTabHeader": "Rimozione app",
"AppRemovalTitle": "Rimozione app",
"AppRemovalSubtitle": "Seleziona le app che vuoi rimuovere",
"AppQuickSelect": "Selezione rapida",
"AppQuickSelectAutomationName": "Preset app",
"AppClearSelection": "Cancella selezione",
"AppClearSelectionTooltip": "Cancella tutte le app selezionate",
"AppPresetDefaultApps": "App predefinite",
"AppPresetDefaultAppsAutomationName": "Selezione predefinita",
"AppPresetDefaultAppsTooltip": "Seleziona le app che possono essere rimosse in sicurezza dalla maggior parte degli utenti",
"AppPresetLastUsed": "App selezionate in precedenza",
"AppPresetLastUsedTooltip": "Seleziona le app rimosse l'ultima volta che è stato eseguito Win11Debloat",
"AppOnlyInstalledCheckbox": "Mostra solo le app installate",
"AppOnlyInstalledCheckboxTooltip": "Mostra solo le applicazioni attualmente installate nel sistema",
"AppSearchPlaceholder": "Cerca app...",
"AppSearchAutomationName": "Cerca app",
"AppTableHeaderName": "Nome",
"AppTableHeaderDescription": "Descrizione",
"AppTableHeaderAppId": "ID app",
"AppLoadingIndicator": "Caricamento app...",
"AppLegendTitle": "Legenda:",
"AppLegendRecommendedTooltip": "[Consigliata] Rimuovibile in sicurezza dalla maggior parte degli utenti",
"AppLegendRecommended": "Consigliata",
"AppLegendOptionalTooltip": "[Opzionale] Può essere rimossa in sicurezza se non ti serve",
"AppLegendOptional": "Opzionale",
"AppLegendNotRecommendedTooltip": "[Non consigliata] Rimuovila solo se sai cosa stai facendo",
"AppLegendNotRecommended": "Non consigliata",
"TweaksTabHeader": "Modifiche",
"TweaksTitle": "Modifiche di sistema",
"TweaksSubtitle": "Seleziona le modifiche che vuoi apportare; passa il mouse sulle impostazioni per maggiori informazioni",
"TweaksQuickSelect": "Selezione rapida",
"TweaksQuickSelectAutomationName": "Preset modifiche",
"TweaksClearSelection": "Cancella selezione",
"TweaksClearSelectionTooltip": "Cancella tutte le modifiche selezionate",
"TweaksPresetDefault": "Impostazioni predefinite",
"TweaksPresetDefaultTooltip": "Seleziona le impostazioni consigliate per la maggior parte degli utenti",
"TweaksPresetLastUsed": "Impostazioni selezionate in precedenza",
"TweaksPresetLastUsedTooltip": "Seleziona le impostazioni applicate l'ultima volta che è stato eseguito Win11Debloat",
"TweaksPresetPrivacy": "Privacy e contenuti suggeriti",
"TweaksPresetPrivacyAutomationName": "Privacy e contenuti suggeriti",
"TweaksPresetPrivacyTooltip": "Seleziona tutte le modifiche relative alla privacy e ai contenuti suggeriti",
"TweaksPresetAI": "Funzionalità IA",
"TweaksPresetAIAutomationName": "Tutte le funzionalità IA",
"TweaksPresetAITooltip": "Seleziona tutte le modifiche relative all'IA",
"TweaksDetectApplied": "Rileva modifiche applicate",
"TweaksDetectAppliedTooltip": "Rileva tutte le modifiche attualmente applicate all'utente corrente",
"TweaksSearchPlaceholder": "Cerca modifiche...",
"TweaksSearchAutomationName": "Cerca modifiche",
"DeployTabHeader": "Impostazioni di distribuzione",
"DeployTitle": "Impostazioni di distribuzione",
"DeploySubtitle": "Configura come applicare al sistema le modifiche selezionate",
"DeployApplyToTitle": "Le modifiche verranno applicate a",
"DeployUserSelectionDescription": "Il profilo dell'utente attualmente connesso.",
"DeployAppRemovalScopeTitle": "Le app verranno rimosse per",
"DeployAppRemovalScopeAutomationName": "Ambito rimozione app",
"DeployAppRemovalScopeAllUsers": "Tutti gli utenti",
"DeployAppRemovalScopeCurrentUser": "Solo utente corrente",
"DeployAppRemovalScopeTargetUser": "Solo utente specificato",
"DeployOptionsTitle": "Opzioni",
"DeployOptionRegistryBackup": "Crea un backup del Registro di sistema (Consigliato)",
"DeployOptionRestorePoint": "Crea un punto di ripristino del sistema (Consigliato)",
"DeployOptionRestartExplorer": "Riavvia il processo di Esplora file di Windows per applicare immediatamente tutte le modifiche",
"DeployReviewChanges": "Rivedi le modifiche selezionate",
"DeployApplyChanges": "Applica modifiche",
"BubbleViewChanges": "Visualizza qui le modifiche selezionate",
"AboutTitle": "Informazioni su Win11Debloat",
"AboutVersionLabel": "Versione:",
"AboutAuthorLabel": "Autore:",
"AboutProjectLabel": "Progetto:",
"AboutDonationMessage": "Win11Debloat è un progetto personale che mantengo nel tempo libero. Se hai trovato utile questo strumento, valuta la possibilità di fare una piccola donazione per sostenerne lo sviluppo. Lo apprezzo davvero!",
"AboutKofiLink": "Sostienimi su Ko-fi",
"AppSelectionWindowTitle": "Selezione applicazioni di Win11Debloat",
"AppSelectionWindowInstructions": "Seleziona le app che vuoi rimuovere e deseleziona quelle che vuoi mantenere",
"AppSelectionWindowCheckAll": "Seleziona/deseleziona tutte",
"AppSelectionWindowCheckAllAutomationName": "Seleziona o deseleziona tutte",
"AppSelectionWindowConfirm": "Conferma",
"AppSelectionWindowCancel": "Annulla",
"ApplyCancelTooltip": "Annulla",
"ApplyInProgressTitle": "Applicazione delle modifiche",
"ApplyPreparing": "Preparazione...",
"ApplyStepCounter": "Passaggio {0} di {1}",
"ApplyCreatingRegistryBackup": "Creazione del backup del Registro di sistema...",
"ApplyCreatingRestorePoint": "Creazione del punto di ripristino del sistema, potrebbe richiedere qualche istante...",
"ApplyCompletionTitleSuccess": "Modifiche applicate",
"ApplyCompletionMessageDefault": "Nota che alcune modifiche avranno effetto solo dopo il riavvio. Grazie per aver usato Win11Debloat!",
"ApplyRebootRequiredHeader": "È necessario riavviare il sistema affinché le seguenti modifiche abbiano effetto:",
"ApplyRebootRequiredWingetDeferred": "Disinstallazione di {0}",
"ApplyCompletionTitleCancelled": "Annullato",
"ApplyCompletionMessageCancelled": "L'esecuzione dello script è stata annullata dall'utente.",
"ApplyCompletionTitleErrors": "Modifiche applicate con errori",
"ApplyCompletionMessageVerificationUnavailable": "Tutte le modifiche sono state applicate senza errori, ma Win11Debloat non ha potuto confermare che tutte le app selezionate siano state disinstallate correttamente.",
"WingetUserScopeUninstallDeferred": "WinGet non ha potuto disinstallare {0} con privilegi di amministratore perché è installata per l'utente. Riavvia il PC oppure esci e accedi di nuovo come {1} per completare la rimozione.",
"ApplyCompletionMessageFailures_one": "{0} modifica non riuscita. Consulta la console per i dettagli.",
"ApplyCompletionMessageFailures_other": "{0} modifiche non riuscite. Consulta la console per i dettagli.",
"ApplyCompletionMessageReady": "Il sistema è pronto. Grazie per aver usato Win11Debloat!",
"ApplyCompletionTitleError": "Errore",
"ApplyCompletionMessageError": "Si è verificato un errore durante l'applicazione delle modifiche: {0}",
"NavBack": "Indietro",
"NavNext": "Avanti",
"NavProgressAppRemoval": "Rimozione app",
"NavProgressSystemTweaks": "Modifiche di sistema",
"NavProgressDeploymentSettings": "Impostazioni di distribuzione",
"RestoreWindowTitle": "Ripristina backup",
"RestoreChooseRegistryTitle": "Ripristina backup del Registro",
"RestoreChooseRegistryDescription": "Ripristina la configurazione del Registro di sistema da un backup",
"RestoreChooseStartMenuTitle": "Ripristina backup del Menu Start",
"RestoreChooseStartMenuDescription": "Ripristina dal backup la disposizione delle app aggiunte al Menu Start",
"RestoreSelectTypePrompt": "Scegli quali modifiche vuoi ripristinare.",
"RestoreRegistryStepTitle": "Ripristina backup del Registro",
"RestoreRegistryIntro": "Questa operazione ripristinerà allo stato precedente tutte le modifiche al Registro di sistema effettuate da Win11Debloat. Dopo aver selezionato un file di backup, puoi rivedere le modifiche. Le applicazioni rimosse dovranno essere reinstallate manualmente.",
"RestoreRegistryWarning": "Avviso: usa solo file di backup generati da Win11Debloat.",
"RestoreStartMenuStepTitle": "Ripristina backup del Menu Start",
"RestoreStartMenuIntro": "Questa operazione ripristinerà la disposizione delle app aggiunte al Menu Start per gli utenti selezionati utilizzando un backup creato automaticamente da Win11Debloat. È possibile usare anche backup creati manualmente.",
"RestoreStartMenuScopeCurrentUser": "Utente corrente",
"RestoreStartMenuScopeAllUsers": "Tutti gli utenti",
"RestoreStartMenuAutoBackupCheckbox": "Trova automaticamente il backup del Menu Start",
"RestoreFileLabel": "File:",
"RestoreFileNotSelected": "Non selezionato",
"RestoreCreatedLabel": "Creato:",
"RestoreCreatedUnavailable": "N/A",
"RestoreCreatedUnknown": "Sconosciuto",
"RestoreTargetLabel": "Destinazione:",
"RestoreRevertibleFeaturesTitle": "Le seguenti modifiche verranno annullate:",
"RestoreReappliedFeaturesTitle": "Le seguenti modifiche verranno riapplicate:",
"RestoreNonRevertibleFeaturesTitle": "Le seguenti modifiche non verranno annullate:",
"RestoreWikiLink": "Visita la wiki per maggiori informazioni",
"RestoreStartMenuSummary": "Questa operazione sostituirà la disposizione attuale delle app aggiunte al Menu Start per {0} con quella del backup selezionato.",
"RestoreStartMenuSummaryScopeCurrentUser": "l'utente corrente",
"RestoreStartMenuSummaryScopeAllUsers": "tutti gli utenti",
"RestorePrimaryActionSelectBackupFile": "Seleziona file di backup",
"RestorePrimaryActionRestoreBackup": "Ripristina backup",
"RestorePrimaryActionRestoreFromBackup": "Ripristina dal backup",
"RestoreBackBtnCancel": "Annulla",
"RestoreBackBtnBack": "Indietro",
"RestoreInvalidBackupTitle": "File di backup non valido",
"RestoreInvalidBackupMessage": "Non è stato possibile caricare il file selezionato:\n{0}",
"RestoreNoBackupFoundTitle": "Nessun backup trovato",
"RestoreNoBackupFoundMessage": "Non è stato trovato alcun file di backup del Menu Start per {0}. Deseleziona 'Trova automaticamente il backup del Menu Start' per selezionare manualmente un file di backup.",
"RestoreNoRestorableChangesError": "Il backup selezionato non contiene modifiche ripristinabili.",
"RestoreSelectRegistryFileDialogTitle": "Seleziona file di backup del Registro",
"RestoreSelectStartMenuFileDialogTitle": "Seleziona file di backup del Menu Start",
"RestoreUnknownFeature": "Funzionalità sconosciuta",
"RestoreTargetUnknown": "Sconosciuto",
"RestoreTargetDefaultUserProfile": "Profilo utente predefinito",
"RestoreTargetCurrentUser": "Utente corrente",
"RestoreTargetAllUsers": "Tutti gli utenti",
"RestoreTargetCurrentUserNamed": "Utente corrente ({0})",
"RestoreTargetUserNamed": "Utente ({0})",
"RestoreTargetUser": "Utente",
"RestoreBackupRestoredTitle": "Backup ripristinato",
"RestoreRegistryWhatIfMessage": "[WhatIf] Il backup del Registro verrebbe ripristinato (nessuna modifica effettuata).",
"RestoreRegistrySuccessMessage": "Backup del Registro ripristinato correttamente. Alcune modifiche potrebbero richiedere un riavvio per avere effetto.",
"RestoreStartMenuFailedMessage": "Impossibile ripristinare il backup del Menu Start.\n{0}",
"RestoreStartMenuPartialSuccessMessage": "Il backup del Menu Start è stato ripristinato correttamente per {0} utente/i.\nNon è stato possibile ripristinare alcuni utenti:\n{1}",
"RestoreStartMenuWhatIfMessage": "[WhatIf] Il backup del Menu Start verrebbe ripristinato (nessuna modifica effettuata).",
"RestoreStartMenuAllUsersSuccessMessage": "Il backup del Menu Start è stato ripristinato correttamente per tutti gli utenti. Le modifiche verranno applicate al prossimo accesso degli utenti.",
"RestoreStartMenuCurrentUserSuccessMessage": "Il backup del Menu Start è stato ripristinato correttamente per l'utente corrente. Le modifiche verranno applicate al prossimo accesso.",
"RestoreOperationFailedMessage": "Ripristino non riuscito: {0}",
"RestoreUnexpectedError": "Si è verificato un errore imprevisto.",
"ImportExportCategoryApplications": "Applicazioni",
"ImportExportCategorySystemTweaks": "Modifiche di sistema",
"ImportExportCategoryDeploymentSettings": "Impostazioni di distribuzione",
"ImportExportCategoryDisabledTooltip": "Nessuna selezione in questa categoria",
"ImportExportSchemaMissingMessage": "Non è stato trovato il file dello schema della finestra di importazione/esportazione.",
"ImportExportExportTitle": "Esporta configurazione",
"ImportExportExportPrompt": "Crea un file di configurazione basato sulle impostazioni attualmente selezionate. Puoi scegliere quali categorie di impostazioni includere nell'esportazione.",
"ImportExportExportActionLabel": "Esporta impostazioni",
"ImportExportSelectExportFileDialogTitle": "Esporta configurazione",
"ImportExportWhatIfExportMessage": "[WhatIf] La configurazione verrebbe esportata in questo file (nessun file scritto).",
"ImportExportExportSuccessMessage": "Configurazione esportata correttamente.",
"ImportExportExportFailedMessage": "Impossibile esportare la configurazione",
"ImportExportImportTitle": "Importa configurazione",
"ImportExportImportPrompt": "Scegli le categorie di impostazioni che vuoi importare. Puoi rivedere e modificare le impostazioni importate prima che vengano applicate.",
"ImportExportImportActionLabel": "Importa impostazioni",
"ImportExportSelectImportFileDialogTitle": "Seleziona file di configurazione",
"ImportExportInvalidConfigTitle": "Configurazione non valida",
"ImportExportReadFailedMessage": "Impossibile leggere il file di configurazione",
"ImportExportInvalidConfigMessage": "File di configurazione non valido: {0}",
"ImportExportImportSuccessMessage": "Configurazione importata correttamente.",
"ImportExportDeployUserCurrentUser": "Utente: Utente corrente",
"ImportExportDeployUserOther": "Utente: {0}",
"ImportExportDeployUserOtherFallback": "Altro utente",
"ImportExportDeployUserSysprep": "Utente: Sysprep",
"ImportExportAppRemovalAllUsers": "Rimozione app: Tutti gli utenti",
"ImportExportAppRemovalCurrentUser": "Rimozione app: Utente corrente",
"ImportExportAppRemovalOther": "Rimozione app: {0}",
"ImportExportOptionRestorePoint": "Punto di ripristino",
"ImportExportOptionRegistryBackup": "Backup del Registro",
"ImportExportOptionRestartExplorer": "Riavvia Esplora file",
"ImportExportOptionsPrefix": "Opzioni: {0}",
"ImportExportDefaultDeploymentSettings": "Impostazioni di distribuzione predefinite",
"ImportExportAppsSelected_one": "{0} app selezionata",
"ImportExportAppsSelected_other": "{0} app selezionate",
"ImportExportNoAppsSelected": "Nessuna app selezionata",
"ImportExportTweaksSelected_one": "{0} modifica selezionata",
"ImportExportTweaksSelected_other": "{0} modifiche selezionate",
"ImportExportNoTweaksSelected": "Nessuna modifica selezionata",
"AppSelectionWinGetLoadFailedMessage": "Impossibile caricare l'elenco delle app installate tramite WinGet.",
"ErrorTitle": "Errore",
"AppSelectionStatusSelected_one": "{0} app selezionata per la rimozione",
"AppSelectionStatusSelected_other": "{0} app selezionate per la rimozione",
"AppRemovalScopeDescriptionAllUsers": "Le app verranno rimosse per tutti gli utenti e dall'immagine di Windows per impedirne la reinstallazione per i nuovi utenti.",
"AppRemovalScopeDescriptionCurrentUser": "Le app verranno rimosse solo per l'utente corrente.",
"AppRemovalScopeDescriptionTargetUser": "Le app verranno rimosse solo per l'utente specificato.",
"TweaksCategoryHelpTooltip": "Apri la wiki per maggiori informazioni sulle modifiche '{0}'",
"TweaksOptionNoChange": "Nessuna modifica",
"TweaksOptionApply": "Applica",
"TweaksOptionDisable": "Disabilita",
"TweaksOptionEnable": "Abilita",
"TweaksAlreadyAppliedTooltip": "Questa modifica è già applicata e non può essere annullata automaticamente. Visita la wiki di Win11Debloat per le istruzioni su come annullare manualmente questa modifica.",
"DeployChangeRemoveApps_one": "Rimuovi {0} applicazione",
"DeployChangeRemoveApps_other": "Rimuovi {0} applicazioni",
"DeployChangeUndoPrefix": "Annulla: {0}",
"DeployNoChangesSelectedMessage": "Non è stata selezionata alcuna modifica.",
"DeploySelectedChangesTitle": "Modifiche selezionate",
"DeployUserDescriptionCurrentUser": "Il profilo dell'utente attualmente connesso",
"DeployUserDescriptionCurrentUserNamed": "Il profilo dell'utente attualmente connesso: {0}",
"DeployUserDescriptionOtherUser": "Un profilo utente diverso presente nel sistema",
"DeployUserDescriptionOtherUserNamed": "Un profilo utente diverso presente nel sistema: {0}",
"DeployUserDescriptionSysprep": "Il modello utente predefinito, che influisce su tutti i nuovi utenti creati successivamente. Utile per la distribuzione tramite Sysprep.",
"LogsMenuTitle": "Log",
"LogsFolderNotFoundMessage": "Nessuna cartella dei log trovata in: {0}",
"ExportConfigFailedTitle": "Esportazione configurazione non riuscita",
"ExportConfigFailedMessage": "Impossibile aprire la finestra di esportazione della configurazione: {0}",
"ImportConfigFailedTitle": "Importazione configurazione non riuscita",
"ImportConfigFailedMessage": "Impossibile aprire la finestra di importazione della configurazione: {0}",
"RestoreBackupFailedTitle": "Ripristino backup non riuscito",
"RestoreBackupFailedMessage": "Impossibile aprire la finestra di ripristino del backup: {0}",
"AppPresetSelectTooltip": "Seleziona {0}",
"InvalidUsernameFallbackMessage": "Inserisci un nome utente valido.",
"InvalidUsernameTitle": "Nome utente non valido",
"NoChangesSelectedTitle": "Nessuna modifica selezionata",
"NoChangesSelectedMessage": "Non è stata selezionata alcuna modifica; seleziona almeno un'opzione per continuare.",
"HomeCurrentUserWithName": "Utente corrente ({0})",
"InitializationErrorTitle": "Errore di inizializzazione",
"InitializationErrorMessage": "Si è verificato un errore durante l'inizializzazione: {0}",
"WhatIfModeTitle": "Modalità WhatIf",
"WhatIfModeMessage": "La modalità WhatIf è attiva. In questa modalità lo script non apporterà alcuna modifica al sistema.\n\nPuoi osservare nella console le azioni che verrebbero eseguite dallo script.",
"ConfirmTitle": "Sei sicuro?",
"ConfirmRemoveStoreMessage": "Sei sicuro di voler disinstallare Microsoft Store? Questa app non può essere reinstallata facilmente.",
"ConfirmRemoveTerminalMessage": "Sei sicuro di voler rimuovere Windows Terminal? Windows Terminal è l'app predefinita per la riga di comando di Windows. Assicurati di non eseguire Win11Debloat tramite Windows Terminal prima di procedere, per evitare un errore durante l'esecuzione.",
"ConfigEmptyOrUnreadable": "La configurazione è vuota o non può essere letta.",
"ConfigMissingVersion": "Nella configurazione manca il campo Version.",
"ConfigNoImportableData": "Il file di configurazione non contiene dati importabili.",
"ConfigAppsMustBeStrings": "Le voci Apps della configurazione devono essere stringhe.",
"ConfigEntriesMustHaveNameAndValue": "Le voci {0} della configurazione devono contenere le proprietà Name e Value.",
"ConfigInvalidAppRemovalScopeIndex": "AppRemovalScopeIndex deve essere un valore numerico supportato (0, 1 o 2).",
"ConfigInvalidUserSelectionIndex": "UserSelectionIndex deve essere un valore numerico supportato (0, 1 o 2).",
"ConfigScopeRequiresCurrentUserTarget": "L'ambito di rimozione app 'Solo utente corrente' (AppRemovalScopeIndex 1) richiede la destinazione di distribuzione 'Utente corrente' (UserSelectionIndex 0).",
"ConfigScopeRequiresOtherUserTarget": "L'ambito di rimozione app 'Solo utente specificato' (AppRemovalScopeIndex 2) richiede la destinazione di distribuzione 'Altro utente' (UserSelectionIndex 1).",
"ConfigScopeRequiresOtherUsername": "L'ambito di rimozione app 'Solo utente specificato' (AppRemovalScopeIndex 2) richiede un valore 'OtherUsername'.",
"UsernameValidationEmpty": "Inserisci un nome utente",
"UsernameValidationOwnUsername": "Non puoi inserire il tuo nome utente; usa invece l'opzione 'Utente corrente'",
"UsernameValidationNotFound": "Utente non trovato; inserisci un nome utente valido",
"UsernameValidationFound": "Utente trovato: {0}",
"RestorePointFailedTitle": "Creazione del punto di ripristino non riuscita",
"RestorePointFailedMessage": "Impossibile creare un punto di ripristino del sistema. Vuoi continuare senza un punto di ripristino?",
"ForceRemoveEdgeTitle": "Forzare la disinstallazione di Microsoft Edge?",
"ForceRemoveEdgeMessage": "Impossibile disinstallare Microsoft Edge tramite WinGet. Vuoi forzarne la disinstallazione? NON CONSIGLIATO!",
"RemovingAppsSubStep": "Rimozione app ({0}/{1})",
"BackupFileNotFound": "File di backup non trovato: {0}",
"BackupFileNotValidJson": "Impossibile leggere il file di backup '{0}'. Il file non è un JSON valido.",
"BackupValidationSingleError": "Convalida non riuscita: {0}",
"BackupValidationMultipleErrors": "Convalida non riuscita con {0} errori. Consulta l'output della console per i dettagli.",
"BackupMissingProperty": "Proprietà mancante: {0}",
"BackupUnsupportedVersion": "Versione del backup non supportata '{0}'.",
"BackupUnsupportedType": "BackupType non supportato '{0}'.",
"BackupInvalidUser": "Utente non valido '{0}'",
"BackupUserScopedWrongContext": "Il backup è stato creato per '{0}' ed è associato a un utente. Esegui nuovamente l'operazione con quell'utente; SYSTEM non può ripristinare un backup CurrentUser.",
"BackupUserMismatch": "Il backup è stato creato per '{0}', che non corrisponde all'utente corrente '{1}'.",
"BackupUnsupportedTarget": "Target non supportato '{0}'.",
"BackupSelectedFeaturesMustBeStrings": "SelectedFeatures deve contenere ID di funzionalità non vuoti sotto forma di stringhe.",
"BackupSelectedUndoFeaturesMustBeStrings": "SelectedUndoFeatures deve contenere ID di funzionalità non vuoti sotto forma di stringhe.",
"BackupMissingSelectedFeatures": "Il backup deve contenere almeno un ID di funzionalità in SelectedFeatures o SelectedUndoFeatures.",
"BackupAllowlistValidationFailed": "Impossibile convalidare il backup: {0}",
"BackupSnapshotMissingPath": "Convalida del backup non riuscita: nello snapshot della chiave del Registro manca Path.",
"BackupFeatureCatalogNotLoaded": "Impossibile convalidare l'allowlist del backup del Registro perché le definizioni delle funzionalità non sono state caricate.",
"BackupNoAllowedRegistryPaths": "Il backup contiene snapshot del Registro, ma non sono stati ricavati percorsi del Registro consentiti dalle funzionalità selezionate.",
"BackupFeatureNotInCatalog": "La funzionalità selezionata '{0}' non è stata trovata nel catalogo delle funzionalità corrente.",
"BackupUnsupportedRegistryPath": "Il backup contiene il percorso del Registro non supportato '{0}'.",
"BackupUnexpectedRegistryPath": "Il backup contiene il percorso del Registro imprevisto '{0}', non consentito da SelectedFeatures.",
"BackupUnexpectedValue": "Il backup contiene il valore imprevisto '{0}' in '{1}'.",
"BackupUnsupportedValueKind": "Il backup contiene un tipo di valore del Registro non supportato '{0}' per '{1}'.",
"BackupInvalidValueData": "Il backup contiene dati del Registro non validi per il tipo '{0}' in '{1}'.",
"BackupValueMustNotDefineKind": "Il valore di backup '{0}' non deve definire Kind quando Exists è false.",
"StartMenuNoBackupFoundForUser": "Nessun file di backup del Menu Start trovato per l'utente {0}.",
"StartMenuWhatIfRestoredForUser": "[WhatIf] Il Menu Start verrebbe ripristinato per l'utente {0}.",
"StartMenuRestoredForUser": "Menu Start ripristinato per l'utente {0}.",
"StartMenuRestoreFailedForUser": "Impossibile ripristinare il Menu Start per l'utente {0}. {1}",
"StartMenuWhatIfRemovedDefaultProfile": "[WhatIf] start2.bin verrebbe rimosso per il profilo utente predefinito.",
"StartMenuRemovedDefaultProfile": "start2.bin rimosso per il profilo utente predefinito.",
"StartMenuRemoveFailedDefaultProfile": "Impossibile rimuovere start2.bin per il profilo utente predefinito. {0}",
"StartMenuNoUserLocationsFound": "Non sono state trovate posizioni del Menu Start degli utenti."
}
+744
View File
@@ -0,0 +1,744 @@
{
"Features": {
"RemoveApps": {
"Label": "Rimuovi le app specificate con il parametro 'Apps'",
"ApplyText": "Rimozione delle app selezionate"
},
"Apps": {
"Label": "La selezione delle app da rimuovere, specificata come elenco separato da virgole. Usa 'Default' (o ometti il parametro) per utilizzare l'elenco di app predefinito",
"ApplyText": "Rimozione delle app selezionate"
},
"RemoveGamingApps": {
"Label": "Rimuovi l'app Xbox e Xbox Game Bar",
"ApplyText": "Rimozione delle app relative al gaming"
},
"RemoveHPApps": {
"Label": "Rimuovi le applicazioni OEM di HP",
"ApplyText": "Rimozione delle app HP"
},
"CreateRestorePoint": {
"Label": "Crea un punto di ripristino del sistema",
"ApplyText": "Creazione del punto di ripristino del sistema"
},
"DisableTelemetry": {
"Label": "Disabilita telemetria, tracciamento e annunci personalizzati",
"ToolTip": "Questa impostazione disabilita la telemetria, la raccolta dei dati diagnostici, la cronologia delle attività, il tracciamento dell'avvio delle app, gli annunci personalizzati e altro ancora. Limita i dati inviati a Microsoft sul dispositivo e sul suo utilizzo. Se sei un Windows Insider, gli aggiornamenti potrebbero essere bloccati finché non viene riattivata la raccolta facoltativa dei dati diagnostici.",
"ApplyText": "Disabilitazione della telemetria e della raccolta dei dati diagnostici",
"UndoLabel": "Abilita telemetria, tracciamento e annunci personalizzati",
"ApplyUndoText": "Abilitazione della telemetria e della raccolta dei dati diagnostici"
},
"DisableSuggestions": {
"Label": "Disabilita suggerimenti, consigli e contenuti suggeriti in Windows",
"ToolTip": "Questa impostazione rimuove molte distrazioni fastidiose da Windows. Include elementi come notifiche, promemoria e annunci dei provider di sincronizzazione. Impedisce inoltre l'installazione automatica delle app suggerite.",
"ApplyText": "Disabilitazione di suggerimenti, consigli, contenuti suggeriti e annunci in Windows",
"UndoLabel": "Abilita suggerimenti, consigli e contenuti suggeriti in Windows",
"ApplyUndoText": "Abilitazione di suggerimenti, consigli, contenuti suggeriti e annunci in Windows"
},
"DisableNotifications": {
"Label": "Disabilita le notifiche di Windows (da app e altri mittenti)",
"ToolTip": "Disabilita le notifiche native di Windows provenienti da app e altri mittenti, incluse le notifiche di app come Discord, WhatsApp, Teams e Slack.",
"ApplyText": "Disabilitazione delle notifiche e dei promemoria di Windows",
"UndoLabel": "Abilita le notifiche e i promemoria di Windows",
"ApplyUndoText": "Abilitazione delle notifiche e dei promemoria di Windows"
},
"DisableLocationServices": {
"Label": "Disabilita i servizi di posizione di Windows e l'accesso alla posizione da parte delle app",
"ToolTip": "Disattiva i Servizi di posizione di Windows e impedisce alle app di accedere alla tua posizione. Questa funzionalità utilizza criteri che bloccheranno alcune impostazioni.",
"ApplyText": "Disabilitazione dei servizi di posizione di Windows e dell'accesso alla posizione da parte delle app",
"UndoLabel": "Abilita i servizi di posizione di Windows e l'accesso alla posizione da parte delle app",
"ApplyUndoText": "Abilitazione dei servizi di posizione di Windows e dell'accesso alla posizione da parte delle app"
},
"DisableFindMyDevice": {
"Label": "Disabilita il rilevamento della posizione di Trova il mio dispositivo",
"ToolTip": "Disattiva la funzionalità 'Trova il mio dispositivo', che invia periodicamente a Microsoft la posizione del dispositivo. Questa funzionalità utilizza criteri che bloccheranno alcune impostazioni.",
"ApplyText": "Disabilitazione del rilevamento della posizione di Trova il mio dispositivo",
"UndoLabel": "Abilita il rilevamento della posizione di Trova il mio dispositivo",
"ApplyUndoText": "Abilitazione del rilevamento della posizione di Trova il mio dispositivo"
},
"DisableLockscreenTips": {
"Label": "Disabilita suggerimenti e consigli nella schermata di blocco",
"ToolTip": "Disattiva l'opzione Spotlight nella schermata di blocco e i suggerimenti, i consigli e le curiosità visualizzati nella schermata di blocco.",
"ApplyText": "Disabilitazione di suggerimenti e consigli nella schermata di blocco",
"UndoLabel": "Abilita suggerimenti e consigli nella schermata di blocco",
"ApplyUndoText": "Abilitazione di suggerimenti e consigli nella schermata di blocco"
},
"EnableDesktopSpotlight": {
"Label": "Abilita lo sfondo Spotlight di Windows sul desktop e il collegamento",
"ToolTip": "Ripristina lo sfondo Spotlight di Windows sul desktop e il collegamento 'Scopri questa immagine'.",
"ApplyText": "Ripristino dello sfondo Spotlight di Windows sul desktop e del collegamento"
},
"DisableDesktopSpotlight": {
"Label": "Disabilita lo sfondo Spotlight di Windows sul desktop",
"ToolTip": "Disattiva Spotlight di Windows per lo sfondo del desktop, che mostra immagini a rotazione e può visualizzare suggerimenti e curiosità. Questa funzionalità utilizza criteri che bloccheranno alcune impostazioni.",
"ApplyText": "Disabilitazione dello sfondo Spotlight di Windows sul desktop",
"UndoLabel": "Abilita lo sfondo Spotlight di Windows sul desktop",
"ApplyUndoText": "Ripristino dello sfondo Spotlight di Windows sul desktop e del collegamento"
},
"HideDesktopSpotlightIcon": {
"Label": "Nascondi il collegamento sul desktop 'Scopri questa immagine'",
"ToolTip": "Nasconde il collegamento sul desktop 'Scopri questa immagine' mantenendo attiva la rotazione dello sfondo Spotlight di Windows. Non disabilita Spotlight di Windows.",
"ApplyText": "Nascondimento del collegamento sul desktop Spotlight di Windows 'Scopri questa immagine'",
"UndoLabel": "Mostra il collegamento sul desktop 'Scopri questa immagine'",
"ApplyUndoText": "Visualizzazione del collegamento sul desktop Spotlight di Windows 'Scopri questa immagine'"
},
"DisableEdgeAds": {
"Label": "Disabilita annunci, suggerimenti e feed di notizie in Edge",
"ToolTip": "Disattiva varie distrazioni di Microsoft Edge, come annunci, suggerimenti e il feed di notizie MSN. Questa funzionalità utilizza criteri che bloccheranno alcune impostazioni.",
"ApplyText": "Disabilitazione di annunci, suggerimenti e feed di notizie MSN in Microsoft Edge",
"UndoLabel": "Abilita annunci, suggerimenti e feed di notizie in Edge",
"ApplyUndoText": "Abilitazione di annunci, suggerimenti e feed di notizie MSN in Microsoft Edge"
},
"DisableCopilot": {
"Label": "Disabilita Microsoft Copilot",
"ToolTip": "Disabilita e disinstalla Microsoft Copilot, l'assistente IA integrato in Windows.",
"ApplyText": "Disabilitazione di Microsoft Copilot",
"UndoLabel": "Abilita Microsoft Copilot",
"ApplyUndoText": "Abilitazione di Microsoft Copilot"
},
"DisableRecall": {
"Label": "Disabilita Windows Recall",
"ToolTip": "Disabilita Windows Recall, una funzionalità basata sull'IA che fornisce un accesso rapido a file, app e attività utilizzati di recente. Questa funzionalità utilizza criteri che bloccheranno alcune impostazioni.",
"ApplyText": "Disabilitazione di Windows Recall",
"UndoLabel": "Abilita Windows Recall",
"ApplyUndoText": "Abilitazione di Windows Recall"
},
"DisableClickToDo": {
"Label": "Disabilita Click To Do, analisi IA di testo e immagini",
"ToolTip": "Disabilita Click To Do, che fornisce funzionalità di analisi IA di testo e immagini in Windows. Questa funzionalità utilizza criteri che bloccheranno alcune impostazioni.",
"ApplyText": "Disabilitazione di Click To Do",
"UndoLabel": "Abilita Click To Do, analisi IA di testo e immagini",
"ApplyUndoText": "Abilitazione di Click To Do"
},
"DisableAISvcAutoStart": {
"Label": "Impedisci l'avvio automatico del servizio IA",
"ToolTip": "Imposta il servizio WSAIFabricSvc sull'avvio manuale, impedendone l'avvio automatico con Windows.",
"ApplyText": "Prevenzione dell'avvio automatico del servizio IA",
"UndoLabel": "Consenti l'avvio automatico del servizio IA",
"ApplyUndoText": "Abilitazione dell'avvio automatico del servizio IA"
},
"DisableDVR": {
"Label": "Disabilita la registrazione di giochi/schermo Xbox",
"ToolTip": "Disabilita le funzionalità di registrazione di giochi e schermo Xbox incluse nell'app Game Bar. Questa funzionalità utilizza criteri che bloccheranno alcune impostazioni.",
"ApplyText": "Disabilitazione della registrazione di giochi/schermo Xbox",
"UndoLabel": "Abilita la registrazione di giochi/schermo Xbox",
"ApplyUndoText": "Abilitazione della registrazione di giochi/schermo Xbox"
},
"DisableGameBarIntegration": {
"Label": "Disabilita l'integrazione di Game Bar",
"ToolTip": "Disabilita l'integrazione di Game Bar con giochi e controller. Impedisce i fastidiosi popup ms-gamebar quando avvii giochi o colleghi un controller.",
"ApplyText": "Disabilitazione dell'integrazione di Game Bar",
"UndoLabel": "Abilita l'integrazione di Game Bar",
"ApplyUndoText": "Abilitazione dell'integrazione di Game Bar"
},
"ClearStart": {
"Label": "Rimuovi tutte le app aggiunte dal Menu Start solo per questo utente",
"ApplyText": "Rimozione di tutte le app aggiunte dal Menu Start"
},
"ClearStartAllUsers": {
"Label": "Rimuovi tutte le app aggiunte dal Menu Start per tutti gli utenti esistenti e nuovi",
"ApplyText": "Rimozione di tutte le app aggiunte dal Menu Start per tutti gli utenti"
},
"ReplaceStart": {
"Label": "Sostituisci il layout del Menu Start solo per questo utente con il file modello fornito",
"ApplyText": "Sostituzione del Menu Start"
},
"ReplaceStartAllUsers": {
"Label": "Sostituisci il layout del Menu Start per tutti gli utenti esistenti e nuovi con il file modello fornito",
"ApplyText": "Sostituzione del Menu Start per tutti gli utenti"
},
"DisableStartRecommended": {
"Label": "Nascondi la sezione Consigliati nel Menu Start",
"ToolTip": "Nasconde la sezione Consigliati nel Menu Start, che mostra app aggiunte di recente, file aperti di recente e consigli sulle app. Questa funzionalità utilizza criteri che bloccheranno alcune impostazioni.",
"ApplyText": "Disabilitazione della sezione Consigliati del Menu Start",
"UndoLabel": "Mostra la sezione Consigliati nel Menu Start",
"ApplyUndoText": "Abilitazione della sezione Consigliati del Menu Start"
},
"DisableStartAllApps": {
"Label": "Nascondi la sezione 'Tutte le app' nel Menu Start",
"ToolTip": "Nasconde la sezione 'Tutte le app' nel Menu Start, che mostra tutte le app installate. ATTENZIONE: nascondere questa sezione potrebbe rendere più difficile trovare le app installate nel sistema. Questa funzionalità utilizza criteri che bloccheranno alcune impostazioni.",
"ApplyText": "Disabilitazione della sezione 'Tutte le app' nel Menu Start",
"UndoLabel": "Mostra la sezione 'Tutte le app' nel Menu Start",
"ApplyUndoText": "Abilitazione della sezione 'Tutte le app' nel Menu Start"
},
"DisableStartPhoneLink": {
"Label": "Disabilita l'integrazione di Phone Link nel Menu Start",
"ToolTip": "Rimuove l'integrazione di Phone Link dal Menu Start quando hai un dispositivo mobile collegato al PC.",
"ApplyText": "Disabilitazione dell'integrazione dei dispositivi mobili di Phone Link nel Menu Start",
"UndoLabel": "Abilita l'integrazione di Phone Link nel Menu Start",
"ApplyUndoText": "Abilitazione dell'integrazione dei dispositivi mobili di Phone Link nel Menu Start"
},
"DisableBing": {
"Label": "Disabilita la ricerca web Bing e l'integrazione di Copilot nella ricerca",
"ToolTip": "Disattiva i risultati della ricerca web Bing e l'integrazione di Copilot nell'esperienza di ricerca di Windows. Questa funzionalità utilizza criteri che bloccheranno alcune impostazioni.",
"ApplyText": "Disabilitazione della ricerca web Bing e dell'integrazione di Copilot nella ricerca di Windows",
"UndoLabel": "Abilita la ricerca web Bing e l'integrazione di Copilot nella ricerca",
"ApplyUndoText": "Abilitazione della ricerca web Bing e dell'integrazione di Copilot nella ricerca di Windows"
},
"DisableStoreSearchSuggestions": {
"Label": "Disabilita i suggerimenti di app di Microsoft Store nella ricerca",
"ToolTip": "Disabilita i suggerimenti di app di Microsoft Store nella ricerca di Windows.",
"ApplyText": "Disabilitazione dei suggerimenti di app di Microsoft Store nella ricerca",
"UndoLabel": "Abilita i suggerimenti di app di Microsoft Store nella ricerca",
"ApplyUndoText": "Abilitazione dei suggerimenti di app di Microsoft Store nella ricerca"
},
"DisableSettings365Ads": {
"Label": "Nascondi gli annunci di Microsoft 365 Copilot nella Home delle Impostazioni",
"ToolTip": "Disattiva gli annunci di Microsoft 365 Copilot visualizzati nella pagina Home delle Impostazioni.",
"ApplyText": "Disabilitazione degli annunci di Microsoft 365 Copilot nella Home delle Impostazioni",
"UndoLabel": "Mostra gli annunci di Microsoft 365 Copilot nella Home delle Impostazioni",
"ApplyUndoText": "Abilitazione degli annunci di Microsoft 365 Copilot nella Home delle Impostazioni"
},
"DisableSettingsHome": {
"Label": "Nascondi la pagina 'Home' delle Impostazioni",
"ToolTip": "Rimuove la pagina 'Home' dall'app Impostazioni.",
"ApplyText": "Disabilitazione della pagina Home delle Impostazioni",
"UndoLabel": "Mostra la pagina 'Home' delle Impostazioni",
"ApplyUndoText": "Abilitazione della pagina Home delle Impostazioni"
},
"DisableEdgeAI": {
"Label": "Disabilita le funzionalità IA in Microsoft Edge",
"ToolTip": "Disattiva le funzionalità IA in Microsoft Edge, come la barra laterale basata sull'IA e le funzionalità di Copilot. Questa funzionalità utilizza criteri che bloccheranno alcune impostazioni.",
"ApplyText": "Disabilitazione delle funzionalità IA in Microsoft Edge",
"UndoLabel": "Abilita le funzionalità IA in Microsoft Edge",
"ApplyUndoText": "Abilitazione delle funzionalità IA in Microsoft Edge"
},
"DisablePaintAI": {
"Label": "Disabilita le funzionalità IA in Paint",
"ToolTip": "Disattiva le funzionalità IA in Paint, come gli strumenti basati sull'IA per la generazione e la modifica delle immagini. Questa funzionalità utilizza criteri che bloccheranno alcune impostazioni.",
"ApplyText": "Disabilitazione delle funzionalità IA in Paint",
"UndoLabel": "Abilita le funzionalità IA in Paint",
"ApplyUndoText": "Abilitazione delle funzionalità IA in Paint"
},
"DisableNotepadAI": {
"Label": "Disabilita le funzionalità IA in Blocco note",
"ToolTip": "Disattiva le funzionalità IA in Blocco note, come i suggerimenti di scrittura basati sull'IA. Questa funzionalità utilizza criteri che bloccheranno alcune impostazioni.",
"ApplyText": "Disabilitazione delle funzionalità IA in Blocco note",
"UndoLabel": "Abilita le funzionalità IA in Blocco note",
"ApplyUndoText": "Abilitazione delle funzionalità IA in Blocco note"
},
"EnableDarkMode": {
"Label": "Abilita il tema scuro per sistema e app",
"ToolTip": "Imposta il tema delle app e del sistema sulla modalità scura.",
"ApplyText": "Abilitazione della modalità scura per sistema e app",
"UndoLabel": "Disabilita il tema scuro per sistema e app",
"ApplyUndoText": "Disabilitazione della modalità scura per sistema e app"
},
"DisableDragTray": {
"Label": "Disabilita 'Drag Tray' per condividere e spostare file",
"ToolTip": "Drag Tray è una nuova funzionalità di Windows 11 per condividere e spostare file; viene visualizzata nella parte superiore dello schermo quando trascini dei file.",
"ApplyText": "Disabilitazione di Drag Tray",
"UndoLabel": "Abilita 'Drag Tray' per condividere e spostare file",
"ApplyUndoText": "Abilitazione di Drag Tray"
},
"RevertContextMenu": {
"Label": "Usa lo stile del menu contestuale classico di Windows 10",
"ToolTip": "Ripristina il menu contestuale nello stile classico di Windows 10, normalmente nascosto dietro la voce 'Mostra altre opzioni' del nuovo menu contestuale di Windows 11.",
"ApplyText": "Ripristino del menu contestuale nello stile classico di Windows 10",
"UndoLabel": "Usa lo stile del menu contestuale di Windows 11",
"ApplyUndoText": "Ripristino del menu contestuale nello stile di Windows 11"
},
"DisableMouseAcceleration": {
"Label": "Disabilita Migliora precisione puntatore (accelerazione del mouse)",
"ToolTip": "Disabilita l'accelerazione del mouse, attiva per impostazione predefinita in Windows. Rende il movimento del mouse più uniforme e prevedibile.",
"ApplyText": "Disattivazione di Migliora precisione puntatore",
"UndoLabel": "Abilita Migliora precisione puntatore (accelerazione del mouse)",
"ApplyUndoText": "Attivazione di Migliora precisione puntatore"
},
"DisableStickyKeys": {
"Label": "Disabilita la scorciatoia da tastiera Tasti permanenti (5 volte Shift)",
"ToolTip": "Impedisce la visualizzazione della finestra di dialogo Tasti permanenti quando premi il tasto Shift 5 volte consecutive.",
"ApplyText": "Disabilitazione della scorciatoia da tastiera Tasti permanenti",
"UndoLabel": "Abilita la scorciatoia da tastiera Tasti permanenti (5 volte Shift)",
"ApplyUndoText": "Abilitazione della scorciatoia da tastiera Tasti permanenti"
},
"DisableWindowSnapping": {
"Label": "Disabilita l'aggancio delle finestre",
"ToolTip": "Disattiva la possibilità di agganciare le finestre ai lati o agli angoli dello schermo.",
"ApplyText": "Disabilitazione dell'aggancio delle finestre",
"UndoLabel": "Abilita l'aggancio delle finestre",
"ApplyUndoText": "Abilitazione dell'aggancio delle finestre"
},
"DisableSnapAssist": {
"Label": "Disabilita la visualizzazione dei suggerimenti delle app durante l'aggancio delle finestre",
"ToolTip": "Disattiva i suggerimenti delle app quando agganci le finestre ai lati o agli angoli dello schermo.",
"ApplyText": "Disabilitazione dei suggerimenti di Snap Assist",
"UndoLabel": "Abilita la visualizzazione dei suggerimenti delle app durante l'aggancio delle finestre",
"ApplyUndoText": "Abilitazione dei suggerimenti di Snap Assist"
},
"DisableSnapLayouts": {
"Label": "Nascondi il riquadro dei layout di aggancio nella parte superiore dello schermo e sul pulsante Ingrandisci",
"ToolTip": "Disattiva il riquadro dei layout di aggancio che appare quando passi il mouse sul pulsante Ingrandisci o trascini le finestre nella parte superiore dello schermo.",
"ApplyText": "Nascondimento dei layout di aggancio durante il trascinamento delle finestre nella parte superiore dello schermo e sul pulsante Ingrandisci",
"UndoLabel": "Mostra il riquadro dei layout di aggancio nella parte superiore dello schermo e sul pulsante Ingrandisci",
"ApplyUndoText": "Visualizzazione dei layout di aggancio durante il trascinamento delle finestre nella parte superiore dello schermo e sul pulsante Ingrandisci"
},
"HideTabsInAltTab": {
"Label": "Nascondi le schede delle app durante l'aggancio o premendo Alt+Tab",
"ApplyText": "Disabilitazione della visualizzazione delle schede delle app durante l'aggancio o premendo Alt+Tab"
},
"Show3TabsInAltTab": {
"Label": "Mostra 3 schede delle app durante l'aggancio o premendo Alt+Tab",
"ApplyText": "Abilitazione della visualizzazione di 3 schede delle app durante l'aggancio o premendo Alt+Tab"
},
"Show5TabsInAltTab": {
"Label": "Mostra 5 schede delle app durante l'aggancio o premendo Alt+Tab",
"ApplyText": "Abilitazione della visualizzazione di 5 schede delle app durante l'aggancio o premendo Alt+Tab"
},
"Show20TabsInAltTab": {
"Label": "Mostra 20 schede delle app durante l'aggancio o premendo Alt+Tab",
"ApplyText": "Abilitazione della visualizzazione di 20 schede delle app durante l'aggancio o premendo Alt+Tab"
},
"TaskbarAlignLeft": {
"Label": "Allinea la Barra delle applicazioni a sinistra",
"ToolTip": "Per impostazione predefinita, Windows 11 centra i pulsanti della Barra delle applicazioni. Abilitando questa impostazione, i pulsanti della Barra delle applicazioni verranno spostati a sinistra, come nelle versioni precedenti di Windows.",
"ApplyText": "Allineamento dei pulsanti della Barra delle applicazioni a sinistra",
"UndoLabel": "Allinea la Barra delle applicazioni al centro",
"ApplyUndoText": "Allineamento dei pulsanti della Barra delle applicazioni al centro"
},
"HideSearchTb": {
"Label": "Nascondi l'icona di ricerca dalla Barra delle applicazioni",
"ApplyText": "Nascondimento dell'icona di ricerca dalla Barra delle applicazioni",
"UndoLabel": "Mostra la casella di ricerca sulla Barra delle applicazioni",
"ApplyUndoText": "Modifica della ricerca sulla Barra delle applicazioni in casella di ricerca"
},
"ShowSearchIconTb": {
"Label": "Mostra l'icona di ricerca sulla Barra delle applicazioni",
"ApplyText": "Modifica della ricerca sulla Barra delle applicazioni in sola icona",
"UndoLabel": "Mostra la casella di ricerca sulla Barra delle applicazioni",
"ApplyUndoText": "Modifica della ricerca sulla Barra delle applicazioni in casella di ricerca"
},
"ShowSearchLabelTb": {
"Label": "Mostra l'icona di ricerca con etichetta sulla Barra delle applicazioni",
"ApplyText": "Modifica della ricerca sulla Barra delle applicazioni in icona con etichetta",
"UndoLabel": "Mostra la casella di ricerca sulla Barra delle applicazioni",
"ApplyUndoText": "Modifica della ricerca sulla Barra delle applicazioni in casella di ricerca"
},
"ShowSearchBoxTb": {
"Label": "Mostra la casella di ricerca sulla Barra delle applicazioni",
"ApplyText": "Modifica della ricerca sulla Barra delle applicazioni in casella di ricerca"
},
"HideTaskview": {
"Label": "Nascondi il pulsante 'Visualizzazione attività' sulla Barra delle applicazioni",
"ToolTip": "Disabilita il pulsante 'Visualizzazione attività' sulla Barra delle applicazioni, che consente di visualizzare tutte le finestre aperte e i desktop virtuali.",
"ApplyText": "Nascondimento del pulsante Visualizzazione attività dalla Barra delle applicazioni",
"UndoLabel": "Mostra il pulsante 'Visualizzazione attività' sulla Barra delle applicazioni",
"ApplyUndoText": "Visualizzazione del pulsante Visualizzazione attività dalla Barra delle applicazioni"
},
"DisableWidgets": {
"Label": "Disabilita i widget sulla Barra delle applicazioni e nella schermata di blocco",
"ToolTip": "Disabilita le funzionalità dei widget in Windows, incluso il pulsante dei widget sulla Barra delle applicazioni e i widget che possono apparire nella schermata di blocco.",
"ApplyText": "Disabilitazione dei widget sulla Barra delle applicazioni e nella schermata di blocco"
},
"HideChat": {
"Label": "Nascondi l'icona Chat (riunione immediata) sulla Barra delle applicazioni",
"ToolTip": "Disabilita l'icona Chat (riunione immediata) sulla Barra delle applicazioni.",
"ApplyText": "Nascondimento dell'icona Chat dalla Barra delle applicazioni",
"UndoLabel": "Mostra l'icona Chat (riunione immediata) sulla Barra delle applicazioni",
"ApplyUndoText": "Visualizzazione dell'icona Chat dalla Barra delle applicazioni"
},
"DisableStorageSense": {
"Label": "Disabilita la pulizia automatica del disco di Sensore memoria",
"ToolTip": "Disabilita Sensore memoria, che libera automaticamente spazio su disco eliminando file temporanei, svuotando il Cestino e pulendo i file nella cartella Download.",
"ApplyText": "Disabilitazione della pulizia automatica del disco di Sensore memoria",
"UndoLabel": "Abilita la pulizia automatica del disco di Sensore memoria",
"ApplyUndoText": "Abilitazione della pulizia automatica del disco di Sensore memoria"
},
"DisableFastStartup": {
"Label": "Disabilita l'avvio rapido",
"ToolTip": "L'avvio rapido aiuta il PC ad avviarsi più velocemente dopo l'arresto salvando un'immagine del sistema sul disco. Disabilitare l'avvio rapido può aiutare con alcuni problemi, ma può comportare tempi di avvio leggermente più lunghi.",
"ApplyText": "Disabilitazione dell'avvio rapido",
"UndoLabel": "Abilita l'avvio rapido",
"ApplyUndoText": "Abilitazione dell'avvio rapido"
},
"DisableBitlockerAutoEncryption": {
"Label": "Disabilita la crittografia automatica dei dispositivi con BitLocker",
"ToolTip": "Sui dispositivi che la supportano, Windows 11 abilita automaticamente la crittografia del dispositivo con BitLocker. Disabilitando questa impostazione, la crittografia automatica del dispositivo verrà disattivata, ma puoi comunque abilitare manualmente la crittografia BitLocker. Le unità già crittografate con BitLocker rimarranno crittografate dopo l'applicazione di questa impostazione.",
"ApplyText": "Disabilitazione della crittografia automatica dei dispositivi con BitLocker",
"UndoLabel": "Abilita la crittografia automatica dei dispositivi con BitLocker",
"ApplyUndoText": "Abilitazione della crittografia automatica dei dispositivi con BitLocker"
},
"DisableModernStandbyNetworking": {
"Label": "Disabilita la connettività di rete durante Modern Standby",
"ToolTip": "Per impostazione predefinita, i dispositivi che supportano Modern Standby mantengono la connettività di rete durante la modalità sospensione. Disabilitare la connettività di rete durante Modern Standby può aiutare a ridurre il consumo della batteria.",
"ApplyText": "Disabilitazione della connettività di rete durante Modern Standby",
"UndoLabel": "Abilita la connettività di rete durante Modern Standby",
"ApplyUndoText": "Abilitazione della connettività di rete durante Modern Standby"
},
"EnableEndTask": {
"Label": "Mostra l'opzione 'Termina attività' nel menu contestuale della Barra delle applicazioni",
"ToolTip": "Quando abilitata, aggiunge un'opzione 'Termina attività' al menu contestuale visualizzato con il clic destro sulle app nella Barra delle applicazioni, consentendo di forzarne rapidamente la chiusura.",
"ApplyText": "Abilitazione dell'opzione 'Termina attività' nel menu contestuale della Barra delle applicazioni",
"UndoLabel": "Nascondi l'opzione 'Termina attività' nel menu contestuale della Barra delle applicazioni",
"ApplyUndoText": "Disabilitazione dell'opzione 'Termina attività' nel menu contestuale della Barra delle applicazioni"
},
"EnableLastActiveClick": {
"Label": "Abilita il comportamento 'Clic sulla finestra attiva più recente' per le app della Barra delle applicazioni",
"ToolTip": "Quando abilitata, facendo clic su un'app nella Barra delle applicazioni viene attivata l'ultima finestra utilizzata di quell'app invece di mostrare solo l'anteprima.",
"ApplyText": "Abilitazione del comportamento 'Clic sulla finestra attiva più recente' nell'area delle app della Barra delle applicazioni",
"UndoLabel": "Disabilita il comportamento 'Clic sulla finestra attiva più recente' per le app della Barra delle applicazioni",
"ApplyUndoText": "Disabilitazione del comportamento 'Clic sulla finestra attiva più recente' nell'area delle app della Barra delle applicazioni"
},
"CombineTaskbarAlways": {
"Label": "Combina sempre i pulsanti della Barra delle applicazioni e nascondi le etichette sul display principale",
"ApplyText": "Impostazione della Barra delle applicazioni sul display principale per combinare sempre i pulsanti e nascondere le etichette"
},
"CombineMMTaskbarAlways": {
"Label": "Combina sempre i pulsanti della Barra delle applicazioni e nascondi le etichette sui display secondari",
"ApplyText": "Impostazione della Barra delle applicazioni sui display secondari per combinare sempre i pulsanti e nascondere le etichette"
},
"CombineTaskbarWhenFull": {
"Label": "Combina i pulsanti della Barra delle applicazioni e nascondi le etichette quando la Barra delle applicazioni è piena sul display principale",
"ApplyText": "Impostazione della Barra delle applicazioni sul display principale per combinare i pulsanti e nascondere le etichette solo quando la Barra delle applicazioni è piena",
"UndoLabel": "Combina sempre i pulsanti della Barra delle applicazioni e nascondi le etichette sul display principale",
"ApplyUndoText": "Impostazione della Barra delle applicazioni sul display principale per combinare sempre i pulsanti e nascondere le etichette"
},
"CombineMMTaskbarWhenFull": {
"Label": "Combina i pulsanti della Barra delle applicazioni e nascondi le etichette quando la Barra delle applicazioni è piena sui display secondari",
"ApplyText": "Impostazione della Barra delle applicazioni sui display secondari per combinare i pulsanti e nascondere le etichette solo quando la Barra delle applicazioni è piena",
"UndoLabel": "Combina sempre i pulsanti della Barra delle applicazioni e nascondi le etichette sui display secondari",
"ApplyUndoText": "Impostazione della Barra delle applicazioni sui display secondari per combinare sempre i pulsanti e nascondere le etichette"
},
"CombineTaskbarNever": {
"Label": "Non combinare mai i pulsanti della Barra delle applicazioni e mostra le etichette sul display principale",
"ApplyText": "Impostazione della Barra delle applicazioni sul display principale per non combinare mai i pulsanti e non nascondere le etichette",
"UndoLabel": "Combina sempre i pulsanti della Barra delle applicazioni e nascondi le etichette sul display principale",
"ApplyUndoText": "Impostazione della Barra delle applicazioni sul display principale per combinare sempre i pulsanti e nascondere le etichette"
},
"CombineMMTaskbarNever": {
"Label": "Non combinare mai i pulsanti della Barra delle applicazioni e mostra le etichette sui display secondari",
"ApplyText": "Impostazione della Barra delle applicazioni sui display secondari per non combinare mai i pulsanti e non nascondere le etichette",
"UndoLabel": "Combina sempre i pulsanti della Barra delle applicazioni e nascondi le etichette sui display secondari",
"ApplyUndoText": "Impostazione della Barra delle applicazioni sui display secondari per combinare sempre i pulsanti e nascondere le etichette"
},
"MMTaskbarModeAll": {
"Label": "Mostra le icone delle app su tutte le Barre delle applicazioni",
"ApplyText": "Impostazione della Barra delle applicazioni per mostrare le icone delle app su tutte le Barre delle applicazioni"
},
"MMTaskbarModeMainActive": {
"Label": "Mostra le icone delle app sulla Barra delle applicazioni principale e su quella in cui è aperta la finestra",
"ApplyText": "Impostazione della Barra delle applicazioni per mostrare le icone delle app sulla Barra delle applicazioni principale e su quella in cui è aperta la finestra",
"UndoLabel": "Mostra le icone delle app su tutte le Barre delle applicazioni",
"ApplyUndoText": "Impostazione della Barra delle applicazioni per mostrare le icone delle app su tutte le Barre delle applicazioni"
},
"MMTaskbarModeActive": {
"Label": "Mostra le icone delle app solo sulla Barra delle applicazioni in cui è aperta la finestra",
"ApplyText": "Impostazione della Barra delle applicazioni per mostrare le icone delle app solo sulla Barra delle applicazioni in cui è aperta la finestra",
"UndoLabel": "Mostra le icone delle app su tutte le Barre delle applicazioni",
"ApplyUndoText": "Impostazione della Barra delle applicazioni per mostrare le icone delle app su tutte le Barre delle applicazioni"
},
"ExplorerToHome": {
"Label": "Modifica la posizione predefinita di apertura di Esplora file in 'Home'",
"ApplyText": "Modifica della posizione predefinita di apertura di Esplora file in 'Home'"
},
"ExplorerToThisPC": {
"Label": "Modifica la posizione predefinita di apertura di Esplora file in 'Questo PC'",
"ApplyText": "Modifica della posizione predefinita di apertura di Esplora file in 'Questo PC'",
"UndoLabel": "Modifica la posizione predefinita di apertura di Esplora file in 'Home'",
"ApplyUndoText": "Modifica della posizione predefinita di apertura di Esplora file in 'Home'"
},
"ExplorerToDownloads": {
"Label": "Modifica la posizione predefinita di apertura di Esplora file in 'Download'",
"ApplyText": "Modifica della posizione predefinita di apertura di Esplora file in 'Download'",
"UndoLabel": "Modifica la posizione predefinita di apertura di Esplora file in 'Home'",
"ApplyUndoText": "Modifica della posizione predefinita di apertura di Esplora file in 'Home'"
},
"ExplorerToOneDrive": {
"Label": "Modifica la posizione predefinita di apertura di Esplora file in 'OneDrive'",
"ApplyText": "Modifica della posizione predefinita di apertura di Esplora file in 'OneDrive'",
"UndoLabel": "Modifica la posizione predefinita di apertura di Esplora file in 'Home'",
"ApplyUndoText": "Modifica della posizione predefinita di apertura di Esplora file in 'Home'"
},
"ShowKnownFileExt": {
"Label": "Mostra le estensioni dei file per i tipi di file conosciuti",
"ToolTip": "Mostra le estensioni dei file per i tipi di file conosciuti. Per impostazione predefinita, Windows nasconde le estensioni dei tipi di file conosciuti, il che può causare confusione e rischi per la sicurezza.",
"ApplyText": "Abilitazione delle estensioni dei file per i tipi di file conosciuti",
"UndoLabel": "Nascondi le estensioni dei file per i tipi di file conosciuti",
"ApplyUndoText": "Disabilitazione delle estensioni dei file per i tipi di file conosciuti"
},
"ShowHiddenFolders": {
"Label": "Mostra file, cartelle e unità nascosti",
"ToolTip": "Per impostazione predefinita, Windows nasconde alcuni file, cartelle e unità per evitare modifiche o eliminazioni accidentali. Attiva questa opzione per mostrare tutti i file in Esplora file.",
"ApplyText": "Visualizzazione di file, cartelle e unità nascosti",
"UndoLabel": "Nascondi file, cartelle e unità nascosti",
"ApplyUndoText": "Nascondimento di file, cartelle e unità nascosti"
},
"HideDupliDrive": {
"Label": "Nascondi le unità rimovibili duplicate",
"ToolTip": "Per impostazione predefinita, Windows mostra le unità rimovibili sia in 'Questo PC' sia nel riquadro di spostamento con una propria voce. Abilita questa impostazione per mostrare le unità rimovibili solo in 'Questo PC'.",
"ApplyText": "Nascondimento delle unità rimovibili duplicate dal riquadro di spostamento di Esplora file",
"UndoLabel": "Mostra le unità rimovibili duplicate",
"ApplyUndoText": "Visualizzazione delle unità rimovibili duplicate nel riquadro di spostamento di Esplora file"
},
"HideHome": {
"Label": "Nascondi 'Home' dal riquadro di spostamento",
"ToolTip": "Nasconde la sezione 'Home' dal riquadro di spostamento di Esplora file. Avviso: potrebbe impedire l'aggiornamento dei collegamenti di Accesso rapido fino al riavvio del PC o di Esplora file.",
"ApplyText": "Nascondimento della sezione 'Home' dal riquadro di spostamento di Esplora file",
"UndoLabel": "Mostra 'Home' nel riquadro di spostamento",
"ApplyUndoText": "Visualizzazione della sezione 'Home' nel riquadro di spostamento di Esplora file"
},
"HideGallery": {
"Label": "Nascondi 'Galleria' dal riquadro di spostamento",
"ToolTip": "Nasconde la sezione 'Galleria' dal riquadro di spostamento di Esplora file.",
"ApplyText": "Nascondimento della sezione 'Galleria' dal riquadro di spostamento di Esplora file",
"UndoLabel": "Mostra 'Galleria' nel riquadro di spostamento",
"ApplyUndoText": "Visualizzazione della sezione 'Galleria' nel riquadro di spostamento di Esplora file"
},
"DisableTransparency": {
"Label": "Disabilita gli effetti di trasparenza",
"ToolTip": "Disabilita gli effetti di trasparenza in Windows e nelle interfacce. Questo può contribuire a migliorare le prestazioni su hardware meno recente.",
"ApplyText": "Disabilitazione degli effetti di trasparenza",
"UndoLabel": "Abilita gli effetti di trasparenza",
"ApplyUndoText": "Abilitazione degli effetti di trasparenza"
},
"DisableAnimations": {
"Label": "Disabilita animazioni ed effetti visivi",
"ToolTip": "Disabilita le animazioni e alcuni effetti visivi in Windows, rendendo l'interfaccia più reattiva, soprattutto su hardware meno recente.",
"ApplyText": "Disabilitazione di animazioni ed effetti visivi",
"UndoLabel": "Abilita animazioni ed effetti visivi",
"ApplyUndoText": "Abilitazione di animazioni ed effetti visivi"
},
"DisableUpdateASAP": {
"Label": "Impedisci di ricevere gli aggiornamenti appena disponibili",
"ToolTip": "Impedisce al PC di essere tra i primi a ricevere i nuovi aggiornamenti non di sicurezza. Il PC riceverà comunque questi aggiornamenti in un secondo momento.",
"ApplyText": "Impedire a Windows di ricevere gli aggiornamenti appena disponibili",
"UndoLabel": "Consenti di ricevere gli aggiornamenti appena disponibili",
"ApplyUndoText": "Consentire a Windows di ricevere gli aggiornamenti appena disponibili"
},
"PreventUpdateAutoReboot": {
"Label": "Impedisci i riavvii automatici dopo gli aggiornamenti mentre l'utente è connesso",
"ToolTip": "Impedisce il riavvio automatico del PC dopo gli aggiornamenti quando un utente è connesso.",
"ApplyText": "Prevenzione dei riavvii automatici dopo gli aggiornamenti mentre l'utente è connesso",
"UndoLabel": "Consenti i riavvii automatici dopo gli aggiornamenti mentre l'utente è connesso",
"ApplyUndoText": "Abilitazione dei riavvii automatici dopo gli aggiornamenti mentre l'utente è connesso"
},
"DisableDeliveryOptimization": {
"Label": "Disabilita la condivisione degli aggiornamenti scaricati con altri PC",
"ToolTip": "Impedisce al PC di condividere gli aggiornamenti scaricati con altri PC sulla rete locale o su Internet. Impedisce anche al PC di scaricare gli aggiornamenti da altri PC.",
"ApplyText": "Disabilitazione della condivisione degli aggiornamenti scaricati con altri PC",
"UndoLabel": "Abilita la condivisione degli aggiornamenti scaricati con altri PC",
"ApplyUndoText": "Abilitazione della condivisione degli aggiornamenti scaricati con altri PC"
},
"DisableDeviceAutoAppDownload": {
"Label": "Impedisci a Windows di installare automaticamente le app complementari dei dispositivi",
"ToolTip": "Impedisce a Windows di installare senza avviso le app complementari dei dispositivi tramite Windows Update quando colleghi determinati dispositivi, come i monitor LG e Alienware. Questi dispositivi continueranno a funzionare normalmente; questa impostazione impedisce solo a Windows Update di installare automaticamente app aggiuntive senza consenso.",
"ApplyText": "Prevenzione dell'installazione automatica delle app complementari dei dispositivi",
"UndoLabel": "Consenti l'installazione automatica delle app complementari dei dispositivi",
"ApplyUndoText": "Abilitazione dell'installazione automatica delle app complementari dei dispositivi"
},
"ForceRemoveEdge": {
"Label": "Forza la disinstallazione di Microsoft Edge. NON CONSIGLIATO!",
"ApplyText": "Forzatura della disinstallazione di Microsoft Edge"
},
"HideOnedrive": {
"Label": "Nascondi 'OneDrive' dal riquadro di spostamento",
"ToolTip": "Nasconde la sezione 'OneDrive' dal riquadro di spostamento di Esplora file.",
"ApplyText": "Nascondimento della sezione 'OneDrive' dal riquadro di spostamento di Esplora file",
"UndoLabel": "Mostra 'OneDrive' nel riquadro di spostamento",
"ApplyUndoText": "Visualizzazione della sezione 'OneDrive' dal riquadro di spostamento di Esplora file"
},
"Hide3dObjects": {
"Label": "Nascondi la cartella 'Oggetti 3D' sotto 'Questo PC'",
"ToolTip": "Nasconde la cartella 'Oggetti 3D' dal riquadro di spostamento di Esplora file.",
"ApplyText": "Nascondimento della cartella 'Oggetti 3D' dal riquadro di spostamento di Esplora file",
"UndoLabel": "Mostra la cartella 'Oggetti 3D' sotto 'Questo PC'",
"ApplyUndoText": "Visualizzazione della cartella 'Oggetti 3D' dal riquadro di spostamento di Esplora file"
},
"HideMusic": {
"Label": "Nascondi la cartella 'Musica' sotto 'Questo PC'",
"ToolTip": "Nasconde la cartella 'Musica' dal riquadro di spostamento di Esplora file.",
"ApplyText": "Nascondimento della cartella 'Musica' dal riquadro di spostamento di Esplora file",
"UndoLabel": "Mostra la cartella 'Musica' sotto 'Questo PC'",
"ApplyUndoText": "Visualizzazione della cartella 'Musica' dal riquadro di spostamento di Esplora file"
},
"AddFoldersToThisPC": {
"Label": "Aggiungi nuovamente le cartelle comuni alla pagina 'Questo PC'",
"ToolTip": "Questa impostazione aggiunge nuovamente cartelle comuni come Desktop, Documenti, Download, Musica, Immagini e Video alla pagina 'Questo PC' di Esplora file.",
"ApplyText": "Aggiunta nuovamente di tutte le cartelle comuni (Desktop, Download, ecc.) a 'Questo PC' in Esplora file",
"UndoLabel": "Rimuovi le cartelle comuni dalla pagina 'Questo PC'",
"ApplyUndoText": "Rimozione di tutte le cartelle comuni (Desktop, Download, ecc.) da 'Questo PC' in Esplora file"
},
"HideIncludeInLibrary": {
"Label": "Nascondi l'opzione 'Includi nella raccolta' nel menu contestuale",
"ToolTip": "Nasconde l'opzione 'Includi nella raccolta' dal menu contestuale di Esplora file.",
"ApplyText": "Nascondimento di 'Includi nella raccolta' nel menu contestuale",
"UndoLabel": "Mostra l'opzione 'Includi nella raccolta' nel menu contestuale",
"ApplyUndoText": "Visualizzazione di 'Includi nella raccolta' nel menu contestuale"
},
"HideGiveAccessTo": {
"Label": "Nascondi l'opzione 'Concedi accesso a' nel menu contestuale",
"ToolTip": "Nasconde l'opzione 'Concedi accesso a' dal menu contestuale di Esplora file.",
"ApplyText": "Nascondimento di 'Concedi accesso a' nel menu contestuale",
"UndoLabel": "Mostra l'opzione 'Concedi accesso a' nel menu contestuale",
"ApplyUndoText": "Visualizzazione di 'Concedi accesso a' nel menu contestuale"
},
"HideShare": {
"Label": "Nascondi l'opzione 'Condividi' nel menu contestuale",
"ToolTip": "Nasconde l'opzione 'Condividi' dal menu contestuale di Esplora file.",
"ApplyText": "Nascondimento di 'Condividi' nel menu contestuale",
"UndoLabel": "Mostra l'opzione 'Condividi' nel menu contestuale",
"ApplyUndoText": "Visualizzazione di 'Condividi' nel menu contestuale"
},
"DisableBraveBloat": {
"Label": "Disabilita il bloat nel browser Brave (IA, Crypto, ecc.)",
"ToolTip": "Disabilita le funzionalità IA integrate di Brave, il portafoglio Crypto, News, Rewards, Talk e VPN. Questa funzionalità utilizza criteri che bloccheranno alcune impostazioni.",
"ApplyText": "Disabilitazione di Brave IA, Crypto, News, Rewards, Talk e VPN nel browser Brave",
"UndoLabel": "Abilita le funzionalità del browser Brave (IA, Crypto, ecc.)",
"ApplyUndoText": "Abilitazione di Brave IA, Crypto, News, Rewards, Talk e VPN nel browser Brave"
},
"EnableWindowsSandbox": {
"Label": "Abilita Windows Sandbox",
"ToolTip": "Windows Sandbox è un ambiente desktop leggero per eseguire applicazioni in modo sicuro e isolato. Il software installato nell'ambiente Windows Sandbox rimane isolato e viene eseguito separatamente dalla macchina host. Supportato solo nelle edizioni Windows 11 Pro, Workstation ed Enterprise.",
"ApplyText": "Abilitazione di Windows Sandbox",
"UndoLabel": "Disabilita Windows Sandbox",
"ApplyUndoText": "Disabilitazione di Windows Sandbox"
},
"EnableWindowsSubsystemForLinux": {
"Label": "Abilita il Sottosistema Windows per Linux",
"ToolTip": "Il Sottosistema Windows per Linux consente di eseguire un ambiente Linux direttamente su Windows senza la necessità di una macchina virtuale.",
"ApplyText": "Abilitazione del Sottosistema Windows per Linux",
"UndoLabel": "Disabilita il Sottosistema Windows per Linux",
"ApplyUndoText": "Disabilitazione del Sottosistema Windows per Linux"
},
"ShowDriveLettersFirst": {
"Label": "Mostra le lettere delle unità prima dell'etichetta dell'unità",
"ToolTip": "Questa impostazione mostra le lettere delle unità prima dell'etichetta dell'unità in Esplora file.",
"ApplyText": "Visualizzazione delle lettere delle unità prima dell'etichetta dell'unità",
"UndoLabel": "Mostra le lettere delle unità dopo l'etichetta dell'unità",
"ApplyUndoText": "Visualizzazione delle lettere delle unità dopo l'etichetta dell'unità"
},
"ShowDriveLettersLast": {
"Label": "Mostra le lettere delle unità dopo l'etichetta dell'unità",
"ToolTip": "Questa impostazione mostra le lettere delle unità dopo l'etichetta dell'unità in Esplora file (comportamento predefinito di Windows).",
"ApplyText": "Visualizzazione delle lettere delle unità dopo l'etichetta dell'unità"
},
"ShowNetworkDriveLettersFirst": {
"Label": "Mostra le lettere delle unità di rete prima dell'etichetta dell'unità",
"ToolTip": "Questa impostazione mostra solo le lettere delle unità di rete prima dell'etichetta dell'unità in Esplora file.",
"ApplyText": "Visualizzazione delle lettere delle unità di rete prima dell'etichetta dell'unità",
"UndoLabel": "Mostra le lettere delle unità dopo l'etichetta dell'unità",
"ApplyUndoText": "Visualizzazione delle lettere delle unità dopo l'etichetta dell'unità"
},
"HideDriveLetters": {
"Label": "Nascondi tutte le lettere delle unità",
"ToolTip": "Questa impostazione nasconde tutte le lettere delle unità dal riquadro di spostamento di Esplora file e da 'Questo PC'.",
"ApplyText": "Nascondimento di tutte le lettere delle unità",
"UndoLabel": "Mostra le lettere delle unità dopo l'etichetta dell'unità",
"ApplyUndoText": "Visualizzazione delle lettere delle unità dopo l'etichetta dell'unità"
},
"StartAllAppsCategory": {
"Label": "Mostra Tutte le app nella visualizzazione per categoria (Predefinita)",
"ToolTip": "Imposta la sezione Tutte le app del Menu Start per mostrare le app raggruppate per categoria.",
"ApplyText": "Impostazione della visualizzazione Tutte le app per categoria"
},
"StartAllAppsGrid": {
"Label": "Mostra Tutte le app nella visualizzazione a griglia",
"ToolTip": "Imposta la sezione Tutte le app del Menu Start per mostrare le app in una griglia alfabetica.",
"ApplyText": "Impostazione della visualizzazione Tutte le app a griglia",
"UndoLabel": "Mostra Tutte le app nella visualizzazione per categoria",
"ApplyUndoText": "Impostazione della visualizzazione Tutte le app per categoria"
},
"StartAllAppsList": {
"Label": "Mostra Tutte le app nella visualizzazione a elenco",
"ToolTip": "Imposta la sezione Tutte le app del Menu Start per mostrare le app in un elenco alfabetico.",
"ApplyText": "Impostazione della visualizzazione Tutte le app a elenco",
"UndoLabel": "Mostra Tutte le app nella visualizzazione per categoria",
"ApplyUndoText": "Impostazione della visualizzazione Tutte le app per categoria"
}
},
"UiGroups": {
"DesktopSpotlight": {
"Label": "Spotlight di Windows sul desktop",
"ToolTip": "Questa impostazione controlla l'opzione dello sfondo desktop di Spotlight di Windows. Mantieni lo sfondo a rotazione con o senza il collegamento 'Scopri questa immagine', oppure disabilita completamente Spotlight di Windows.",
"Values": {
"EnableDesktopSpotlight": "Mostra il collegamento 'Scopri questa immagine' (Predefinito)",
"HideDesktopSpotlightIcon": "Nascondi il collegamento 'Scopri questa immagine'",
"DisableDesktopSpotlight": "Disabilita lo sfondo Spotlight di Windows sul desktop"
}
},
"SearchIcon": {
"Label": "Stile della ricerca sulla Barra delle applicazioni",
"ToolTip": "Questa impostazione consente di personalizzare l'aspetto della casella di ricerca sulla Barra delle applicazioni.",
"Values": {
"ShowSearchBoxTb": "Mostra la casella di ricerca (Predefinito)",
"ShowSearchLabelTb": "Mostra l'icona e l'etichetta di ricerca",
"ShowSearchIconTb": "Mostra solo l'icona di ricerca",
"HideSearchTb": "Nascondi"
}
},
"MultiMon": {
"Label": "Mostra le app della Barra delle applicazioni su",
"ToolTip": "Questa impostazione consente di scegliere dove mostrare i pulsanti delle app della Barra delle applicazioni quando utilizzi più monitor.",
"Values": {
"MMTaskbarModeAll": "Tutte le Barre delle applicazioni (Predefinito)",
"MMTaskbarModeMainActive": "Barra delle applicazioni principale e Barra delle applicazioni in cui è aperta la finestra",
"MMTaskbarModeActive": "Barra delle applicazioni in cui è aperta la finestra"
}
},
"CombineButtons": {
"Label": "Combina i pulsanti della Barra delle applicazioni sul display principale",
"ToolTip": "Questa impostazione consente di scegliere come combinare i pulsanti della Barra delle applicazioni sul display principale.",
"Values": {
"CombineTaskbarAlways": "Sempre (Predefinito)",
"CombineTaskbarWhenFull": "Quando la Barra delle applicazioni è piena",
"CombineTaskbarNever": "Mai"
}
},
"CombineMMButtons": {
"Label": "Combina i pulsanti della Barra delle applicazioni sui display secondari",
"ToolTip": "Questa impostazione consente di scegliere come combinare i pulsanti della Barra delle applicazioni sui display secondari.",
"Values": {
"CombineMMTaskbarAlways": "Sempre (Predefinito)",
"CombineMMTaskbarWhenFull": "Quando la Barra delle applicazioni è piena",
"CombineMMTaskbarNever": "Mai"
}
},
"ClearStart": {
"Label": "Rimuovi le app aggiunte dal Menu Start",
"ToolTip": "Questa impostazione consente di rimuovere rapidamente tutte le app aggiunte dal Menu Start.",
"Values": {
"ClearStart": "Rimuovi per l'utente selezionato",
"ClearStartAllUsers": "Rimuovi per tutti gli utenti"
}
},
"ExplorerLocation": {
"Label": "Apri Esplora file in",
"ToolTip": "Questa impostazione consente di scegliere la posizione predefinita in cui viene aperto Esplora file.",
"Values": {
"ExplorerToHome": "Home (Predefinito)",
"ExplorerToThisPC": "Questo PC",
"ExplorerToDownloads": "Download",
"ExplorerToOneDrive": "OneDrive"
}
},
"DriveLetterPosition": {
"Label": "Posizione della lettera dell'unità",
"ToolTip": "Questa impostazione consente di scegliere dove vengono mostrate le lettere delle unità in Esplora file.",
"Values": {
"ShowDriveLettersLast": "Mostra le lettere delle unità dopo l'etichetta dell'unità (Predefinito)",
"ShowDriveLettersFirst": "Mostra le lettere delle unità prima dell'etichetta dell'unità",
"ShowNetworkDriveLettersFirst": "Mostra le lettere delle unità di rete prima dell'etichetta dell'unità",
"HideDriveLetters": "Nascondi tutte le lettere delle unità"
}
},
"ShowTabsInAltTab": {
"Label": "Mostra le schede delle app durante l'aggancio o premendo Alt+Tab",
"ToolTip": "Questa impostazione consente di scegliere se mostrare le schede delle app, come le schede del browser Edge, durante l'aggancio delle finestre o premendo Alt+Tab.",
"Values": {
"HideTabsInAltTab": "Non mostrare le schede",
"Show3TabsInAltTab": "Mostra le 3 schede più recenti (Predefinito)",
"Show5TabsInAltTab": "Mostra le 5 schede più recenti",
"Show20TabsInAltTab": "Mostra le 20 schede più recenti"
}
},
"StartAllAppsView": {
"Label": "Visualizzazione 'Tutte le app' del Menu Start",
"ToolTip": "Questa impostazione consente di modificare il layout della sezione 'Tutte le app' del Menu Start oppure di nasconderla completamente. Nascondere questa sezione potrebbe rendere più difficile trovare le app installate nel sistema. Questa funzionalità utilizza criteri che bloccheranno alcune impostazioni.",
"Values": {
"DisableStartAllApps": "Nascondi",
"StartAllAppsCategory": "Categoria (Predefinito)",
"StartAllAppsGrid": "Griglia",
"StartAllAppsList": "Elenco"
}
}
}
}
+566
View File
@@ -0,0 +1,566 @@
{
"Clipchamp.Clipchamp": {
"FriendlyName": "Clipchamp",
"Description": "Videobewerker van Microsoft"
},
"Microsoft.3DBuilder": {
"FriendlyName": "3D Builder",
"Description": "Eenvoudige software voor 3D-modellering"
},
"Microsoft.549981C3F5F10": {
"FriendlyName": "Cortana",
"Description": "Spraakassistent van Microsoft (niet meer ondersteund)"
},
"Microsoft.BingFinance": {
"FriendlyName": "Bing Financiën",
"Description": "Financieel nieuws en overzichten via Bing (niet meer ondersteund)"
},
"Microsoft.BingFoodAndDrink": {
"FriendlyName": "Bing Eten en drinken",
"Description": "Recepten en culinair nieuws via Bing (niet meer ondersteund)"
},
"Microsoft.BingHealthAndFitness": {
"FriendlyName": "Bing Gezondheid en fitness",
"Description": "Houdt je gezondheid en conditie bij en toont nieuws via Bing (niet meer ondersteund)"
},
"Microsoft.BingNews": {
"FriendlyName": "Bing News",
"Description": "Nieuws via Bing (niet meer beschikbaar)"
},
"Microsoft.BingSports": {
"FriendlyName": "Bing Sport",
"Description": "Sportnieuws en uitslagen via Bing (niet meer ondersteund)"
},
"Microsoft.BingTranslator": {
"FriendlyName": "Bing Vertaler",
"Description": "Vertaaldienst van Bing"
},
"Microsoft.BingTravel": {
"FriendlyName": "Bing Reizen",
"Description": "Reisplanning en reisnieuws via Bing (niet meer ondersteund)"
},
"Microsoft.BingWeather": {
"FriendlyName": "Bing Weer",
"Description": "Weersverwachting via Bing"
},
"XP9CXNGPPJ97XX": {
"FriendlyName": "Microsoft Copilot",
"Description": "AI-assistent geïntegreerd in Windows"
},
"Microsoft.Windows.AIHub": {
"FriendlyName": "Copilot+ AI Hub",
"Description": "Copilot+ AI Hub-app (Windows 11 24H2+)"
},
"Microsoft.PCManager": {
"FriendlyName": "Microsoft PC Manager",
"Description": "Microsoft-hulpmiddel voor systeemopruiming en optimalisatie (vaak vooraf geïnstalleerd)"
},
"Microsoft.Getstarted": {
"FriendlyName": "Aan de slag",
"Description": "Tips en uitleg om met Windows aan de slag te gaan (kan niet worden verwijderd in Windows 11)"
},
"Microsoft.Messaging": {
"FriendlyName": "Berichten",
"Description": "App voor berichten, vaak gekoppeld aan Skype (grotendeels niet meer ondersteund)"
},
"Microsoft.Microsoft3DViewer": {
"FriendlyName": "3D-viewer",
"Description": "App om 3D-modellen te bekijken (niet meer ondersteund)"
},
"Microsoft.MicrosoftJournal": {
"FriendlyName": "Microsoft Logboek",
"Description": "Notitie-app voor schrijven met een digitale pen"
},
"Microsoft.MicrosoftOfficeHub": {
"FriendlyName": "Office Hub",
"Description": "App om Microsoft Office-apps en documenten te openen (voorloper van de Microsoft 365-app)"
},
"Microsoft.MicrosoftPowerBIForWindows": {
"FriendlyName": "Power BI",
"Description": "App voor het analyseren van bedrijfsgegevens"
},
"Microsoft.MicrosoftSolitaireCollection": {
"FriendlyName": "Microsoft Solitaire Collection",
"Description": "Verzameling kaartspellen voor één speler"
},
"Microsoft.MicrosoftStickyNotes": {
"FriendlyName": "Plaknotities",
"Description": "App om snelle notities te maken en te synchroniseren tussen apparaten"
},
"Microsoft.MixedReality.Portal": {
"FriendlyName": "Mixed Reality-portaal",
"Description": "App voor het gebruik van Windows Mixed Reality-headsets"
},
"Microsoft.NetworkSpeedTest": {
"FriendlyName": "Network Speed Test",
"Description": "Meet de snelheid van je internetverbinding"
},
"Microsoft.News": {
"FriendlyName": "Microsoft Nieuws",
"Description": "Microsoft News-app voor Windows"
},
"Microsoft.Office.OneNote": {
"FriendlyName": "OneNote",
"Description": "Digitale notitie-app (UWP-versie)"
},
"Microsoft.Office.Sway": {
"FriendlyName": "Sway",
"Description": "App om presentaties en interactieve verhalen te maken"
},
"Microsoft.OneConnect": {
"FriendlyName": "One Connect",
"Description": "App voor het beheren van mobiele netwerkdiensten (vervangen door Mobiele abonnementen)"
},
"Microsoft.Print3D": {
"FriendlyName": "Print 3D",
"Description": "Software voor het voorbereiden van 3D-prints"
},
"Microsoft.PowerAutomateDesktop": {
"FriendlyName": "Power Automate",
"Description": "Hulpmiddel voor desktopautomatisering (RPA)"
},
"Microsoft.SkypeApp": {
"FriendlyName": "Skype (UWP)",
"Description": "Skype voor chatten en bellen (UWP-versie, niet meer ondersteund)"
},
"Microsoft.Todos": {
"FriendlyName": "Microsoft To Do",
"Description": "App voor takenlijsten en taakbeheer"
},
"Microsoft.Windows.DevHome": {
"FriendlyName": "Dev Home",
"Description": "Dashboard voor ontwikkelaars om ontwikkeltools in te stellen (niet meer ondersteund)"
},
"Microsoft.WindowsAlarms": {
"FriendlyName": "Klok",
"Description": "App voor alarmen, timers, stopwatch en focussessies"
},
"Microsoft.WindowsFeedbackHub": {
"FriendlyName": "Feedback-hub",
"Description": "App om Microsoft feedback over Windows te geven"
},
"Microsoft.WindowsMaps": {
"FriendlyName": "Windows Kaarten",
"Description": "App voor kaarten en navigatie (niet meer ondersteund)"
},
"Microsoft.WindowsSoundRecorder": {
"FriendlyName": "Geluidsrecorder",
"Description": "Eenvoudige app voor geluidsopnamen"
},
"Microsoft.XboxApp": {
"FriendlyName": "Xbox Console Companion",
"Description": "Oude Xbox Console Companion-app (niet meer ondersteund)"
},
"Microsoft.ZuneVideo": {
"FriendlyName": "Films en tv",
"Description": "App voor het huren, kopen en afspelen van video's (niet meer ondersteund)"
},
"MicrosoftCorporationII.MicrosoftFamily": {
"FriendlyName": "Microsoft Family Safety",
"Description": "App voor het beheren van schermtijd, inhoudsfilters en activiteitenrapporten voor je gezin"
},
"MicrosoftCorporationII.QuickAssist": {
"FriendlyName": "Quick Assist",
"Description": "Hulpmiddel voor hulp op afstand"
},
"MicrosoftTeams": {
"FriendlyName": "Microsoft Teams (oud)",
"Description": "Oude Microsoft Teams-app voor persoonlijk gebruik (Microsoft Store-versie)"
},
"MSTeams": {
"FriendlyName": "Microsoft Teams (nieuw)",
"Description": "Nieuwe Microsoft Teams-app voor werk, school en privégebruik"
},
"ACGMediaPlayer": {
"FriendlyName": "ACG Media Player",
"Description": "Mediaspeler"
},
"ActiproSoftwareLLC": {
"FriendlyName": "Actipro Software",
"Description": "Mogelijk onderdelen voor gebruikersinterfaces of andere softwarecomponenten, vaak meegeleverd door fabrikanten"
},
"AdobeSystemsIncorporated.AdobePhotoshopExpress": {
"FriendlyName": "Adobe Photoshop Express",
"Description": "Eenvoudige fotobewerkingsapp van Adobe"
},
"Amazon.com.Amazon": {
"FriendlyName": "Amazon",
"Description": "App om bij Amazon te winkelen"
},
"AmazonVideo.PrimeVideo": {
"FriendlyName": "Prime Video",
"Description": "App voor de streamingdienst Amazon Prime Video"
},
"Asphalt8Airborne": {
"FriendlyName": "Asphalt 8",
"Description": "Racespel"
},
"AutodeskSketchBook": {
"FriendlyName": "Autodesk SketchBook",
"Description": "App voor digitaal tekenen en schetsen"
},
"CaesarsSlotsFreeCasino": {
"FriendlyName": "Caesars Slots",
"Description": "Casinospel met gokkasten"
},
"COOKINGFEVER": {
"FriendlyName": "Cooking Fever",
"Description": "Restaurantsimulatiespel"
},
"CyberLinkMediaSuiteEssentials": {
"FriendlyName": "CyberLink Media Suite",
"Description": "Pakket met multimediasoftware (vaak vooraf geïnstalleerd door fabrikanten)"
},
"DisneyMagicKingdoms": {
"FriendlyName": "Disney Magic Kingdoms",
"Description": "Spel om een Disney-pretpark te bouwen"
},
"Disney.37853FC22B2CE": {
"FriendlyName": "Disney+",
"Description": "App voor de streamingdienst Disney+"
},
"DrawboardPDF": {
"FriendlyName": "Drawboard PDF",
"Description": "PDF-lezer met functies voor aantekeningen, vooral met een digitale pen"
},
"Duolingo-LearnLanguagesforFree": {
"FriendlyName": "Duolingo",
"Description": "App om talen te leren"
},
"EclipseManager": {
"FriendlyName": "Eclipse Manager",
"Description": "Meestal gekoppeld aan software of hulpmiddelen van de fabrikant, bijvoorbeeld voor beeldscherminstellingen"
},
"FACEBOOK.FACEBOOK": {
"FriendlyName": "Facebook",
"Description": "Socialemedia-app van Facebook"
},
"FarmVille2CountryEscape": {
"FriendlyName": "FarmVille 2",
"Description": "Boerderijsimulatiespel"
},
"Flipboard": {
"FriendlyName": "Flipboard",
"Description": "Verzamelt nieuws en berichten van sociale netwerken in tijdschriftvorm"
},
"HiddenCity": {
"FriendlyName": "Hidden City",
"Description": "Avonturenspel waarin je puzzels oplost en verborgen voorwerpen zoekt"
},
"HULULLC.HULUPLUS": {
"FriendlyName": "Hulu",
"Description": "App voor de streamingdienst Hulu"
},
"iHeartRadio": {
"FriendlyName": "iHeartRadio",
"Description": "App voor het streamen van internetradio"
},
"Facebook.Instagram": {
"FriendlyName": "Instagram",
"Description": "Socialemedia-app van Instagram"
},
"king.com.BubbleWitch3Saga": {
"FriendlyName": "Bubble Witch 3",
"Description": "Puzzelspel van King"
},
"king.com.CandyCrushSaga": {
"FriendlyName": "Candy Crush Saga",
"Description": "Puzzelspel van King"
},
"king.com.CandyCrushSodaSaga": {
"FriendlyName": "Candy Crush Soda",
"Description": "Puzzelspel van King"
},
"LinkedInforWindows": {
"FriendlyName": "LinkedIn",
"Description": "App voor het zakelijke netwerk LinkedIn"
},
"MarchofEmpires": {
"FriendlyName": "March of Empires",
"Description": "Strategiespel"
},
"4DF9E0F8.Netflix": {
"FriendlyName": "Netflix",
"Description": "App voor de streamingdienst Netflix"
},
"NYTCrossword": {
"FriendlyName": "NYT Crossword",
"Description": "Kruiswoordpuzzel-app van The New York Times"
},
"OneCalendar": {
"FriendlyName": "One Calendar",
"Description": "App die meerdere agenda's samenbrengt"
},
"PandoraMediaInc": {
"FriendlyName": "Pandora",
"Description": "App voor het streamen van muziek via Pandora"
},
"PhototasticCollage": {
"FriendlyName": "Phototastic Collage",
"Description": "App om fotocollages te maken"
},
"PicsArt-PhotoStudio": {
"FriendlyName": "PicsArt",
"Description": "App voor fotobewerking en creatieve projecten"
},
"PolarrPhotoEditorAcademicEdition": {
"FriendlyName": "Polarr Photo Editor",
"Description": "Fotobewerkingsapp (Academic Edition)"
},
"flaregamesGmbH.RoyalRevolt": {
"FriendlyName": "Royal Revolt",
"Description": "Strategisch verdedigingsspel (tower defense)"
},
"Sidia.LiveWallpaper": {
"FriendlyName": "Live Wallpaper",
"Description": "App voor bewegende achtergronden"
},
"SlingTV": {
"FriendlyName": "Sling TV",
"Description": "App voor het streamen van live-tv"
},
"SpotifyAB.SpotifyMusic": {
"FriendlyName": "Spotify",
"Description": "App voor het streamen van muziek via Spotify"
},
"BytedancePte.Ltd.TikTok": {
"FriendlyName": "TikTok",
"Description": "TikTok-app voor korte video's"
},
"TuneInRadio": {
"FriendlyName": "TuneIn Radio",
"Description": "App voor het streamen van internetradio"
},
"WinZipUniversal": {
"FriendlyName": "WinZip",
"Description": "Hulpmiddel waarmee je bestanden kan comprimeren en uitpakken (UWP-versie)"
},
"Microsoft.BingSearch": {
"FriendlyName": "Bing Zoeken",
"Description": "Zoeken op internet met Microsoft Bing (geïntegreerd in Windows Zoeken)"
},
"Microsoft.Edge": {
"FriendlyName": "Microsoft Edge",
"Description": "Standaardbrowser van Windows. WAARSCHUWING: als je deze app verwijdert, heeft Windows Sandbox geen browser meer. Ook kunnen andere apps hierdoor problemen krijgen"
},
"Microsoft.GamingApp": {
"FriendlyName": "Xbox app",
"Description": "Xbox-app voor Windows, vereist voor het installeren van sommige pc-games"
},
"Microsoft.GetHelp": {
"FriendlyName": "Hulp vragen",
"Description": "Nodig voor sommige probleemoplossers en ondersteuningsfuncties in Windows 11"
},
"Microsoft.M365Companions": {
"FriendlyName": "Microsoft 365 Companions",
"Description": "Compacte zakelijke Microsoft 365-apps voor Agenda, Bestanden en Personen. Ze kunnen opnieuw worden geïnstalleerd als je Microsoft 365-beheerder ze inschakelt"
},
"Microsoft.MSPaint": {
"FriendlyName": "Paint 3D",
"Description": "3D-tekenapp (niet meer ondersteund)"
},
"Microsoft.OneDrive": {
"FriendlyName": "OneDrive",
"Description": "App voor persoonlijke cloudopslag met OneDrive"
},
"Microsoft.OutlookForWindows": {
"FriendlyName": "Outlook voor Windows",
"Description": "Nieuwe Outlook-mailclient voor Windows"
},
"Microsoft.Paint": {
"FriendlyName": "Paint",
"Description": "Klassieke tekenapp voor 2D-afbeeldingen"
},
"Microsoft.People": {
"FriendlyName": "Personen",
"Description": "Vereist voor en meegeleverd met Mail en Agenda (niet meer ondersteund)"
},
"Microsoft.RemoteDesktop": {
"FriendlyName": "Extern bureaublad",
"Description": "App om verbinding te maken met een extern bureaublad"
},
"Microsoft.ScreenSketch": {
"FriendlyName": "Knipprogramma",
"Description": "Schermafbeeldingen maken, annoteren, opslaan en delen"
},
"Microsoft.StartExperiencesApp": {
"FriendlyName": "Widgetervaring",
"Description": "Toont 'Mijn feed' in Windows Widgets"
},
"Microsoft.Whiteboard": {
"FriendlyName": "Whiteboard",
"Description": "Digitaal whiteboard waarop je samen met anderen kunt werken"
},
"Microsoft.Windows.Photos": {
"FriendlyName": "Foto's",
"Description": "Standaardapp voor het bekijken en eenvoudig bewerken van foto's"
},
"Microsoft.WindowsCalculator": {
"FriendlyName": "Rekenmachine",
"Description": "Rekenmachine-app"
},
"Microsoft.WindowsCamera": {
"FriendlyName": "Camera",
"Description": "Camera-app voor ingebouwde of aangesloten camera's"
},
"Microsoft.windowscommunicationsapps": {
"FriendlyName": "Mail en Agenda",
"Description": "Apps voor e-mail en agenda (niet meer ondersteund)"
},
"Microsoft.WindowsNotepad": {
"FriendlyName": "Kladblok",
"Description": "Tekstbewerker Kladblok"
},
"Microsoft.WindowsStore": {
"FriendlyName": "Microsoft Store",
"Description": "Microsoft Store. WAARSCHUWING: deze app kan na verwijdering niet eenvoudig opnieuw worden geïnstalleerd!"
},
"Microsoft.WindowsTerminal": {
"FriendlyName": "Windows Terminal",
"Description": "Standaardterminal in Windows 11 voor Opdrachtprompt, PowerShell en WSL. WAARSCHUWING: verwijder deze app niet als je Win11Debloat vanuit Windows Terminal hebt gestart. Het script zal dan voortijdig stoppen."
},
"Microsoft.Xbox.TCUI": {
"FriendlyName": "Xbox TCUI Framework",
"Description": "Onderdelen voor de gebruikersinterface die nodig lijken te zijn voor de Microsoft Store, Foto's en bepaalde games"
},
"Microsoft.XboxGameOverlay": {
"FriendlyName": "Xbox Game Overlay",
"Description": "Game-overlay, vereist of nuttig voor sommige games (onderdeel van Xbox Game Bar). Waarschuwing: het verwijderen van deze app kan de gameprestaties verminderen op pc's met bepaalde moderne processors."
},
"Microsoft.XboxGamingOverlay": {
"FriendlyName": "Xbox Gaming Overlay",
"Description": "Game-overlay, vereist of nuttig voor sommige games (onderdeel van Xbox Game Bar). Waarschuwing: het verwijderen van deze app kan de gameprestaties verminderen op pc's met bepaalde moderne processors."
},
"Microsoft.XboxIdentityProvider": {
"FriendlyName": "Xbox Identity Provider",
"Description": "Onderdeel voor aanmelden bij Xbox, nodig voor bepaalde games en Xbox-diensten"
},
"Microsoft.XboxSpeechToTextOverlay": {
"FriendlyName": "Xbox Speech To Text",
"Description": "Toegankelijkheidsfunctie die nodig is voor bepaalde games. WAARSCHUWING: deze app kan niet eenvoudig opnieuw worden geïnstalleerd!"
},
"Microsoft.YourPhone": {
"FriendlyName": "Telefoonkoppeling",
"Description": "Telefoonkoppeling (verbindt een Android- of iOS-telefoon met de pc)"
},
"Microsoft.ZuneMusic": {
"FriendlyName": "Mediaspeler",
"Description": "Moderne mediaspeler voor lokale audio- en videobestanden (opvolger van Groove Muziek)"
},
"MicrosoftWindows.CrossDevice": {
"FriendlyName": "Cross Device Experience",
"Description": "Koppelt je telefoon aan onder meer Verkenner en Camera (onderdeel van Telefoonkoppeling)"
},
"MicrosoftWindows.Client.WebExperience": {
"FriendlyName": "Windows Web Experience Pack",
"Description": "Levert functies zoals Widgets en werkt ze bij via de Microsoft Store"
},
"Microsoft.WidgetsPlatformRuntime": {
"FriendlyName": "Widgets Platform Runtime",
"Description": "Vereist voor Windows Widgets"
},
"LGElectronics.LGMonitorApp": {
"FriendlyName": "LG Monitor App",
"Description": "LG-software voor het bedienen van je LG-beeldscherm. Windows Update kan deze app ongemerkt opnieuw installeren als je een LG-beeldscherm hebt aangesloten"
},
"AD2F1837.HPAIExperienceCenter": {
"FriendlyName": "HP AI Experience Center",
"Description": "HP-software voor AI-functies en ondersteuning"
},
"AD2F1837.HPConnectedMusic": {
"FriendlyName": "HP Connected Music",
"Description": "HP-software voor muziek (mogelijk niet meer ondersteund)"
},
"AD2F1837.HPConnectedPhotopoweredbySnapfish": {
"FriendlyName": "HP Connected Photo",
"Description": "HP-fotosoftware met Snapfish-integratie (mogelijk niet meer ondersteund)"
},
"AD2F1837.HPDesktopSupportUtilities": {
"FriendlyName": "HP Desktop Support Utilities",
"Description": "HP-hulpmiddelen voor desktopondersteuning"
},
"AD2F1837.HPEasyClean": {
"FriendlyName": "HP Easy Clean",
"Description": "Schakelt invoerapparaten tijdelijk uit zodat je je pc kunt schoonmaken zonder onbedoelde invoer"
},
"AD2F1837.HPFileViewer": {
"FriendlyName": "HP File Viewer",
"Description": "HP-software voor het bekijken van specifieke bestandstypen"
},
"AD2F1837.HPJumpStarts": {
"FriendlyName": "HP JumpStarts",
"Description": "HP-software met uitleg, app-suggesties en snelkoppelingen naar HP-functies"
},
"AD2F1837.HPPCHardwareDiagnosticsWindows": {
"FriendlyName": "HP PC Hardware Diagnostics",
"Description": "HP-software om de hardware van je pc te controleren"
},
"AD2F1837.HPPowerManager": {
"FriendlyName": "HP Power Manager",
"Description": "HP-software voor het beheren van energie-instellingen en de accu"
},
"AD2F1837.HPPrinterControl": {
"FriendlyName": "HP Printer Control",
"Description": "HP-software voor het beheren van HP-printers"
},
"AD2F1837.HPPrivacySettings": {
"FriendlyName": "HP Privacy Settings",
"Description": "HP-software voor het beheren van privacyinstellingen"
},
"AD2F1837.HPQuickDrop": {
"FriendlyName": "HP QuickDrop",
"Description": "HP-software voor snelle bestandsoverdracht tussen apparaten (niet meer ondersteund)"
},
"AD2F1837.HPQuickTouch": {
"FriendlyName": "HP QuickTouch",
"Description": "HP-software, mogelijk voor snelkoppelingen of bediening via het aanraakscherm"
},
"AD2F1837.HPRegistration": {
"FriendlyName": "HP Registration",
"Description": "HP-software voor productregistratie"
},
"AD2F1837.HPSupportAssistant": {
"FriendlyName": "HP Support Assistant",
"Description": "HP-software voor ondersteuning, updates en probleemoplossing"
},
"AD2F1837.HPSureShieldAI": {
"FriendlyName": "HP Sure Shield AI",
"Description": "Beveiligingssoftware van HP, waarschijnlijk met AI om bedreigingen tegen te houden"
},
"AD2F1837.HPSystemInformation": {
"FriendlyName": "HP Systeeminformatie",
"Description": "Toont systeeminformatie van je HP-pc"
},
"AD2F1837.HPWelcome": {
"FriendlyName": "HP Welcome",
"Description": "HP-software met een welkomstscherm of hulp bij de eerste configuratie"
},
"AD2F1837.HPWorkWell": {
"FriendlyName": "HP WorkWell",
"Description": "HP-software om gezond en comfortabel te werken, mogelijk met pauzeherinneringen of ergonomische tips"
},
"AD2F1837.myHP": {
"FriendlyName": "myHP",
"Description": "Centrale HP-app voor apparaatinformatie, ondersteuning en diensten"
},
"E046963F.LenovoCompanion": {
"FriendlyName": "Lenovo Vantage",
"Description": "Centrale Lenovo-app voor apparaatinstellingen, updates en ondersteuning"
},
"LenovoCompanyLimited.LenovoVantageService": {
"FriendlyName": "Lenovo Vantage Service",
"Description": "Achtergrondservice voor Lenovo Vantage"
},
"DellInc.DellSupportAssistforPCs": {
"FriendlyName": "Dell SupportAssist",
"Description": "Dell-software voor ondersteuning, diagnose en updates"
},
"DellInc.DellDigitalDelivery": {
"FriendlyName": "Dell Digital Delivery Services",
"Description": "Dell-software om vooraf aangeschafte software te downloaden en installeren"
},
"DellInc.DellMobileConnect": {
"FriendlyName": "Dell Mobile Connect",
"Description": "Dell-app om een Android- of iOS-telefoon aan je pc te koppelen (opgevolgd door Telefoonkoppeling)"
}
}
+14
View File
@@ -0,0 +1,14 @@
{
"PrivacySuggestedContent": { "Label": "Privacy en aanbevolen inhoud" },
"System": { "Label": "Systeem" },
"StartMenuSearch": { "Label": "Startmenu en zoeken" },
"AI": { "Label": "AI" },
"WindowsUpdate": { "Label": "Windows Update" },
"Taskbar": { "Label": "Taakbalk" },
"Appearance": { "Label": "Vormgeving" },
"FileExplorer": { "Label": "Verkenner" },
"Gaming": { "Label": "Gamen" },
"MultiTasking": { "Label": "Multitasking" },
"OptionalWindowsFeatures": { "Label": "Optionele Windows-onderdelen" },
"Other": { "Label": "Overig" }
}
+335
View File
@@ -0,0 +1,335 @@
{
"TitleBarAppName": "Win11Debloat",
"MessageBoxOk": "OK",
"MessageBoxCancel": "Annuleren",
"MessageBoxYes": "Ja",
"MessageBoxNo": "Nee",
"TitleBarSupportCreator": "Steun de maker",
"TitleBarOptions": "Opties",
"SettingsTitle": "Instellingen",
"SettingsSave": "Opslaan",
"SettingsTheme": "Thema",
"SettingsThemeAuto": "Automatisch",
"SettingsThemeLight": "Licht",
"SettingsThemeDark": "Donker",
"SettingsLanguage": "Taal",
"SettingsLanguageAuto": "Systeemstandaard",
"SettingsSaveError": "Kan de instellingen niet opslaan. Probeer het opnieuw.",
"TitleBarClose": "Sluiten",
"MenuImportConfig": "Configuratie importeren",
"MenuImportConfigTooltip": "Configuratie importeren",
"MenuExportConfig": "Configuratie exporteren",
"MenuExportConfigTooltip": "Configuratie exporteren",
"MenuRestoreBackup": "Back-up terugzetten",
"MenuRestoreBackupTooltip": "Registerback-up terugzetten",
"MenuDocumentation": "Documentatie",
"MenuReportBug": "Probleem melden",
"MenuLogs": "Logboeken",
"MenuAbout": "Over",
"HomeTabHeader": "Startpagina",
"HomeTitle": "Welkom bij Win11Debloat",
"HomeSubtitle": "Een opgeruimde Windows-installatie in een paar klikken!",
"HomeUserQuestion": "Voor welke gebruiker wil je wijzigingen aanbrengen?",
"HomeUserSelectionAutomationName": "Wijzigingen toepassen op",
"HomeUserOptionCurrentUser": "Huidige gebruiker",
"HomeUserOptionOtherUser": "Andere gebruiker",
"HomeUserOptionSysprep": "Standaardgebruikersprofiel van Windows (Sysprep)",
"HomeUsernamePlaceholder": "Voer een gebruikersnaam in",
"HomeDefaultModeBtn": "Standaardmodus",
"HomeDefaultModeBtnTooltip": "Snel de aanbevolen instellingen selecteren",
"HomeCustomSetupBtn": "Aangepaste instellingen",
"HomeCustomSetupBtnTooltip": "Zelf kiezen welke instellingen je wilt aanpassen",
"AppRemovalTabHeader": "App-verwijdering",
"AppRemovalTitle": "App-verwijdering",
"AppRemovalSubtitle": "Selecteer de apps die je wilt verwijderen",
"AppQuickSelect": "Snel selecteren",
"AppQuickSelectAutomationName": "Voorinstellingen voor apps",
"AppClearSelection": "Selectie wissen",
"AppClearSelectionTooltip": "De selectie van apps wissen",
"AppPresetDefaultApps": "Standaardapps",
"AppPresetDefaultAppsAutomationName": "Standaardselectie",
"AppPresetDefaultAppsTooltip": "Apps selecteren die voor de meeste gebruikers veilig te verwijderen zijn",
"AppPresetLastUsed": "Vorige app-selectie",
"AppPresetLastUsedTooltip": "Apps selecteren die de vorige keer met Win11Debloat zijn verwijderd",
"AppOnlyInstalledCheckbox": "Alleen geïnstalleerde apps tonen",
"AppOnlyInstalledCheckboxTooltip": "Alleen apps tonen die op dit systeem zijn geïnstalleerd",
"AppSearchPlaceholder": "Apps zoeken...",
"AppSearchAutomationName": "App zoeken",
"AppTableHeaderName": "Naam",
"AppTableHeaderDescription": "Beschrijving",
"AppTableHeaderAppId": "App-ID",
"AppLoadingIndicator": "Apps laden...",
"AppLegendTitle": "Legenda:",
"AppLegendRecommendedTooltip": "[Aanbevolen] Veilig te verwijderen voor de meeste gebruikers",
"AppLegendRecommended": "Aanbevolen",
"AppLegendOptionalTooltip": "[Optioneel] Veilig te verwijderen als je deze app niet nodig hebt",
"AppLegendOptional": "Optioneel",
"AppLegendNotRecommendedTooltip": "[Niet aanbevolen] Alleen verwijderen als je weet wat je doet",
"AppLegendNotRecommended": "Niet aanbevolen",
"TweaksTabHeader": "Aanpassingen",
"TweaksTitle": "Systeemaanpassingen",
"TweaksSubtitle": "Kies welke instellingen je wilt aanpassen. Houd de muis boven een instelling voor meer informatie",
"TweaksQuickSelect": "Snel selecteren",
"TweaksQuickSelectAutomationName": "Voorinstellingen voor aanpassingen",
"TweaksClearSelection": "Selectie wissen",
"TweaksClearSelectionTooltip": "De selectie van aanpassingen wissen",
"TweaksPresetDefault": "Standaardinstellingen",
"TweaksPresetDefaultTooltip": "Aanbevolen instellingen voor de meeste gebruikers selecteren",
"TweaksPresetLastUsed": "Vorige selectie instellingen",
"TweaksPresetLastUsedTooltip": "Instellingen selecteren die de vorige keer met Win11Debloat zijn toegepast",
"TweaksPresetPrivacy": "Privacy en aanbevolen inhoud",
"TweaksPresetPrivacyAutomationName": "Alle aanpassingen voor privacy en aanbevolen inhoud",
"TweaksPresetPrivacyTooltip": "Alle aanpassingen voor privacy en aanbevolen inhoud selecteren",
"TweaksPresetAI": "AI-functies",
"TweaksPresetAIAutomationName": "Alle AI-functies",
"TweaksPresetAITooltip": "Alle AI-aanpassingen selecteren",
"TweaksDetectApplied": "Toegepaste aanpassingen herkennen",
"TweaksDetectAppliedTooltip": "Nagaan welke aanpassingen al voor de huidige gebruiker zijn toegepast",
"TweaksSearchPlaceholder": "Aanpassingen zoeken...",
"TweaksSearchAutomationName": "Aanpassingen zoeken",
"DeployTabHeader": "Instellingen",
"DeployTitle": "Instellingen",
"DeploySubtitle": "Stel in hoe de geselecteerde wijzigingen op je systeem worden toegepast",
"DeployApplyToTitle": "Wijzigingen worden toegepast op",
"DeployUserSelectionDescription": "Het gebruikersprofiel waarmee je nu bent aangemeld.",
"DeployAppRemovalScopeTitle": "Apps worden verwijderd voor",
"DeployAppRemovalScopeAutomationName": "Bereik van app-verwijdering",
"DeployAppRemovalScopeAllUsers": "Alle gebruikers",
"DeployAppRemovalScopeCurrentUser": "Alleen de huidige gebruiker",
"DeployAppRemovalScopeTargetUser": "Alleen de geselecteerde gebruiker",
"DeployOptionsTitle": "Opties",
"DeployOptionRegistryBackup": "Registerback-up maken (aanbevolen)",
"DeployOptionRestorePoint": "Systeemherstelpunt maken (aanbevolen)",
"DeployOptionRestartExplorer": "Verkenner opnieuw starten om wijzigingen direct toe te passen",
"DeployReviewChanges": "Geselecteerde wijzigingen bekijken",
"DeployApplyChanges": "Wijzigingen toepassen",
"BubbleViewChanges": "Bekijk hier de geselecteerde wijzigingen",
"AboutTitle": "Over Win11Debloat",
"AboutVersionLabel": "Versie:",
"AboutAuthorLabel": "Auteur:",
"AboutProjectLabel": "Project:",
"AboutDonationMessage": "Win11Debloat is een project waar ik met plezier in mijn vrije tijd aan werk. Vind je dit programma nuttig? Overweeg dan een kleine donatie om de verdere ontwikkeling te ondersteunen. Dat waardeer ik enorm!",
"AboutKofiLink": "Steun mij op Ko-fi",
"AppSelectionWindowTitle": "Apps selecteren – Win11Debloat",
"AppSelectionWindowInstructions": "Vink alleen de apps aan die je wilt verwijderen",
"AppSelectionWindowCheckAll": "Alles aanvinken/uitvinken",
"AppSelectionWindowCheckAllAutomationName": "Alles aanvinken of uitvinken",
"AppSelectionWindowConfirm": "Bevestigen",
"AppSelectionWindowCancel": "Annuleren",
"ApplyCancelTooltip": "Annuleren",
"ApplyInProgressTitle": "Wijzigingen toepassen",
"ApplyPreparing": "Voorbereiden...",
"ApplyStepCounter": "Stap {0} van {1}",
"ApplyCreatingRegistryBackup": "Registerback-up maken...",
"ApplyCreatingRestorePoint": "Systeemherstelpunt maken. Dit kan even duren...",
"ApplyCompletionTitleSuccess": "Wijzigingen toegepast",
"ApplyCompletionMessageDefault": "Sommige wijzigingen worden pas actief nadat je de computer opnieuw hebt opgestart. Bedankt voor het gebruik van Win11Debloat!",
"ApplyRebootRequiredHeader": "De volgende wijzigingen vereisen een herstart:",
"ApplyRebootRequiredWingetDeferred": "Verwijderen van {0}",
"ApplyCompletionTitleCancelled": "Geannuleerd",
"ApplyCompletionMessageCancelled": "Het toepassen van de wijzigingen is geannuleerd.",
"ApplyCompletionTitleErrors": "Wijzigingen toegepast met fouten",
"ApplyCompletionMessageVerificationUnavailable": "Er zijn geen fouten gemeld, maar Win11Debloat kon niet controleren of alle geselecteerde apps zijn verwijderd.",
"WingetUserScopeUninstallDeferred": "WinGet kon {0} niet verwijderen als administrator, omdat de app voor een gebruiker is geïnstalleerd. Start de pc opnieuw op of meld je af en weer aan als {1} om de verwijdering te voltooien.",
"ApplyCompletionMessageFailures_one": "{0} wijziging is mislukt. Zie de console voor meer informatie.",
"ApplyCompletionMessageFailures_other": "{0} wijzigingen zijn mislukt. Zie de console voor meer informatie.",
"ApplyCompletionMessageReady": "Je systeem is gereed. Bedankt voor het gebruik van Win11Debloat!",
"ApplyCompletionTitleError": "Fout",
"ApplyCompletionMessageError": "Er is een fout opgetreden bij het toepassen van wijzigingen: {0}",
"NavBack": "Vorige",
"NavNext": "Volgende",
"NavProgressAppRemoval": "App-verwijdering",
"NavProgressSystemTweaks": "Systeemaanpassingen",
"NavProgressDeploymentSettings": "Instellingen",
"RestoreWindowTitle": "Back-up terugzetten",
"RestoreChooseRegistryTitle": "Registerback-up terugzetten",
"RestoreChooseRegistryDescription": "Registerinstellingen herstellen met een back-up",
"RestoreChooseStartMenuTitle": "Back-up van het Startmenu terugzetten",
"RestoreChooseStartMenuDescription": "Vastgemaakte apps in het Startmenu herstellen met een back-up",
"RestoreSelectTypePrompt": "Kies wat je wilt herstellen.",
"RestoreRegistryStepTitle": "Registerback-up terugzetten",
"RestoreRegistryIntro": "Zet een back-up terug om registerwijzigingen van Win11Debloat ongedaan te maken. Selecteer een bestand om te zien welke instellingen worden hersteld. Verwijderde apps moet je zelf opnieuw installeren.",
"RestoreRegistryWarning": "Waarschuwing: gebruik alleen back-upbestanden die door Win11Debloat zijn gemaakt.",
"RestoreStartMenuStepTitle": "Back-up van het Startmenu terugzetten",
"RestoreStartMenuIntro": "Herstel de indeling van vastgemaakte apps in het Startmenu voor de gekozen gebruikers. Gebruik een automatische back-up van Win11Debloat of kies een eigen back-up.",
"RestoreStartMenuScopeCurrentUser": "Huidige gebruiker",
"RestoreStartMenuScopeAllUsers": "Alle gebruikers",
"RestoreStartMenuAutoBackupCheckbox": "Automatisch een back-up van het Startmenu zoeken",
"RestoreFileLabel": "Bestand:",
"RestoreFileNotSelected": "Niet geselecteerd",
"RestoreCreatedLabel": "Aangemaakt op:",
"RestoreCreatedUnavailable": "Niet beschikbaar",
"RestoreCreatedUnknown": "Onbekend",
"RestoreTargetLabel": "Doel:",
"RestoreRevertibleFeaturesTitle": "De volgende wijzigingen worden ongedaan gemaakt:",
"RestoreReappliedFeaturesTitle": "De volgende wijzigingen worden opnieuw toegepast:",
"RestoreNonRevertibleFeaturesTitle": "De volgende wijzigingen worden niet ongedaan gemaakt:",
"RestoreWikiLink": "Bezoek de wiki voor meer informatie",
"RestoreStartMenuSummary": "De geselecteerde back-up herstelt de indeling van vastgemaakte apps in het Startmenu voor {0}.",
"RestoreStartMenuSummaryScopeCurrentUser": "de huidige gebruiker",
"RestoreStartMenuSummaryScopeAllUsers": "alle gebruikers",
"RestorePrimaryActionSelectBackupFile": "Back-upbestand selecteren",
"RestorePrimaryActionRestoreBackup": "Back-up terugzetten",
"RestorePrimaryActionRestoreFromBackup": "Back-up terugzetten",
"RestoreBackBtnCancel": "Annuleren",
"RestoreBackBtnBack": "Vorige",
"RestoreInvalidBackupTitle": "Ongeldig back-upbestand",
"RestoreInvalidBackupMessage": "Het geselecteerde bestand kon niet worden geladen:\n{0}",
"RestoreNoBackupFoundTitle": "Geen back-up gevonden",
"RestoreNoBackupFoundMessage": "Er is geen back-up van het Startmenu gevonden voor {0}. Schakel 'Automatisch een back-up van het Startmenu zoeken' uit om zelf een back-upbestand te kiezen.",
"RestoreNoRestorableChangesError": "De geselecteerde back-up bevat geen wijzigingen die je kunt terugdraaien.",
"RestoreSelectRegistryFileDialogTitle": "Registerback-upbestand selecteren",
"RestoreSelectStartMenuFileDialogTitle": "Back-upbestand van het Startmenu selecteren",
"RestoreUnknownFeature": "Onbekende functie",
"RestoreTargetUnknown": "Onbekend",
"RestoreTargetDefaultUserProfile": "Standaardgebruikersprofiel",
"RestoreTargetCurrentUser": "Huidige gebruiker",
"RestoreTargetAllUsers": "Alle gebruikers",
"RestoreTargetCurrentUserNamed": "Huidige gebruiker ({0})",
"RestoreTargetUserNamed": "Gebruiker ({0})",
"RestoreTargetUser": "Gebruiker",
"RestoreBackupRestoredTitle": "Back-up teruggezet",
"RestoreRegistryWhatIfMessage": "[WhatIf] De registerback-up zou worden teruggezet (geen wijzigingen aangebracht).",
"RestoreRegistrySuccessMessage": "De registerback-up is teruggezet. Voor sommige wijzigingen moet je de computer opnieuw opstarten.",
"RestoreStartMenuFailedMessage": "Het terugzetten van de back-up van het Startmenu is mislukt.\n{0}",
"RestoreStartMenuPartialSuccessMessage": "De back-up van het Startmenu is teruggezet voor {0} gebruiker(s).\nBij de volgende gebruikers is dit niet gelukt:\n{1}",
"RestoreStartMenuWhatIfMessage": "[WhatIf] De back-up van het Startmenu zou worden teruggezet (geen wijzigingen aangebracht).",
"RestoreStartMenuAllUsersSuccessMessage": "De back-up van het Startmenu is teruggezet voor alle gebruikers. De wijzigingen worden actief zodra zij zich opnieuw aanmelden.",
"RestoreStartMenuCurrentUserSuccessMessage": "De back-up van het Startmenu is teruggezet voor de huidige gebruiker. De wijzigingen worden actief zodra je je opnieuw aanmeldt.",
"RestoreOperationFailedMessage": "Terugzetten mislukt: {0}",
"RestoreUnexpectedError": "Er is een onverwachte fout opgetreden.",
"ImportExportCategoryApplications": "Apps",
"ImportExportCategorySystemTweaks": "Systeemaanpassingen",
"ImportExportCategoryDeploymentSettings": "Instellingen",
"ImportExportCategoryDisabledTooltip": "Er is niets geselecteerd in deze categorie",
"ImportExportSchemaMissingMessage": "Het schemabestand voor het import- en exportvenster is niet gevonden.",
"ImportExportExportTitle": "Configuratie exporteren",
"ImportExportExportPrompt": "Maak een configuratiebestand met de geselecteerde instellingen. Kies welke categorieën je wilt exporteren.",
"ImportExportExportActionLabel": "Instellingen exporteren",
"ImportExportSelectExportFileDialogTitle": "Configuratie exporteren",
"ImportExportWhatIfExportMessage": "[WhatIf] De configuratie zou naar dit bestand worden geëxporteerd (geen bestand geschreven).",
"ImportExportExportSuccessMessage": "De configuratie is geëxporteerd.",
"ImportExportExportFailedMessage": "Configuratie exporteren mislukt",
"ImportExportImportTitle": "Configuratie importeren",
"ImportExportImportPrompt": "Kies welke categorieën je wilt importeren. Je kunt de geïmporteerde instellingen bekijken en aanpassen voordat je ze toepast.",
"ImportExportImportActionLabel": "Instellingen importeren",
"ImportExportSelectImportFileDialogTitle": "Configuratiebestand selecteren",
"ImportExportInvalidConfigTitle": "Ongeldige configuratie",
"ImportExportReadFailedMessage": "Configuratiebestand lezen mislukt",
"ImportExportInvalidConfigMessage": "Ongeldig configuratiebestand: {0}",
"ImportExportImportSuccessMessage": "De configuratie is geïmporteerd.",
"ImportExportDeployUserCurrentUser": "Gebruiker: huidige gebruiker",
"ImportExportDeployUserOther": "Gebruiker: {0}",
"ImportExportDeployUserOtherFallback": "Andere gebruiker",
"ImportExportDeployUserSysprep": "Gebruiker: Sysprep",
"ImportExportAppRemovalAllUsers": "App-verwijdering: alle gebruikers",
"ImportExportAppRemovalCurrentUser": "App-verwijdering: huidige gebruiker",
"ImportExportAppRemovalOther": "App-verwijdering: {0}",
"ImportExportOptionRestorePoint": "Herstelpunt",
"ImportExportOptionRegistryBackup": "Registerback-up",
"ImportExportOptionRestartExplorer": "Verkenner opnieuw starten",
"ImportExportOptionsPrefix": "Opties: {0}",
"ImportExportDefaultDeploymentSettings": "Standaardinstellingen",
"ImportExportAppsSelected_one": "{0} app geselecteerd",
"ImportExportAppsSelected_other": "{0} apps geselecteerd",
"ImportExportNoAppsSelected": "Geen apps geselecteerd",
"ImportExportTweaksSelected_one": "{0} aanpassing geselecteerd",
"ImportExportTweaksSelected_other": "{0} aanpassingen geselecteerd",
"ImportExportNoTweaksSelected": "Geen aanpassingen geselecteerd",
"AppSelectionWinGetLoadFailedMessage": "De lijst met geïnstalleerde apps kon niet worden geladen via WinGet.",
"ErrorTitle": "Fout",
"AppSelectionStatusSelected_one": "{0} app geselecteerd voor verwijdering",
"AppSelectionStatusSelected_other": "{0} apps geselecteerd voor verwijdering",
"AppRemovalScopeDescriptionAllUsers": "Apps worden voor alle gebruikers verwijderd, ook uit de Windows-image. Zo worden ze niet opnieuw geïnstalleerd voor nieuwe gebruikers.",
"AppRemovalScopeDescriptionCurrentUser": "Apps worden alleen voor de huidige gebruiker verwijderd.",
"AppRemovalScopeDescriptionTargetUser": "Apps worden alleen voor de geselecteerde gebruiker verwijderd.",
"TweaksCategoryHelpTooltip": "Open de wiki voor meer informatie over aanpassingen in '{0}'",
"TweaksOptionNoChange": "Geen wijziging",
"TweaksOptionApply": "Toepassen",
"TweaksOptionDisable": "Uitschakelen",
"TweaksOptionEnable": "Inschakelen",
"TweaksAlreadyAppliedTooltip": "Deze aanpassing is al toegepast en kan niet automatisch ongedaan worden gemaakt. Op de Win11Debloat-wiki lees je hoe je de wijziging zelf kunt terugdraaien.",
"DeployChangeRemoveApps_one": "{0} app verwijderen",
"DeployChangeRemoveApps_other": "{0} apps verwijderen",
"DeployChangeUndoPrefix": "Ongedaan maken: {0}",
"DeployNoChangesSelectedMessage": "Er zijn geen wijzigingen geselecteerd.",
"DeploySelectedChangesTitle": "Geselecteerde wijzigingen",
"DeployUserDescriptionCurrentUser": "Het gebruikersprofiel waarmee je nu bent aangemeld",
"DeployUserDescriptionCurrentUserNamed": "Het gebruikersprofiel waarmee je nu bent aangemeld: {0}",
"DeployUserDescriptionOtherUser": "Een ander gebruikersprofiel op dit systeem",
"DeployUserDescriptionOtherUserNamed": "Een ander gebruikersprofiel op dit systeem: {0}",
"DeployUserDescriptionSysprep": "Het standaardgebruikersprofiel van Windows. De geselecteerde instellingen gelden voor alle nieuwe gebruikersprofielen. Handig als je Windows voorbereidt met Sysprep.",
"LogsMenuTitle": "Logboeken",
"LogsFolderNotFoundMessage": "Geen map met logboeken gevonden in: {0}",
"ExportConfigFailedTitle": "Configuratie exporteren mislukt",
"ExportConfigFailedMessage": "Het exportvenster kon niet worden geopend: {0}",
"ImportConfigFailedTitle": "Configuratie importeren mislukt",
"ImportConfigFailedMessage": "Het importvenster kon niet worden geopend: {0}",
"RestoreBackupFailedTitle": "Back-up terugzetten mislukt",
"RestoreBackupFailedMessage": "Het herstelvenster kon niet worden geopend: {0}",
"AppPresetSelectTooltip": "{0} selecteren",
"InvalidUsernameFallbackMessage": "Voer een geldige gebruikersnaam in.",
"InvalidUsernameTitle": "Ongeldige gebruikersnaam",
"NoChangesSelectedTitle": "Geen wijzigingen geselecteerd",
"NoChangesSelectedMessage": "Er zijn geen wijzigingen geselecteerd. Selecteer minstens één optie om door te gaan.",
"HomeCurrentUserWithName": "Huidige gebruiker ({0})",
"InitializationErrorTitle": "Opstarten mislukt",
"InitializationErrorMessage": "Er is een fout opgetreden bij het opstarten van Win11Debloat: {0}",
"WhatIfModeTitle": "WhatIf-modus",
"WhatIfModeMessage": "De WhatIf-modus is ingeschakeld. In deze modus brengt het script geen wijzigingen aan op je systeem.\n\nIn de console zie je welke acties het script zou uitvoeren.",
"ConfirmTitle": "Weet je het zeker?",
"ConfirmRemoveStoreMessage": "Weet je zeker dat je de Microsoft Store wilt verwijderen? Deze app kan niet eenvoudig opnieuw worden geïnstalleerd.",
"ConfirmRemoveTerminalMessage": "Weet je zeker dat je Windows Terminal wilt verwijderen? Dit is de standaardapp voor de opdrachtregel in Windows. Ga alleen verder als je Win11Debloat buiten Windows Terminal uitvoert. Anders kan het script halverwege stoppen.",
"ConfigEmptyOrUnreadable": "De configuratie is leeg of kan niet worden gelezen.",
"ConfigMissingVersion": "Het veld Version ontbreekt in de configuratie.",
"ConfigNoImportableData": "Het configuratiebestand bevat geen gegevens om te importeren.",
"ConfigAppsMustBeStrings": "Alle items in Apps moeten tekenreeksen zijn.",
"ConfigEntriesMustHaveNameAndValue": "Elk item in {0} moet de eigenschappen Name en Value bevatten.",
"ConfigInvalidAppRemovalScopeIndex": "AppRemovalScopeIndex moet 0, 1 of 2 zijn.",
"ConfigInvalidUserSelectionIndex": "UserSelectionIndex moet 0, 1 of 2 zijn.",
"ConfigScopeRequiresCurrentUserTarget": "Als je apps alleen voor de huidige gebruiker wilt verwijderen (AppRemovalScopeIndex 1), moet je ook de wijzigingen toepassen op 'Huidige gebruiker' (UserSelectionIndex 0).",
"ConfigScopeRequiresOtherUserTarget": "Als je apps alleen voor de geselecteerde gebruiker wilt verwijderen (AppRemovalScopeIndex 2), moet je ook de wijzigingen toepassen op 'Andere gebruiker' (UserSelectionIndex 1).",
"ConfigScopeRequiresOtherUsername": "Als je apps alleen voor de geselecteerde gebruiker wilt verwijderen (AppRemovalScopeIndex 2), moet je een gebruikersnaam opgeven bij 'OtherUsername'.",
"UsernameValidationEmpty": "Voer een gebruikersnaam in",
"UsernameValidationOwnUsername": "Dit is je eigen gebruikersnaam. Kies hiervoor de optie 'Huidige gebruiker'",
"UsernameValidationNotFound": "Gebruiker niet gevonden. Voer een geldige gebruikersnaam in.",
"UsernameValidationFound": "Gebruiker gevonden: {0}",
"RestorePointFailedTitle": "Systeemherstelpunt maken mislukt",
"RestorePointFailedMessage": "Er kon geen systeemherstelpunt worden gemaakt. Wil je doorgaan zonder herstelpunt?",
"ForceRemoveEdgeTitle": "Microsoft Edge geforceerd verwijderen?",
"ForceRemoveEdgeMessage": "Microsoft Edge kon niet via WinGet worden verwijderd. Wil je het geforceerd verwijderen? NIET AANBEVOLEN!",
"RemovingAppsSubStep": "Apps verwijderen ({0}/{1})",
"BackupFileNotFound": "Back-upbestand niet gevonden: {0}",
"BackupFileNotValidJson": "Back-upbestand '{0}' kon niet worden gelezen. Het bestand bevat geen geldige JSON.",
"BackupValidationSingleError": "Validatie mislukt: {0}",
"BackupValidationMultipleErrors": "Validatie mislukt met {0} fouten. Zie de console voor meer informatie.",
"BackupMissingProperty": "Ontbrekende eigenschap: {0}",
"BackupUnsupportedVersion": "Niet-ondersteunde back-upversie '{0}'.",
"BackupUnsupportedType": "Back-up met BackupType '{0}' wordt niet ondersteund.",
"BackupInvalidUser": "Ongeldige gebruiker '{0}'",
"BackupUserScopedWrongContext": "Deze back-up is gemaakt voor gebruiker '{0}' en kan alleen door die gebruiker worden teruggezet. Voer het script opnieuw uit als die gebruiker. SYSTEM kan geen CurrentUser-back-up terugzetten.",
"BackupUserMismatch": "De back-up is gemaakt voor '{0}', maar de huidige gebruiker is '{1}'.",
"BackupUnsupportedTarget": "Back-up met Target '{0}' wordt niet ondersteund.",
"BackupSelectedFeaturesMustBeStrings": "SelectedFeatures moet een lijst met functie-ID's bevatten. Elk ID moet een niet-lege tekenreeks zijn.",
"BackupSelectedUndoFeaturesMustBeStrings": "SelectedUndoFeatures moet een lijst met functie-ID's bevatten. Elk ID moet een niet-lege tekenreeks zijn.",
"BackupMissingSelectedFeatures": "De back-up moet minstens één functie-ID bevatten in SelectedFeatures of SelectedUndoFeatures.",
"BackupAllowlistValidationFailed": "Back-up valideren mislukt: {0}",
"BackupSnapshotMissingPath": "De back-up is ongeldig: de eigenschap Path ontbreekt in een opgeslagen registersleutel.",
"BackupFeatureCatalogNotLoaded": "De registerpaden in de back-up kunnen niet worden gecontroleerd, omdat de functiedefinities niet zijn geladen.",
"BackupNoAllowedRegistryPaths": "De back-up bevat opgeslagen registergegevens, maar er zijn geen toegestane registerpaden gevonden voor de geselecteerde functies.",
"BackupFeatureNotInCatalog": "De geselecteerde functie '{0}' is niet gevonden in de huidige functiecatalogus.",
"BackupUnsupportedRegistryPath": "De back-up bevat het niet-ondersteunde registerpad '{0}'.",
"BackupUnexpectedRegistryPath": "De back-up bevat het registerpad '{0}', dat niet is toegestaan voor de functies in SelectedFeatures.",
"BackupUnexpectedValue": "De back-up bevat een onverwachte registerwaarde '{0}' onder '{1}'.",
"BackupUnsupportedValueKind": "Het registerwaardetype '{0}' voor '{1}' in de back-up wordt niet ondersteund.",
"BackupInvalidValueData": "De back-up bevat ongeldige registergegevens van het type '{0}' bij '{1}'.",
"BackupValueMustNotDefineKind": "Back-upwaarde '{0}' mag de eigenschap Kind niet bevatten als Exists de waarde false heeft.",
"StartMenuNoBackupFoundForUser": "Geen back-upbestand van het Startmenu gevonden voor gebruiker {0}.",
"StartMenuWhatIfRestoredForUser": "[WhatIf] Startmenu teruggezet voor gebruiker {0}.",
"StartMenuRestoredForUser": "Startmenu teruggezet voor gebruiker {0}.",
"StartMenuRestoreFailedForUser": "Startmenu terugzetten mislukt voor gebruiker {0}. {1}",
"StartMenuWhatIfRemovedDefaultProfile": "[WhatIf] start2.bin verwijderd uit het standaardgebruikersprofiel.",
"StartMenuRemovedDefaultProfile": "start2.bin verwijderd uit het standaardgebruikersprofiel.",
"StartMenuRemoveFailedDefaultProfile": "start2.bin verwijderen uit het standaardgebruikersprofiel mislukt. {0}",
"StartMenuNoUserLocationsFound": "Er zijn geen Startmenu-locaties voor gebruikers gevonden."
}
+751
View File
@@ -0,0 +1,751 @@
{
"Features": {
"RemoveApps": {
"Label": "Apps verwijderen die met de parameter 'Apps' zijn opgegeven",
"ApplyText": "Geselecteerde apps verwijderen"
},
"Apps": {
"Label": "Geef de te verwijderen apps op, gescheiden door komma's. Gebruik 'Default' of laat deze parameter weg voor de standaardlijst met apps",
"ApplyText": "Geselecteerde apps verwijderen"
},
"RemoveGamingApps": {
"Label": "De Xbox-app en Xbox Game Bar verwijderen",
"ApplyText": "Game-apps verwijderen"
},
"RemoveHPApps": {
"Label": "Vooraf geïnstalleerde HP-apps verwijderen",
"ApplyText": "HP-apps verwijderen"
},
"CreateRestorePoint": {
"Label": "Systeemherstelpunt maken",
"ApplyText": "Systeemherstelpunt maken"
},
"DisableTelemetry": {
"Label": "Telemetrie, tracking en gerichte advertenties uitschakelen",
"ToolTip": "Schakelt onder meer telemetrie, diagnostische gegevensverzameling, activiteitengeschiedenis, het bijhouden van gestarte apps en gerichte advertenties uit. Zo ontvangt Microsoft minder gegevens over je apparaat en het gebruik ervan. Bij Windows Insider kunnen updates worden geblokkeerd totdat je optionele diagnostische gegevens weer inschakelt.",
"ApplyText": "Telemetrie en diagnostische gegevensverzameling uitschakelen",
"UndoLabel": "Telemetrie, tracking en gerichte advertenties inschakelen",
"ApplyUndoText": "Telemetrie en diagnostische gegevensverzameling inschakelen"
},
"DisableSuggestions": {
"Label": "Tips en aanbevelingen in Windows uitschakelen",
"ToolTip": "Verwijdert veel storende meldingen, herinneringen en advertenties van synchronisatieproviders uit Windows. Voorkomt ook dat aanbevolen apps automatisch worden geïnstalleerd.",
"ApplyText": "Tips, aanbevelingen en advertenties in Windows uitschakelen",
"UndoLabel": "Tips en aanbevelingen in Windows inschakelen",
"ApplyUndoText": "Tips, aanbevelingen en advertenties in Windows inschakelen"
},
"DisableNotifications": {
"Label": "Windows-meldingen uitschakelen",
"ToolTip": "Schakelt Windows-meldingen uit van apps zoals Discord, WhatsApp, Teams en Slack, en van andere afzenders.",
"ApplyText": "Windows-meldingen en herinneringen uitschakelen",
"UndoLabel": "Windows-meldingen en herinneringen inschakelen",
"ApplyUndoText": "Windows-meldingen en herinneringen inschakelen"
},
"DisableLocationServices": {
"Label": "Locatieservices en locatietoegang voor apps uitschakelen",
"ToolTip": "Schakelt de locatieservices van Windows uit en voorkomt dat apps je locatie kunnen gebruiken. Dit gebeurt via beleidsinstellingen, waardoor je bepaalde instellingen niet meer zelf kunt wijzigen.",
"ApplyText": "Locatieservices en locatietoegang voor apps uitschakelen",
"UndoLabel": "Locatieservices en locatietoegang voor apps inschakelen",
"ApplyUndoText": "Locatieservices en locatietoegang voor apps inschakelen"
},
"DisableFindMyDevice": {
"Label": "'Mijn apparaat zoeken' uitschakelen",
"ToolTip": "Schakelt 'Mijn apparaat zoeken' uit. Deze functie verzendt regelmatig de locatie van je apparaat naar Microsoft. Dit gebeurt via beleidsinstellingen, waardoor je bepaalde instellingen niet meer zelf kunt wijzigen.",
"ApplyText": "'Mijn apparaat zoeken' uitschakelen",
"UndoLabel": "'Mijn apparaat zoeken' inschakelen",
"ApplyUndoText": "'Mijn apparaat zoeken' inschakelen"
},
"DisableLockscreenTips": {
"Label": "Tips en trucs op het vergrendelingsscherm uitschakelen",
"ToolTip": "Schakelt Windows-spotlight en de bijbehorende tips, trucs en weetjes op het vergrendelingsscherm uit.",
"ApplyText": "Tips en trucs op het vergrendelingsscherm uitschakelen",
"UndoLabel": "Tips en trucs op het vergrendelingsscherm inschakelen",
"ApplyUndoText": "Tips en trucs op het vergrendelingsscherm inschakelen"
},
"EnableDesktopSpotlight": {
"Label": "Windows-spotlight op het bureaublad inschakelen, inclusief snelkoppeling",
"ToolTip": "Herstelt Windows-spotlight als bureaubladachtergrond en de snelkoppeling 'Meer informatie over deze afbeelding'.",
"ApplyText": "De bureaubladachtergrond en snelkoppeling van Windows-spotlight herstellen"
},
"DisableDesktopSpotlight": {
"Label": "Windows-spotlight als bureaubladachtergrond uitschakelen",
"ToolTip": "Schakelt Windows-spotlight voor de bureaubladachtergrond uit. Deze functie toont wisselende afbeeldingen en kan tips en weetjes weergeven. Dit gebeurt via beleidsinstellingen, waardoor je bepaalde instellingen niet meer zelf kunt wijzigen.",
"ApplyText": "Windows-spotlight als bureaubladachtergrond uitschakelen",
"UndoLabel": "Windows-spotlight als bureaubladachtergrond inschakelen",
"ApplyUndoText": "De bureaubladachtergrond en snelkoppeling van Windows-spotlight herstellen"
},
"HideDesktopSpotlightIcon": {
"Label": "De bureaubladsnelkoppeling 'Meer informatie over deze afbeelding' verbergen",
"ToolTip": "Verbergt de bureaubladsnelkoppeling 'Meer informatie over deze afbeelding'. Windows-spotlight blijft de achtergrond wisselen.",
"ApplyText": "De snelkoppeling van Windows-spotlight op het bureaublad verbergen",
"UndoLabel": "De bureaubladsnelkoppeling 'Meer informatie over deze afbeelding' tonen",
"ApplyUndoText": "De snelkoppeling van Windows-spotlight op het bureaublad tonen"
},
"DisableEdgeAds": {
"Label": "Advertenties, aanbevelingen en nieuwsfeed in Edge uitschakelen",
"ToolTip": "Schakelt verschillende afleidingen in Microsoft Edge uit, zoals advertenties, aanbevelingen en de MSN-nieuwsfeed. Dit gebeurt via beleidsinstellingen, waardoor je bepaalde instellingen niet meer zelf kunt wijzigen.",
"ApplyText": "Advertenties, aanbevelingen en de MSN-nieuwsfeed in Microsoft Edge uitschakelen",
"UndoLabel": "Advertenties, aanbevelingen en nieuwsfeed in Edge inschakelen",
"ApplyUndoText": "Advertenties, aanbevelingen en de MSN-nieuwsfeed in Microsoft Edge inschakelen"
},
"DisableCopilot": {
"Label": "Microsoft Copilot uitschakelen",
"ToolTip": "Schakelt Microsoft Copilot, de ingebouwde AI-assistent van Windows, uit en verwijdert deze.",
"ApplyText": "Microsoft Copilot uitschakelen",
"UndoLabel": "Microsoft Copilot inschakelen",
"ApplyUndoText": "Microsoft Copilot inschakelen"
},
"DisableRecall": {
"Label": "Windows Recall uitschakelen",
"ToolTip": "Schakelt Windows Recall uit, een AI-functie die snel toegang biedt tot recent gebruikte bestanden, apps en activiteiten. Dit gebeurt via beleidsinstellingen, waardoor je bepaalde instellingen niet meer zelf kunt wijzigen.",
"ApplyText": "Windows Recall uitschakelen",
"UndoLabel": "Windows Recall inschakelen",
"ApplyUndoText": "Windows Recall inschakelen"
},
"DisableClickToDo": {
"Label": "Click To Do en AI-analyse van tekst en afbeeldingen uitschakelen",
"ToolTip": "Schakelt Click To Do uit, waarmee tekst en afbeeldingen in Windows met AI kunnen worden geanalyseerd. Dit gebeurt via beleidsinstellingen, waardoor je bepaalde instellingen niet meer zelf kunt wijzigen.",
"ApplyText": "Click To Do uitschakelen",
"UndoLabel": "Click To Do en AI-analyse van tekst en afbeeldingen inschakelen",
"ApplyUndoText": "Click To Do inschakelen"
},
"DisableAISvcAutoStart": {
"Label": "Automatisch starten van de AI-service uitschakelen",
"ToolTip": "Stelt de service WSAIFabricSvc in op handmatig starten, zodat deze niet automatisch met Windows start.",
"ApplyText": "Automatisch starten van de AI-service uitschakelen",
"UndoLabel": "Automatisch starten van de AI-service inschakelen",
"ApplyUndoText": "Automatisch starten van de AI-service inschakelen"
},
"DisableDVR": {
"Label": "Game- en schermopnamen via Xbox uitschakelen",
"ToolTip": "Schakelt de functies voor game- en schermopnamen in Xbox Game Bar uit. Dit gebeurt via beleidsinstellingen, waardoor je bepaalde instellingen niet meer zelf kunt wijzigen.",
"ApplyText": "Game- en schermopnamen via Xbox uitschakelen",
"UndoLabel": "Game- en schermopnamen via Xbox inschakelen",
"ApplyUndoText": "Game- en schermopnamen via Xbox inschakelen"
},
"DisableGameBarIntegration": {
"Label": "Game Bar-integratie uitschakelen",
"ToolTip": "Schakelt de integratie van Game Bar met games en controllers uit. Dit voorkomt storende ms-gamebar-pop-ups wanneer je een game start of een controller aansluit.",
"ApplyText": "Game Bar-integratie uitschakelen",
"UndoLabel": "Game Bar-integratie inschakelen",
"ApplyUndoText": "Game Bar-integratie inschakelen"
},
"ClearStart": {
"Label": "Alle vastgemaakte apps uit het Startmenu verwijderen, alleen voor deze gebruiker",
"ApplyText": "Alle vastgemaakte apps uit het Startmenu verwijderen"
},
"ClearStartAllUsers": {
"Label": "Alle vastgemaakte apps uit het Startmenu verwijderen voor alle bestaande en nieuwe gebruikers",
"ApplyText": "Alle vastgemaakte apps uit het Startmenu verwijderen voor alle gebruikers"
},
"ReplaceStart": {
"Label": "De indeling van het Startmenu vervangen door het opgegeven sjabloon, alleen voor deze gebruiker",
"ApplyText": "De indeling van het Startmenu vervangen"
},
"ReplaceStartAllUsers": {
"Label": "De indeling van het Startmenu vervangen door het opgegeven sjabloon, voor alle bestaande en nieuwe gebruikers",
"ApplyText": "De indeling van het Startmenu vervangen voor alle gebruikers"
},
"DisableStartRecommended": {
"Label": "De sectie 'Aanbevolen' in het Startmenu verbergen",
"ToolTip": "Verbergt de sectie 'Aanbevolen' in het Startmenu. Hier staan recent toegevoegde apps, recent geopende bestanden en app-aanbevelingen. Dit gebeurt via beleidsinstellingen, waardoor je bepaalde instellingen niet meer zelf kunt wijzigen.",
"ApplyText": "De sectie 'Aanbevolen' in het Startmenu uitschakelen",
"UndoLabel": "De sectie 'Aanbevolen' in het Startmenu tonen",
"ApplyUndoText": "De sectie 'Aanbevolen' in het Startmenu inschakelen"
},
"DisableStartAllApps": {
"Label": "De sectie 'Alle apps' in het Startmenu verbergen",
"ToolTip": "Verbergt de sectie 'Alle apps' in het Startmenu, waarin alle geïnstalleerde apps staan. WAARSCHUWING: hierdoor kan het moeilijker worden om geïnstalleerde apps op je systeem te vinden. Dit gebeurt via beleidsinstellingen, waardoor je bepaalde instellingen niet meer zelf kunt wijzigen.",
"ApplyText": "De sectie 'Alle apps' in het Startmenu uitschakelen",
"UndoLabel": "De sectie 'Alle apps' in het Startmenu tonen",
"ApplyUndoText": "De sectie 'Alle apps' in het Startmenu inschakelen"
},
"DisableStartPhoneLink": {
"Label": "Telefoonkoppeling in het Startmenu uitschakelen",
"ToolTip": "Verwijdert Telefoonkoppeling integratie uit het Startmenu als je een mobiel apparaat aan je pc hebt gekoppeld.",
"ApplyText": "Telefoonkoppeling in het Startmenu uitschakelen",
"UndoLabel": "Telefoonkoppeling in het Startmenu inschakelen",
"ApplyUndoText": "Telefoonkoppeling in het Startmenu inschakelen"
},
"DisableBing": {
"Label": "Bing en Copilot in Windows Zoeken uitschakelen",
"ToolTip": "Schakelt Bing-webzoekresultaten en Copilot-integratie in Windows Zoeken uit. Dit gebeurt via beleidsinstellingen, waardoor je bepaalde instellingen niet meer zelf kunt wijzigen.",
"ApplyText": "Bing en Copilot in Windows Zoeken uitschakelen",
"UndoLabel": "Bing en Copilot in Windows Zoeken inschakelen",
"ApplyUndoText": "Bing en Copilot in Windows Zoeken inschakelen"
},
"DisableStoreSearchSuggestions": {
"Label": "App-aanbevelingen van de Microsoft Store in Zoeken uitschakelen",
"ToolTip": "Schakelt app-aanbevelingen van de Microsoft Store in Windows Zoeken uit.",
"ApplyText": "App-aanbevelingen van de Microsoft Store in Zoeken uitschakelen",
"UndoLabel": "App-aanbevelingen van de Microsoft Store in Zoeken inschakelen",
"ApplyUndoText": "App-aanbevelingen van de Microsoft Store in Zoeken inschakelen"
},
"DisableSettings365Ads": {
"Label": "Microsoft 365 Copilot-advertenties in Instellingen verbergen",
"ToolTip": "Schakelt de Microsoft 365 Copilot-advertenties op de startpagina van Instellingen uit.",
"ApplyText": "Microsoft 365 Copilot-advertenties op de startpagina van Instellingen uitschakelen",
"UndoLabel": "Microsoft 365 Copilot-advertenties op de startpagina van Instellingen tonen",
"ApplyUndoText": "Microsoft 365 Copilot-advertenties op de startpagina van Instellingen inschakelen"
},
"DisableSettingsHome": {
"Label": "De startpagina van Instellingen verbergen",
"ToolTip": "Verwijdert de startpagina uit de app Instellingen.",
"ApplyText": "De startpagina van Instellingen uitschakelen",
"UndoLabel": "De startpagina van Instellingen tonen",
"ApplyUndoText": "De startpagina van Instellingen inschakelen"
},
"DisableEdgeAI": {
"Label": "AI-functies in Microsoft Edge uitschakelen",
"ToolTip": "Schakelt AI-functies in Microsoft Edge uit, zoals de AI-zijbalk en Copilot-functies. Dit gebeurt via beleidsinstellingen, waardoor je bepaalde instellingen niet meer zelf kunt wijzigen.",
"ApplyText": "AI-functies in Microsoft Edge uitschakelen",
"UndoLabel": "AI-functies in Microsoft Edge inschakelen",
"ApplyUndoText": "AI-functies in Microsoft Edge inschakelen"
},
"DisablePaintAI": {
"Label": "AI-functies in Paint uitschakelen",
"ToolTip": "Schakelt AI-functies in Paint uit, zoals het genereren en bewerken van afbeeldingen. Dit gebeurt via beleidsinstellingen, waardoor je bepaalde instellingen niet meer zelf kunt wijzigen.",
"ApplyText": "AI-functies in Paint uitschakelen",
"UndoLabel": "AI-functies in Paint inschakelen",
"ApplyUndoText": "AI-functies in Paint inschakelen"
},
"DisableChromeAI": {
"Label": "AI-functies in Google Chrome uitschakelen",
"ToolTip": "Schakelt de ingebouwde AI-hulpmiddelen en -integraties van Google Chrome uit, waaronder Gemini, AI-zoeken en -suggesties, schrijfhulp en automatisch invullen. Ook worden lokale AI-modellen verwijderd. Dit gebeurt via beleidsinstellingen, waardoor je bepaalde instellingen niet meer zelf kunt wijzigen.",
"ApplyText": "AI-functies in Google Chrome uitschakelen",
"UndoLabel": "AI-functies in Google Chrome inschakelen",
"ApplyUndoText": "AI-functies in Google Chrome inschakelen"
},
"DisableNotepadAI": {
"Label": "AI-functies in Kladblok uitschakelen",
"ToolTip": "Schakelt AI-functies in Kladblok uit, zoals AI-schrijfsuggesties. Dit gebeurt via beleidsinstellingen, waardoor je bepaalde instellingen niet meer zelf kunt wijzigen.",
"ApplyText": "AI-functies in Kladblok uitschakelen",
"UndoLabel": "AI-functies in Kladblok inschakelen",
"ApplyUndoText": "AI-functies in Kladblok inschakelen"
},
"EnableDarkMode": {
"Label": "Donker thema voor Windows en apps inschakelen",
"ToolTip": "Schakelt het donkere thema in voor Windows en apps.",
"ApplyText": "Donker thema voor Windows en apps inschakelen",
"UndoLabel": "Donker thema voor Windows en apps uitschakelen",
"ApplyUndoText": "Donker thema voor Windows en apps uitschakelen"
},
"DisableDragTray": {
"Label": "'Drag Tray' voor het delen van bestanden uitschakelen",
"ToolTip": "Drag Tray is een nieuwe functie voor het delen en verplaatsen van bestanden in Windows 11. Deze verschijnt bovenaan het scherm wanneer je bestanden sleept.",
"ApplyText": "Drag Tray uitschakelen",
"UndoLabel": "'Drag Tray' voor het delen van bestanden inschakelen",
"ApplyUndoText": "Drag Tray inschakelen"
},
"RevertContextMenu": {
"Label": "Het klassieke contextmenu van Windows 10 gebruiken",
"ToolTip": "Herstelt het klassieke Windows 10-contextmenu, dat normaal achter 'Meer opties weergeven' in het nieuwe Windows 11-contextmenu verborgen zit.",
"ApplyText": "Het klassieke Windows 10-contextmenu herstellen",
"UndoLabel": "Het contextmenu van Windows 11 gebruiken",
"ApplyUndoText": "Het Windows 11-contextmenu herstellen"
},
"DisableMouseAcceleration": {
"Label": "'Precisie van aanwijzer verbeteren' uitschakelen",
"ToolTip": "Schakelt muisversnelling uit via de Windows-optie 'Precisie van aanwijzer verbeteren'. Dit maakt muisbewegingen consistenter en voorspelbaarder.",
"ApplyText": "'Precisie van aanwijzer verbeteren' uitschakelen",
"UndoLabel": "'Precisie van aanwijzer verbeteren' inschakelen",
"ApplyUndoText": "'Precisie van aanwijzer verbeteren' inschakelen"
},
"DisableStickyKeys": {
"Label": "De sneltoets voor Plaktoetsen uitschakelen (5x Shift)",
"ToolTip": "Voorkomt dat het dialoogvenster voor Plaktoetsen verschijnt wanneer je vijf keer achter elkaar op Shift drukt.",
"ApplyText": "De sneltoets voor Plaktoetsen uitschakelen",
"UndoLabel": "De sneltoets voor Plaktoetsen inschakelen (5x Shift)",
"ApplyUndoText": "De sneltoets voor Plaktoetsen inschakelen"
},
"DisableWindowSnapping": {
"Label": "Vensters uitlijnen uitschakelen",
"ToolTip": "Schakelt de mogelijkheid uit om vensters aan de zijkanten of in de hoeken van het scherm uit te lijnen.",
"ApplyText": "Vensters uitlijnen uitschakelen",
"UndoLabel": "Vensters uitlijnen inschakelen",
"ApplyUndoText": "Vensters uitlijnen inschakelen"
},
"DisableSnapAssist": {
"Label": "App-suggesties bij het uitlijnen van vensters uitschakelen",
"ToolTip": "Schakelt suggesties voor andere apps uit wanneer je een venster aan een zijkant of in een hoek van het scherm uitlijnt.",
"ApplyText": "Suggesties van de Uitlijnassistent uitschakelen",
"UndoLabel": "App-suggesties bij het uitlijnen van vensters inschakelen",
"ApplyUndoText": "Suggesties van de Uitlijnassistent inschakelen"
},
"DisableSnapLayouts": {
"Label": "Menu's met uitlijnindelingen verbergen",
"ToolTip": "Verbergt het menu met uitlijnindelingen dat verschijnt wanneer je de muis boven de maximaliseerknop houdt of een venster naar de bovenkant van het scherm sleept.",
"ApplyText": "Menu's met uitlijnindelingen verbergen",
"UndoLabel": "Menu's met uitlijnindelingen tonen",
"ApplyUndoText": "Menu's met uitlijnindelingen tonen"
},
"HideTabsInAltTab": {
"Label": "Tabbladen van apps verbergen bij het uitlijnen van vensters of via Alt+Tab",
"ApplyText": "Tabbladen van apps verbergen bij het uitlijnen van vensters of via Alt+Tab"
},
"Show3TabsInAltTab": {
"Label": "3 tabbladen van apps tonen bij het uitlijnen van vensters of via Alt+Tab",
"ApplyText": "3 tabbladen van apps tonen bij het uitlijnen van vensters of via Alt+Tab"
},
"Show5TabsInAltTab": {
"Label": "5 tabbladen van apps tonen bij het uitlijnen van vensters of via Alt+Tab",
"ApplyText": "5 tabbladen van apps tonen bij het uitlijnen van vensters of via Alt+Tab"
},
"Show20TabsInAltTab": {
"Label": "20 tabbladen van apps tonen bij het uitlijnen van vensters of via Alt+Tab",
"ApplyText": "20 tabbladen van apps tonen bij het uitlijnen van vensters of via Alt+Tab"
},
"TaskbarAlignLeft": {
"Label": "Taakbalkknoppen links uitlijnen",
"ToolTip": "Windows 11 plaatst de taakbalkknoppen standaard in het midden. Deze instelling verplaatst de knoppen naar links, zoals in eerdere Windows-versies.",
"ApplyText": "Taakbalkknoppen links uitlijnen",
"UndoLabel": "Taakbalkknoppen in het midden uitlijnen",
"ApplyUndoText": "Taakbalkknoppen in het midden uitlijnen"
},
"HideSearchTb": {
"Label": "Zoekpictogram op de taakbalk verbergen",
"ApplyText": "Zoekpictogram op de taakbalk verbergen",
"UndoLabel": "Zoekvak op de taakbalk tonen",
"ApplyUndoText": "Het zoekvak op de taakbalk tonen"
},
"ShowSearchIconTb": {
"Label": "Zoekpictogram op de taakbalk tonen",
"ApplyText": "Alleen het zoekpictogram op de taakbalk tonen",
"UndoLabel": "Zoekvak op de taakbalk tonen",
"ApplyUndoText": "Het zoekvak op de taakbalk tonen"
},
"ShowSearchLabelTb": {
"Label": "Zoekpictogram met label op de taakbalk tonen",
"ApplyText": "Het zoekpictogram met label op de taakbalk tonen",
"UndoLabel": "Zoekvak op de taakbalk tonen",
"ApplyUndoText": "Het zoekvak op de taakbalk tonen"
},
"ShowSearchBoxTb": {
"Label": "Zoekvak op de taakbalk tonen",
"ApplyText": "Het zoekvak op de taakbalk tonen"
},
"HideTaskview": {
"Label": "De knop 'Taakweergave' op de taakbalk verbergen",
"ToolTip": "Schakelt de knop 'Taakweergave' op de taakbalk uit, waarmee je alle geopende vensters en virtuele bureaubladen kunt bekijken.",
"ApplyText": "De knop Taakweergave op de taakbalk verbergen",
"UndoLabel": "De knop 'Taakweergave' op de taakbalk tonen",
"ApplyUndoText": "De knop Taakweergave op de taakbalk tonen"
},
"DisableWidgets": {
"Label": "Widgets op de taakbalk en het vergrendelingsscherm uitschakelen",
"ToolTip": "Schakelt de widgetfuncties in Windows uit, waaronder de widgetknop op de taakbalk en de widgets die op het vergrendelingsscherm kunnen verschijnen.",
"ApplyText": "Widgets op de taakbalk en het vergrendelingsscherm uitschakelen"
},
"HideChat": {
"Label": "Het Chat-pictogram (Nu vergaderen) op de taakbalk verbergen",
"ToolTip": "Schakelt het Chat-pictogram (Nu vergaderen) op de taakbalk uit.",
"ApplyText": "Het Chat-pictogram op de taakbalk verbergen",
"UndoLabel": "Het Chat-pictogram (Nu vergaderen) op de taakbalk tonen",
"ApplyUndoText": "Het Chat-pictogram op de taakbalk tonen"
},
"DisableStorageSense": {
"Label": "Automatische schijfopruiming (Opslaginzicht) uitschakelen",
"ToolTip": "Schakelt Opslaginzicht uit. Deze functie maakt automatisch schijfruimte vrij door tijdelijke bestanden te verwijderen, de prullenbak te legen en de map Downloads op te ruimen.",
"ApplyText": "Automatische schijfopruiming uitschakelen",
"UndoLabel": "Automatische schijfopruiming inschakelen",
"ApplyUndoText": "Automatische schijfopruiming inschakelen"
},
"DisableFastStartup": {
"Label": "Snel opstarten uitschakelen",
"ToolTip": "Met Snel opstarten start je pc sneller nadat je deze hebt afgesloten. Hiervoor bewaart Windows de systeemstatus op schijf. Uitschakelen kan bepaalde problemen oplossen, maar het opstarten kan dan iets langer duren.",
"ApplyText": "Snel opstarten uitschakelen",
"UndoLabel": "Snel opstarten inschakelen",
"ApplyUndoText": "Snel opstarten inschakelen"
},
"DisableBitlockerAutoEncryption": {
"Label": "Automatische apparaatversleuteling met BitLocker uitschakelen",
"ToolTip": "Windows 11 schakelt apparaatversleuteling met BitLocker automatisch in op apparaten die dit ondersteunen. Met deze instelling voorkom je dat. Je kunt BitLocker nog wel zelf inschakelen. Stations die al versleuteld zijn, blijven versleuteld.",
"ApplyText": "Automatische apparaatversleuteling met BitLocker uitschakelen",
"UndoLabel": "Automatische apparaatversleuteling met BitLocker inschakelen",
"ApplyUndoText": "Automatische apparaatversleuteling met BitLocker inschakelen"
},
"DisableModernStandbyNetworking": {
"Label": "Netwerkverbinding tijdens Modern Standby uitschakelen",
"ToolTip": "Apparaten met Modern Standby blijven standaard met het netwerk verbonden als ze in de slaapstand staan. Door deze verbinding uit te schakelen, kan de accu langer meegaan.",
"ApplyText": "Netwerkverbinding tijdens Modern Standby uitschakelen",
"UndoLabel": "Netwerkverbinding tijdens Modern Standby inschakelen",
"ApplyUndoText": "Netwerkverbinding tijdens Modern Standby inschakelen"
},
"EnableEndTask": {
"Label": "'Taak beëindigen' in het taakbalkmenu tonen",
"ToolTip": "Voegt 'Taak beëindigen' toe aan het rechtermuisknopmenu van apps op de taakbalk. Hiermee kun je apps snel geforceerd sluiten.",
"ApplyText": "'Taak beëindigen' in het taakbalkmenu inschakelen",
"UndoLabel": "'Taak beëindigen' in het taakbalkmenu verbergen",
"ApplyUndoText": "'Taak beëindigen' in het taakbalkmenu uitschakelen"
},
"EnableLastActiveClick": {
"Label": "Laatst actieve venster openen bij een klik op de taakbalkknop",
"ToolTip": "Klik op een taakbalkknop om direct naar het laatst actieve venster van die app te gaan, in plaats van eerst de venstervoorbeelden te tonen.",
"ApplyText": "Taakbalkknoppen direct het laatst actieve venster laten openen",
"UndoLabel": "Venstervoorbeelden tonen bij een klik op de taakbalkknop",
"ApplyUndoText": "Taakbalkknoppen venstervoorbeelden laten tonen"
},
"CombineTaskbarAlways": {
"Label": "Taakbalkknoppen op het hoofdscherm altijd combineren en labels verbergen",
"ApplyText": "Taakbalkknoppen op het hoofdscherm altijd combineren en labels verbergen"
},
"CombineMMTaskbarAlways": {
"Label": "Taakbalkknoppen op andere beeldschermen altijd combineren en labels verbergen",
"ApplyText": "Taakbalkknoppen op andere beeldschermen altijd combineren en labels verbergen"
},
"CombineTaskbarWhenFull": {
"Label": "Taakbalkknoppen op het hoofdscherm alleen combineren en labels verbergen als de taakbalk vol is",
"ApplyText": "Taakbalkknoppen op het hoofdscherm alleen combineren en labels verbergen als de taakbalk vol is",
"UndoLabel": "Taakbalkknoppen op het hoofdscherm altijd combineren en labels verbergen",
"ApplyUndoText": "Taakbalkknoppen op het hoofdscherm altijd combineren en labels verbergen"
},
"CombineMMTaskbarWhenFull": {
"Label": "Taakbalkknoppen op andere beeldschermen alleen combineren en labels verbergen als de taakbalk vol is",
"ApplyText": "Taakbalkknoppen op andere beeldschermen alleen combineren en labels verbergen als de taakbalk vol is",
"UndoLabel": "Taakbalkknoppen op andere beeldschermen altijd combineren en labels verbergen",
"ApplyUndoText": "Taakbalkknoppen op andere beeldschermen altijd combineren en labels verbergen"
},
"CombineTaskbarNever": {
"Label": "Taakbalkknoppen op het hoofdscherm nooit combineren en labels tonen",
"ApplyText": "Taakbalkknoppen op het hoofdscherm nooit combineren en labels tonen",
"UndoLabel": "Taakbalkknoppen op het hoofdscherm altijd combineren en labels verbergen",
"ApplyUndoText": "Taakbalkknoppen op het hoofdscherm altijd combineren en labels verbergen"
},
"CombineMMTaskbarNever": {
"Label": "Taakbalkknoppen op andere beeldschermen nooit combineren en labels tonen",
"ApplyText": "Taakbalkknoppen op andere beeldschermen nooit combineren en labels tonen",
"UndoLabel": "Taakbalkknoppen op andere beeldschermen altijd combineren en labels verbergen",
"ApplyUndoText": "Taakbalkknoppen op andere beeldschermen altijd combineren en labels verbergen"
},
"MMTaskbarModeAll": {
"Label": "App-pictogrammen op alle taakbalken tonen",
"ApplyText": "App-pictogrammen op alle taakbalken tonen"
},
"MMTaskbarModeMainActive": {
"Label": "App-pictogrammen tonen op de hoofdtaakbalk en de taakbalk van het geopende venster",
"ApplyText": "App-pictogrammen tonen op de hoofdtaakbalk en de taakbalk van het geopende venster",
"UndoLabel": "App-pictogrammen op alle taakbalken tonen",
"ApplyUndoText": "App-pictogrammen op alle taakbalken tonen"
},
"MMTaskbarModeActive": {
"Label": "App-pictogrammen alleen tonen op de taakbalk van het geopende venster",
"ApplyText": "App-pictogrammen alleen tonen op de taakbalk van het geopende venster",
"UndoLabel": "App-pictogrammen op alle taakbalken tonen",
"ApplyUndoText": "App-pictogrammen op alle taakbalken tonen"
},
"ExplorerToHome": {
"Label": "Verkenner standaard openen in 'Start'",
"ApplyText": "Verkenner standaard laten openen in 'Start'"
},
"ExplorerToThisPC": {
"Label": "Verkenner standaard openen in 'Deze pc'",
"ApplyText": "Verkenner standaard laten openen in 'Deze pc'",
"UndoLabel": "Verkenner standaard openen in 'Start'",
"ApplyUndoText": "Verkenner standaard laten openen in 'Start'"
},
"ExplorerToDownloads": {
"Label": "Verkenner standaard openen in 'Downloads'",
"ApplyText": "Verkenner standaard laten openen in 'Downloads'",
"UndoLabel": "Verkenner standaard openen in 'Start'",
"ApplyUndoText": "Verkenner standaard laten openen in 'Start'"
},
"ExplorerToOneDrive": {
"Label": "Verkenner standaard openen in 'OneDrive'",
"ApplyText": "Verkenner standaard laten openen in 'OneDrive'",
"UndoLabel": "Verkenner standaard openen in 'Start'",
"ApplyUndoText": "Verkenner standaard laten openen in 'Start'"
},
"ShowKnownFileExt": {
"Label": "Bestandsextensies voor bekende bestandstypen tonen",
"ToolTip": "Toont bestandsextensies voor bekende bestandstypen. Windows verbergt deze standaard, wat tot verwarring en beveiligingsrisico's kan leiden.",
"ApplyText": "Bestandsextensies voor bekende bestandstypen tonen",
"UndoLabel": "Bestandsextensies voor bekende bestandstypen verbergen",
"ApplyUndoText": "Bestandsextensies voor bekende bestandstypen verbergen"
},
"ShowHiddenFolders": {
"Label": "Verborgen bestanden, mappen en stations tonen",
"ToolTip": "Windows verbergt standaard bepaalde bestanden, mappen en stations om onbedoelde wijzigingen of verwijdering te voorkomen. Schakel dit in om alle bestanden in Verkenner te tonen.",
"ApplyText": "Verborgen bestanden, mappen en stations tonen",
"UndoLabel": "Verborgen bestanden, mappen en stations verbergen",
"ApplyUndoText": "Verborgen bestanden, mappen en stations verbergen"
},
"HideDupliDrive": {
"Label": "Dubbele vermeldingen van verwisselbare stations verbergen",
"ToolTip": "Windows toont verwisselbare stations standaard zowel onder 'Deze pc' als afzonderlijk in het navigatievenster. Schakel dit in om verwisselbare stations alleen onder 'Deze pc' te tonen.",
"ApplyText": "Dubbele vermeldingen van verwisselbare stations in het navigatievenster van Verkenner verbergen",
"UndoLabel": "Dubbele vermeldingen van verwisselbare stations tonen",
"ApplyUndoText": "Dubbele vermeldingen van verwisselbare stations in het navigatievenster van Verkenner tonen"
},
"HideHome": {
"Label": "'Start' in het navigatievenster verbergen",
"ToolTip": "Verbergt de sectie 'Start' in het navigatievenster van Verkenner. Waarschuwing: dit kan ervoor zorgen dat snelkoppelingen in Snelle toegang niet worden bijgewerkt totdat je je pc of Verkenner opnieuw opstart.",
"ApplyText": "De sectie 'Start' in het navigatievenster van Verkenner verbergen",
"UndoLabel": "'Start' in het navigatievenster tonen",
"ApplyUndoText": "De sectie 'Start' in het navigatievenster van Verkenner tonen"
},
"HideGallery": {
"Label": "'Galerie' in het navigatievenster verbergen",
"ToolTip": "Verbergt de sectie 'Galerie' in het navigatievenster van Verkenner.",
"ApplyText": "De sectie 'Galerie' in het navigatievenster van Verkenner verbergen",
"UndoLabel": "'Galerie' in het navigatievenster tonen",
"ApplyUndoText": "De sectie 'Galerie' in het navigatievenster van Verkenner tonen"
},
"DisableTransparency": {
"Label": "Transparantie-effecten uitschakelen",
"ToolTip": "Schakelt transparantie-effecten in de Windows-interface uit. Dit kan de prestaties op oudere hardware verbeteren.",
"ApplyText": "Transparantie-effecten uitschakelen",
"UndoLabel": "Transparantie-effecten inschakelen",
"ApplyUndoText": "Transparantie-effecten inschakelen"
},
"DisableAnimations": {
"Label": "Animaties en visuele effecten uitschakelen",
"ToolTip": "Schakelt animaties en bepaalde visuele effecten in Windows uit, waardoor de interface sneller kan aanvoelen, vooral op oudere hardware.",
"ApplyText": "Animaties en visuele effecten uitschakelen",
"UndoLabel": "Animaties en visuele effecten inschakelen",
"ApplyUndoText": "Animaties en visuele effecten inschakelen"
},
"DisableUpdateASAP": {
"Label": "'De nieuwste updates ontvangen zodra ze beschikbaar zijn' uitschakelen",
"ToolTip": "Je ontvangt niet-beveiligingsupdates later, in plaats van zodra ze beschikbaar zijn. Beveiligingsupdates blijf je gewoon ontvangen.",
"ApplyText": "'De nieuwste updates ontvangen zodra ze beschikbaar zijn' uitschakelen",
"UndoLabel": "'De nieuwste updates ontvangen zodra ze beschikbaar zijn' inschakelen",
"ApplyUndoText": "'De nieuwste updates ontvangen zodra ze beschikbaar zijn' inschakelen"
},
"PreventUpdateAutoReboot": {
"Label": "Automatische herstarts na updates voorkomen zolang een gebruiker is aangemeld",
"ToolTip": "Voorkomt dat je pc na updates automatisch opnieuw start zolang er een gebruiker is aangemeld.",
"ApplyText": "Automatische herstarts na updates voorkomen zolang een gebruiker is aangemeld",
"UndoLabel": "Automatische herstarts na updates toestaan zolang een gebruiker is aangemeld",
"ApplyUndoText": "Automatische herstarts na updates toestaan zolang een gebruiker is aangemeld"
},
"DisableDeliveryOptimization": {
"Label": "Update downloads van andere pc's blokkeren",
"ToolTip": "Voorkomt dat je pc updates uitwisselt met andere pc's op het lokale netwerk of internet.",
"ApplyText": "Update downloads van andere pc's blokkeren",
"UndoLabel": "Update downloads van andere pc's toestaan",
"ApplyUndoText": "Update downloads van andere pc's toestaan"
},
"DisableDeviceAutoAppDownload": {
"Label": "Automatische app-installatie voor aangesloten apparaten voorkomen",
"ToolTip": "Voorkomt dat Windows Update automatisch extra apps installeert voor aangesloten apparaten, zoals beeldschermen van LG en Alienware. De apparaten blijven gewoon werken.",
"ApplyText": "Automatische installatie van apps voor aangesloten apparaten voorkomen",
"UndoLabel": "Automatische installatie van apps voor aangesloten apparaten toestaan",
"ApplyUndoText": "Automatische installatie van apps voor aangesloten apparaten toestaan"
},
"ForceRemoveEdge": {
"Label": "Microsoft Edge geforceerd verwijderen. NIET AANBEVOLEN!",
"ApplyText": "Microsoft Edge geforceerd verwijderen"
},
"HideOnedrive": {
"Label": "OneDrive in het navigatievenster verbergen",
"ToolTip": "Verbergt de sectie 'OneDrive' in het navigatievenster van Verkenner.",
"ApplyText": "OneDrive in het navigatievenster verbergen",
"UndoLabel": "OneDrive in het navigatievenster tonen",
"ApplyUndoText": "OneDrive in het navigatievenster tonen"
},
"Hide3dObjects": {
"Label": "De map '3D-objecten' onder 'Deze pc' verbergen",
"ToolTip": "Verbergt de map '3D-objecten' in het navigatievenster van Verkenner.",
"ApplyText": "De map '3D-objecten' in het navigatievenster van Verkenner verbergen",
"UndoLabel": "De map '3D-objecten' onder 'Deze pc' tonen",
"ApplyUndoText": "De map '3D-objecten' in het navigatievenster van Verkenner tonen"
},
"HideMusic": {
"Label": "De map 'Muziek' onder 'Deze pc' verbergen",
"ToolTip": "Verbergt de map 'Muziek' in het navigatievenster van Verkenner.",
"ApplyText": "De map 'Muziek' in het navigatievenster van Verkenner verbergen",
"UndoLabel": "De map 'Muziek' onder 'Deze pc' tonen",
"ApplyUndoText": "De map 'Muziek' in het navigatievenster van Verkenner tonen"
},
"AddFoldersToThisPC": {
"Label": "Veelgebruikte mappen weer tonen onder 'Deze pc'",
"ToolTip": "Voegt veelgebruikte mappen zoals Bureaublad, Documenten, Downloads, Muziek, Afbeeldingen en Video's weer toe aan de pagina 'Deze pc' in Verkenner.",
"ApplyText": "Veelgebruikte mappen weer toevoegen aan 'Deze pc' in Verkenner",
"UndoLabel": "Veelgebruikte mappen verbergen onder 'Deze pc'",
"ApplyUndoText": "Veelgebruikte mappen uit 'Deze pc' in Verkenner verwijderen"
},
"HideIncludeInLibrary": {
"Label": "De optie 'In bibliotheek opnemen' in het contextmenu verbergen",
"ToolTip": "Verbergt de optie 'In bibliotheek opnemen' in het contextmenu van Verkenner.",
"ApplyText": "'In bibliotheek opnemen' in het contextmenu verbergen",
"UndoLabel": "De optie 'In bibliotheek opnemen' in het contextmenu tonen",
"ApplyUndoText": "'In bibliotheek opnemen' in het contextmenu tonen"
},
"HideGiveAccessTo": {
"Label": "De optie 'Toegang verlenen tot' in het contextmenu verbergen",
"ToolTip": "Verbergt de optie 'Toegang verlenen tot' in het contextmenu van Verkenner.",
"ApplyText": "'Toegang verlenen tot' in het contextmenu verbergen",
"UndoLabel": "De optie 'Toegang verlenen tot' in het contextmenu tonen",
"ApplyUndoText": "'Toegang verlenen tot' in het contextmenu tonen"
},
"HideShare": {
"Label": "De optie 'Delen' in het contextmenu verbergen",
"ToolTip": "Verbergt de optie 'Delen' in het contextmenu van Verkenner.",
"ApplyText": "'Delen' in het contextmenu verbergen",
"UndoLabel": "De optie 'Delen' in het contextmenu tonen",
"ApplyUndoText": "'Delen' in het contextmenu tonen"
},
"DisableBraveBloat": {
"Label": "Extra functies in Brave uitschakelen (AI, crypto enz.)",
"ToolTip": "Schakelt de ingebouwde AI-functies, cryptowallet, News, Rewards, Talk en VPN van Brave uit. Dit gebeurt via beleidsinstellingen, waardoor je bepaalde instellingen niet meer zelf kunt wijzigen.",
"ApplyText": "AI, cryptowallet, News, Rewards, Talk en VPN in Brave uitschakelen",
"UndoLabel": "Extra functies in Brave inschakelen (AI, crypto enz.)",
"ApplyUndoText": "AI, cryptowallet, News, Rewards, Talk en VPN in Brave inschakelen"
},
"EnableWindowsSandbox": {
"Label": "Windows Sandbox inschakelen",
"ToolTip": "Met Windows Sandbox kun je apps in een afgeschermde bureaubladomgeving uitvoeren, los van je eigen Windows-installatie. Alleen beschikbaar in de Pro-, Workstation- en Enterprise-edities van Windows 11.",
"ApplyText": "Windows Sandbox inschakelen",
"UndoLabel": "Windows Sandbox uitschakelen",
"ApplyUndoText": "Windows Sandbox uitschakelen"
},
"EnableWindowsSubsystemForLinux": {
"Label": "Windows-subsysteem voor Linux inschakelen",
"ToolTip": "Met het Windows-subsysteem voor Linux kun je een Linux-omgeving rechtstreeks in Windows gebruiken, zonder een virtuele machine.",
"ApplyText": "Windows-subsysteem voor Linux inschakelen",
"UndoLabel": "Windows-subsysteem voor Linux uitschakelen",
"ApplyUndoText": "Windows-subsysteem voor Linux uitschakelen"
},
"ShowDriveLettersFirst": {
"Label": "Stationsletters vóór de stationsnaam tonen",
"ToolTip": "Toont stationsletters vóór de stationsnaam in Verkenner.",
"ApplyText": "Stationsletters vóór de stationsnaam tonen",
"UndoLabel": "Stationsletters na de stationsnaam tonen",
"ApplyUndoText": "Stationsletters na de stationsnaam tonen"
},
"ShowDriveLettersLast": {
"Label": "Stationsletters na de stationsnaam tonen",
"ToolTip": "Toont stationsletters na de stationsnaam in Verkenner (het standaardgedrag van Windows).",
"ApplyText": "Stationsletters na de stationsnaam tonen"
},
"ShowNetworkDriveLettersFirst": {
"Label": "Stationsletters van netwerkstations vóór de stationsnaam tonen",
"ToolTip": "Toont alleen de stationsletters van netwerkstations vóór de stationsnaam in Verkenner.",
"ApplyText": "Stationsletters van netwerkstations vóór de stationsnaam tonen",
"UndoLabel": "Stationsletters na de stationsnaam tonen",
"ApplyUndoText": "Stationsletters na de stationsnaam tonen"
},
"HideDriveLetters": {
"Label": "Alle stationsletters verbergen",
"ToolTip": "Verbergt alle stationsletters in het navigatievenster van Verkenner en onder 'Deze pc'.",
"ApplyText": "Alle stationsletters verbergen",
"UndoLabel": "Stationsletters na de stationsnaam tonen",
"ApplyUndoText": "Stationsletters na de stationsnaam tonen"
},
"StartAllAppsCategory": {
"Label": "Alle apps per categorie tonen (standaard)",
"ToolTip": "Groepeert de apps in de sectie 'Alle apps' van het Startmenu per categorie.",
"ApplyText": "'Alle apps' in het Startmenu per categorie tonen"
},
"StartAllAppsGrid": {
"Label": "Alle apps in een raster tonen",
"ToolTip": "Toont de apps in de sectie 'Alle apps' van het Startmenu in een raster, op alfabetische volgorde.",
"ApplyText": "'Alle apps' in het Startmenu als raster tonen",
"UndoLabel": "Alle apps per categorie tonen",
"ApplyUndoText": "'Alle apps' in het Startmenu per categorie tonen"
},
"StartAllAppsList": {
"Label": "Alle apps in een lijst tonen",
"ToolTip": "Toont de apps in de sectie 'Alle apps' van het Startmenu in een lijst, op alfabetische volgorde.",
"ApplyText": "'Alle apps' in het Startmenu als lijst tonen",
"UndoLabel": "Alle apps per categorie tonen",
"ApplyUndoText": "'Alle apps' in het Startmenu per categorie tonen"
}
},
"UiGroups": {
"DesktopSpotlight": {
"Label": "Windows-spotlight op het bureaublad",
"ToolTip": "Kies een wisselende bureaubladachtergrond met of zonder de snelkoppeling 'Meer informatie over deze afbeelding', of schakel Windows-spotlight uit.",
"Values": {
"EnableDesktopSpotlight": "Achtergrond met snelkoppeling (standaard)",
"HideDesktopSpotlightIcon": "Achtergrond zonder snelkoppeling",
"DisableDesktopSpotlight": "Windows-spotlight als bureaubladachtergrond uitschakelen"
}
},
"SearchIcon": {
"Label": "Zoeken op de taakbalk",
"ToolTip": "Kies hoe de zoekfunctie op de taakbalk wordt weergegeven.",
"Values": {
"ShowSearchBoxTb": "Zoekvak (standaard)",
"ShowSearchLabelTb": "Zoekpictogram en -label",
"ShowSearchIconTb": "Alleen zoekpictogram",
"HideSearchTb": "Verbergen"
}
},
"MultiMon": {
"Label": "Appknoppen op de taakbalk weergeven op",
"ToolTip": "Kies op welke taakbalken appknoppen verschijnen als je meerdere beeldschermen gebruikt.",
"Values": {
"MMTaskbarModeAll": "Alle taakbalken (standaard)",
"MMTaskbarModeMainActive": "De hoofdtaakbalk en de taakbalk van het geopende venster",
"MMTaskbarModeActive": "De taakbalk van het geopende venster"
}
},
"CombineButtons": {
"Label": "Taakbalkknoppen op het hoofdscherm combineren",
"ToolTip": "Kies hoe taakbalkknoppen op het hoofdscherm worden gecombineerd.",
"Values": {
"CombineTaskbarAlways": "Altijd (standaard)",
"CombineTaskbarWhenFull": "Wanneer de taakbalk vol is",
"CombineTaskbarNever": "Nooit"
}
},
"CombineMMButtons": {
"Label": "Taakbalkknoppen op andere beeldschermen combineren",
"ToolTip": "Kies hoe taakbalkknoppen op andere beeldschermen worden gecombineerd.",
"Values": {
"CombineMMTaskbarAlways": "Altijd (standaard)",
"CombineMMTaskbarWhenFull": "Wanneer de taakbalk vol is",
"CombineMMTaskbarNever": "Nooit"
}
},
"ClearStart": {
"Label": "Vastgemaakte apps in het Startmenu",
"ToolTip": "Verwijdert alle vastgemaakte apps uit het Startmenu voor de gekozen gebruikers.",
"Values": {
"ClearStart": "Verwijderen voor de geselecteerde gebruiker",
"ClearStartAllUsers": "Verwijderen voor alle gebruikers"
}
},
"ExplorerLocation": {
"Label": "Startlocatie van Verkenner",
"ToolTip": "Kies welke locatie Verkenner standaard opent.",
"Values": {
"ExplorerToHome": "Start (standaard)",
"ExplorerToThisPC": "Deze pc",
"ExplorerToDownloads": "Downloads",
"ExplorerToOneDrive": "OneDrive"
}
},
"DriveLetterPosition": {
"Label": "Positie van stationsletters",
"ToolTip": "Kies waar stationsletters in Verkenner worden getoond.",
"Values": {
"ShowDriveLettersLast": "Na de stationsnaam (standaard)",
"ShowDriveLettersFirst": "Vóór de stationsnaam",
"ShowNetworkDriveLettersFirst": "Vóór de stationsnaam bij netwerkstations",
"HideDriveLetters": "Verbergen"
}
},
"ShowTabsInAltTab": {
"Label": "Tabbladen tonen bij uitlijnen en Alt+Tab",
"ToolTip": "Kies of je tabbladen van apps, zoals Edge, wilt zien wanneer je vensters uitlijnt of Alt+Tab indrukt.",
"Values": {
"HideTabsInAltTab": "Geen tabbladen tonen",
"Show3TabsInAltTab": "3 meest recente tabbladen (standaard)",
"Show5TabsInAltTab": "5 meest recente tabbladen",
"Show20TabsInAltTab": "20 meest recente tabbladen"
}
},
"StartAllAppsView": {
"Label": "Weergave van 'Alle apps' in het Startmenu",
"ToolTip": "Kies hoe de sectie 'Alle apps' in het Startmenu wordt weergegeven, of verberg deze helemaal. Als je de sectie verbergt, kan het lastiger zijn om geïnstalleerde apps te vinden. Dit gebeurt via beleidsinstellingen, waardoor je bepaalde instellingen niet meer zelf kunt wijzigen.",
"Values": {
"DisableStartAllApps": "Verbergen",
"StartAllAppsCategory": "Categorie (standaard)",
"StartAllAppsGrid": "Raster",
"StartAllAppsList": "Lijst"
}
}
}
}
+566
View File
@@ -0,0 +1,566 @@
{
"Clipchamp.Clipchamp": {
"FriendlyName": "Clipchamp",
"Description": "Editor de vídeo da Microsoft"
},
"Microsoft.3DBuilder": {
"FriendlyName": "3D Builder",
"Description": "Software básico de modelagem 3D"
},
"Microsoft.549981C3F5F10": {
"FriendlyName": "Cortana",
"Description": "Assistente de voz Cortana da Microsoft (descontinuado)"
},
"Microsoft.BingFinance": {
"FriendlyName": "Bing Finance",
"Description": "Notícias e acompanhamento financeiro pelo Bing (descontinuado)"
},
"Microsoft.BingFoodAndDrink": {
"FriendlyName": "Bing Food and Drink",
"Description": "Receitas e notícias gastronômicas pelo Bing (descontinuado)"
},
"Microsoft.BingHealthAndFitness": {
"FriendlyName": "Bing Health and Fitness",
"Description": "Acompanhamento de saúde e condicionamento físico, além de notícias, pelo Bing (descontinuado)"
},
"Microsoft.BingNews": {
"FriendlyName": "Bing News",
"Description": "Agregador de notícias pelo Bing (substituído por Microsoft News/Start)"
},
"Microsoft.BingSports": {
"FriendlyName": "Bing Sports",
"Description": "Notícias esportivas e placares pelo Bing (descontinuado)"
},
"Microsoft.BingTranslator": {
"FriendlyName": "Bing Translator",
"Description": "Serviço de tradução pelo Bing"
},
"Microsoft.BingTravel": {
"FriendlyName": "Bing Travel",
"Description": "Planejamento de viagens e notícias pelo Bing (descontinuado)"
},
"Microsoft.BingWeather": {
"FriendlyName": "Bing Weather",
"Description": "Previsão do tempo pelo Bing"
},
"XP9CXNGPPJ97XX": {
"FriendlyName": "Microsoft Copilot",
"Description": "Assistente de IA integrado ao Windows"
},
"Microsoft.Windows.AIHub": {
"FriendlyName": "Copilot+ AI Hub",
"Description": "App do Hub de IA do Copilot+ (Windows 11 24H2+)"
},
"Microsoft.PCManager": {
"FriendlyName": "Microsoft PC Manager",
"Description": "Ferramenta da Microsoft para limpar o sistema e otimizar o desempenho do PC (frequentemente pré-instalada)"
},
"Microsoft.Getstarted": {
"FriendlyName": "Introdução",
"Description": "Dicas e guia introdutório do Windows (não pode ser desinstalado no Windows 11)"
},
"Microsoft.Messaging": {
"FriendlyName": "Mensagens",
"Description": "App de mensagens, geralmente integrado ao Skype (em grande parte descontinuado)"
},
"Microsoft.Microsoft3DViewer": {
"FriendlyName": "Visualizador 3D",
"Description": "Visualizador de modelos 3D (descontinuado)"
},
"Microsoft.MicrosoftJournal": {
"FriendlyName": "Microsoft Journal",
"Description": "App de anotações digitais otimizado para uso com caneta"
},
"Microsoft.MicrosoftOfficeHub": {
"FriendlyName": "Office Hub",
"Description": "Central para acessar apps e documentos do Microsoft Office (precursor do app Microsoft 365)"
},
"Microsoft.MicrosoftPowerBIForWindows": {
"FriendlyName": "Power BI",
"Description": "Cliente do serviço de análise de negócios"
},
"Microsoft.MicrosoftSolitaireCollection": {
"FriendlyName": "Microsoft Solitaire Collection",
"Description": "Coleção de jogos de cartas de paciência"
},
"Microsoft.MicrosoftStickyNotes": {
"FriendlyName": "Notas Autoadesivas",
"Description": "App de notas rápidas"
},
"Microsoft.MixedReality.Portal": {
"FriendlyName": "Portal de Realidade Mista",
"Description": "Portal para visores de Realidade Mista do Windows"
},
"Microsoft.NetworkSpeedTest": {
"FriendlyName": "Network Speed Test",
"Description": "Utilitário para testar a velocidade da conexão com a internet"
},
"Microsoft.News": {
"FriendlyName": "Microsoft News",
"Description": "Agregador de notícias (substituiu o Bing News, agora integrado ao Microsoft Start)"
},
"Microsoft.Office.OneNote": {
"FriendlyName": "OneNote",
"Description": "App de anotações digitais (versão da Plataforma Universal do Windows)"
},
"Microsoft.Office.Sway": {
"FriendlyName": "Sway",
"Description": "App de apresentações e narrativas"
},
"Microsoft.OneConnect": {
"FriendlyName": "One Connect",
"Description": "App de gerenciamento de operadoras móveis (substituído por Planos)"
},
"Microsoft.Print3D": {
"FriendlyName": "Print 3D",
"Description": "Software de preparação para impressão 3D"
},
"Microsoft.PowerAutomateDesktop": {
"FriendlyName": "Power Automate",
"Description": "Ferramenta de automação para desktop (RPA)"
},
"Microsoft.SkypeApp": {
"FriendlyName": "Skype (UWP)",
"Description": "App de comunicação do Skype, versão da Plataforma Universal do Windows (descontinuado)"
},
"Microsoft.Todos": {
"FriendlyName": "Microsoft To Do",
"Description": "App de listas de tarefas e gerenciamento de tarefas"
},
"Microsoft.Windows.DevHome": {
"FriendlyName": "Dev Home",
"Description": "Painel do desenvolvedor e utilitário de configuração de ferramentas (descontinuado)"
},
"Microsoft.WindowsAlarms": {
"FriendlyName": "Relógio",
"Description": "App de alarmes, temporizadores, cronômetro e sessões de foco"
},
"Microsoft.WindowsFeedbackHub": {
"FriendlyName": "Hub de Feedback",
"Description": "App para enviar comentários sobre o Windows à Microsoft"
},
"Microsoft.WindowsMaps": {
"FriendlyName": "Mapas",
"Description": "App de mapas e navegação (descontinuado)"
},
"Microsoft.WindowsSoundRecorder": {
"FriendlyName": "Gravador de Som",
"Description": "App básico de gravação de áudio"
},
"Microsoft.XboxApp": {
"FriendlyName": "Companheiro do Console Xbox",
"Description": "Antigo app Companheiro do Console Xbox (descontinuado)"
},
"Microsoft.ZuneVideo": {
"FriendlyName": "Filmes e TV",
"Description": "App de reprodução de vídeos (descontinuado)"
},
"MicrosoftCorporationII.MicrosoftFamily": {
"FriendlyName": "Microsoft Family Safety",
"Description": "App para gerenciar o tempo de tela, os filtros de conteúdo e os relatórios de atividade da família"
},
"MicrosoftCorporationII.QuickAssist": {
"FriendlyName": "Assistência Rápida",
"Description": "Ferramenta de assistência remota"
},
"MicrosoftTeams": {
"FriendlyName": "Microsoft Teams (antigo)",
"Description": "Antigo Microsoft Teams pessoal (versão da Microsoft Store)"
},
"MSTeams": {
"FriendlyName": "Microsoft Teams (novo)",
"Description": "Novo app Microsoft Teams (Trabalho/Escola ou Pessoal)"
},
"ACGMediaPlayer": {
"FriendlyName": "ACG Media Player",
"Description": "App de reprodução de mídia"
},
"ActiproSoftwareLLC": {
"FriendlyName": "Actipro Software",
"Description": "Potencialmente controles de interface ou componentes de software, frequentemente instalados por fabricantes de OEM"
},
"AdobeSystemsIncorporated.AdobePhotoshopExpress": {
"FriendlyName": "Adobe Photoshop Express",
"Description": "App básico de edição de fotos da Adobe"
},
"Amazon.com.Amazon": {
"FriendlyName": "Amazon",
"Description": "App de compras da Amazon"
},
"AmazonVideo.PrimeVideo": {
"FriendlyName": "Prime Video",
"Description": "App do serviço de streaming Amazon Prime Video"
},
"Asphalt8Airborne": {
"FriendlyName": "Asphalt 8: Airborne",
"Description": "Jogo de corrida"
},
"AutodeskSketchBook": {
"FriendlyName": "Autodesk SketchBook",
"Description": "App de desenho e esboço digital"
},
"CaesarsSlotsFreeCasino": {
"FriendlyName": "Caesars Slots",
"Description": "Jogo de cassino de caça-níqueis"
},
"COOKINGFEVER": {
"FriendlyName": "Cooking Fever",
"Description": "Jogo de simulação de restaurante"
},
"CyberLinkMediaSuiteEssentials": {
"FriendlyName": "CyberLink Media Suite",
"Description": "Pacote de software multimídia (frequentemente pré-instalado por fabricantes de OEM)"
},
"DisneyMagicKingdoms": {
"FriendlyName": "Disney Magic Kingdoms",
"Description": "Jogo de construção de parques temáticos da Disney"
},
"Disney.37853FC22B2CE": {
"FriendlyName": "Disney+",
"Description": "App do serviço de streaming Disney+"
},
"DrawboardPDF": {
"FriendlyName": "Drawboard PDF",
"Description": "App de visualização e anotação de PDF, com foco em uso com caneta"
},
"Duolingo-LearnLanguagesforFree": {
"FriendlyName": "Duolingo",
"Description": "App de aprendizado de idiomas"
},
"EclipseManager": {
"FriendlyName": "Eclipse Manager",
"Description": "Geralmente relacionado a softwares ou utilitários específicos de OEM (por exemplo, para gerenciar configurações de tela)"
},
"FACEBOOK.FACEBOOK": {
"FriendlyName": "Facebook",
"Description": "App de rede social Facebook"
},
"FarmVille2CountryEscape": {
"FriendlyName": "FarmVille 2: Country Escape",
"Description": "Jogo de simulação de fazenda"
},
"Flipboard": {
"FriendlyName": "Flipboard",
"Description": "Agregador de notícias e redes sociais em formato de revista"
},
"HiddenCity": {
"FriendlyName": "Hidden City",
"Description": "Jogo de aventura e quebra-cabeças de objetos escondidos"
},
"HULULLC.HULUPLUS": {
"FriendlyName": "Hulu",
"Description": "App do serviço de streaming Hulu"
},
"iHeartRadio": {
"FriendlyName": "iHeartRadio",
"Description": "App de streaming de rádio pela internet"
},
"Facebook.Instagram": {
"FriendlyName": "Instagram",
"Description": "App de rede social Instagram"
},
"king.com.BubbleWitch3Saga": {
"FriendlyName": "Bubble Witch 3 Saga",
"Description": "Jogo de puzzles da King"
},
"king.com.CandyCrushSaga": {
"FriendlyName": "Candy Crush Saga",
"Description": "Jogo de puzzles da King"
},
"king.com.CandyCrushSodaSaga": {
"FriendlyName": "Candy Crush Soda Saga",
"Description": "Jogo de puzzles da King"
},
"LinkedInforWindows": {
"FriendlyName": "LinkedIn",
"Description": "App de rede profissional LinkedIn"
},
"MarchofEmpires": {
"FriendlyName": "March of Empires",
"Description": "Jogo de estratégia"
},
"4DF9E0F8.Netflix": {
"FriendlyName": "Netflix",
"Description": "App do serviço de streaming Netflix"
},
"NYTCrossword": {
"FriendlyName": "NYT Crossword",
"Description": "App do jogo de palavras cruzadas do New York Times"
},
"OneCalendar": {
"FriendlyName": "One Calendar",
"Description": "App agregador de calendários"
},
"PandoraMediaInc": {
"FriendlyName": "Pandora",
"Description": "App de streaming de música do Pandora"
},
"PhototasticCollage": {
"FriendlyName": "Phototastic Collage",
"Description": "App de criação de colagens de fotos"
},
"PicsArt-PhotoStudio": {
"FriendlyName": "PicsArt",
"Description": "App de edição de fotos e criatividade"
},
"PolarrPhotoEditorAcademicEdition": {
"FriendlyName": "Polarr Photo Editor",
"Description": "App de edição de fotos (Edição Acadêmica)"
},
"flaregamesGmbH.RoyalRevolt": {
"FriendlyName": "Royal Revolt",
"Description": "Jogo de defesa de torres / estratégia"
},
"Sidia.LiveWallpaper": {
"FriendlyName": "Live Wallpaper",
"Description": "App de papel de parede animado"
},
"SlingTV": {
"FriendlyName": "Sling TV",
"Description": "App do serviço de streaming de TV ao vivo"
},
"SpotifyAB.SpotifyMusic": {
"FriendlyName": "Spotify",
"Description": "App de streaming de música do Spotify"
},
"BytedancePte.Ltd.TikTok": {
"FriendlyName": "TikTok",
"Description": "App de vídeos curtos do TikTok"
},
"TuneInRadio": {
"FriendlyName": "TuneIn Radio",
"Description": "App de streaming de rádio pela internet"
},
"WinZipUniversal": {
"FriendlyName": "WinZip",
"Description": "Utilitário de compactação e extração de arquivos (versão da Plataforma Universal do Windows)"
},
"Microsoft.BingSearch": {
"FriendlyName": "Pesquisa do Bing",
"Description": "Pesquisa web do Microsoft Bing (integrada à Pesquisa do Windows)"
},
"Microsoft.Edge": {
"FriendlyName": "Microsoft Edge",
"Description": "Navegador padrão do Windows, AVISO: remover este app também remove o único navegador do Windows Sandbox e pode afetar outros apps"
},
"Microsoft.GamingApp": {
"FriendlyName": "Xbox app",
"Description": "Aplicativo Xbox para Windows, necessário para instalar alguns jogos de PC"
},
"Microsoft.GetHelp": {
"FriendlyName": "Obter Ajuda",
"Description": "Necessário para algumas ferramentas de solução de problemas do Windows 11 e interações com o suporte"
},
"Microsoft.M365Companions": {
"FriendlyName": "Microsoft 365 Companions",
"Description": "Miniaplicativos Calendário, Arquivos e Pessoas do Microsoft 365 (Business); esses aplicativos podem ser reinstalados se estiverem habilitados pelo administrador do Microsoft 365"
},
"Microsoft.MSPaint": {
"FriendlyName": "Paint 3D",
"Description": "App de desenho 3D (descontinuado)"
},
"Microsoft.OneDrive": {
"FriendlyName": "OneDrive",
"Description": "Cliente de armazenamento em nuvem do OneDrive para contas pessoais"
},
"Microsoft.OutlookForWindows": {
"FriendlyName": "Outlook para Windows",
"Description": "Novo cliente de e-mail do Outlook para Windows"
},
"Microsoft.Paint": {
"FriendlyName": "Paint",
"Description": "Paint clássico (aplicativo de desenho tradicional em 2D)"
},
"Microsoft.People": {
"FriendlyName": "Pessoas",
"Description": "Necessário para e incluído no Email e Calendário (descontinuado)"
},
"Microsoft.RemoteDesktop": {
"FriendlyName": "Área de Trabalho Remota",
"Description": "App cliente da Área de Trabalho Remota"
},
"Microsoft.ScreenSketch": {
"FriendlyName": "Ferramenta de Captura",
"Description": "Permite capturar imagens da tela, fazer anotações, salvar e compartilhar"
},
"Microsoft.StartExperiencesApp": {
"FriendlyName": "Experiência de Widgets",
"Description": "Este app dá suporte ao Meu Feed de Widgets do Windows"
},
"Microsoft.Whiteboard": {
"FriendlyName": "Microsoft Whiteboard",
"Description": "App de quadro branco digital colaborativo"
},
"Microsoft.Windows.Photos": {
"FriendlyName": "Fotos",
"Description": "App padrão de visualização e edição básica de fotos"
},
"Microsoft.WindowsCalculator": {
"FriendlyName": "Calculadora",
"Description": "App de calculadora"
},
"Microsoft.WindowsCamera": {
"FriendlyName": "Câmera",
"Description": "App de câmera para usar câmeras integradas ou conectadas"
},
"Microsoft.windowscommunicationsapps": {
"FriendlyName": "Email e Calendário",
"Description": "Suíte de apps Email e Calendário (descontinuado)"
},
"Microsoft.WindowsNotepad": {
"FriendlyName": "Bloco de Notas",
"Description": "App de editor de texto Bloco de Notas"
},
"Microsoft.WindowsStore": {
"FriendlyName": "Microsoft Store",
"Description": "Microsoft Store, AVISO: este app não pode ser reinstalado facilmente após a remoção!"
},
"Microsoft.WindowsTerminal": {
"FriendlyName": "Windows Terminal",
"Description": "App de terminal padrão do Windows 11 (Prompt de Comando, PowerShell, WSL), AVISO: não remova se você iniciou o Win11Debloat pelo Windows Terminal, pois isso fará o script falhar."
},
"Microsoft.Xbox.TCUI": {
"FriendlyName": "Framework do Xbox TCUI",
"Description": "Framework de interface, aparentemente necessário para o Microsoft Store, as Fotos e alguns jogos"
},
"Microsoft.XboxGameOverlay": {
"FriendlyName": "Xbox Game Overlay",
"Description": "Sobreposição de jogos, necessária ou útil para alguns jogos (parte da Xbox Game Bar). Aviso: desinstalá-la pode reduzir o desempenho em jogos em PCs com determinados processadores modernos."
},
"Microsoft.XboxGamingOverlay": {
"FriendlyName": "Xbox Gaming Overlay",
"Description": "Sobreposição de jogos, necessária ou útil para alguns jogos (parte da Xbox Game Bar). Aviso: desinstalá-la pode reduzir o desempenho em jogos em PCs com determinados processadores modernos."
},
"Microsoft.XboxIdentityProvider": {
"FriendlyName": "Provedor de Identidade do Xbox",
"Description": "Framework de autenticação do Xbox, necessário para alguns jogos e serviços do Xbox"
},
"Microsoft.XboxSpeechToTextOverlay": {
"FriendlyName": "Xbox Speech To Text",
"Description": "Recurso de acessibilidade necessário para alguns jogos, AVISO: este app não pode ser reinstalado facilmente!"
},
"Microsoft.YourPhone": {
"FriendlyName": "Vincular ao Celular",
"Description": "Vincular ao Celular (conecta um celular Android/iOS ao PC)"
},
"Microsoft.ZuneMusic": {
"FriendlyName": "Media Player",
"Description": "Media Player moderno (substituiu o Groove Music, reproduz áudio e vídeo locais)"
},
"MicrosoftWindows.CrossDevice": {
"FriendlyName": "Experiência entre Dispositivos",
"Description": "Integração do celular no Explorador de Arquivos, na Câmera e em outros locais (faz parte dos recursos do Phone Link)"
},
"MicrosoftWindows.Client.WebExperience": {
"FriendlyName": "Windows Web Experience Pack",
"Description": "Ajuda a entregar e atualizar determinados recursos, como os Widgets, por meio do Microsoft Store"
},
"Microsoft.WidgetsPlatformRuntime": {
"FriendlyName": "Runtime da Plataforma de Widgets",
"Description": "Runtime necessário para o funcionamento dos Widgets do Windows"
},
"LGElectronics.LGMonitorApp": {
"FriendlyName": "LG Monitor App",
"Description": "Software OEM da LG para controlar seu monitor LG; o Windows Update pode reinstalar este app silenciosamente se você tiver um monitor LG conectado"
},
"AD2F1837.HPAIExperienceCenter": {
"FriendlyName": "HP AI Experience Center",
"Description": "Software OEM da HP, com recursos com IA e suporte"
},
"AD2F1837.HPConnectedMusic": {
"FriendlyName": "HP Connected Music",
"Description": "Software OEM da HP para música (possivelmente descontinuado)"
},
"AD2F1837.HPConnectedPhotopoweredbySnapfish": {
"FriendlyName": "HP Connected Photo",
"Description": "Software OEM da HP para fotos, integrado ao Snapfish (possivelmente descontinuado)"
},
"AD2F1837.HPDesktopSupportUtilities": {
"FriendlyName": "HP Desktop Support Utilities",
"Description": "Software OEM da HP que fornece ferramentas de suporte ao PC"
},
"AD2F1837.HPEasyClean": {
"FriendlyName": "HP Easy Clean",
"Description": "Desativa temporariamente dispositivos de entrada para permitir a limpeza do computador"
},
"AD2F1837.HPFileViewer": {
"FriendlyName": "HP File Viewer",
"Description": "Software OEM da HP para visualizar tipos de arquivo específicos"
},
"AD2F1837.HPJumpStarts": {
"FriendlyName": "HP JumpStarts",
"Description": "Software OEM da HP para tutoriais, descoberta de apps ou acesso rápido aos recursos da HP"
},
"AD2F1837.HPPCHardwareDiagnosticsWindows": {
"FriendlyName": "HP PC Hardware Diagnostics",
"Description": "Software OEM da HP para diagnóstico de hardware do PC"
},
"AD2F1837.HPPowerManager": {
"FriendlyName": "HP Power Manager",
"Description": "Software OEM da HP para gerenciar configurações de energia e bateria"
},
"AD2F1837.HPPrinterControl": {
"FriendlyName": "HP Printer Control",
"Description": "Software OEM da HP para gerenciar impressoras HP"
},
"AD2F1837.HPPrivacySettings": {
"FriendlyName": "HP Privacy Settings",
"Description": "Software OEM da HP para gerenciar configurações de privacidade"
},
"AD2F1837.HPQuickDrop": {
"FriendlyName": "HP QuickDrop",
"Description": "App de transferência de arquivos (descontinuado)"
},
"AD2F1837.HPQuickTouch": {
"FriendlyName": "HP QuickTouch",
"Description": "Software OEM da HP, possivelmente para atalhos ou controles específicos de toque"
},
"AD2F1837.HPRegistration": {
"FriendlyName": "HP Registration",
"Description": "Software OEM da HP para registro de produto"
},
"AD2F1837.HPSupportAssistant": {
"FriendlyName": "HP Support Assistant",
"Description": "Software OEM da HP para suporte, atualizações e solução de problemas"
},
"AD2F1837.HPSureShieldAI": {
"FriendlyName": "HP Sure Shield AI",
"Description": "Software de segurança OEM da HP, provavelmente proteção contra ameaças baseada em IA"
},
"AD2F1837.HPSystemInformation": {
"FriendlyName": "HP System Information",
"Description": "Software OEM da HP para exibir informações do sistema"
},
"AD2F1837.HPWelcome": {
"FriendlyName": "HP Welcome",
"Description": "Software OEM da HP que oferece uma experiência de boas-vindas ou ajuda na configuração inicial"
},
"AD2F1837.HPWorkWell": {
"FriendlyName": "HP WorkWell",
"Description": "Software OEM da HP focado em bem-estar, possivelmente com lembretes de pausa ou dicas de ergonomia"
},
"AD2F1837.myHP": {
"FriendlyName": "myHP",
"Description": "App central da HP para informações do dispositivo, suporte e serviços"
},
"E046963F.LenovoCompanion": {
"FriendlyName": "Lenovo Vantage",
"Description": "App central da Lenovo para configurações do dispositivo, atualizações e suporte"
},
"LenovoCompanyLimited.LenovoVantageService": {
"FriendlyName": "Lenovo Vantage Service",
"Description": "Componente de serviço em segundo plano do Lenovo Vantage"
},
"DellInc.DellSupportAssistforPCs": {
"FriendlyName": "Dell SupportAssist",
"Description": "Ferramenta de suporte, diagnóstico e atualizações da OEM Dell"
},
"DellInc.DellDigitalDelivery": {
"FriendlyName": "Dell Digital Delivery Services",
"Description": "Software OEM da Dell para entrega de software previamente adquirido"
},
"DellInc.DellMobileConnect": {
"FriendlyName": "Dell Mobile Connect",
"Description": "App OEM da Dell para vincular um celular Android/iOS ao PC (substituído pelo Phone Link)"
}
}
+38
View File
@@ -0,0 +1,38 @@
{
"PrivacySuggestedContent": {
"Label": "Privacidade e Conteúdo Sugerido"
},
"System": {
"Label": "Sistema"
},
"StartMenuSearch": {
"Label": "Menu Iniciar e Pesquisa"
},
"AI": {
"Label": "IA"
},
"WindowsUpdate": {
"Label": "Atualização do Windows"
},
"Taskbar": {
"Label": "Barra de tarefas"
},
"Appearance": {
"Label": "Aparência"
},
"FileExplorer": {
"Label": "Explorador de Arquivos"
},
"Gaming": {
"Label": "Jogos"
},
"MultiTasking": {
"Label": "Multi-tarefa"
},
"OptionalWindowsFeatures": {
"Label": "Funcionalidades Opcionais do Windows"
},
"Other": {
"Label": "Outros"
}
}
+365
View File
@@ -0,0 +1,365 @@
{
"TitleBarAppName": "Win11Debloat",
"MessageBoxOk": "OK",
"MessageBoxCancel": "Cancelar",
"MessageBoxYes": "Sim",
"MessageBoxNo": "Não",
"TitleBarSupportCreator": "Apoiar o criador",
"TitleBarOptions": "Opções",
"TitleBarClose": "Fechar",
"SettingsTitle": "Configurações",
"SettingsSave": "Salvar",
"SettingsTheme": "Tema",
"SettingsThemeAuto": "Auto",
"SettingsThemeLight": "Claro",
"SettingsThemeDark": "Escuro",
"SettingsLanguage": "Idioma",
"SettingsLanguageAuto": "Padrão do sistema",
"SettingsSaveError": "Não foi possível salvar as configurações. Tente novamente.",
"MenuImportConfig": "Importar configuração",
"MenuImportConfigTooltip": "Importar configuração",
"MenuExportConfig": "Exportar configuração",
"MenuExportConfigTooltip": "Exportar configuração",
"MenuRestoreBackup": "Restaurar backup",
"MenuRestoreBackupTooltip": "Restaurar backup do registro",
"MenuDocumentation": "Documentação",
"MenuReportBug": "Reportar um bug",
"MenuLogs": "Logs",
"MenuAbout": "Sobre",
"HomeTabHeader": "Início",
"HomeTitle": "Bem-vindo ao Win11Debloat",
"HomeSubtitle": "Sua experiência Windows limpa está a poucos cliques de distância!",
"HomeUserQuestion": "Para qual usuário deseja aplicar as alterações?",
"HomeUserSelectionAutomationName": "Aplicar alterações para",
"HomeUserOptionCurrentUser": "Usuário atual",
"HomeUserOptionOtherUser": "Outro usuário",
"HomeUserOptionSysprep": "Usuário padrão do Windows (Sysprep)",
"HomeUsernamePlaceholder": "Digite o nome de usuário",
"HomeDefaultModeBtn": "Modo padrão",
"HomeDefaultModeBtnTooltip": "Selecionar rapidamente as configurações recomendadas",
"HomeCustomSetupBtn": "Configuração personalizada",
"HomeCustomSetupBtnTooltip": "Selecionar manualmente suas configurações preferidas",
"AppRemovalTabHeader": "Remoção de apps",
"AppRemovalTitle": "Remoção de apps",
"AppRemovalSubtitle": "Selecione quais apps deseja remover",
"AppQuickSelect": "Seleção rápida",
"AppQuickSelectAutomationName": "Pré-definições de apps",
"AppClearSelection": "Limpar seleção",
"AppClearSelectionTooltip": "Limpar todos os apps selecionados",
"AppPresetDefaultApps": "Apps padrão",
"AppPresetDefaultAppsAutomationName": "Seleção padrão",
"AppPresetDefaultAppsTooltip": "Selecionar os apps seguros para a maioria dos usuários",
"AppPresetLastUsed": "Apps selecionados anteriormente",
"AppPresetLastUsedTooltip": "Selecionar os apps que foram removidos na última vez que o Win11Debloat foi executado",
"AppOnlyInstalledCheckbox": "Mostrar apenas apps instalados",
"AppOnlyInstalledCheckboxTooltip": "Mostrar apenas aplicações que estão instaladas neste sistema",
"AppSearchPlaceholder": "Pesquisar apps...",
"AppSearchAutomationName": "Pesquisar app",
"AppTableHeaderName": "Nome",
"AppTableHeaderDescription": "Descrição",
"AppTableHeaderAppId": "ID do app",
"AppLoadingIndicator": "Carregando apps...",
"AppLegendTitle": "Legenda:",
"AppLegendRecommendedTooltip": "[Recomendado] Seguro para a maioria dos usuários",
"AppLegendRecommended": "Recomendado",
"AppLegendOptionalTooltip": "[Opcional] Pode ser removido com segurança se você não precisa deste app",
"AppLegendOptional": "Opcional",
"AppLegendNotRecommendedTooltip": "[Não recomendado] Remova apenas se souber o que está fazendo",
"AppLegendNotRecommended": "Não recomendado",
"TweaksTabHeader": "Ajustes",
"TweaksTitle": "Ajustes do sistema",
"TweaksSubtitle": "Selecione quais alterações deseja fazer, passe o mouse sobre as configurações para mais informações",
"TweaksQuickSelect": "Seleção rápida",
"TweaksQuickSelectAutomationName": "Pré-definições de ajustes",
"TweaksClearSelection": "Limpar seleção",
"TweaksClearSelectionTooltip": "Limpar todos os ajustes selecionados",
"TweaksPresetDefault": "Configurações padrão",
"TweaksPresetDefaultTooltip": "Selecionar as configurações recomendadas para a maioria das pessoas",
"TweaksPresetLastUsed": "Configurações selecionadas anteriormente",
"TweaksPresetLastUsedTooltip": "Selecionar as configurações que foram aplicadas na última vez que o Win11Debloat foi executado",
"TweaksPresetPrivacy": "Privacidade e conteúdo sugerido",
"TweaksPresetPrivacyAutomationName": "Toda privacidade e conteúdo sugerido",
"TweaksPresetPrivacyTooltip": "Selecionar todos os ajustes relacionados a privacidade e conteúdo sugerido",
"TweaksPresetAI": "Funcionalidades de IA",
"TweaksPresetAIAutomationName": "Todas funcionalidades de IA",
"TweaksPresetAITooltip": "Selecionar todos os ajustes relacionados a IA",
"TweaksDetectApplied": "Detectar ajustes aplicados",
"TweaksDetectAppliedTooltip": "Detectar todos os ajustes atualmente aplicados para o usuário atual",
"TweaksSearchPlaceholder": "Pesquisar ajustes...",
"TweaksSearchAutomationName": "Pesquisar ajustes",
"DeployTabHeader": "Configuração de implantação",
"DeployTitle": "Configuração de implantação",
"DeploySubtitle": "Configure como as alterações selecionadas serão aplicadas ao seu sistema",
"DeployApplyToTitle": "As alterações serão aplicadas para",
"DeployUserSelectionDescription": "O perfil do usuário atualmente conectado.",
"DeployAppRemovalScopeTitle": "Os apps serão removidos para",
"DeployAppRemovalScopeAutomationName": "Escopo de remoção de apps",
"DeployAppRemovalScopeAllUsers": "Todos os usuários",
"DeployAppRemovalScopeCurrentUser": "Apenas o usuário atual",
"DeployAppRemovalScopeTargetUser": "Apenas o usuário alvo",
"DeployOptionsTitle": "Opções",
"DeployOptionRegistryBackup": "Criar um backup do registro (Recomendado)",
"DeployOptionRestorePoint": "Criar um ponto de restauração do sistema (Recomendado)",
"DeployOptionRestartExplorer": "Reiniciar o processo do Explorador de Arquivos para aplicar todas as alterações imediatamente",
"DeployReviewChanges": "Revisar alterações selecionadas",
"DeployApplyChanges": "Aplicar alterações",
"BubbleViewChanges": "Veja as alterações selecionadas aqui",
"AboutTitle": "Sobre o Win11Debloat",
"AboutVersionLabel": "Versão:",
"AboutAuthorLabel": "Autor:",
"AboutProjectLabel": "Projeto:",
"AboutDonationMessage": "Win11Debloat é um projeto de paixão que mantenho no meu tempo livre. Se você achou esta ferramenta útil, por favor considere fazer uma pequena doação para apoiar seu desenvolvimento. Eu realmente agradeço!",
"AboutKofiLink": "Apoie-me no Ko-fi",
"AppSelectionWindowTitle": "Seleção de aplicativos Win11Debloat",
"AppSelectionWindowInstructions": "Marque os apps que deseja remover, desmarque os apps que deseja manter",
"AppSelectionWindowCheckAll": "Marcar/desmarcar todos",
"AppSelectionWindowCheckAllAutomationName": "Marcar ou desmarcar todos",
"AppSelectionWindowConfirm": "Confirmar",
"AppSelectionWindowCancel": "Cancelar",
"ApplyCancelTooltip": "Cancelar",
"ApplyInProgressTitle": "Aplicando alterações",
"ApplyPreparing": "Preparando...",
"ApplyStepCounter": "Etapa {0} de {1}",
"ApplyCreatingRegistryBackup": "Criando backup do registro...",
"ApplyCreatingRestorePoint": "Criando ponto de restauração do sistema, isso pode levar um momento...",
"ApplyCompletionTitleSuccess": "Alterações aplicadas",
"ApplyCompletionMessageDefault": "Observe que algumas alterações só terão efeito após uma reinicialização. Obrigado por usar o Win11Debloat!",
"ApplyRebootRequiredHeader": "Uma reinicialização é necessária para que estas alterações tenham efeito:",
"ApplyRebootRequiredWingetDeferred": "Desinstalação de {0}",
"ApplyCompletionTitleCancelled": "Cancelado",
"ApplyCompletionMessageCancelled": "A execução do script foi cancelada pelo usuário.",
"ApplyCompletionTitleErrors": "Alterações aplicadas com erros",
"ApplyCompletionMessageVerificationUnavailable": "Todas as alterações foram aplicadas sem erros, mas o Win11Debloat não conseguiu confirmar que todos os apps selecionados foram desinstalados com sucesso.",
"WingetUserScopeUninstallDeferred": "O WinGet não conseguiu desinstalar {0} com privilégios de administrador porque ele está instalado para o usuário. Reinicie o PC ou saia e entre novamente como {1} para concluir a remoção.",
"ApplyCompletionMessageFailures_one": "{0} alteração falhou. Veja o console para detalhes.",
"ApplyCompletionMessageFailures_other": "{0} alterações falharam. Veja o console para detalhes.",
"ApplyCompletionMessageFailures_many": "{0} de alterações falharam. Veja o console para detalhes.",
"ApplyCompletionMessageReady": "Seu sistema está pronto. Obrigado por usar o Win11Debloat!",
"ApplyCompletionTitleError": "Erro",
"ApplyCompletionMessageError": "Ocorreu um erro ao aplicar as alterações: {0}",
"NavBack": "Voltar",
"NavNext": "Próximo",
"NavProgressAppRemoval": "Remoção de apps",
"NavProgressSystemTweaks": "Ajustes do sistema",
"NavProgressDeploymentSettings": "Configuração de implantação",
"RestoreWindowTitle": "Restaurar backup",
"RestoreChooseRegistryTitle": "Restaurar backup do registro",
"RestoreChooseRegistryDescription": "Restaurar a configuração do registro do sistema a partir de um backup",
"RestoreChooseStartMenuTitle": "Restaurar backup do Menu Iniciar",
"RestoreChooseStartMenuDescription": "Restaurar o layout dos apps fixados do Menu Iniciar a partir de um backup",
"RestoreSelectTypePrompt": "Escolha quais alterações deseja restaurar.",
"RestoreRegistryStepTitle": "Restaurar backup do registro",
"RestoreRegistryIntro": "Isto irá restaurar quaisquer alterações no registro do sistema feitas pelo Win11Debloat para o estado anterior. Você pode revisar as alterações após selecionar um arquivo de backup. Os aplicativos removidos precisarão ser reinstalados manualmente.",
"RestoreRegistryWarning": "Aviso: Use apenas arquivos de backup gerados pelo Win11Debloat.",
"RestoreStartMenuStepTitle": "Restaurar backup do Menu Iniciar",
"RestoreStartMenuIntro": "Isto irá restaurar o layout dos apps fixados do Menu Iniciar para o(s) usuário(s) selecionado(s) usando um backup que é criado automaticamente pelo Win11Debloat. Backups criados manualmente também podem ser usados.",
"RestoreStartMenuScopeCurrentUser": "Usuário atual",
"RestoreStartMenuScopeAllUsers": "Todos os usuários",
"RestoreStartMenuAutoBackupCheckbox": "Encontrar automaticamente o backup do Menu Iniciar",
"RestoreFileLabel": "Arquivo:",
"RestoreFileNotSelected": "Não selecionado",
"RestoreCreatedLabel": "Criado:",
"RestoreCreatedUnavailable": "N/D",
"RestoreCreatedUnknown": "Desconhecido",
"RestoreTargetLabel": "Alvo:",
"RestoreRevertibleFeaturesTitle": "As seguintes alterações serão revertidas:",
"RestoreReappliedFeaturesTitle": "As seguintes alterações serão reaplicadas:",
"RestoreNonRevertibleFeaturesTitle": "As seguintes alterações não serão revertidas:",
"RestoreWikiLink": "Visite o wiki para mais informações",
"RestoreStartMenuSummary": "Isto irá substituir o layout atual dos apps fixados do Menu Iniciar de {0} pelo backup selecionado.",
"RestoreStartMenuSummaryScopeCurrentUser": "o usuário atual",
"RestoreStartMenuSummaryScopeAllUsers": "todos os usuários",
"RestorePrimaryActionSelectBackupFile": "Selecionar arquivo de backup",
"RestorePrimaryActionRestoreBackup": "Restaurar backup",
"RestorePrimaryActionRestoreFromBackup": "Restaurar a partir do backup",
"RestoreBackBtnCancel": "Cancelar",
"RestoreBackBtnBack": "Voltar",
"RestoreInvalidBackupTitle": "Arquivo de backup inválido",
"RestoreInvalidBackupMessage": "Não foi possível carregar o arquivo selecionado:\n{0}",
"RestoreNoBackupFoundTitle": "Nenhum backup encontrado",
"RestoreNoBackupFoundMessage": "Nenhum arquivo de backup do Menu Iniciar foi encontrado para {0}. Desmarque 'Encontrar automaticamente o backup do Menu Iniciar' para selecionar um arquivo de backup manualmente.",
"RestoreNoRestorableChangesError": "O backup selecionado não contém nenhuma alteração que possa ser restaurada.",
"RestoreSelectRegistryFileDialogTitle": "Selecionar arquivo de backup do registro",
"RestoreSelectStartMenuFileDialogTitle": "Selecionar arquivo de backup do Menu Iniciar",
"RestoreUnknownFeature": "Funcionalidade desconhecida",
"RestoreTargetUnknown": "Desconhecido",
"RestoreTargetDefaultUserProfile": "Perfil do usuário padrão",
"RestoreTargetCurrentUser": "Usuário atual",
"RestoreTargetAllUsers": "Todos os usuários",
"RestoreTargetCurrentUserNamed": "Usuário atual ({0})",
"RestoreTargetUserNamed": "Usuário ({0})",
"RestoreTargetUser": "Usuário",
"RestoreBackupRestoredTitle": "Backup restaurado",
"RestoreRegistryWhatIfMessage": "[WhatIf] O backup do registro seria restaurado (nenhuma alteração feita).",
"RestoreRegistrySuccessMessage": "Backup do registro restaurado com sucesso. Algumas alterações podem exigir uma reinicialização para ter efeito.",
"RestoreStartMenuFailedMessage": "Falha ao restaurar o backup do Menu Iniciar.\n{0}",
"RestoreStartMenuPartialSuccessMessage": "O backup do Menu Iniciar foi restaurado com sucesso para {0} usuário(s).\nAlguns usuários não puderam ser restaurados:\n{1}",
"RestoreStartMenuWhatIfMessage": "[WhatIf] O backup do Menu Iniciar seria restaurado (nenhuma alteração feita).",
"RestoreStartMenuAllUsersSuccessMessage": "O backup do Menu Iniciar foi restaurado com sucesso para todos os usuários. As alterações serão aplicadas na próxima vez que os usuários fizerem login.",
"RestoreStartMenuCurrentUserSuccessMessage": "O backup do Menu Iniciar foi restaurado com sucesso para o usuário atual. As alterações serão aplicadas na próxima vez que você fizer login.",
"RestoreOperationFailedMessage": "Falha na restauração: {0}",
"RestoreUnexpectedError": "Ocorreu um erro inesperado.",
"ImportExportCategoryApplications": "Aplicativos",
"ImportExportCategorySystemTweaks": "Ajustes do sistema",
"ImportExportCategoryDeploymentSettings": "Configuração de implantação",
"ImportExportCategoryDisabledTooltip": "Nada selecionado nesta categoria",
"ImportExportSchemaMissingMessage": "O arquivo de esquema da janela Importar/Exportar não foi encontrado.",
"ImportExportExportTitle": "Exportar configuração",
"ImportExportExportPrompt": "Crie um arquivo de configuração baseado nas configurações atualmente selecionadas. Você pode escolher quais categorias de configurações deseja incluir na exportação.",
"ImportExportExportActionLabel": "Exportar configurações",
"ImportExportSelectExportFileDialogTitle": "Exportar configuração",
"ImportExportWhatIfExportMessage": "[WhatIf] A configuração seria exportada para este arquivo (nenhum arquivo escrito).",
"ImportExportExportSuccessMessage": "Configuração exportada com sucesso.",
"ImportExportExportFailedMessage": "Falha ao exportar a configuração",
"ImportExportImportTitle": "Importar configuração",
"ImportExportImportPrompt": "Escolha as categorias de configurações que deseja importar. Você pode revisar e modificar as configurações importadas antes de serem aplicadas.",
"ImportExportImportActionLabel": "Importar configurações",
"ImportExportSelectImportFileDialogTitle": "Selecionar arquivo de configuração",
"ImportExportInvalidConfigTitle": "Configuração inválida",
"ImportExportReadFailedMessage": "Falha ao ler o arquivo de configuração",
"ImportExportInvalidConfigMessage": "Arquivo de configuração inválido: {0}",
"ImportExportImportSuccessMessage": "Configuração importada com sucesso.",
"ImportExportDeployUserCurrentUser": "Usuário: Usuário atual",
"ImportExportDeployUserOther": "Usuário: {0}",
"ImportExportDeployUserOtherFallback": "Outro usuário",
"ImportExportDeployUserSysprep": "Usuário: Sysprep",
"ImportExportAppRemovalAllUsers": "Remoção de apps: Todos os usuários",
"ImportExportAppRemovalCurrentUser": "Remoção de apps: Usuário atual",
"ImportExportAppRemovalOther": "Remoção de apps: {0}",
"ImportExportOptionRestorePoint": "Ponto de restauração",
"ImportExportOptionRegistryBackup": "Backup do registro",
"ImportExportOptionRestartExplorer": "Reiniciar Explorador",
"ImportExportOptionsPrefix": "Opções: {0}",
"ImportExportDefaultDeploymentSettings": "Configurações de implantação padrão",
"ImportExportAppsSelected_one": "{0} app selecionado",
"ImportExportAppsSelected_other": "{0} apps selecionados",
"ImportExportAppsSelected_many": "{0} de apps selecionados",
"ImportExportNoAppsSelected": "Nenhum app selecionado",
"ImportExportTweaksSelected_one": "{0} ajuste selecionado",
"ImportExportTweaksSelected_other": "{0} ajustes selecionados",
"ImportExportTweaksSelected_many": "{0} de ajustes selecionados",
"ImportExportNoTweaksSelected": "Nenhum ajuste selecionado",
"AppSelectionWinGetLoadFailedMessage": "Não foi possível carregar a lista de apps instalados via WinGet.",
"ErrorTitle": "Erro",
"AppSelectionStatusSelected_one": "{0} app selecionado para remoção",
"AppSelectionStatusSelected_other": "{0} apps selecionados para remoção",
"AppSelectionStatusSelected_many": "{0} de apps selecionados para remoção",
"AppRemovalScopeDescriptionAllUsers": "Os apps serão removidos para todos os usuários e da imagem do Windows para evitar a reinstalação para novos usuários.",
"AppRemovalScopeDescriptionCurrentUser": "Os apps serão removidos apenas para o usuário atual.",
"AppRemovalScopeDescriptionTargetUser": "Os apps serão removidos apenas para o usuário alvo especificado.",
"TweaksCategoryHelpTooltip": "Abra o wiki para mais informações sobre ajustes de '{0}'",
"TweaksOptionNoChange": "Sem alteração",
"TweaksOptionApply": "Aplicar",
"TweaksOptionDisable": "Desabilitar",
"TweaksOptionEnable": "Habilitar",
"TweaksAlreadyAppliedTooltip": "Este ajuste já foi aplicado e não pode ser desfeito automaticamente. Visite o wiki do Win11Debloat para instruções sobre como reverter esta alteração manualmente.",
"DeployChangeRemoveApps_one": "Remover {0} aplicativo",
"DeployChangeRemoveApps_other": "Remover {0} aplicativos",
"DeployChangeRemoveApps_many": "Remover {0} de aplicativos",
"DeployChangeUndoPrefix": "Desfazer: {0}",
"DeployNoChangesSelectedMessage": "Nenhuma alteração foi selecionada.",
"DeploySelectedChangesTitle": "Alterações selecionadas",
"DeployUserDescriptionCurrentUser": "O perfil do usuário atualmente conectado",
"DeployUserDescriptionCurrentUserNamed": "O perfil do usuário atualmente conectado: {0}",
"DeployUserDescriptionOtherUser": "Um perfil de usuário diferente neste sistema",
"DeployUserDescriptionOtherUserNamed": "Um perfil de usuário diferente neste sistema: {0}",
"DeployUserDescriptionSysprep": "O modelo de usuário padrão, afetando todos os novos usuários criados após este ponto. Útil para implantação via Sysprep.",
"LogsMenuTitle": "Logs",
"LogsFolderNotFoundMessage": "Nenhuma pasta de logs encontrada em: {0}",
"ExportConfigFailedTitle": "Falha na exportação de configuração",
"ExportConfigFailedMessage": "Não foi possível abrir o diálogo de exportação de configuração: {0}",
"ImportConfigFailedTitle": "Falha na importação de configuração",
"ImportConfigFailedMessage": "Não foi possível abrir o diálogo de importação de configuração: {0}",
"RestoreBackupFailedTitle": "Falha na restauração de backup",
"RestoreBackupFailedMessage": "Não foi possível abrir o diálogo de restauração de backup: {0}",
"AppPresetSelectTooltip": "Selecionar {0}",
"InvalidUsernameFallbackMessage": "Por favor, insira um nome de usuário válido.",
"InvalidUsernameTitle": "Nome de usuário inválido",
"NoChangesSelectedTitle": "Nenhuma alteração selecionada",
"NoChangesSelectedMessage": "Nenhuma alteração foi selecionada, por favor selecione pelo menos uma opção para prosseguir.",
"HomeCurrentUserWithName": "Usuário atual ({0})",
"InitializationErrorTitle": "Erro de inicialização",
"InitializationErrorMessage": "Ocorreu um erro durante a inicialização: {0}",
"WhatIfModeTitle": "Modo WhatIf",
"WhatIfModeMessage": "O modo WhatIf está habilitado. O script não fará nenhuma alteração no seu sistema neste modo.\n\nVocê pode observar as ações que seriam executadas pelo script na saída do console.",
"ConfirmTitle": "Tem certeza?",
"ConfirmRemoveStoreMessage": "Tem certeza que deseja desinstalar a Microsoft Store? Este app não pode ser reinstalado facilmente.",
"ConfirmRemoveTerminalMessage": "Tem certeza que deseja remover o Windows Terminal? O Windows Terminal é o app de linha de comando padrão do Windows. Certifique-se de que não está executando o Win11Debloat via Windows Terminal antes de prosseguir para evitar uma falha no meio do processo.",
"ConfigEmptyOrUnreadable": "A configuração está vazia ou não pode ser lida.",
"ConfigMissingVersion": "A configuração não possui um campo Versão.",
"ConfigNoImportableData": "O arquivo de configuração não contém dados importáveis.",
"ConfigAppsMustBeStrings": "As entradas de Apps da configuração devem ser strings.",
"ConfigEntriesMustHaveNameAndValue": "As entradas {0} da configuração devem conter as propriedades Nome e Valor.",
"ConfigInvalidAppRemovalScopeIndex": "O AppRemovalScopeIndex deve ser um valor numérico suportado (0, 1 ou 2).",
"ConfigInvalidUserSelectionIndex": "O UserSelectionIndex deve ser um valor numérico suportado (0, 1 ou 2).",
"ConfigScopeRequiresCurrentUserTarget": "O escopo de remoção de apps 'Apenas o usuário atual' (AppRemovalScopeIndex 1) requer o alvo de implantação 'Usuário atual' (UserSelectionIndex 0).",
"ConfigScopeRequiresOtherUserTarget": "O escopo de remoção de apps 'Apenas o usuário alvo' (AppRemovalScopeIndex 2) requer o alvo de implantação 'Outro usuário' (UserSelectionIndex 1).",
"ConfigScopeRequiresOtherUsername": "O escopo de remoção de apps 'Apenas o usuário alvo' (AppRemovalScopeIndex 2) requer um valor 'OtherUsername'.",
"UsernameValidationEmpty": "Por favor, insira um nome de usuário",
"UsernameValidationOwnUsername": "Não é possível inserir seu próprio nome de usuário, use a opção 'Usuário atual'",
"UsernameValidationNotFound": "Usuário não encontrado, por favor insira um nome de usuário válido",
"UsernameValidationFound": "Usuário encontrado: {0}",
"RestorePointFailedTitle": "Falha na criação do ponto de restauração",
"RestorePointFailedMessage": "Falha ao criar um ponto de restauração do sistema. Deseja continuar sem um ponto de restauração?",
"ForceRemoveEdgeTitle": "Desinstalar Microsoft Edge forçadamente?",
"ForceRemoveEdgeMessage": "Não foi possível desinstalar o Microsoft Edge via WinGet. Deseja desinstalá-lo forçadamente? NÃO RECOMENDADO!",
"RemovingAppsSubStep": "Removendo apps ({0}/{1})",
"BackupFileNotFound": "Arquivo de backup não encontrado: {0}",
"BackupFileNotValidJson": "Falha ao ler o arquivo de backup '{0}'. O arquivo não é um JSON válido.",
"BackupValidationSingleError": "Falha na validação: {0}",
"BackupValidationMultipleErrors": "Falha na validação com {0} erros. Veja a saída do console para detalhes.",
"BackupMissingProperty": "Propriedade ausente: {0}",
"BackupUnsupportedVersion": "Versão de backup não suportada '{0}'.",
"BackupUnsupportedType": "BackupType não suportado '{0}'.",
"BackupInvalidUser": "Usuário inválido '{0}'",
"BackupUserScopedWrongContext": "O backup foi feito para '{0}' e é limitado ao usuário. Execute novamente como esse usuário; o SYSTEM não pode restaurar um backup de CurrentUser.",
"BackupUserMismatch": "O backup foi feito para '{0}', isso não corresponde ao usuário atual '{1}'.",
"BackupUnsupportedTarget": "Alvo não suportado '{0}'.",
"BackupSelectedFeaturesMustBeStrings": "SelectedFeatures deve conter IDs de funcionalidades em string não vazias.",
"BackupSelectedUndoFeaturesMustBeStrings": "SelectedUndoFeatures deve conter IDs de funcionalidades em string não vazias.",
"BackupMissingSelectedFeatures": "O backup deve conter pelo menos um ID de funcionalidade em SelectedFeatures ou SelectedUndoFeatures.",
"BackupAllowlistValidationFailed": "Falha ao validar o backup: {0}",
"BackupSnapshotMissingPath": "Falha na validação do backup: O snapshot do registro está sem o Path.",
"BackupFeatureCatalogNotLoaded": "Não é possível validar a lista de permitidos do backup do registro porque as definições de funcionalidades não estão carregadas.",
"BackupNoAllowedRegistryPaths": "O backup contém snapshots de registro, mas nenhum caminho de registro permitido foi derivado das funcionalidades selecionadas.",
"BackupFeatureNotInCatalog": "A funcionalidade selecionada '{0}' não foi encontrada no catálogo de funcionalidades atual.",
"BackupUnsupportedRegistryPath": "O backup contém caminho de registro não suportado '{0}'.",
"BackupUnexpectedRegistryPath": "O backup contém caminho de registro inesperado '{0}' que não é permitido por SelectedFeatures.",
"BackupUnexpectedValue": "O backup contém valor inesperado '{0}' sob '{1}'.",
"BackupUnsupportedValueKind": "O backup contém tipo de valor de registro não suportado '{0}' para '{1}'.",
"BackupInvalidValueData": "O backup contém dados de registro inválidos para o tipo '{0}' em '{1}'.",
"BackupValueMustNotDefineKind": "O valor do backup '{0}' não deve definir Kind quando Exists é falso.",
"StartMenuNoBackupFoundForUser": "Nenhum arquivo de backup do Menu Iniciar encontrado para o usuário {0}.",
"StartMenuWhatIfRestoredForUser": "[WhatIf] Menu Iniciar restaurado para o usuário {0}.",
"StartMenuRestoredForUser": "Menu Iniciar restaurado para o usuário {0}.",
"StartMenuRestoreFailedForUser": "Falha ao restaurar o Menu Iniciar para o usuário {0}. {1}",
"StartMenuWhatIfRemovedDefaultProfile": "[WhatIf] start2.bin removido para o perfil do usuário padrão.",
"StartMenuRemovedDefaultProfile": "start2.bin removido para o perfil do usuário padrão.",
"StartMenuRemoveFailedDefaultProfile": "Falha ao remover start2.bin para o perfil do usuário padrão. {0}",
"StartMenuNoUserLocationsFound": "Nenhum local de Menu Iniciar de usuário foi encontrado."
}
+744
View File
@@ -0,0 +1,744 @@
{
"Features": {
"RemoveApps": {
"Label": "Remover os apps especificados com o parâmetro 'Apps'",
"ApplyText": "Removendo apps selecionados"
},
"Apps": {
"Label": "A seleção de apps para remover, especificada como uma lista separada por vírgulas. Use 'Default' (ou omita) para usar a lista de apps padrão",
"ApplyText": "Removendo apps selecionados"
},
"RemoveGamingApps": {
"Label": "Remover o App Xbox e o Xbox Gamebar",
"ApplyText": "Removendo apps relacionados a jogos"
},
"RemoveHPApps": {
"Label": "Remover aplicativos OEM da HP",
"ApplyText": "Removendo apps da HP"
},
"CreateRestorePoint": {
"Label": "Criar um ponto de restauração do sistema",
"ApplyText": "Criando ponto de restauração do sistema"
},
"DisableTelemetry": {
"Label": "Desabilitar telemetria, rastreamento e anúncios direcionados",
"ToolTip": "Esta configuração desabilita telemetria, coleta de dados de diagnóstico, histórico de atividades, rastreamento de inicialização de apps, anúncios direcionados e mais. Limita os dados enviados à Microsoft sobre seu dispositivo e uso. Se você for um Windows Insider, as atualizações podem ser bloqueadas até que a coleta opcional de dados de diagnóstico seja reativada.",
"ApplyText": "Desabilitando telemetria e coleta de dados de diagnóstico",
"UndoLabel": "Habilitar telemetria, rastreamento e anúncios direcionados",
"ApplyUndoText": "Habilitando telemetria e coleta de dados de diagnóstico"
},
"DisableSuggestions": {
"Label": "Desabilitar dicas, truques e conteúdo sugerido em todo o Windows",
"ToolTip": "Esta configuração remove muitas distrações irritantes do Windows. Isso inclui coisas como notificações, lembretes e anúncios de provedor de sincronização. Também impede a instalação automática de apps sugeridos.",
"ApplyText": "Desabilitando dicas, truques, sugestões e anúncios em todo o Windows",
"UndoLabel": "Habilitar dicas, truques e conteúdo sugerido em todo o Windows",
"ApplyUndoText": "Habilitando dicas, truques, sugestões e anúncios em todo o Windows"
},
"DisableNotifications": {
"Label": "Desabilitar notificações do Windows (de apps e outros remetentes)",
"ToolTip": "Desabilita notificações nativas do Windows de apps e outros remetentes, incluindo notificações de apps como Discord, WhatsApp, Teams e Slack.",
"ApplyText": "Desabilitando notificações e lembretes do Windows",
"UndoLabel": "Habilitar notificações e lembretes do Windows",
"ApplyUndoText": "Habilitando notificações e lembretes do Windows"
},
"DisableLocationServices": {
"Label": "Desabilitar serviços de localização do Windows e acesso à localização de apps",
"ToolTip": "Isto desabilitará os serviços de localização do Windows e negará o acesso dos apps à sua localização. Esta funcionalidade usa políticas, que bloqueiam certas configurações.",
"ApplyText": "Desabilitando serviços de localização do Windows e acesso à localização de apps",
"UndoLabel": "Habilitar serviços de localização do Windows e acesso à localização de apps",
"ApplyUndoText": "Habilitando serviços de localização do Windows e acesso à localização de apps"
},
"DisableFindMyDevice": {
"Label": "Desabilitar rastreamento de localização do Encontrar Meu Dispositivo",
"ToolTip": "Isto desabilitará a funcionalidade 'Encontrar Meu Dispositivo', que periodicamente envia a localização do seu dispositivo para a Microsoft. Esta funcionalidade usa políticas, que bloqueiam certas configurações.",
"ApplyText": "Desabilitando rastreamento de localização do Encontrar Meu Dispositivo",
"UndoLabel": "Habilitar rastreamento de localização do Encontrar Meu Dispositivo",
"ApplyUndoText": "Habilitando rastreamento de localização do Encontrar Meu Dispositivo"
},
"DisableLockscreenTips": {
"Label": "Desabilitar dicas e truques na tela de bloqueio",
"ToolTip": "Isto desabilitará a opção de destaque da tela de bloqueio e desabilitará as dicas, truques e fatos divertidos que aparecem na tela de bloqueio.",
"ApplyText": "Desabilitando dicas e truques na tela de bloqueio",
"UndoLabel": "Habilitar dicas e truques na tela de bloqueio",
"ApplyUndoText": "Habilitando dicas e truques na tela de bloqueio"
},
"EnableDesktopSpotlight": {
"Label": "Habilitar papel de parede e atalho do destaque do Windows na área de trabalho",
"ToolTip": "Restaura o papel de parede do destaque do Windows e o atalho 'Saiba mais sobre esta imagem'.",
"ApplyText": "Restaurando o papel de parede e atalho do destaque do Windows na área de trabalho"
},
"DisableDesktopSpotlight": {
"Label": "Desabilitar papel de parede do destaque do Windows na área de trabalho",
"ToolTip": "Desabilita o destaque do Windows para o papel de parede da área de trabalho, que exibe imagens rotativas e pode mostrar dicas e fatos divertidos. Esta funcionalidade usa políticas, que bloqueiam certas configurações.",
"ApplyText": "Desabilitando o papel de parede do destaque do Windows na área de trabalho",
"UndoLabel": "Habilitar papel de parede do destaque do Windows na área de trabalho",
"ApplyUndoText": "Restaurando o papel de parede e atalho do destaque do Windows na área de trabalho"
},
"HideDesktopSpotlightIcon": {
"Label": "Ocultar o atalho de área de trabalho 'Saiba mais sobre esta imagem'",
"ToolTip": "Oculta o atalho de área de trabalho 'Saiba mais sobre esta imagem' enquanto mantém a rotação de papel de parede do destaque do Windows habilitada. Não desabilita o destaque do Windows.",
"ApplyText": "Ocultando o atalho de área de trabalho 'Saiba mais sobre esta imagem' do destaque do Windows",
"UndoLabel": "Mostrar o atalho de área de trabalho 'Saiba mais sobre esta imagem'",
"ApplyUndoText": "Mostrando o atalho de área de trabalho 'Saiba mais sobre esta imagem' do destaque do Windows"
},
"DisableEdgeAds": {
"Label": "Desabilitar anúncios, sugestões e feed de notícias no Edge",
"ToolTip": "Isto desabilitará várias distrações do Microsoft Edge, como anúncios, sugestões e o feed de notícias MSN. Esta funcionalidade usa políticas, que bloqueiam certas configurações.",
"ApplyText": "Desabilitando anúncios, sugestões e o feed de notícias MSN no Microsoft Edge",
"UndoLabel": "Habilitar anúncios, sugestões e feed de notícias no Edge",
"ApplyUndoText": "Habilitando anúncios, sugestões e o feed de notícias MSN no Microsoft Edge"
},
"DisableCopilot": {
"Label": "Desabilitar Microsoft Copilot",
"ToolTip": "Isto desabilitará e desinstalará o Microsoft Copilot, o assistente de IA integrado do Windows.",
"ApplyText": "Desabilitando Microsoft Copilot",
"UndoLabel": "Habilitar Microsoft Copilot",
"ApplyUndoText": "Habilitando Microsoft Copilot"
},
"DisableRecall": {
"Label": "Desabilitar Windows Recall",
"ToolTip": "Isto desabilitará o Windows Recall, uma funcionalidade de IA que fornece acesso rápido a arquivos, apps e atividades recentemente usados. Esta funcionalidade usa políticas, que bloqueiam certas configurações.",
"ApplyText": "Desabilitando Windows Recall",
"UndoLabel": "Habilitar Windows Recall",
"ApplyUndoText": "Habilitando Windows Recall"
},
"DisableClickToDo": {
"Label": "Desabilitar Click To Do, análise de IA de texto e imagem",
"ToolTip": "Isto desabilitará o Click To Do, que fornece funcionalidades de análise de IA de texto e imagem no Windows. Esta funcionalidade usa políticas, que bloqueiam certas configurações.",
"ApplyText": "Desabilitando Click to Do",
"UndoLabel": "Habilitar Click To Do, análise de IA de texto e imagem",
"ApplyUndoText": "Habilitando Click to Do"
},
"DisableAISvcAutoStart": {
"Label": "Impedir que o serviço de IA inicie automaticamente",
"ToolTip": "Isto definirá o serviço WSAIFabricSvc para inicialização manual, impedindo que o serviço inicie automaticamente com o Windows.",
"ApplyText": "Impedindo que o serviço de IA inicie automaticamente",
"UndoLabel": "Permitir que o serviço de IA inicie automaticamente",
"ApplyUndoText": "Permitindo que o serviço de IA inicie automaticamente"
},
"DisableDVR": {
"Label": "Desabilitar gravação de tela/jogos do Xbox",
"ToolTip": "Isto desabilitará as funcionalidades de gravação de tela/jogos do Xbox incluídas com o app Game Bar. Esta funcionalidade usa políticas, que bloqueiam certas configurações.",
"ApplyText": "Desabilitando gravação de tela/jogos do Xbox",
"UndoLabel": "Habilitar gravação de tela/jogos do Xbox",
"ApplyUndoText": "Habilitando gravação de tela/jogos do Xbox"
},
"DisableGameBarIntegration": {
"Label": "Desabilitar integração do Game Bar",
"ToolTip": "Isto desabilitará a integração do Game Bar com jogos e controles. Isso impede os popups irritantes do ms-gamebar ao iniciar jogos ou conectar um controle.",
"ApplyText": "Desabilitando integração do Game Bar",
"UndoLabel": "Habilitar integração do Game Bar",
"ApplyUndoText": "Habilitando integração do Game Bar"
},
"ClearStart": {
"Label": "Remover todos os apps fixados do Menu Iniciar para este usuário apenas",
"ApplyText": "Removendo todos os apps fixados do Menu Iniciar"
},
"ClearStartAllUsers": {
"Label": "Remover todos os apps fixados do Menu Iniciar para todos os usuários existentes e novos",
"ApplyText": "Removendo todos os apps fixados do Menu Iniciar para todos os usuários"
},
"ReplaceStart": {
"Label": "Substituir o layout do Menu Iniciar para este usuário apenas com o arquivo de modelo fornecido",
"ApplyText": "Substituindo o Menu Iniciar"
},
"ReplaceStartAllUsers": {
"Label": "Substituir o layout do Menu Iniciar para todos os usuários existentes e novos com o arquivo de modelo fornecido",
"ApplyText": "Substituindo o Menu Iniciar para todos os usuários"
},
"DisableStartRecommended": {
"Label": "Ocultar seção de recomendações no Menu Iniciar",
"ToolTip": "Isto ocultará a seção de recomendações no Menu Iniciar, que mostra apps adicionados recentemente, arquivos abertos recentemente e recomendações de apps. Esta funcionalidade usa políticas, que bloqueiam certas configurações.",
"ApplyText": "Desabilitando a seção de recomendações do Menu Iniciar",
"UndoLabel": "Mostrar seção de recomendações no Menu Iniciar",
"ApplyUndoText": "Habilitando a seção de recomendações do Menu Iniciar"
},
"DisableStartAllApps": {
"Label": "Ocultar seção 'Todos os Apps' no Menu Iniciar",
"ToolTip": "Isto ocultará a seção 'Todos os Apps' no Menu Iniciar, que mostra todos os apps instalados. ATENÇÃO: Ocultar esta seção pode dificultar a localização de apps instalados no seu sistema. Esta funcionalidade usa políticas, que bloqueiam certas configurações.",
"ApplyText": "Desabilitando a seção 'Todos os Apps' no Menu Iniciar",
"UndoLabel": "Mostrar seção 'Todos os Apps' no Menu Iniciar",
"ApplyUndoText": "Habilitando a seção 'Todos os Apps' no Menu Iniciar"
},
"DisableStartPhoneLink": {
"Label": "Desabilitar integração do Phone Link no Menu Iniciar",
"ToolTip": "Isto removerá a integração do Phone Link no Menu Iniciar quando você tiver um dispositivo móvel conectado ao seu PC.",
"ApplyText": "Desabilitando a integração de dispositivos móveis do Phone Link no Menu Iniciar",
"UndoLabel": "Habilitar integração do Phone Link no Menu Iniciar",
"ApplyUndoText": "Habilitando a integração de dispositivos móveis do Phone Link no Menu Iniciar"
},
"DisableBing": {
"Label": "Desabilitar pesquisa web do Bing e integração do Copilot na pesquisa",
"ToolTip": "Isto desabilitará os resultados da pesquisa web do Bing e a integração do Copilot na experiência de pesquisa do Windows. Esta funcionalidade usa políticas, que bloqueiam certas configurações.",
"ApplyText": "Desabilitando pesquisa web do Bing e integração do Copilot na pesquisa do Windows",
"UndoLabel": "Habilitar pesquisa web do Bing e integração do Copilot na pesquisa",
"ApplyUndoText": "Habilitando pesquisa web do Bing e integração do Copilot na pesquisa do Windows"
},
"DisableStoreSearchSuggestions": {
"Label": "Desabilitar sugestões de apps da Microsoft Store na pesquisa",
"ToolTip": "Isto desabilitará as sugestões de apps da Microsoft Store na pesquisa do Windows.",
"ApplyText": "Desabilitando sugestões de apps da Microsoft Store na pesquisa",
"UndoLabel": "Habilitar sugestões de apps da Microsoft Store na pesquisa",
"ApplyUndoText": "Habilitando sugestões de apps da Microsoft Store na pesquisa"
},
"DisableSettings365Ads": {
"Label": "Ocultar anúncios do Microsoft 365 Copilot na Página Inicial do Configurações",
"ToolTip": "Isto desabilitará os anúncios do Microsoft 365 Copilot que aparecem na página inicial do Configurações.",
"ApplyText": "Desabilitando anúncios do Microsoft 365 Copilot na Página Inicial do Configurações",
"UndoLabel": "Mostrar anúncios do Microsoft 365 Copilot na Página Inicial do Configurações",
"ApplyUndoText": "Habilitando anúncios do Microsoft 365 Copilot na Página Inicial do Configurações"
},
"DisableSettingsHome": {
"Label": "Ocultar página 'Inicial' do Configurações",
"ToolTip": "Remove a página 'Inicial' do app Configurações.",
"ApplyText": "Desabilitando a Página Inicial do Configurações",
"UndoLabel": "Mostrar página 'Inicial' do Configurações",
"ApplyUndoText": "Habilitando a Página Inicial do Configurações"
},
"DisableEdgeAI": {
"Label": "Desabilitar funcionalidades de IA no Microsoft Edge",
"ToolTip": "Isto desabilitará funcionalidades de IA no Microsoft Edge, como a barra lateral com IA e funcionalidades do Copilot. Esta funcionalidade usa políticas, que bloqueiam certas configurações.",
"ApplyText": "Desabilitando funcionalidades de IA no Microsoft Edge",
"UndoLabel": "Habilitar funcionalidades de IA no Microsoft Edge",
"ApplyUndoText": "Habilitando funcionalidades de IA no Microsoft Edge"
},
"DisablePaintAI": {
"Label": "Desabilitar funcionalidades de IA no Paint",
"ToolTip": "Isto desabilitará funcionalidades de IA no Paint, como a geração e edição de imagens com IA. Esta funcionalidade usa políticas, que bloqueiam certas configurações.",
"ApplyText": "Desabilitando funcionalidades de IA no Paint",
"UndoLabel": "Habilitar funcionalidades de IA no Paint",
"ApplyUndoText": "Habilitando funcionalidades de IA no Paint"
},
"DisableNotepadAI": {
"Label": "Desabilitar funcionalidades de IA no Notepad",
"ToolTip": "Isto desabilitará funcionalidades de IA no Notepad, como as sugestões de escrita com IA. Esta funcionalidade usa políticas, que bloqueiam certas configurações.",
"ApplyText": "Desabilitando funcionalidades de IA no Notepad",
"UndoLabel": "Habilitar funcionalidades de IA no Notepad",
"ApplyUndoText": "Habilitando funcionalidades de IA no Notepad"
},
"EnableDarkMode": {
"Label": "Habilitar tema escuro para o sistema e apps",
"ToolTip": "Isto definirá o tema do app e do sistema para o modo escuro.",
"ApplyText": "Habilitando modo escuro para o sistema e apps",
"UndoLabel": "Desabilitar tema escuro para o sistema e apps",
"ApplyUndoText": "Desabilitando modo escuro para o sistema e apps"
},
"DisableDragTray": {
"Label": "Desabilitar 'Drag Tray' para compartilhar e mover arquivos",
"ToolTip": "O Drag Tray é uma nova funcionalidade para compartilhar e mover arquivos no Windows 11, aparece no topo da tela ao arrastar arquivos.",
"ApplyText": "Desabilitando Drag Tray",
"UndoLabel": "Habilitar 'Drag Tray' para compartilhar e mover arquivos",
"ApplyUndoText": "Habilitando Drag Tray"
},
"RevertContextMenu": {
"Label": "Usar estilo clássico de menu de contexto do Windows 10",
"ToolTip": "Isto restaurará o estilo clássico do menu de contexto do Windows 10, que normalmente fica oculto atrás da entrada 'Mostrar mais opções' no novo menu de contexto do Windows 11.",
"ApplyText": "Restaurando o estilo clássico de menu de contexto do Windows 10",
"UndoLabel": "Usar estilo de menu de contexto do Windows 11",
"ApplyUndoText": "Restaurando o estilo de menu de contexto do Windows 11"
},
"DisableMouseAcceleration": {
"Label": "Desabilitar Melhorar Precisão do Ponteiro (aceleração do mouse)",
"ToolTip": "Isto desabilitará a aceleração do mouse que é habilitada por padrão no Windows. Isso torna o movimento do mouse mais consistente e previsível.",
"ApplyText": "Desabilitando Melhorar Precisão do Ponteiro",
"UndoLabel": "Habilitar Melhorar Precisão do Ponteiro (aceleração do mouse)",
"ApplyUndoText": "Habilitando Melhorar Precisão do Ponteiro"
},
"DisableStickyKeys": {
"Label": "Desabilitar atalho de teclado das Teclas de Aderência (5x shift)",
"ToolTip": "Isto impedirá que o diálogo das Teclas de Aderência apareça quando você pressionar a tecla Shift 5 vezes seguidas.",
"ApplyText": "Desabilitando o atalho de teclado das Teclas de Aderência",
"UndoLabel": "Habilitar atalho de teclado das Teclas de Aderência (5x shift)",
"ApplyUndoText": "Habilitando o atalho de teclado das Teclas de Aderência"
},
"DisableWindowSnapping": {
"Label": "Desabilitar snapping de janelas",
"ToolTip": "Isto desabilitará a capacidade de encaixar janelas nas laterais ou cantos da tela.",
"ApplyText": "Desabilitando snapping de janelas",
"UndoLabel": "Habilitar snapping de janelas",
"ApplyUndoText": "Habilitando snapping de janelas"
},
"DisableSnapAssist": {
"Label": "Desabilitar sugestões de apps ao encaixar janelas",
"ToolTip": "Isto desabilitará as sugestões de apps quando você encaixar janelas nas laterais ou cantos da tela.",
"ApplyText": "Desabilitando as sugestões do Snap Assist",
"UndoLabel": "Habilitar sugestões de apps ao encaixar janelas",
"ApplyUndoText": "Habilitando as sugestões do Snap Assist"
},
"DisableSnapLayouts": {
"Label": "Ocultar painel de layouts de snap no topo da tela e no botão de maximizar",
"ToolTip": "Isto desabilitará o painel de layouts de snap que aparece quando você passa o mouse sobre o botão de maximizar ou arrasta janelas para o topo da tela.",
"ApplyText": "Ocultando layouts de snap ao arrastar janelas para o topo da tela e no botão de maximizar",
"UndoLabel": "Mostrar painel de layouts de snap no topo da tela e no botão de maximizar",
"ApplyUndoText": "Mostrando layouts de snap ao arrastar janelas para o topo da tela e no botão de maximizar"
},
"HideTabsInAltTab": {
"Label": "Ocultar abas de apps ao encaixar ou pressionar Alt+Tab",
"ApplyText": "Desabilitar exibição de abas de apps ao encaixar ou pressionar Alt+Tab"
},
"Show3TabsInAltTab": {
"Label": "Mostrar 3 abas de apps ao encaixar ou pressionar Alt+Tab",
"ApplyText": "Habilitar exibição de 3 abas de apps ao encaixar ou pressionar Alt+Tab"
},
"Show5TabsInAltTab": {
"Label": "Mostrar 5 abas de apps ao encaixar ou pressionar Alt+Tab",
"ApplyText": "Habilitar exibição de 5 abas de apps ao encaixar ou pressionar Alt+Tab"
},
"Show20TabsInAltTab": {
"Label": "Mostrar 20 abas de apps ao encaixar ou pressionar Alt+Tab",
"ApplyText": "Habilitar exibição de 20 abas de apps ao encaixar ou pressionar Alt+Tab"
},
"TaskbarAlignLeft": {
"Label": "Alinhar a barra de tarefas à esquerda",
"ToolTip": "Por padrão, o Windows 11 tem os botões da barra de tarefas centralizados. Habilitar esta configuração moverá os botões da barra de tarefas para a esquerda, semelhante a versões anteriores do Windows.",
"ApplyText": "Alinhando botões da barra de tarefas à esquerda",
"UndoLabel": "Alinhar a barra de tarefas ao centro",
"ApplyUndoText": "Alinhando botões da barra de tarefas ao centro"
},
"HideSearchTb": {
"Label": "Ocultar ícone de pesquisa da barra de tarefas",
"ApplyText": "Ocultando o ícone de pesquisa da barra de tarefas",
"UndoLabel": "Mostrar caixa de pesquisa na barra de tarefas",
"ApplyUndoText": "Alterando pesquisa da barra de tarefas para caixa de pesquisa"
},
"ShowSearchIconTb": {
"Label": "Mostrar ícone de pesquisa na barra de tarefas",
"ApplyText": "Alterando pesquisa da barra de tarefas para apenas ícone",
"UndoLabel": "Mostrar caixa de pesquisa na barra de tarefas",
"ApplyUndoText": "Alterando pesquisa da barra de tarefas para caixa de pesquisa"
},
"ShowSearchLabelTb": {
"Label": "Mostrar ícone de pesquisa com rótulo na barra de tarefas",
"ApplyText": "Alterando pesquisa da barra de tarefas para ícone com rótulo",
"UndoLabel": "Mostrar caixa de pesquisa na barra de tarefas",
"ApplyUndoText": "Alterando pesquisa da barra de tarefas para caixa de pesquisa"
},
"ShowSearchBoxTb": {
"Label": "Mostrar caixa de pesquisa na barra de tarefas",
"ApplyText": "Alterando pesquisa da barra de tarefas para caixa de pesquisa"
},
"HideTaskview": {
"Label": "Ocultar botão 'Visualização de tarefas' na barra de tarefas",
"ToolTip": "Isto desabilitará o botão 'Visualização de tarefas' na barra de tarefas, que permite ver todas as suas janelas abertas e áreas de trabalho virtuais.",
"ApplyText": "Ocultando o botão de visualização de tarefas da barra de tarefas",
"UndoLabel": "Mostrar botão 'Visualização de tarefas' na barra de tarefas",
"ApplyUndoText": "Mostrando o botão de visualização de tarefas da barra de tarefas"
},
"DisableWidgets": {
"Label": "Desabilitar widgets na barra de tarefas e tela de bloqueio",
"ToolTip": "Isto desabilitará as funcionalidades de widgets no Windows, incluindo o botão de widgets na barra de tarefas e os widgets que podem aparecer na tela de bloqueio.",
"ApplyText": "Desabilitando widgets na barra de tarefas e tela de bloqueio"
},
"HideChat": {
"Label": "Ocultar ícone do Chat (meet now) na barra de tarefas",
"ToolTip": "Isto desabilitará o ícone do Chat (meet now) na barra de tarefas.",
"ApplyText": "Ocultando o ícone do chat da barra de tarefas",
"UndoLabel": "Mostrar ícone do Chat (meet now) na barra de tarefas",
"ApplyUndoText": "Mostrando o ícone do chat da barra de tarefas"
},
"DisableStorageSense": {
"Label": "Desabilitar limpeza automática de disco do Storage Sense",
"ToolTip": "Isto desabilitará o Storage Sense, que automaticamente libera espaço em disco deletando arquivos temporários, esvaziando a lixeira e limpando arquivos na pasta de Downloads.",
"ApplyText": "Desabilitando limpeza automática de disco do Storage Sense",
"UndoLabel": "Habilitar limpeza automática de disco do Storage Sense",
"ApplyUndoText": "Habilitando limpeza automática de disco do Storage Sense"
},
"DisableFastStartup": {
"Label": "Desabilitar inicialização rápida",
"ToolTip": "A inicialização rápida ajuda seu PC a iniciar mais rapidamente após o desligamento, salvando uma imagem do sistema em disco. Desabilitar a inicialização rápida pode ajudar com certos problemas, mas pode resultar em tempos de inicialização um pouco mais longos.",
"ApplyText": "Desabilitando inicialização rápida",
"UndoLabel": "Habilitar inicialização rápida",
"ApplyUndoText": "Habilitando inicialização rápida"
},
"DisableBitlockerAutoEncryption": {
"Label": "Desabilitar criptografia automática de dispositivos do BitLocker",
"ToolTip": "Para dispositivos que suportam, o Windows 11 habilita automaticamente a criptografia de dispositivos BitLocker. Desabilitar isso desligará a criptografia automática do dispositivo, mas você ainda pode habilitar manualmente a criptografia BitLocker se desejar. Unidades que já estão criptografadas com BitLocker permanecerão criptografadas quando esta configuração for aplicada.",
"ApplyText": "Desabilitando criptografia automática de dispositivos do BitLocker",
"UndoLabel": "Habilitar criptografia automática de dispositivos do BitLocker",
"ApplyUndoText": "Habilitando criptografia automática de dispositivos do BitLocker"
},
"DisableModernStandbyNetworking": {
"Label": "Desabilitar conectividade de rede do Modern Standby",
"ToolTip": "Por padrão, dispositivos que suportam Modern Standby mantêm conectividade de rede durante o modo de suspensão. Desabilitar a conectividade de rede durante o Modern Standby pode ajudar a economizar bateria.",
"ApplyText": "Desabilitando conectividade de rede durante o Modern Standby",
"UndoLabel": "Habilitar conectividade de rede do Modern Standby",
"ApplyUndoText": "Habilitando conectividade de rede durante o Modern Standby"
},
"EnableEndTask": {
"Label": "Mostrar opção 'Finalizar tarefa' no menu de contexto da barra de tarefas",
"ToolTip": "Quando habilitado, adiciona uma opção 'Finalizar tarefa' ao menu de contexto de clique direito para apps na barra de tarefas, permitindo que você feche apps forçadamente rapidamente.",
"ApplyText": "Habilitando a opção 'Finalizar tarefa' no menu de contexto de clique direito da barra de tarefas",
"UndoLabel": "Ocultar opção 'Finalizar tarefa' no menu de contexto da barra de tarefas",
"ApplyUndoText": "Desabilitando a opção 'Finalizar tarefa' no menu de contexto de clique direito da barra de tarefas"
},
"EnableLastActiveClick": {
"Label": "Habilitar comportamento 'Último clique ativo' para apps da barra de tarefas",
"ToolTip": "Quando habilitado, clicar em um app na barra de tarefas mudará para a última janela ativa desse app, em vez de mostrar apenas a visualização em miniatura.",
"ApplyText": "Habilitando o comportamento 'Último clique ativo' na área de apps da barra de tarefas",
"UndoLabel": "Desabilitar comportamento 'Último clique ativo' para apps da barra de tarefas",
"ApplyUndoText": "Desabilitando o comportamento 'Último clique ativo' na área de apps da barra de tarefas"
},
"CombineTaskbarAlways": {
"Label": "Sempre combinar botões da barra de tarefas e ocultar rótulos na tela principal",
"ApplyText": "Definindo a barra de tarefas na tela principal para sempre combinar botões e ocultar rótulos"
},
"CombineMMTaskbarAlways": {
"Label": "Sempre combinar botões da barra de tarefas e ocultar rótulos em telas secundárias",
"ApplyText": "Definindo a barra de tarefas em telas secundárias para sempre combinar botões e ocultar rótulos"
},
"CombineTaskbarWhenFull": {
"Label": "Combinar botões da barra de tarefas e ocultar rótulos quando a barra estiver cheia na tela principal",
"ApplyText": "Definindo a barra de tarefas na tela principal para combinar botões e ocultar rótulos apenas quando a barra estiver cheia",
"UndoLabel": "Sempre combinar botões da barra de tarefas e ocultar rótulos na tela principal",
"ApplyUndoText": "Definindo a barra de tarefas na tela principal para sempre combinar botões e ocultar rótulos"
},
"CombineMMTaskbarWhenFull": {
"Label": "Combinar botões da barra de tarefas e ocultar rótulos quando a barra estiver cheia em telas secundárias",
"ApplyText": "Definindo a barra de tarefas em telas secundárias para combinar botões e ocultar rótulos apenas quando a barra estiver cheia",
"UndoLabel": "Sempre combinar botões da barra de tarefas e ocultar rótulos em telas secundárias",
"ApplyUndoText": "Definindo a barra de tarefas em telas secundárias para sempre combinar botões e ocultar rótulos"
},
"CombineTaskbarNever": {
"Label": "Nunca combinar botões da barra de tarefas e mostrar rótulos na tela principal",
"ApplyText": "Definindo a barra de tarefas na tela principal para nunca combinar botões ou ocultar rótulos",
"UndoLabel": "Sempre combinar botões da barra de tarefas e ocultar rótulos na tela principal",
"ApplyUndoText": "Definindo a barra de tarefas na tela principal para sempre combinar botões e ocultar rótulos"
},
"CombineMMTaskbarNever": {
"Label": "Nunca combinar botões da barra de tarefas e mostrar rótulos em telas secundárias",
"ApplyText": "Definindo a barra de tarefas em telas secundárias para nunca combinar botões ou ocultar rótulos",
"UndoLabel": "Sempre combinar botões da barra de tarefas e ocultar rótulos em telas secundárias",
"ApplyUndoText": "Definindo a barra de tarefas em telas secundárias para sempre combinar botões e ocultar rótulos"
},
"MMTaskbarModeAll": {
"Label": "Mostrar ícones de apps em todas as barras de tarefas",
"ApplyText": "Definindo a barra de tarefas para mostrar ícones de apps em todas as barras de tarefas"
},
"MMTaskbarModeMainActive": {
"Label": "Mostrar ícones de apps na barra principal e na barra onde a janela está aberta",
"ApplyText": "Definindo a barra de tarefas para mostrar ícones de apps na barra principal e na barra onde a janela está aberta",
"UndoLabel": "Mostrar ícones de apps em todas as barras de tarefas",
"ApplyUndoText": "Definindo a barra de tarefas para mostrar ícones de apps em todas as barras de tarefas"
},
"MMTaskbarModeActive": {
"Label": "Mostrar ícones de apps apenas na barra de tarefas onde a janela está aberta",
"ApplyText": "Definindo a barra de tarefas para mostrar ícones de apps apenas na barra de tarefas onde a janela está aberta",
"UndoLabel": "Mostrar ícones de apps em todas as barras de tarefas",
"ApplyUndoText": "Definindo a barra de tarefas para mostrar ícones de apps em todas as barras de tarefas"
},
"ExplorerToHome": {
"Label": "Alterar a localização padrão que o Explorador de Arquivos abre para 'Inicial'",
"ApplyText": "Alterando a localização padrão que o Explorador de Arquivos abre para, para 'Inicial'"
},
"ExplorerToThisPC": {
"Label": "Alterar a localização padrão que o Explorador de Arquivos abre para 'Este Computador'",
"ApplyText": "Alterando a localização padrão que o Explorador de Arquivos abre para, para 'Este Computador'",
"UndoLabel": "Alterar a localização padrão que o Explorador de Arquivos abre para 'Inicial'",
"ApplyUndoText": "Alterando a localização padrão que o Explorador de Arquivos abre para, para 'Inicial'"
},
"ExplorerToDownloads": {
"Label": "Alterar a localização padrão que o Explorador de Arquivos abre para 'Downloads'",
"ApplyText": "Alterando a localização padrão que o Explorador de Arquivos abre para, para 'Downloads'",
"UndoLabel": "Alterar a localização padrão que o Explorador de Arquivos abre para 'Inicial'",
"ApplyUndoText": "Alterando a localização padrão que o Explorador de Arquivos abre para, para 'Inicial'"
},
"ExplorerToOneDrive": {
"Label": "Alterar a localização padrão que o Explorador de Arquivos abre para 'OneDrive'",
"ApplyText": "Alterando a localização padrão que o Explorador de Arquivos abre para, para 'OneDrive'",
"UndoLabel": "Alterar a localização padrão que o Explorador de Arquivos abre para 'Inicial'",
"ApplyUndoText": "Alterando a localização padrão que o Explorador de Arquivos abre para, para 'Inicial'"
},
"ShowKnownFileExt": {
"Label": "Mostrar extensões de arquivo para tipos de arquivo conhecidos",
"ToolTip": "Isto mostrará extensões de arquivo para tipos de arquivo conhecidos. Por padrão, o Windows oculta extensões de arquivo para tipos de arquivo conhecidos, o que pode levar a confusão e riscos de segurança.",
"ApplyText": "Habilitando extensões de arquivo para tipos de arquivo conhecidos",
"UndoLabel": "Ocultar extensões de arquivo para tipos de arquivo conhecidos",
"ApplyUndoText": "Desabilitando extensões de arquivo para tipos de arquivo conhecidos"
},
"ShowHiddenFolders": {
"Label": "Mostrar arquivos, pastas e unidades ocultos",
"ToolTip": "Por padrão, o Windows oculta certos arquivos, pastas e unidades para evitar modificação ou exclusão acidental. Habilite isso para mostrar todos os arquivos no Explorador de Arquivos.",
"ApplyText": "Mostrando arquivos, pastas e unidades ocultos",
"UndoLabel": "Ocultar arquivos, pastas e unidades ocultos",
"ApplyUndoText": "Ocultando arquivos, pastas e unidades ocultos"
},
"HideDupliDrive": {
"Label": "Ocultar entradas duplicadas de unidades removíveis",
"ToolTip": "Por padrão, o Windows mostra unidades removíveis tanto em 'Este Computador' quanto no painel de navegação com sua própria entrada. Habilite esta configuração para mostrar unidades removíveis apenas em 'Este Computador'.",
"ApplyText": "Ocultando entradas duplicadas de unidades removíveis do painel de navegação do Explorador de Arquivos",
"UndoLabel": "Mostrar entradas duplicadas de unidades removíveis",
"ApplyUndoText": "Mostrando entradas duplicadas de unidades removíveis do painel de navegação do Explorador de Arquivos"
},
"HideHome": {
"Label": "Ocultar 'Inicial' do painel de navegação",
"ToolTip": "Oculta a seção 'Inicial' do painel de navegação do Explorador de Arquivos. Aviso: os atalhos do Acesso rápido podem não ser atualizados até você reiniciar o PC ou o Explorador de Arquivos.",
"ApplyText": "Ocultando a seção 'Inicial' do painel de navegação do Explorador de Arquivos",
"UndoLabel": "Mostrar 'Inicial' do painel de navegação",
"ApplyUndoText": "Mostrando a seção 'Inicial' do painel de navegação do Explorador de Arquivos"
},
"HideGallery": {
"Label": "Ocultar 'Galeria' do painel de navegação",
"ToolTip": "Oculta a seção 'Galeria' do painel de navegação do Explorador de Arquivos.",
"ApplyText": "Ocultando a seção 'Galeria' do painel de navegação do Explorador de Arquivos",
"UndoLabel": "Mostrar 'Galeria' do painel de navegação",
"ApplyUndoText": "Mostrando a seção 'Galeria' do painel de navegação do Explorador de Arquivos"
},
"DisableTransparency": {
"Label": "Desabilitar efeitos de transparência",
"ToolTip": "Isto desabilitará os efeitos de transparência no Windows e nas interfaces. Isso pode ajudar a melhorar o desempenho em hardware mais antigo.",
"ApplyText": "Desabilitando efeitos de transparência",
"UndoLabel": "Habilitar efeitos de transparência",
"ApplyUndoText": "Habilitando efeitos de transparência"
},
"DisableAnimations": {
"Label": "Desabilitar animações e efeitos visuais",
"ToolTip": "Isto desabilitará animações e alguns efeitos visuais no Windows, o que pode fazer a interface parecer mais responsiva, especialmente em hardware mais antigo.",
"ApplyText": "Desabilitando animações e efeitos visuais",
"UndoLabel": "Habilitar animações e efeitos visuais",
"ApplyUndoText": "Habilitando animações e efeitos visuais"
},
"DisableUpdateASAP": {
"Label": "Impedir que receba atualizações assim que estiverem disponíveis",
"ToolTip": "Isto impedirá que seu PC esteja entre os primeiros a receber novas atualizações que não sejam de segurança. Seu PC ainda receberá essas atualizações eventualmente.",
"ApplyText": "Impedindo o Windows de receber atualizações assim que estiverem disponíveis",
"UndoLabel": "Permitir receber atualizações assim que estiverem disponíveis",
"ApplyUndoText": "Permitindo o Windows de receber atualizações assim que estiverem disponíveis"
},
"PreventUpdateAutoReboot": {
"Label": "Impedir reinicializações automáticas após atualizações enquanto conectado",
"ToolTip": "Isto impedirá que seu PC reinicie automaticamente após atualizações enquanto qualquer usuário estiver conectado.",
"ApplyText": "Impedindo reinicializações automáticas após atualizações enquanto conectado",
"UndoLabel": "Permitir reinicializações automáticas após atualizações enquanto conectado",
"ApplyUndoText": "Permitindo reinicializações automáticas após atualizações enquanto conectado"
},
"DisableDeliveryOptimization": {
"Label": "Desabilitar compartilhamento de atualizações baixadas com outros PCs",
"ToolTip": "Isto impedirá que seu PC compartilhe atualizações baixadas com outros PCs na rede local ou na internet. Isso também impede que seu PC baixe atualizações de outros PCs.",
"ApplyText": "Desabilitando compartilhamento de atualizações baixadas com outros PCs",
"UndoLabel": "Habilitar compartilhamento de atualizações baixadas com outros PCs",
"ApplyUndoText": "Habilitando compartilhamento de atualizações baixadas com outros PCs"
},
"DisableDeviceAutoAppDownload": {
"Label": "Impedir que o Windows instale automaticamente apps complementares de dispositivos",
"ToolTip": "Impede que o Windows instale silenciosamente apps complementares de dispositivos via Windows Update quando você conectar certos dispositivos, como monitores da LG e Alienware. Esses dispositivos ainda funcionarão normalmente, isso apenas impede que o Windows Update instale automaticamente apps adicionais sem consentimento.",
"ApplyText": "Impedindo instalação automática de apps complementares de dispositivos",
"UndoLabel": "Permitir instalação automática de apps complementares de dispositivos",
"ApplyUndoText": "Permitindo instalação automática de apps complementares de dispositivos"
},
"ForceRemoveEdge": {
"Label": "Desinstalar Microsoft Edge forçadamente. NÃO RECOMENDADO!",
"ApplyText": "Desinstalando Microsoft Edge forçadamente"
},
"HideOnedrive": {
"Label": "Ocultar 'OneDrive' do painel de navegação",
"ToolTip": "Oculta a seção 'OneDrive' do painel de navegação do Explorador de Arquivos.",
"ApplyText": "Ocultando a seção 'OneDrive' do painel de navegação do Explorador de Arquivos",
"UndoLabel": "Mostrar 'OneDrive' do painel de navegação",
"ApplyUndoText": "Mostrando a seção 'OneDrive' do painel de navegação do Explorador de Arquivos"
},
"Hide3dObjects": {
"Label": "Ocultar pasta 'Objetos 3D' em 'Este Computador'",
"ToolTip": "Oculta a pasta 'Objetos 3D' do painel de navegação do Explorador de Arquivos.",
"ApplyText": "Ocultando a pasta 'Objetos 3D' do painel de navegação do Explorador de Arquivos",
"UndoLabel": "Mostrar pasta 'Objetos 3D' em 'Este Computador'",
"ApplyUndoText": "Mostrando a pasta 'Objetos 3D' do painel de navegação do Explorador de Arquivos"
},
"HideMusic": {
"Label": "Ocultar pasta 'Músicas' em 'Este Computador'",
"ToolTip": "Oculta a pasta 'Músicas' do painel de navegação do Explorador de Arquivos.",
"ApplyText": "Ocultando a pasta 'Músicas' do painel de navegação do Explorador de Arquivos",
"UndoLabel": "Mostrar pasta 'Músicas' em 'Este Computador'",
"ApplyUndoText": "Mostrando a pasta 'Músicas' do painel de navegação do Explorador de Arquivos"
},
"AddFoldersToThisPC": {
"Label": "Adicionar pastas comuns de volta à página 'Este Computador'",
"ToolTip": "Esta configuração adicionará pastas comuns como Área de Trabalho, Documentos, Downloads, Músicas, Imagens e Vídeos de volta à página 'Este Computador' no Explorador de Arquivos.",
"ApplyText": "Adicionando todas as pastas comuns (Área de Trabalho, Downloads, etc.) de volta ao 'Este Computador' no Explorador de Arquivos",
"UndoLabel": "Remover pastas comuns da página 'Este Computador'",
"ApplyUndoText": "Removendo todas as pastas comuns (Área de Trabalho, Downloads, etc.) de volta ao 'Este Computador' no Explorador de Arquivos"
},
"HideIncludeInLibrary": {
"Label": "Ocultar opção 'Incluir na biblioteca' no menu de contexto",
"ToolTip": "Oculta a opção 'Incluir na biblioteca' do menu de contexto do Explorador de Arquivos.",
"ApplyText": "Ocultando 'Incluir na biblioteca' no menu de contexto",
"UndoLabel": "Mostrar opção 'Incluir na biblioteca' no menu de contexto",
"ApplyUndoText": "Mostrando 'Incluir na biblioteca' no menu de contexto"
},
"HideGiveAccessTo": {
"Label": "Ocultar opção 'Dar acesso a' no menu de contexto",
"ToolTip": "Oculta a opção 'Dar acesso a' do menu de contexto do Explorador de Arquivos.",
"ApplyText": "Ocultando 'Dar acesso a' no menu de contexto",
"UndoLabel": "Mostrar opção 'Dar acesso a' no menu de contexto",
"ApplyUndoText": "Mostrando 'Dar acesso a' no menu de contexto"
},
"HideShare": {
"Label": "Ocultar opção 'Compartilhar' no menu de contexto",
"ToolTip": "Oculta a opção 'Compartilhar' do menu de contexto do Explorador de Arquivos.",
"ApplyText": "Ocultando 'Compartilhar' no menu de contexto",
"UndoLabel": "Mostrar opção 'Compartilhar' no menu de contexto",
"ApplyUndoText": "Mostrando 'Compartilhar' no menu de contexto"
},
"DisableBraveBloat": {
"Label": "Desabilitar bloat no navegador Brave (IA, Crypto, etc.)",
"ToolTip": "Isto desabilitará as funcionalidades de IA integradas do Brave, carteira Crypto, Notícias, Rewards, Talk e VPN. Esta funcionalidade usa políticas, que bloqueiam certas configurações.",
"ApplyText": "Desabilitando IA, Crypto, Notícias, Rewards, Talk e VPN no navegador Brave",
"UndoLabel": "Habilitar funcionalidades do navegador Brave (IA, Crypto, etc.)",
"ApplyUndoText": "Habilitando IA, Crypto, Notícias, Rewards, Talk e VPN no navegador Brave"
},
"EnableWindowsSandbox": {
"Label": "Habilitar Windows Sandbox",
"ToolTip": "O Windows Sandbox é um ambiente de área de trabalho leve para executar aplicativos com segurança em isolamento. O software instalado dentro do ambiente Windows Sandbox permanece 'em sandbox' e é executado separadamente da máquina host. Suportado apenas nas edições Windows 11 Pro, Workstation e Enterprise.",
"ApplyText": "Habilitando Windows Sandbox",
"UndoLabel": "Desabilitar Windows Sandbox",
"ApplyUndoText": "Desabilitando Windows Sandbox"
},
"EnableWindowsSubsystemForLinux": {
"Label": "Habilitar Windows Subsystem for Linux",
"ToolTip": "O Windows Subsystem for Linux permite que você execute um ambiente Linux diretamente no Windows sem a necessidade de uma máquina virtual.",
"ApplyText": "Habilitando Windows Subsystem for Linux",
"UndoLabel": "Desabilitar Windows Subsystem for Linux",
"ApplyUndoText": "Desabilitando Windows Subsystem for Linux"
},
"ShowDriveLettersFirst": {
"Label": "Mostrar letras de unidade antes da etiqueta da unidade",
"ToolTip": "Esta configuração mostrará as letras de unidade antes da etiqueta da unidade no Explorador de Arquivos.",
"ApplyText": "Mostrando letras de unidade antes da etiqueta da unidade",
"UndoLabel": "Mostrar letras de unidade após a etiqueta da unidade",
"ApplyUndoText": "Mostrando letras de unidade após a etiqueta da unidade"
},
"ShowDriveLettersLast": {
"Label": "Mostrar letras de unidade após a etiqueta da unidade",
"ToolTip": "Esta configuração mostrará as letras de unidade após a etiqueta da unidade no Explorador de Arquivos (comportamento padrão do Windows).",
"ApplyText": "Mostrando letras de unidade após a etiqueta da unidade"
},
"ShowNetworkDriveLettersFirst": {
"Label": "Mostrar letras de unidade de rede antes da etiqueta da unidade",
"ToolTip": "Esta configuração mostrará apenas as letras de unidade de rede antes da etiqueta da unidade no Explorador de Arquivos.",
"ApplyText": "Mostrando letras de unidade de rede antes da etiqueta da unidade",
"UndoLabel": "Mostrar letras de unidade após a etiqueta da unidade",
"ApplyUndoText": "Mostrando letras de unidade após a etiqueta da unidade"
},
"HideDriveLetters": {
"Label": "Ocultar todas as letras de unidade",
"ToolTip": "Esta configuração ocultará todas as letras de unidade do painel de navegação do Explorador de Arquivos e 'Este Computador'.",
"ApplyText": "Ocultando todas as letras de unidade",
"UndoLabel": "Mostrar letras de unidade após a etiqueta da unidade",
"ApplyUndoText": "Mostrando letras de unidade após a etiqueta da unidade"
},
"StartAllAppsCategory": {
"Label": "Mostrar Todos os Apps em visualização por categoria (Padrão)",
"ToolTip": "Isto definirá a seção Todos os Apps no Menu Iniciar para mostrar apps agrupados por categoria.",
"ApplyText": "Definindo visualização Todos os Apps para Categoria"
},
"StartAllAppsGrid": {
"Label": "Mostrar Todos os Apps em visualização em grade",
"ToolTip": "Isto definirá a seção Todos os Apps no Menu Iniciar para mostrar apps em um layout de grade alfabética.",
"ApplyText": "Definindo visualização Todos os Apps para Grade",
"UndoLabel": "Mostrar Todos os Apps em visualização por categoria",
"ApplyUndoText": "Definindo visualização Todos os Apps para Categoria"
},
"StartAllAppsList": {
"Label": "Mostrar Todos os Apps em visualização em lista",
"ToolTip": "Isto definirá a seção Todos os Apps no Menu Iniciar para mostrar apps em um layout de lista alfabética.",
"ApplyText": "Definindo visualização Todos os Apps para Lista",
"UndoLabel": "Mostrar Todos os Apps em visualização por categoria",
"ApplyUndoText": "Definindo visualização Todos os Apps para Categoria"
}
},
"UiGroups": {
"DesktopSpotlight": {
"Label": "Destaque do Windows na área de trabalho",
"ToolTip": "Esta configuração controla a opção de papel de parede do destaque do Windows. Mantenha o papel de parede rotativo com ou sem o atalho 'Saiba mais sobre esta imagem', ou desabilite o destaque do Windows completamente.",
"Values": {
"EnableDesktopSpotlight": "Mostrar atalho 'Saiba mais sobre esta imagem' (Padrão)",
"HideDesktopSpotlightIcon": "Ocultar atalho 'Saiba mais sobre esta imagem'",
"DisableDesktopSpotlight": "Desabilitar papel de parede do destaque do Windows"
}
},
"SearchIcon": {
"Label": "Estilo de pesquisa da barra de tarefas",
"ToolTip": "Esta configuração permite que você personalize a aparência da caixa de pesquisa na barra de tarefas.",
"Values": {
"ShowSearchBoxTb": "Mostrar caixa de pesquisa (Padrão)",
"ShowSearchLabelTb": "Mostrar ícone de pesquisa e rótulo",
"ShowSearchIconTb": "Mostrar apenas ícone de pesquisa",
"HideSearchTb": "Ocultar"
}
},
"MultiMon": {
"Label": "Mostrar apps da barra de tarefas em",
"ToolTip": "Esta configuração permite que você escolha onde os botões de apps da barra de tarefas são exibidos ao usar múltiplos monitores.",
"Values": {
"MMTaskbarModeAll": "Todas as barras de tarefas (Padrão)",
"MMTaskbarModeMainActive": "Barra principal e barra onde a janela está aberta",
"MMTaskbarModeActive": "Barra de tarefas onde a janela está aberta"
}
},
"CombineButtons": {
"Label": "Combinar botões da barra de tarefas na tela principal",
"ToolTip": "Esta configuração permite que você escolha como os botões da barra de tarefas são combinados na tela principal.",
"Values": {
"CombineTaskbarAlways": "Sempre (Padrão)",
"CombineTaskbarWhenFull": "Quando a barra de tarefas estiver cheia",
"CombineTaskbarNever": "Nunca"
}
},
"CombineMMButtons": {
"Label": "Combinar botões da barra de tarefas em telas secundárias",
"ToolTip": "Esta configuração permite que você escolha como os botões da barra de tarefas são combinados em telas secundárias.",
"Values": {
"CombineMMTaskbarAlways": "Sempre (Padrão)",
"CombineMMTaskbarWhenFull": "Quando a barra de tarefas estiver cheia",
"CombineMMTaskbarNever": "Nunca"
}
},
"ClearStart": {
"Label": "Remover apps fixados do Menu Iniciar",
"ToolTip": "Esta configuração permite que você remova rapidamente todos os apps fixados do Menu Iniciar.",
"Values": {
"ClearStart": "Remover para o usuário selecionado",
"ClearStartAllUsers": "Remover para todos os usuários"
}
},
"ExplorerLocation": {
"Label": "Abrir Explorador de Arquivos em",
"ToolTip": "Esta configuração permite que você escolha a localização padrão que o Explorador de Arquivos abre.",
"Values": {
"ExplorerToHome": "Inicial (Padrão)",
"ExplorerToThisPC": "Este Computador",
"ExplorerToDownloads": "Downloads",
"ExplorerToOneDrive": "OneDrive"
}
},
"DriveLetterPosition": {
"Label": "Posição da letra de unidade",
"ToolTip": "Esta configuração permite que você escolha onde as letras de unidade são exibidas no Explorador de Arquivos.",
"Values": {
"ShowDriveLettersLast": "Mostrar letras de unidade após a etiqueta da unidade (Padrão)",
"ShowDriveLettersFirst": "Mostrar letras de unidade antes da etiqueta da unidade",
"ShowNetworkDriveLettersFirst": "Mostrar letras de unidade de rede antes da etiqueta da unidade",
"HideDriveLetters": "Ocultar todas as letras de unidade"
}
},
"ShowTabsInAltTab": {
"Label": "Mostrar abas de apps ao encaixar ou pressionar Alt+Tab",
"ToolTip": "Esta configuração permite que você escolha se deseja mostrar abas de apps (como abas do navegador Edge) ao encaixar janelas ou pressionar Alt+Tab.",
"Values": {
"HideTabsInAltTab": "Não mostrar abas",
"Show3TabsInAltTab": "Mostrar 3 abas mais recentes (Padrão)",
"Show5TabsInAltTab": "Mostrar 5 abas mais recentes",
"Show20TabsInAltTab": "Mostrar 20 abas mais recentes"
}
},
"StartAllAppsView": {
"Label": "Visualização 'Todos os Apps' do Menu Iniciar",
"ToolTip": "Esta configuração permite que você altere o layout da seção 'Todos os Apps' no Menu Iniciar, ou oculte completamente. Ocultar esta seção pode dificultar a localização de apps instalados no seu sistema. Esta funcionalidade usa políticas, que bloqueiam certas configurações.",
"Values": {
"DisableStartAllApps": "Ocultar",
"StartAllAppsCategory": "Categoria (Padrão)",
"StartAllAppsGrid": "Grade",
"StartAllAppsList": "Lista"
}
}
}
}
+25 -43
View File
@@ -6,7 +6,7 @@
Win11Debloat is a lightweight, easy to use PowerShell script that allows you to quickly declutter and customize your Windows experience, no installation required! You can use it to remove pre-installed apps, disable telemetry, remove intrusive interface elements and much more. No need to painstakingly go through all the settings yourself or remove apps one by one. Win11Debloat makes the process quick and easy! Win11Debloat is a lightweight, easy to use PowerShell script that allows you to quickly declutter and customize your Windows experience, no installation required! You can use it to remove pre-installed apps, disable telemetry, remove intrusive interface elements and much more. No need to painstakingly go through all the settings yourself or remove apps one by one. Win11Debloat makes the process quick and easy!
The script also includes many features that system administrators and power users will enjoy. Such as a powerful command-line interface, support for Windows Audit mode and the ability to make changes to other Windows users. Please refer to our [wiki](https://github.com/Raphire/Win11Debloat/wiki/) for more details. The script also includes many features that system administrators and power users will enjoy. Such as a powerful command-line interface, support for Windows Audit mode and the ability to make changes to other Windows users. You can also easily export & import your preferred settings, allowing you to quickly apply the same settings on all your systems. Please refer to our [wiki](https://github.com/Raphire/Win11Debloat/wiki) for more details.
![Win11Debloat Menu](/Assets/Images/menu.png) ![Win11Debloat Menu](/Assets/Images/menu.png)
@@ -23,14 +23,14 @@ The script also includes many features that system administrators and power user
Download & run the script automatically via PowerShell. Download & run the script automatically via PowerShell.
1. Open PowerShell or Terminal, preferably as an administrator. 1. Open PowerShell or Terminal.
2. Copy and paste the command below into PowerShell: 2. Copy and paste the command below into PowerShell:
```PowerShell ```PowerShell
& ([scriptblock]::Create((irm "https://debloat.raphi.re/"))) & ([scriptblock]::Create((irm "https://debloat.raphi.re/")))
``` ```
3. Wait for the script to automatically download Win11Debloat. 3. Wait for the script to automatically download and launch Win11Debloat.
4. Carefully read through and follow the on-screen instructions. 4. Carefully read through and follow the on-screen instructions.
This method supports command-line parameters to customize the behaviour of the script. Please click [here](https://github.com/Raphire/Win11Debloat/wiki/Command%E2%80%90line-Interface#parameters) for more information. This method supports command-line parameters to customize the behaviour of the script. Please click [here](https://github.com/Raphire/Win11Debloat/wiki/Command%E2%80%90line-Interface#parameters) for more information.
@@ -57,7 +57,7 @@ This method supports command-line parameters to customize the behaviour of the s
3. Temporarily enable PowerShell execution by entering the following command: 3. Temporarily enable PowerShell execution by entering the following command:
```PowerShell ```PowerShell
Set-ExecutionPolicy Unrestricted -Scope Process -Force Set-ExecutionPolicy Bypass -Scope Process -Force
``` ```
4. In PowerShell, navigate to the directory where the files were extracted. Example: `cd c:\Win11Debloat` 4. In PowerShell, navigate to the directory where the files were extracted. Example: `cd c:\Win11Debloat`
@@ -74,10 +74,10 @@ This method supports command-line parameters to customize the behaviour of the s
## Features ## Features
Below is an overview of the key features and functionality offered by Win11Debloat. Please refer to [the wiki](https://github.com/Raphire/Win11Debloat/wiki/Default-Settings) for more information about the default settings preset. Below is an overview of the key features and functionality offered by Win11Debloat. You can visit the [the wiki](https://github.com/Raphire/Win11Debloat/wiki) for more details.
> [!Tip] > [!Tip]
> All of the changes made by Win11Debloat can easily be reverted and almost all of the apps can be reinstalled through the Microsoft Store. A full guide on how to revert changes can be found [here](https://github.com/Raphire/Win11Debloat/wiki/Reverting-Changes). > All of the changes made by Win11Debloat can easily be reverted and almost all of the apps can be reinstalled through the Microsoft Store. You can visit [the wiki](https://github.com/Raphire/Win11Debloat/wiki/Reverting-Changes) for more information on reverting changes.
#### App Removal #### App Removal
@@ -86,29 +86,21 @@ Below is an overview of the key features and functionality offered by Win11Deblo
#### Privacy & Suggested Content #### Privacy & Suggested Content
- Disable telemetry, diagnostic data, activity history, app-launch tracking & targeted ads. - Disable telemetry, diagnostic data, activity history, app-launch tracking & targeted ads.
- Disable tips, tricks, suggestions & ads across Windows. - Disable tips, tricks, suggestions & ads across Windows, the lock screen and Microsoft Edge.
- Disable Windows location services & app location access. - Disable Windows location services, app location access and Find My Device location tracking.
- Disable Find My Device location tracking.
- Disable 'Windows Spotlight' and tips & tricks on the lock screen.
- Disable 'Windows Spotlight' desktop background option.
- Disable ads, suggestions and the MSN news feed in Microsoft Edge.
- Hide Microsoft 365 ads on the Settings 'Home' page, or hide the 'Home' page entirely. - Hide Microsoft 365 ads on the Settings 'Home' page, or hide the 'Home' page entirely.
#### AI Features #### AI Features
- Disable & remove Microsoft Copilot. - Disable & remove Microsoft Copilot, Windows Recall and Click to Do.
- Disable Windows Recall.
- Disable Click to Do, AI text & image analysis tool.
- Prevent AI service (WSAIFabricSvc) from starting automatically. - Prevent AI service (WSAIFabricSvc) from starting automatically.
- Disable AI Features in Edge. - Disable AI Features in Edge, Chrome, Paint and Notepad.
- Disable AI Features in Paint.
- Disable AI Features in Notepad.
#### System #### System
- Disable the Drag Tray for sharing & moving files. - Disable the Drag Tray for sharing & moving files.
- Restore the old Windows 10 style context menu. - Restore the old Windows 10 style context menu.
- Turn off Enhance Pointer Precision, also known as mouse acceleration. - Turn off Enhance Pointer Precision (mouse acceleration).
- Disable the Sticky Keys keyboard shortcut. - Disable the Sticky Keys keyboard shortcut.
- Disable Storage Sense automatic disk cleanup. - Disable Storage Sense automatic disk cleanup.
- Disable fast start-up to ensure a full shutdown. - Disable fast start-up to ensure a full shutdown.
@@ -120,54 +112,44 @@ Below is an overview of the key features and functionality offered by Win11Deblo
- Prevent Windows from getting updates as soon as they're available. - Prevent Windows from getting updates as soon as they're available.
- Prevent automatic restarts after updates while signed in. - Prevent automatic restarts after updates while signed in.
- Disable sharing of downloaded updates with other PCs, also known as Delivery Optimization. - Disable sharing of downloaded updates with other PCs, also known as Delivery Optimization.
- Prevent Windows from auto-installing device companion apps, like LG Monitor App, Alienware Command Center and more.
#### Appearance #### Appearance
- Enable dark mode for system and apps. - Enable dark mode for system and apps.
- Disable transparency effects - Disable transparency, animations and visual effects.
- Disable animations and visual effects. - Hide the 'Learn about this picture' shortcut for desktop spotlight, or disable the Windows spotlight background option entirely.
#### Start Menu & Search #### Start Menu & Search
- Remove or replace all pinned apps from the start menu. - Customize the start menu by removing pinned apps, hiding recommendations, and customizing the 'All Apps' section.
- Hide the recommended section in the start menu.
- Hide the 'All Apps' section in the start menu.
- Disable the Phone Link mobile devices integration in the start menu. - Disable the Phone Link mobile devices integration in the start menu.
- Disable Bing web search & Copilot integration in Windows search. - Disable Bing web search & Copilot integration and Microsoft Store app suggestions in Windows search.
- Disable Microsoft Store app suggestions in Windows search.
- Disable Search Highlights (dynamic/branded content) in the taskbar search box.
- Disable local Windows search history.
#### Taskbar #### Taskbar
- Align taskbar icons to the left. - Change taskbar alignment.
- Hide or change the search icon/box on the taskbar. - Customize or hide taskbar buttons like the search bar, taskview and more.
- Hide the taskview button from the taskbar.
- Disable widgets on the taskbar & lock screen. - Disable widgets on the taskbar & lock screen.
- Hide the chat (meet now) icon from the taskbar. - Enable the 'End Task' option in the taskbar right click menu to quickly force-close apps.
- Enable the 'End Task' option in the taskbar right click menu.
- Enable the 'Last Active Click' behavior in the taskbar app area. This allows you to repeatedly click on an application's icon in the taskbar to switch focus between the open windows of that application. - Enable the 'Last Active Click' behavior in the taskbar app area. This allows you to repeatedly click on an application's icon in the taskbar to switch focus between the open windows of that application.
- Choose how app icons are shown on the taskbar when using multiple monitors. - Customize how app buttons are shown on the taskbar.
- Choose combine mode for taskbar buttons and labels.
#### File Explorer #### File Explorer
- Change the default location that File Explorer opens to. - Change the default location that File Explorer opens to.
- Show file extensions for known file types. - Show file extensions for known file types.
- Show hidden files, folders and drives. - Show hidden files, folders and drives.
- Hide the Home or Gallery section from the File Explorer navigation pane. - Hide the Home, Gallery or OneDrive section from the File Explorer navigation pane.
- Hide duplicate removable drive entries from the File Explorer navigation pane, so only the entry under 'This PC' remains. - Hide duplicate removable drive entries from the File Explorer navigation pane, so only the entry under 'This PC' remains.
- Add all common folders (Desktop, Downloads, etc.) back to 'This PC' in File Explorer. - Add all common folders (Desktop, Downloads, etc.) back to 'This PC' in File Explorer.
- Hide the 3D objects, music or OneDrive folder from the File Explorer navigation pane.
- Hide the 'Include in library', 'Give access to' and 'Share' options from the context menu.
- Change drive letter position or visibility in File Explorer. - Change drive letter position or visibility in File Explorer.
#### Multi-tasking #### Multi-tasking
- Disable window snapping. - Disable window snapping.
- Disable Snap Assist suggestions when snapping a window. - Disable Snap Assist and Snap Layout suggestions when dragging or snapping windows.
- Disable Snap Layout suggestions when dragging windows to the top of screen and when hovering on the maximize button. - Change whether tabs are shown when snapping windows or pressing Alt+Tab.
- Change if tabs are shown when snapping or pressing Alt+Tab.
#### Optional Windows Features #### Optional Windows Features
@@ -181,12 +163,12 @@ Below is an overview of the key features and functionality offered by Win11Deblo
#### Advanced Features #### Advanced Features
- Option to [apply changes to a different user](https://github.com/Raphire/Win11Debloat/wiki/Advanced-Features#running-as-another-user), instead of the currently logged in user. - Ability to [apply changes to a different user](https://github.com/Raphire/Win11Debloat/wiki/Advanced-Features#running-as-another-user), instead of the currently logged in user.
- [Sysprep mode](https://github.com/Raphire/Win11Debloat/wiki/Advanced-Features#sysprep-mode) to apply changes to the Windows Default user profile. Which ensures, all new users will have the changes automatically applied to them. - [Sysprep mode](https://github.com/Raphire/Win11Debloat/wiki/Advanced-Features#sysprep-mode) to apply changes to the Windows Default user profile. Which ensures, all new users will have the changes automatically applied to them.
## Contributing ## Contributing
We welcome contributions of all kinds! Please see our [Contributing Guidelines](/.github/CONTRIBUTING.md) for detailed instructions on how to get started and best practices for contributing. We welcome contributions of all kinds! Please see our [Contributing Guidelines](https://github.com/Raphire/Win11Debloat/blob/master/.github/CONTRIBUTING.md) for detailed instructions on how to get started and best practices for contributing.
## License ## License
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+7
View File
@@ -0,0 +1,7 @@
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\CloudContent]
"DisableSpotlightCollectionOnDesktop"=-
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel]
"{2cc5ca98-6485-489a-920e-b3e88a6ccce3}"=-
+7
View File
@@ -0,0 +1,7 @@
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\CloudContent]
"DisableSpotlightCollectionOnDesktop"=-
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel]
"{2cc5ca98-6485-489a-920e-b3e88a6ccce3}"=dword:00000001
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,7 @@
Windows Registry Editor Version 5.00
[hkey_users\default\Software\Policies\Microsoft\Windows\CloudContent]
"DisableSpotlightCollectionOnDesktop"=-
[hkey_users\default\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel]
"{2cc5ca98-6485-489a-920e-b3e88a6ccce3}"=-
@@ -0,0 +1,7 @@
Windows Registry Editor Version 5.00
[hkey_users\default\Software\Policies\Microsoft\Windows\CloudContent]
"DisableSpotlightCollectionOnDesktop"=-
[hkey_users\default\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel]
"{2cc5ca98-6485-489a-920e-b3e88a6ccce3}"=dword:00000001
@@ -0,0 +1,7 @@
Windows Registry Editor Version 5.00
[hkey_users\default\Software\Policies\Microsoft\Windows\CloudContent]
"DisableSpotlightCollectionOnDesktop"=-
[hkey_users\default\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel]
"{2cc5ca98-6485-489a-920e-b3e88a6ccce3}"=-
@@ -0,0 +1,4 @@
Windows Registry Editor Version 5.00
[hkey_users\default\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel]
"{2cc5ca98-6485-489a-920e-b3e88a6ccce3}"=-
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,4 @@
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel]
"{2cc5ca98-6485-489a-920e-b3e88a6ccce3}"=-
+11 -11
View File
@@ -1,5 +1,5 @@
@echo off @echo off
setlocal EnableDelayedExpansion setlocal
:: Set Windows Terminal installation paths. (Default and Scoop installation) :: Set Windows Terminal installation paths. (Default and Scoop installation)
set "wtDefaultPath=%LOCALAPPDATA%\Microsoft\WindowsApps\wt.exe" set "wtDefaultPath=%LOCALAPPDATA%\Microsoft\WindowsApps\wt.exe"
@@ -15,22 +15,20 @@ if exist "%wtDefaultPath%" (
) else if exist "%wtScoopPath%" ( ) else if exist "%wtScoopPath%" (
set "wtPath=%wtScoopPath%" set "wtPath=%wtScoopPath%"
) else ( ) else (
echo Windows Terminal not found. Using default PowerShell instead.
set "wtPath=" set "wtPath="
) )
set "SCRIPT_PATH=\"%~dp0Win11Debloat.ps1\"" :: Interpolated into a PS single-quoted string below;
:: Apostrophes escaped via %:'=''% and -File arg uses [char]34 to avoid quote-parity bugs.
set "SCRIPT_PATH=%~dp0Win11Debloat.ps1"
:: Launch script
if defined wtPath ( if defined wtPath (
call :Log Launching Win11Debloat.ps1 with Windows Terminal... call :Log Launching Win11Debloat.ps1 with Windows Terminal...
PowerShell -Command "Start-Process -FilePath '%wtPath%' -ArgumentList 'PowerShell -NoProfile -ExecutionPolicy Bypass -File %SCRIPT_PATH%' -Verb RunAs" >> "%logFile%" || call :Error "PowerShell command failed" PowerShell -NoProfile -ExecutionPolicy Bypass -Command "$p='%SCRIPT_PATH:'=''%'; $w='%wtPath:'=''%'; $q=[char]34; Start-Process -FilePath $w -ArgumentList ('PowerShell -NoProfile -ExecutionPolicy Bypass -File ' + $q + $p + $q) -Verb RunAs" >> "%logFile%" || call :Error "PowerShell command failed"
call :Log Script execution passed successfully to Win11Debloat.ps1
) else ( ) else (
echo Windows Terminal not found. Using default PowerShell instead... echo Windows Terminal not found, using default PowerShell...
call :Log Windows Terminal not found. Using default PowerShell to launch Win11Debloat.ps1... call :Log Windows Terminal not found. Using default PowerShell to launch Win11Debloat.ps1...
PowerShell -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File %SCRIPT_PATH%' -Verb RunAs}" >> "%logFile%" || call :Error "PowerShell command failed" PowerShell -NoProfile -ExecutionPolicy Bypass -Command "$p='%SCRIPT_PATH:'=''%'; $q=[char]34; Start-Process PowerShell -ArgumentList ('-NoProfile -ExecutionPolicy Bypass -File ' + $q + $p + $q) -Verb RunAs" >> "%logFile%" || call :Error "PowerShell command failed"
call :Log Script execution passed successfully to Win11Debloat.ps1
) )
echo. echo.
@@ -40,11 +38,13 @@ goto :EOF
:: Logging Function :: Logging Function
:Log :Log
echo %* >> "%logFile%" echo(%* >> "%logFile%"
goto :EOF goto :EOF
:: Error Handler :: Error Handler
:Error :Error
echo ERROR: %* echo(ERROR: %*
call :Log ERROR: %*
echo Logged in %logFile% echo Logged in %logFile%
pause pause
goto :EOF goto :EOF
+9 -9
View File
@@ -1,6 +1,6 @@
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="About Win11Debloat" Title="%LANG:AboutTitle%"
Width="500" Width="500"
SizeToContent="Height" SizeToContent="Height"
ResizeMode="NoResize" ResizeMode="NoResize"
@@ -22,7 +22,7 @@
<!-- Title Bar --> <!-- Title Bar -->
<Grid Grid.Row="0" x:Name="TitleBar" Style="{DynamicResource ModalTitleBarStyle}"> <Grid Grid.Row="0" x:Name="TitleBar" Style="{DynamicResource ModalTitleBarStyle}">
<TextBlock Text="About Win11Debloat" <TextBlock Text="%LANG:AboutTitle%"
Style="{DynamicResource ModalTitleTextStyle}"/> Style="{DynamicResource ModalTitleTextStyle}"/>
</Grid> </Grid>
@@ -48,7 +48,7 @@
<!-- Version --> <!-- Version -->
<TextBlock Grid.Row="0" Grid.Column="0" <TextBlock Grid.Row="0" Grid.Column="0"
Text="Version:" Text="%LANG:AboutVersionLabel%"
Style="{DynamicResource ModalInfoLabelTextStyle}"/> Style="{DynamicResource ModalInfoLabelTextStyle}"/>
<TextBlock x:Name="VersionText" <TextBlock x:Name="VersionText"
Grid.Row="0" Grid.Column="1" Grid.Row="0" Grid.Column="1"
@@ -57,7 +57,7 @@
<!-- Author --> <!-- Author -->
<TextBlock Grid.Row="1" Grid.Column="0" <TextBlock Grid.Row="1" Grid.Column="0"
Text="Author:" Text="%LANG:AboutAuthorLabel%"
Style="{DynamicResource ModalInfoLabelTextStyle}"/> Style="{DynamicResource ModalInfoLabelTextStyle}"/>
<TextBlock Grid.Row="1" Grid.Column="1" <TextBlock Grid.Row="1" Grid.Column="1"
Text="Raphire" Text="Raphire"
@@ -65,7 +65,7 @@
<!-- Project Link --> <!-- Project Link -->
<TextBlock Grid.Row="2" Grid.Column="0" <TextBlock Grid.Row="2" Grid.Column="0"
Text="Project:" Text="%LANG:AboutProjectLabel%"
Style="{DynamicResource ModalInfoLabelTextStyle}" Style="{DynamicResource ModalInfoLabelTextStyle}"
Margin="0,0,16,0"/> Margin="0,0,16,0"/>
<TextBlock x:Name="ProjectLink" <TextBlock x:Name="ProjectLink"
@@ -85,7 +85,7 @@
<!-- Content --> <!-- Content -->
<StackPanel Grid.Row="2" Margin="20,16,20,16"> <StackPanel Grid.Row="2" Margin="20,16,20,16">
<!-- Donation Message --> <!-- Donation Message -->
<TextBlock Text="Win11Debloat is a passion project that I maintain in my free time. If you've found this tool useful, please consider making a small donation to support its development. I really appreciate it!" <TextBlock Text="%LANG:AboutDonationMessage%"
FontSize="14" FontSize="14"
Foreground="{DynamicResource AppFgColor}" Foreground="{DynamicResource AppFgColor}"
TextWrapping="Wrap" TextWrapping="Wrap"
@@ -105,7 +105,7 @@
HorizontalAlignment="Center" HorizontalAlignment="Center"
VerticalAlignment="Center" VerticalAlignment="Center"
FontWeight="SemiBold" FontWeight="SemiBold"
FontFamily="Segoe Fluent Icons" FontFamily="{DynamicResource AppIconFontFamily}"
Text="&#xEB52;" Text="&#xEB52;"
Foreground="{DynamicResource TitleBarCloseHoverColor}" Foreground="{DynamicResource TitleBarCloseHoverColor}"
Margin="0,0,8,0"/> Margin="0,0,8,0"/>
@@ -117,7 +117,7 @@
HorizontalAlignment="Center" HorizontalAlignment="Center"
VerticalAlignment="Center" VerticalAlignment="Center"
FontWeight="SemiBold" FontWeight="SemiBold"
Text="Support me on Ko-fi"/> Text="%LANG:AboutKofiLink%"/>
</Grid> </Grid>
</StackPanel> </StackPanel>
</Grid> </Grid>
@@ -132,7 +132,7 @@
<Button x:Name="CloseButton" <Button x:Name="CloseButton"
Grid.Column="1" Grid.Column="1"
Content="Close" Content="%LANG:TitleBarClose%"
Style="{DynamicResource ModalSecondaryStretchedButtonStyle}"/> Style="{DynamicResource ModalSecondaryStretchedButtonStyle}"/>
</Grid> </Grid>
</Border> </Border>
+13 -13
View File
@@ -1,6 +1,6 @@
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Win11Debloat Application Selection" Title="%LANG:AppSelectionWindowTitle%"
Width="450" Height="580" Width="450" Height="580"
ResizeMode="NoResize" ResizeMode="NoResize"
WindowStartupLocation="CenterScreen" WindowStartupLocation="CenterScreen"
@@ -16,7 +16,7 @@
<Setter Property="BorderThickness" Value="0"/> <Setter Property="BorderThickness" Value="0"/>
<Setter Property="Width" Value="46"/> <Setter Property="Width" Value="46"/>
<Setter Property="Height" Value="32"/> <Setter Property="Height" Value="32"/>
<Setter Property="FontFamily" Value="Segoe MDL2 Assets"/> <Setter Property="FontFamily" Value="{DynamicResource AppIconFontFamily}"/>
<Setter Property="FontSize" Value="10"/> <Setter Property="FontSize" Value="10"/>
<Setter Property="Template"> <Setter Property="Template">
<Setter.Value> <Setter.Value>
@@ -64,14 +64,14 @@
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" <TextBlock Grid.Column="0"
Text="Win11Debloat Application Selection" Text="%LANG:AppSelectionWindowTitle%"
Foreground="{DynamicResource AppFgColor}" Foreground="{DynamicResource AppFgColor}"
VerticalAlignment="Center" VerticalAlignment="Center"
Margin="12,0,0,0" Margin="12,0,0,0"
FontSize="12"/> FontSize="12"/>
<StackPanel Grid.Column="1" Orientation="Horizontal"> <StackPanel Grid.Column="1" Orientation="Horizontal">
<Button x:Name="CloseBtn" Content="&#xE8BB;" Style="{StaticResource CloseButton}" ToolTip="Close" IsCancel="True" AutomationProperties.Name="Close"/> <Button x:Name="CloseBtn" Content="&#xE8BB;" Style="{StaticResource CloseButton}" ToolTip="%LANG:TitleBarClose%" IsCancel="True" AutomationProperties.Name="%LANG:TitleBarClose%"/>
</StackPanel> </StackPanel>
</Grid> </Grid>
</Border> </Border>
@@ -87,14 +87,14 @@
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<TextBlock Grid.Row="0" <TextBlock Grid.Row="0"
Text="Check apps that you wish to remove, uncheck apps that you wish to keep" Text="%LANG:AppSelectionWindowInstructions%"
TextWrapping="Wrap" TextWrapping="Wrap"
Foreground="{DynamicResource AppFgColor}" Foreground="{DynamicResource AppFgColor}"
Margin="0,0,0,10"/> Margin="0,0,0,10"/>
<StackPanel Grid.Row="1" Orientation="Horizontal" Margin="0,0,0,8"> <StackPanel Grid.Row="1" Orientation="Horizontal" Margin="0,0,0,8">
<CheckBox x:Name="CheckAllBox" Content="Check/Uncheck all" Margin="8,0,15,0" Foreground="{DynamicResource AppFgColor}" AutomationProperties.Name="Check or Uncheck all"/> <CheckBox x:Name="CheckAllBox" Content="%LANG:AppSelectionWindowCheckAll%" Margin="8,0,15,0" Foreground="{DynamicResource AppFgColor}" AutomationProperties.Name="%LANG:AppSelectionWindowCheckAllAutomationName%"/>
</StackPanel> </StackPanel>
<Border Grid.Row="2" BorderBrush="{DynamicResource AppBorderColor}" CornerRadius="4" BorderThickness="1" Margin="0,0,0,10" Background="{DynamicResource CardBgColor}"> <Border Grid.Row="2" BorderBrush="{DynamicResource AppBorderColor}" CornerRadius="4" BorderThickness="1" Margin="0,0,0,10" Background="{DynamicResource CardBgColor}">
@@ -103,17 +103,17 @@
<StackPanel x:Name="AppsPanel" Margin="5"/> <StackPanel x:Name="AppsPanel" Margin="5"/>
</ScrollViewer> </ScrollViewer>
<Border x:Name="LoadingAppsIndicator" CornerRadius="4" Background="{DynamicResource ScrollBarThumbColor}" Opacity="0.8" Visibility="Collapsed"> <Border x:Name="LoadingAppsIndicator" CornerRadius="4" Background="{DynamicResource ScrollBarThumbColor}" Opacity="0.8" Visibility="Collapsed">
<TextBlock Text="Loading apps..." FontSize="16" FontWeight="SemiBold" Foreground="{DynamicResource AppFgColor}" HorizontalAlignment="Center" VerticalAlignment="Center"/> <TextBlock Text="%LANG:AppLoadingIndicator%" FontSize="16" FontWeight="SemiBold" Foreground="{DynamicResource AppFgColor}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border> </Border>
</Grid> </Grid>
</Border> </Border>
<StackPanel Grid.Row="3" Orientation="Horizontal" HorizontalAlignment="Right"> <StackPanel Grid.Row="3" Orientation="Horizontal" HorizontalAlignment="Right">
<Grid Margin="0,8,10,10"> <Grid Margin="0,8,10,10">
<CheckBox x:Name="OnlyInstalledBox" Content="Only show installed apps" Foreground="{DynamicResource AppFgColor}" AutomationProperties.Name="Only show installed apps"/> <CheckBox x:Name="OnlyInstalledBox" Content="%LANG:AppOnlyInstalledCheckbox%" Foreground="{DynamicResource AppFgColor}" AutomationProperties.Name="%LANG:AppOnlyInstalledCheckbox%"/>
</Grid> </Grid>
<Button x:Name="ConfirmBtn" Width="80" Height="32" Margin="0,0,10,0" Content="Confirm" Style="{DynamicResource PrimaryButtonStyle}" AutomationProperties.Name="Confirm"/> <Button x:Name="ConfirmBtn" Width="80" Height="32" Margin="0,0,10,0" Content="%LANG:AppSelectionWindowConfirm%" Style="{DynamicResource PrimaryButtonStyle}" AutomationProperties.Name="%LANG:AppSelectionWindowConfirm%"/>
<Button x:Name="CancelBtn" Width="80" Height="32" Content="Cancel" Style="{DynamicResource SecondaryButtonStyle}" IsCancel="True" AutomationProperties.Name="Cancel"/> <Button x:Name="CancelBtn" Width="80" Height="32" Content="%LANG:AppSelectionWindowCancel%" Style="{DynamicResource SecondaryButtonStyle}" IsCancel="True" AutomationProperties.Name="%LANG:AppSelectionWindowCancel%"/>
</StackPanel> </StackPanel>
</Grid> </Grid>
</Grid> </Grid>
+24 -24
View File
@@ -1,6 +1,6 @@
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Apply Changes" Title="%LANG:DeployApplyChanges%"
Width="500" Width="500"
SizeToContent="Height" SizeToContent="Height"
ResizeMode="NoResize" ResizeMode="NoResize"
@@ -24,8 +24,8 @@
Width="36" Height="32" Width="36" Height="32"
BorderThickness="0" BorderThickness="0"
Cursor="Hand" Cursor="Hand"
ToolTip="Cancel" ToolTip="%LANG:ApplyCancelTooltip%"
AutomationProperties.Name="Cancel"> AutomationProperties.Name="%LANG:ApplyCancelTooltip%">
<Button.Template> <Button.Template>
<ControlTemplate TargetType="Button"> <ControlTemplate TargetType="Button">
<Border Background="{TemplateBinding Background}" BorderThickness="0" CornerRadius="0,8,0,0"> <Border Background="{TemplateBinding Background}" BorderThickness="0" CornerRadius="0,8,0,0">
@@ -44,7 +44,7 @@
</Style.Triggers> </Style.Triggers>
</Style> </Style>
</Button.Style> </Button.Style>
<TextBlock Text="&#xE8BB;" FontFamily="Segoe Fluent Icons" FontSize="10"/> <TextBlock Text="&#xE8BB;" FontFamily="{DynamicResource AppIconFontFamily}" FontSize="10"/>
</Button> </Button>
<StackPanel Grid.Row="0" Grid.RowSpan="2"> <StackPanel Grid.Row="0" Grid.RowSpan="2">
@@ -54,7 +54,7 @@
<!-- Loading icon (spinning) --> <!-- Loading icon (spinning) -->
<TextBlock x:Name="ApplySpinnerIcon" <TextBlock x:Name="ApplySpinnerIcon"
Text="&#xE895;" Text="&#xE895;"
FontFamily="Segoe Fluent Icons" FontFamily="{DynamicResource AppIconFontFamily}"
FontSize="36" FontSize="36"
Foreground="{DynamicResource ButtonBgColor}" Foreground="{DynamicResource ButtonBgColor}"
HorizontalAlignment="Center" HorizontalAlignment="Center"
@@ -78,12 +78,12 @@
</TextBlock.Triggers> </TextBlock.Triggers>
</TextBlock> </TextBlock>
<TextBlock Text="Applying Changes" <TextBlock Text="%LANG:ApplyInProgressTitle%"
Style="{DynamicResource ModalTitleStyle}"/> Style="{DynamicResource ModalTitleStyle}"/>
<!-- Current step name --> <!-- Current step name -->
<TextBlock x:Name="ApplyStepName" <TextBlock x:Name="ApplyStepName"
Text="Preparing..." Text="%LANG:ApplyPreparing%"
Style="{DynamicResource ModalSubtextStyle}" Style="{DynamicResource ModalSubtextStyle}"
TextTrimming="CharacterEllipsis" TextTrimming="CharacterEllipsis"
MaxWidth="430"/> MaxWidth="430"/>
@@ -99,9 +99,9 @@
Margin="0,2,0,8"/> Margin="0,2,0,8"/>
<!-- Step counter --> <!-- Step counter -->
<TextBlock x:Name="ApplyStepCounter" <TextBlock x:Name="ApplyStepCounter"
Text="Step 0 of 0" Text="%LANG:ApplyPreparing%"
FontSize="12" FontSize="12"
Foreground="{DynamicResource AppFgColor}" Foreground="{DynamicResource AppFgColor}"
HorizontalAlignment="Right" HorizontalAlignment="Right"
Opacity="0.8"/> Opacity="0.8"/>
@@ -115,18 +115,18 @@
<!-- Success icon --> <!-- Success icon -->
<TextBlock x:Name="ApplyCompletionIcon" <TextBlock x:Name="ApplyCompletionIcon"
Text="&#xE73E;" Text="&#xE73E;"
FontFamily="Segoe Fluent Icons" FontFamily="{DynamicResource AppIconFontFamily}"
FontSize="40" FontSize="40"
Foreground="{DynamicResource ButtonBgColor}" Foreground="{DynamicResource ButtonBgColor}"
HorizontalAlignment="Center" HorizontalAlignment="Center"
Margin="0,0,0,12"/> Margin="0,0,0,12"/>
<TextBlock x:Name="ApplyCompletionTitle" <TextBlock x:Name="ApplyCompletionTitle"
Text="Changes Applied" Text="%LANG:ApplyCompletionTitleSuccess%"
Style="{DynamicResource ModalTitleStyle}"/> Style="{DynamicResource ModalTitleStyle}"/>
<TextBlock x:Name="ApplyCompletionMessage" <TextBlock x:Name="ApplyCompletionMessage"
Text="Please note that some changes will only take effect after a reboot. Thanks for using Win11Debloat!" Text="%LANG:ApplyCompletionMessageDefault%"
TextWrapping="Wrap" TextWrapping="Wrap"
Style="{DynamicResource ModalSubtextStyle}"/> Style="{DynamicResource ModalSubtextStyle}"/>
</StackPanel> </StackPanel>
@@ -141,12 +141,12 @@
<StackPanel> <StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,0,0,6"> <StackPanel Orientation="Horizontal" Margin="0,0,0,6">
<TextBlock Text="&#xE7BA;" <TextBlock Text="&#xE7BA;"
FontFamily="Segoe Fluent Icons" FontFamily="{DynamicResource AppIconFontFamily}"
FontSize="14" FontSize="14"
Foreground="#e8912d" Foreground="#e8912d"
VerticalAlignment="Center" VerticalAlignment="Center"
Margin="0,0,8,0"/> Margin="0,0,8,0"/>
<TextBlock Text="A reboot is required for these changes to take effect:" <TextBlock Text="%LANG:ApplyRebootRequiredHeader%"
FontSize="13" FontSize="13"
FontWeight="SemiBold" FontWeight="SemiBold"
Foreground="{DynamicResource AppFgColor}" Foreground="{DynamicResource AppFgColor}"
@@ -161,16 +161,16 @@
<UniformGrid x:Name="ButtonPanel" Rows="1"> <UniformGrid x:Name="ButtonPanel" Rows="1">
<Button x:Name="ApplyKofiBtn" <Button x:Name="ApplyKofiBtn"
Style="{DynamicResource ModalSecondaryStretchedButtonStyle}" Style="{DynamicResource ModalSecondaryStretchedButtonStyle}"
AutomationProperties.Name="Support the creator"> AutomationProperties.Name="%LANG:TitleBarSupportCreator%">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center"> <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="&#xEB52;" FontFamily="Segoe Fluent Icons" FontSize="14" VerticalAlignment="Center" Margin="0,0,8,-1"/> <TextBlock Text="&#xEB52;" FontFamily="{DynamicResource AppIconFontFamily}" FontSize="14" VerticalAlignment="Center" Margin="0,0,8,-1"/>
<TextBlock Text="Support the creator" VerticalAlignment="Center" FontSize="14" Margin="0,0,0,1"/> <TextBlock Text="%LANG:TitleBarSupportCreator%" VerticalAlignment="Center" FontSize="14" Margin="0,0,0,1"/>
</StackPanel> </StackPanel>
</Button> </Button>
<Button x:Name="ApplyCloseBtn" <Button x:Name="ApplyCloseBtn"
Style="{DynamicResource ModalPrimaryStretchedButtonStyle}" Style="{DynamicResource ModalPrimaryStretchedButtonStyle}"
AutomationProperties.Name="Close"> AutomationProperties.Name="%LANG:TitleBarClose%">
<TextBlock Text="Close" VerticalAlignment="Center" FontSize="14" Margin="0,0,0,1"/> <TextBlock Text="%LANG:TitleBarClose%" VerticalAlignment="Center" FontSize="14" Margin="0,0,0,1"/>
</Button> </Button>
</UniformGrid> </UniformGrid>
</Border> </Border>
+1 -1
View File
@@ -23,7 +23,7 @@
Color="Black"/> Color="Black"/>
</Border.Effect> </Border.Effect>
<TextBlock Name="BubbleText" <TextBlock Name="BubbleText"
Text="View the selected changes here" Text="%LANG:BubbleViewChanges%"
TextWrapping="Wrap" TextWrapping="Wrap"
MaxWidth="260" MaxWidth="260"
Foreground="{DynamicResource AppFgColor}"/> Foreground="{DynamicResource AppFgColor}"/>
+3 -3
View File
@@ -1,6 +1,6 @@
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Select Settings to Import/Export" Title="%LANG:ImportExportImportTitle%"
Width="440" Width="440"
SizeToContent="Height" SizeToContent="Height"
MaxHeight="501" MaxHeight="501"
@@ -45,10 +45,10 @@
<Border Grid.Row="2" Style="{DynamicResource ModalFooterBorderStyle}"> <Border Grid.Row="2" Style="{DynamicResource ModalFooterBorderStyle}">
<UniformGrid Rows="1"> <UniformGrid Rows="1">
<Button x:Name="OkButton" <Button x:Name="OkButton"
Content="OK" Content="%LANG:MessageBoxOk%"
Style="{DynamicResource ModalPrimaryStretchedButtonStyle}"/> Style="{DynamicResource ModalPrimaryStretchedButtonStyle}"/>
<Button x:Name="CancelButton" <Button x:Name="CancelButton"
Content="Cancel" Content="%LANG:MessageBoxCancel%"
Style="{DynamicResource ModalSecondaryStretchedButtonStyle}"/> Style="{DynamicResource ModalSecondaryStretchedButtonStyle}"/>
</UniformGrid> </UniformGrid>
</Border> </Border>
+137 -148
View File
@@ -1,7 +1,7 @@
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:shell="clr-namespace:System.Windows.Shell;assembly=PresentationFramework" xmlns:shell="clr-namespace:System.Windows.Shell;assembly=PresentationFramework"
Title="Win11Debloat" Title="%LANG:TitleBarAppName%"
MinWidth="860" MinHeight="640" MinWidth="860" MinHeight="640"
ResizeMode="CanResize" ResizeMode="CanResize"
SnapsToDevicePixels="True" SnapsToDevicePixels="True"
@@ -65,7 +65,7 @@
<!-- Category header icon style --> <!-- Category header icon style -->
<Style x:Key="CategoryHeaderIcon" TargetType="TextBlock"> <Style x:Key="CategoryHeaderIcon" TargetType="TextBlock">
<Setter Property="FontFamily" Value="Segoe Fluent Icons"/> <Setter Property="FontFamily" Value="{DynamicResource AppIconFontFamily}"/>
<Setter Property="FontSize" Value="20"/> <Setter Property="FontSize" Value="20"/>
<Setter Property="LineHeight" Value="20"/> <Setter Property="LineHeight" Value="20"/>
<Setter Property="Foreground" Value="{DynamicResource AppFgColor}"/> <Setter Property="Foreground" Value="{DynamicResource AppFgColor}"/>
@@ -196,7 +196,7 @@
<Setter Property="BorderThickness" Value="0"/> <Setter Property="BorderThickness" Value="0"/>
<Setter Property="Width" Value="46"/> <Setter Property="Width" Value="46"/>
<Setter Property="Height" Value="32"/> <Setter Property="Height" Value="32"/>
<Setter Property="FontFamily" Value="Segoe Fluent Icons"/> <Setter Property="FontFamily" Value="{DynamicResource AppIconFontFamily}"/>
<Setter Property="FontSize" Value="10"/> <Setter Property="FontSize" Value="10"/>
<Setter Property="Template"> <Setter Property="Template">
<Setter.Value> <Setter.Value>
@@ -346,7 +346,7 @@
<ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" <TextBlock Grid.Column="0"
Text="Win11Debloat" Text="%LANG:TitleBarAppName%"
VerticalAlignment="Center" VerticalAlignment="Center"
Margin="12,0,0,0" Margin="12,0,0,0"
FontSize="12"> FontSize="12">
@@ -362,8 +362,9 @@
</TextBlock.Style> </TextBlock.Style>
</TextBlock> </TextBlock>
<StackPanel Grid.Column="1" Orientation="Horizontal"> <StackPanel Grid.Column="1" Orientation="Horizontal">
<Button x:Name="KofiBtn" shell:WindowChrome.IsHitTestVisibleInChrome="True" Content="&#xEB52;" FontFamily="Segoe Fluent Icons" FontSize="15" Style="{StaticResource TitlebarButton}" ToolTip="Support the creator" AutomationProperties.Name="Support the creator"/> <Button x:Name="KofiBtn" shell:WindowChrome.IsHitTestVisibleInChrome="True" Content="&#xEB52;" FontSize="15" Style="{StaticResource TitlebarButton}" ToolTip="%LANG:TitleBarSupportCreator%" AutomationProperties.Name="%LANG:TitleBarSupportCreator%"/>
<Button x:Name="MenuBtn" shell:WindowChrome.IsHitTestVisibleInChrome="True" Content="&#xE700;" FontFamily="Segoe Fluent Icons" FontSize="15" Style="{StaticResource TitlebarButton}" ToolTip="Options" AutomationProperties.Name="Options"> <Button x:Name="SettingsBtn" shell:WindowChrome.IsHitTestVisibleInChrome="True" Content="&#xE713;" FontSize="15" Style="{StaticResource TitlebarButton}" ToolTip="%LANG:SettingsTitle%" AutomationProperties.Name="%LANG:SettingsTitle%"/>
<Button x:Name="MenuBtn" shell:WindowChrome.IsHitTestVisibleInChrome="True" Content="&#xE700;" FontSize="15" Style="{StaticResource TitlebarButton}" ToolTip="%LANG:TitleBarOptions%" AutomationProperties.Name="%LANG:TitleBarOptions%">
<Button.ContextMenu> <Button.ContextMenu>
<ContextMenu x:Name="MainMenu"> <ContextMenu x:Name="MainMenu">
<ContextMenu.Resources> <ContextMenu.Resources>
@@ -378,46 +379,46 @@
</Setter> </Setter>
</Style> </Style>
</ContextMenu.Resources> </ContextMenu.Resources>
<MenuItem x:Name="ImportConfigBtn" Header="Import config" AutomationProperties.Name="Import configuration"> <MenuItem x:Name="ImportConfigBtn" Header="%LANG:MenuImportConfig%" AutomationProperties.Name="%LANG:MenuImportConfigTooltip%">
<MenuItem.Icon> <MenuItem.Icon>
<TextBlock Text="&#xe838;" FontFamily="Segoe Fluent Icons" FontSize="16" Foreground="{DynamicResource AppFgColor}"/> <TextBlock Text="&#xe838;" FontFamily="{DynamicResource AppIconFontFamily}" FontSize="16" Foreground="{DynamicResource AppFgColor}"/>
</MenuItem.Icon> </MenuItem.Icon>
</MenuItem> </MenuItem>
<MenuItem x:Name="ExportConfigBtn" Header="Export config" AutomationProperties.Name="Export configuration"> <MenuItem x:Name="ExportConfigBtn" Header="%LANG:MenuExportConfig%" AutomationProperties.Name="%LANG:MenuExportConfigTooltip%">
<MenuItem.Icon> <MenuItem.Icon>
<TextBlock Text="&#xe74e;" FontFamily="Segoe Fluent Icons" FontSize="16" Foreground="{DynamicResource AppFgColor}"/> <TextBlock Text="&#xe74e;" FontFamily="{DynamicResource AppIconFontFamily}" FontSize="16" Foreground="{DynamicResource AppFgColor}"/>
</MenuItem.Icon> </MenuItem.Icon>
</MenuItem> </MenuItem>
<MenuItem x:Name="RestoreBackupBtn" Header="Restore backup" AutomationProperties.Name="Restore registry backup"> <MenuItem x:Name="RestoreBackupBtn" Header="%LANG:MenuRestoreBackup%" AutomationProperties.Name="%LANG:MenuRestoreBackupTooltip%">
<MenuItem.Icon> <MenuItem.Icon>
<TextBlock Text="&#xe81c;" FontFamily="Segoe Fluent Icons" FontSize="16" Foreground="{DynamicResource AppFgColor}"/> <TextBlock Text="&#xe81c;" FontFamily="{DynamicResource AppIconFontFamily}" FontSize="16" Foreground="{DynamicResource AppFgColor}"/>
</MenuItem.Icon> </MenuItem.Icon>
</MenuItem> </MenuItem>
<Separator /> <Separator />
<MenuItem x:Name="MenuDocumentation" Header="Documentation" AutomationProperties.Name="Documentation"> <MenuItem x:Name="MenuDocumentation" Header="%LANG:MenuDocumentation%" AutomationProperties.Name="%LANG:MenuDocumentation%">
<MenuItem.Icon> <MenuItem.Icon>
<TextBlock Text="&#xe736;" FontFamily="Segoe MDL2 Assets" FontSize="16" Foreground="{DynamicResource AppFgColor}"/> <TextBlock Text="&#xe736;" FontFamily="{DynamicResource AppIconFontFamily}" FontSize="16" Foreground="{DynamicResource AppFgColor}"/>
</MenuItem.Icon> </MenuItem.Icon>
</MenuItem> </MenuItem>
<MenuItem x:Name="MenuReportBug" Header="Report a bug" AutomationProperties.Name="Report a bug"> <MenuItem x:Name="MenuReportBug" Header="%LANG:MenuReportBug%" AutomationProperties.Name="%LANG:MenuReportBug%">
<MenuItem.Icon> <MenuItem.Icon>
<TextBlock Text="&#xEBE8;" FontFamily="Segoe Fluent Icons" FontSize="16" Foreground="{DynamicResource AppFgColor}"/> <TextBlock Text="&#xEBE8;" FontFamily="{DynamicResource AppIconFontFamily}" FontSize="16" Foreground="{DynamicResource AppFgColor}"/>
</MenuItem.Icon> </MenuItem.Icon>
</MenuItem> </MenuItem>
<MenuItem x:Name="MenuLogs" Header="Logs" AutomationProperties.Name="Logs"> <MenuItem x:Name="MenuLogs" Header="%LANG:MenuLogs%" AutomationProperties.Name="%LANG:MenuLogs%">
<MenuItem.Icon> <MenuItem.Icon>
<TextBlock Text="&#xf000;" FontFamily="Segoe Fluent Icons" FontSize="16" Foreground="{DynamicResource AppFgColor}"/> <TextBlock Text="&#xf000;" FontFamily="{DynamicResource AppIconFontFamily}" FontSize="16" Foreground="{DynamicResource AppFgColor}"/>
</MenuItem.Icon> </MenuItem.Icon>
</MenuItem> </MenuItem>
<MenuItem x:Name="MenuAbout" Header="About" AutomationProperties.Name="About"> <MenuItem x:Name="MenuAbout" Header="%LANG:MenuAbout%" AutomationProperties.Name="%LANG:MenuAbout%">
<MenuItem.Icon> <MenuItem.Icon>
<TextBlock Text="&#xE946;" FontFamily="Segoe Fluent Icons" FontSize="16" Foreground="{DynamicResource AppFgColor}"/> <TextBlock Text="&#xE946;" FontFamily="{DynamicResource AppIconFontFamily}" FontSize="16" Foreground="{DynamicResource AppFgColor}"/>
</MenuItem.Icon> </MenuItem.Icon>
</MenuItem> </MenuItem>
</ContextMenu> </ContextMenu>
</Button.ContextMenu> </Button.ContextMenu>
</Button> </Button>
<Button x:Name="CloseBtn" shell:WindowChrome.IsHitTestVisibleInChrome="True" Content="&#xE8BB;" Style="{StaticResource CloseButton}" ToolTip="Close" AutomationProperties.Name="Close"/> <Button x:Name="CloseBtn" shell:WindowChrome.IsHitTestVisibleInChrome="True" Content="&#xE8BB;" Style="{StaticResource CloseButton}" ToolTip="%LANG:TitleBarClose%" AutomationProperties.Name="%LANG:TitleBarClose%"/>
</StackPanel> </StackPanel>
</Grid> </Grid>
</Border> </Border>
@@ -460,7 +461,7 @@
</TabControl.ItemContainerStyle> </TabControl.ItemContainerStyle>
<!-- Home Tab --> <!-- Home Tab -->
<TabItem Header="Home" x:Name="HomeTab"> <TabItem Header="%LANG:HomeTabHeader%" x:Name="HomeTab">
<Grid> <Grid>
<StackPanel x:Name="HomeContentPanel" HorizontalAlignment="Center" VerticalAlignment="Top"> <StackPanel x:Name="HomeContentPanel" HorizontalAlignment="Center" VerticalAlignment="Top">
<!-- Logo --> <!-- Logo -->
@@ -470,30 +471,30 @@
<Path x:Name="LogoFallback" Data="M0,0 L80,0 L80,80 L0,80 Z M90,0 L170,0 L170,80 L90,80 Z M0,90 L80,90 L80,170 L0,170 Z M90,90 L170,90 L170,170 L90,170 Z" <Path x:Name="LogoFallback" Data="M0,0 L80,0 L80,80 L0,80 Z M90,0 L170,0 L170,80 L90,80 Z M0,90 L80,90 L80,170 L0,170 Z M90,90 L170,90 L170,170 L90,170 Z"
Fill="{DynamicResource ButtonBgColor}" Stretch="Uniform" Margin="10"/> Fill="{DynamicResource ButtonBgColor}" Stretch="Uniform" Margin="10"/>
<!-- Sparkle effects --> <!-- Sparkle effects -->
<Canvas HorizontalAlignment="Right" VerticalAlignment="Bottom" Width="50" Height="50" Margin="0,0,2,2"> <Canvas HorizontalAlignment="Right" VerticalAlignment="Bottom" Width="80" Height="80" Margin="0,0,2,2">
<Path Canvas.Left="10" Canvas.Top="16" Data="M12,0 L14,10 L24,12 L14,14 L12,24 L10,14 L0,12 L10,10 Z" <Path Canvas.Left="12" Canvas.Top="32" Data="M12,0 L14,10 L24,12 L14,14 L12,24 L10,14 L0,12 L10,10 Z"
Fill="{DynamicResource AppAccentColor}" Width="40" Height="40" Stretch="Uniform"/> Fill="{DynamicResource AppAccentColor}" Width="60" Height="60" Stretch="Uniform"/>
<Path Canvas.Left="0" Canvas.Top="0" Data="M6,0 L7,5 L12,6 L7,7 L6,12 L5,7 L0,6 L5,5 Z" <Path Canvas.Left="0" Canvas.Top="0" Data="M6,0 L7,5 L12,6 L7,7 L6,12 L5,7 L0,6 L5,5 Z"
Fill="{DynamicResource AppAccentColor}" Width="22" Height="22" Stretch="Uniform"/> Fill="{DynamicResource AppAccentColor}" Width="40" Height="40" Stretch="Uniform"/>
<Path Canvas.Left="35" Canvas.Top="8" Data="M4,0 L5,3 L8,4 L5,5 L4,8 L3,5 L0,4 L3,3 Z" <Path Canvas.Left="55" Canvas.Top="16" Data="M4,0 L5,3 L8,4 L5,5 L4,8 L3,5 L0,4 L3,3 Z"
Fill="{DynamicResource AppAccentColor}" Width="17" Height="17" Stretch="Uniform"/> Fill="{DynamicResource AppAccentColor}" Width="25" Height="25" Stretch="Uniform"/>
</Canvas> </Canvas>
</Grid> </Grid>
</Viewbox> </Viewbox>
<!-- Title --> <!-- Title -->
<TextBlock Text="Welcome to Win11Debloat" FontSize="40" FontWeight="SemiBold" Foreground="{DynamicResource AppFgColor}" HorizontalAlignment="Center"/> <TextBlock Text="%LANG:HomeTitle%" FontSize="40" FontWeight="SemiBold" Foreground="{DynamicResource AppFgColor}" HorizontalAlignment="Center"/>
<TextBlock TextWrapping="Wrap" Foreground="{DynamicResource AppFgColor}" FontSize="20" HorizontalAlignment="Center" Margin="0,4,0,48"> <TextBlock TextWrapping="Wrap" Foreground="{DynamicResource AppFgColor}" FontSize="20" HorizontalAlignment="Center" Margin="0,4,0,48">
<Run Text="Your clean Windows experience is just a few clicks away!"/> <Run Text="%LANG:HomeSubtitle%"/>
</TextBlock> </TextBlock>
<Border HorizontalAlignment="Center" BorderBrush="{DynamicResource AppBorderColor}" BorderThickness="1" CornerRadius="4" Background="{DynamicResource CardBgColor}" Padding="16,12" Width="500"> <Border HorizontalAlignment="Center" BorderBrush="{DynamicResource AppBorderColor}" BorderThickness="1" CornerRadius="4" Background="{DynamicResource CardBgColor}" Padding="16,12" MinWidth="500">
<StackPanel> <StackPanel>
<TextBlock Text="What user do you want to apply changes to?" Style="{StaticResource CategoryHeaderTextBlock}"/> <TextBlock Text="%LANG:HomeUserQuestion%" Style="{StaticResource CategoryHeaderTextBlock}"/>
<ComboBox x:Name="UserSelectionCombo" Margin="0,0,0,6" AutomationProperties.Name="Apply Changes To"> <ComboBox x:Name="UserSelectionCombo" Margin="0,0,0,6" AutomationProperties.Name="%LANG:HomeUserSelectionAutomationName%" ToolTip="%LANG:DeployUserDescriptionCurrentUser%">
<ComboBoxItem Content="Current User" IsSelected="True"/> <ComboBoxItem Content="%LANG:HomeUserOptionCurrentUser%" IsSelected="True"/>
<ComboBoxItem Content="Other User"/> <ComboBoxItem Content="%LANG:HomeUserOptionOtherUser%"/>
<ComboBoxItem Content="Windows Default User (Sysprep)"/> <ComboBoxItem Content="%LANG:HomeUserOptionSysprep%"/>
</ComboBox> </ComboBox>
<StackPanel x:Name="OtherUserPanel" Visibility="Collapsed" Margin="0,0,0,6"> <StackPanel x:Name="OtherUserPanel" Visibility="Collapsed" Margin="0,0,0,6">
<TextBlock x:Name="UsernameValidationMessage" Text="" FontStyle="Italic" Foreground="{DynamicResource TitleBarCloseHoverColor}" FontSize="11" Margin="3,0,0,4" TextWrapping="Wrap"/> <TextBlock x:Name="UsernameValidationMessage" Text="" FontStyle="Italic" Foreground="{DynamicResource TitleBarCloseHoverColor}" FontSize="11" Margin="3,0,0,4" TextWrapping="Wrap"/>
@@ -504,9 +505,9 @@
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<TextBlock x:Name="UsernameTextBoxPlaceholder" Grid.Column="0" Text="Enter username" Foreground="{DynamicResource AppFgColor}" Opacity="0.7" FontSize="13" Margin="3,0,0,1" VerticalAlignment="Center" IsHitTestVisible="False"/> <TextBlock x:Name="UsernameTextBoxPlaceholder" Grid.Column="0" Text="%LANG:HomeUsernamePlaceholder%" Foreground="{DynamicResource AppFgColor}" Opacity="0.7" FontSize="13" Margin="3,0,0,1" VerticalAlignment="Center" IsHitTestVisible="False"/>
<TextBox x:Name="OtherUsernameTextBox" Grid.Column="0" Style="{DynamicResource TextBoxInputStyle}" Text="" AutomationProperties.Name="Enter username"/> <TextBox x:Name="OtherUsernameTextBox" Grid.Column="0" Style="{DynamicResource TextBoxInputStyle}" Text="" AutomationProperties.Name="%LANG:HomeUsernamePlaceholder%"/>
<TextBlock Grid.Column="1" Text="&#xE77B;" FontFamily="Segoe Fluent Icons" FontSize="14" VerticalAlignment="Center" Margin="8,0,4,0" Foreground="{DynamicResource AppFgColor}" Opacity="0.7"/> <TextBlock Grid.Column="1" Text="&#xE77B;" FontFamily="{DynamicResource AppIconFontFamily}" FontSize="14" VerticalAlignment="Center" Margin="8,0,4,0" Foreground="{DynamicResource AppFgColor}" Opacity="0.7"/>
</Grid> </Grid>
</Border> </Border>
</Border> </Border>
@@ -514,20 +515,20 @@
<Separator Margin="0,10,0,8" Background="{DynamicResource AppBorderColor}"/> <Separator Margin="0,10,0,8" Background="{DynamicResource AppBorderColor}"/>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="0,8,0,4"> <UniformGrid Columns="2" Rows="1" HorizontalAlignment="Center" Margin="0,8,0,4">
<Button x:Name="HomeDefaultModeBtn" Width="227" Height="50" Style="{DynamicResource PrimaryButtonStyle}" Margin="0,0,12,0" AutomationProperties.Name="Default Mode"> <Button x:Name="HomeDefaultModeBtn" MinWidth="227" Height="50" Padding="12,0" Margin="0,0,6,0" Style="{DynamicResource PrimaryButtonStyle}" AutomationProperties.Name="%LANG:HomeDefaultModeBtn%">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center"> <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="&#xe735;" FontFamily="Segoe Fluent Icons" FontSize="16" VerticalAlignment="Center" Margin="0,0,8,-1"/> <TextBlock Text="&#xe735;" FontFamily="{DynamicResource AppIconFontFamily}" FontSize="16" VerticalAlignment="Center" Margin="0,0,8,-1"/>
<TextBlock Text="Default Mode" ToolTip="Quickly select the recommended settings" FontWeight="SemiBold" VerticalAlignment="Center" FontSize="17" Margin="0,0,0,1"/> <TextBlock Text="%LANG:HomeDefaultModeBtn%" ToolTip="%LANG:HomeDefaultModeBtnTooltip%" FontWeight="SemiBold" VerticalAlignment="Center" FontSize="17" Margin="0,0,0,1"/>
</StackPanel> </StackPanel>
</Button> </Button>
<Button x:Name="HomeStartBtn" Width="227" Height="50" Style="{DynamicResource SecondaryButtonStyle}" AutomationProperties.Name="Custom Setup"> <Button x:Name="HomeStartBtn" MinWidth="227" Height="50" Padding="12,0" Margin="6,0,0,0" Style="{DynamicResource SecondaryButtonStyle}" AutomationProperties.Name="%LANG:HomeCustomSetupBtn%">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center"> <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="&#xe90f;" FontFamily="Segoe Fluent Icons" FontSize="14" VerticalAlignment="Center" Margin="0,0,8,-1"/> <TextBlock Text="&#xe90f;" FontFamily="{DynamicResource AppIconFontFamily}" FontSize="14" VerticalAlignment="Center" Margin="0,0,8,-1"/>
<TextBlock Text="Custom Setup" ToolTip="Manually select your preferred settings" FontWeight="SemiBold" VerticalAlignment="Center" FontSize="17" Margin="0,0,0,1"/> <TextBlock Text="%LANG:HomeCustomSetupBtn%" ToolTip="%LANG:HomeCustomSetupBtnTooltip%" FontWeight="SemiBold" VerticalAlignment="Center" FontSize="17" Margin="0,0,0,1"/>
</StackPanel> </StackPanel>
</Button> </Button>
</StackPanel> </UniformGrid>
</StackPanel> </StackPanel>
</Border> </Border>
</StackPanel> </StackPanel>
@@ -535,25 +536,24 @@
</TabItem> </TabItem>
<!-- App Removal Tab --> <!-- App Removal Tab -->
<TabItem Header="App Removal"> <TabItem Header="%LANG:AppRemovalTabHeader%">
<DockPanel> <DockPanel>
<Border DockPanel.Dock="Top" Padding="20,4,20,0"> <Border DockPanel.Dock="Top" Padding="20,4,20,0">
<StackPanel> <StackPanel>
<TextBlock Text="App Removal" FontWeight="SemiBold" FontSize="24" Foreground="{DynamicResource AppFgColor}"/> <TextBlock Text="%LANG:AppRemovalTitle%" FontWeight="SemiBold" FontSize="24" Foreground="{DynamicResource AppFgColor}"/>
<TextBlock Text="Select which apps you want to remove" FontSize="14" Margin="0,5,0,20" Foreground="{DynamicResource AppFgColor}" TextWrapping="Wrap"/> <TextBlock Text="%LANG:AppRemovalSubtitle%" FontSize="14" Margin="0,5,0,20" Foreground="{DynamicResource AppFgColor}" TextWrapping="Wrap"/>
<!-- Filter Options --> <!-- Filter Options -->
<Grid Margin="0,0,0,12"> <Grid Margin="0,0,0,12">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="10"/> <ColumnDefinition Width="10"/>
<ColumnDefinition Width="Auto"/> <ColumnDefinition Width="*" MaxWidth="300"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" Grid.Column="0"> <StackPanel Orientation="Horizontal" Grid.Column="0">
<ToggleButton x:Name="PresetsBtn" Height="32" Padding="10,0" Margin="0,0,10,0" AutomationProperties.Name="App Presets"> <ToggleButton x:Name="PresetsBtn" Height="32" Padding="10,0" Margin="0,0,10,0" AutomationProperties.Name="%LANG:AppQuickSelectAutomationName%">
<ToggleButton.Style> <ToggleButton.Style>
<Style TargetType="ToggleButton"> <Style TargetType="ToggleButton">
<Setter Property="Background" Value="{DynamicResource SecondaryButtonBgColor}"/> <Setter Property="Background" Value="{DynamicResource SecondaryButtonBgColor}"/>
@@ -585,19 +585,19 @@
</Style> </Style>
</ToggleButton.Style> </ToggleButton.Style>
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE735;" FontFamily="Segoe Fluent Icons" FontSize="14" VerticalAlignment="Center" Margin="0,1,6,0"/> <TextBlock Text="&#xE735;" FontFamily="{DynamicResource AppIconFontFamily}" FontSize="14" VerticalAlignment="Center" Margin="0,1,6,0"/>
<TextBlock Text="Quick Select" FontSize="13" VerticalAlignment="Center" Margin="0,0,6,1"/> <TextBlock Text="%LANG:AppQuickSelect%" FontSize="13" VerticalAlignment="Center" Margin="0,0,6,1"/>
<TextBlock x:Name="PresetsArrow" Text="&#xE70D;" FontFamily="Segoe Fluent Icons" FontSize="10" VerticalAlignment="Center" RenderTransformOrigin="0.5,0.5"> <TextBlock x:Name="PresetsArrow" Text="&#xE70D;" FontFamily="{DynamicResource AppIconFontFamily}" FontSize="10" VerticalAlignment="Center" RenderTransformOrigin="0.5,0.5">
<TextBlock.RenderTransform> <TextBlock.RenderTransform>
<RotateTransform x:Name="PresetsArrowRotation" Angle="0"/> <RotateTransform x:Name="PresetsArrowRotation" Angle="0"/>
</TextBlock.RenderTransform> </TextBlock.RenderTransform>
</TextBlock> </TextBlock>
</StackPanel> </StackPanel>
</ToggleButton> </ToggleButton>
<Button x:Name="ClearAppSelectionBtn" ToolTip="Clear all selected apps" Style="{DynamicResource SecondaryButtonStyle}" Height="32" Padding="10,0" Margin="0,0,10,0" AutomationProperties.Name="Clear Selection"> <Button x:Name="ClearAppSelectionBtn" ToolTip="%LANG:AppClearSelectionTooltip%" Style="{DynamicResource SecondaryButtonStyle}" Height="32" Padding="10,0" Margin="0,0,10,0" AutomationProperties.Name="%LANG:AppClearSelection%">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center"> <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="&#xE711;" FontFamily="Segoe Fluent Icons" FontSize="15" VerticalAlignment="Center" Margin="0,3,6,0"/> <TextBlock Text="&#xE711;" FontFamily="{DynamicResource AppIconFontFamily}" FontSize="15" VerticalAlignment="Center" Margin="0,3,6,0"/>
<TextBlock Text="Clear Selection" FontSize="13" VerticalAlignment="Center" Margin="0,0,0,1"/> <TextBlock Text="%LANG:AppClearSelection%" FontSize="13" VerticalAlignment="Center" Margin="0,0,0,1"/>
</StackPanel> </StackPanel>
</Button> </Button>
<Popup x:Name="PresetsPopup" PlacementTarget="{Binding ElementName=PresetsBtn}" Placement="Bottom" StaysOpen="True" AllowsTransparency="True" VerticalOffset="2"> <Popup x:Name="PresetsPopup" PlacementTarget="{Binding ElementName=PresetsBtn}" Placement="Bottom" StaysOpen="True" AllowsTransparency="True" VerticalOffset="2">
@@ -606,8 +606,8 @@
<DropShadowEffect BlurRadius="12" Opacity="0.25" ShadowDepth="4"/> <DropShadowEffect BlurRadius="12" Opacity="0.25" ShadowDepth="4"/>
</Border.Effect> </Border.Effect>
<StackPanel x:Name="PresetsPanel" MinWidth="220"> <StackPanel x:Name="PresetsPanel" MinWidth="220">
<CheckBox x:Name="PresetDefaultApps" Content="Default apps" IsThreeState="True" ToolTip="Select the apps that are safe to remove for most users" Foreground="{DynamicResource AppFgColor}" Margin="8,4" AutomationProperties.Name="Default selection"/> <CheckBox x:Name="PresetDefaultApps" Content="%LANG:AppPresetDefaultApps%" IsThreeState="True" ToolTip="%LANG:AppPresetDefaultAppsTooltip%" Foreground="{DynamicResource AppFgColor}" Margin="8,4" AutomationProperties.Name="%LANG:AppPresetDefaultAppsAutomationName%"/>
<CheckBox x:Name="PresetLastUsed" Content="Previously selected apps" IsThreeState="True" ToolTip="Select the apps that were removed the last time Win11Debloat was run" Foreground="{DynamicResource AppFgColor}" Margin="8,4" AutomationProperties.Name="Previously selected apps"/> <CheckBox x:Name="PresetLastUsed" Content="%LANG:AppPresetLastUsed%" IsThreeState="True" ToolTip="%LANG:AppPresetLastUsedTooltip%" Foreground="{DynamicResource AppFgColor}" Margin="8,4" AutomationProperties.Name="%LANG:AppPresetLastUsed%"/>
<Separator Margin="4,6" Background="{DynamicResource AppBorderColor}"/> <Separator Margin="4,6" Background="{DynamicResource AppBorderColor}"/>
<StackPanel x:Name="JsonPresetsPanel"/> <StackPanel x:Name="JsonPresetsPanel"/>
</StackPanel> </StackPanel>
@@ -615,9 +615,11 @@
</Popup> </Popup>
</StackPanel> </StackPanel>
<CheckBox x:Name="OnlyInstalledAppsBox" Grid.Column="2" Content="Only show installed apps" ToolTip="Only show applications that are currently installed on this system" IsChecked="False" Foreground="{DynamicResource AppFgColor}" VerticalAlignment="Center" AutomationProperties.Name="Only show installed apps"/> <CheckBox x:Name="OnlyInstalledAppsBox" Grid.Column="1" ToolTip="%LANG:AppOnlyInstalledCheckboxTooltip%" IsChecked="False" Foreground="{DynamicResource AppFgColor}" VerticalAlignment="Center" HorizontalAlignment="Left" AutomationProperties.Name="%LANG:AppOnlyInstalledCheckbox%">
<TextBlock Text="%LANG:AppOnlyInstalledCheckbox%" TextWrapping="Wrap"/>
</CheckBox>
<Border x:Name="AppSearchBorder" Grid.Column="4" Width="300"> <Border x:Name="AppSearchBorder" Grid.Column="3" ClipToBounds="True">
<Border Style="{DynamicResource TextBoxBorderStyle}"> <Border Style="{DynamicResource TextBoxBorderStyle}">
<Border Style="{DynamicResource TextBoxBottomBorderStyle}"> <Border Style="{DynamicResource TextBoxBottomBorderStyle}">
<Grid> <Grid>
@@ -625,9 +627,9 @@
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<TextBlock x:Name="AppSearchPlaceholder" Grid.Column="0" Text="Search apps..." Foreground="{DynamicResource AppFgColor}" Opacity="0.7" FontSize="13" Margin="3,0,0,1" VerticalAlignment="Center" IsHitTestVisible="False"/> <TextBlock x:Name="AppSearchPlaceholder" Grid.Column="0" Text="%LANG:AppSearchPlaceholder%" Foreground="{DynamicResource AppFgColor}" Opacity="0.7" FontSize="13" Margin="3,0,0,1" VerticalAlignment="Center" IsHitTestVisible="False"/>
<TextBox x:Name="AppSearchBox" Grid.Column="0" Style="{DynamicResource TextBoxInputStyle}" Text="" AutomationProperties.Name="Search app"/> <TextBox x:Name="AppSearchBox" Grid.Column="0" Style="{DynamicResource TextBoxInputStyle}" Text="" AutomationProperties.Name="%LANG:AppSearchAutomationName%"/>
<TextBlock Grid.Column="1" Text="&#xE721;" FontFamily="Segoe Fluent Icons" FontSize="14" VerticalAlignment="Center" Margin="8,0,4,0" Foreground="{DynamicResource AppFgColor}" Opacity="0.7"/> <TextBlock Grid.Column="1" Text="&#xE721;" FontFamily="{DynamicResource AppIconFontFamily}" FontSize="14" VerticalAlignment="Center" Margin="8,0,4,0" Foreground="{DynamicResource AppFgColor}" Opacity="0.7"/>
</Grid> </Grid>
</Border> </Border>
</Border> </Border>
@@ -657,20 +659,20 @@
<ColumnDefinition Width="{StaticResource AppTableIdColWidth}"/> <ColumnDefinition Width="{StaticResource AppTableIdColWidth}"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<StackPanel x:Name="HeaderNameBtn" Grid.Column="1" Orientation="Horizontal" Cursor="Hand" VerticalAlignment="Center" Style="{StaticResource SortHeaderBtnStyle}"> <StackPanel x:Name="HeaderNameBtn" Grid.Column="1" Orientation="Horizontal" Cursor="Hand" VerticalAlignment="Center" Style="{StaticResource SortHeaderBtnStyle}">
<TextBlock Text="Name" FontWeight="SemiBold" FontSize="16" Foreground="{DynamicResource AppFgColor}"/> <TextBlock Text="%LANG:AppTableHeaderName%" FontWeight="SemiBold" FontSize="16" Foreground="{DynamicResource AppFgColor}"/>
<TextBlock x:Name="SortArrowName" Text="&#xE70E;" FontFamily="Segoe Fluent Icons" FontSize="11" Foreground="{DynamicResource AppFgColor}" VerticalAlignment="Center" Margin="5,1,0,0" Opacity="0.3" RenderTransformOrigin="0.5,0.5"> <TextBlock x:Name="SortArrowName" Text="&#xE70E;" FontFamily="{DynamicResource AppIconFontFamily}" FontSize="11" Foreground="{DynamicResource AppFgColor}" VerticalAlignment="Center" Margin="5,1,0,0" Opacity="0.3" RenderTransformOrigin="0.5,0.5">
<TextBlock.RenderTransform><RotateTransform Angle="0"/></TextBlock.RenderTransform> <TextBlock.RenderTransform><RotateTransform Angle="0"/></TextBlock.RenderTransform>
</TextBlock> </TextBlock>
</StackPanel> </StackPanel>
<StackPanel x:Name="HeaderDescriptionBtn" Grid.Column="2" Orientation="Horizontal" Cursor="Hand" VerticalAlignment="Center" Margin="8,0,0,0" Style="{StaticResource SortHeaderBtnStyle}"> <StackPanel x:Name="HeaderDescriptionBtn" Grid.Column="2" Orientation="Horizontal" Cursor="Hand" VerticalAlignment="Center" Margin="8,0,0,0" Style="{StaticResource SortHeaderBtnStyle}">
<TextBlock Text="Description" FontWeight="SemiBold" FontSize="16" Foreground="{DynamicResource AppFgColor}"/> <TextBlock Text="%LANG:AppTableHeaderDescription%" FontWeight="SemiBold" FontSize="16" Foreground="{DynamicResource AppFgColor}"/>
<TextBlock x:Name="SortArrowDescription" Text="&#xE70E;" FontFamily="Segoe Fluent Icons" FontSize="11" Foreground="{DynamicResource AppFgColor}" VerticalAlignment="Center" Margin="5,1,0,0" Opacity="0.3" RenderTransformOrigin="0.5,0.5"> <TextBlock x:Name="SortArrowDescription" Text="&#xE70E;" FontFamily="{DynamicResource AppIconFontFamily}" FontSize="11" Foreground="{DynamicResource AppFgColor}" VerticalAlignment="Center" Margin="5,1,0,0" Opacity="0.3" RenderTransformOrigin="0.5,0.5">
<TextBlock.RenderTransform><RotateTransform Angle="0"/></TextBlock.RenderTransform> <TextBlock.RenderTransform><RotateTransform Angle="0"/></TextBlock.RenderTransform>
</TextBlock> </TextBlock>
</StackPanel> </StackPanel>
<StackPanel x:Name="HeaderAppIdBtn" Grid.Column="3" Orientation="Horizontal" Cursor="Hand" VerticalAlignment="Center" Style="{StaticResource SortHeaderBtnStyle}"> <StackPanel x:Name="HeaderAppIdBtn" Grid.Column="3" Orientation="Horizontal" Cursor="Hand" VerticalAlignment="Center" Style="{StaticResource SortHeaderBtnStyle}">
<TextBlock Text="App ID" FontWeight="SemiBold" FontSize="16" Foreground="{DynamicResource AppFgColor}"/> <TextBlock Text="%LANG:AppTableHeaderAppId%" FontWeight="SemiBold" FontSize="16" Foreground="{DynamicResource AppFgColor}"/>
<TextBlock x:Name="SortArrowAppId" Text="&#xE70E;" FontFamily="Segoe Fluent Icons" FontSize="11" Foreground="{DynamicResource AppFgColor}" VerticalAlignment="Center" Margin="5,1,0,0" Opacity="0.3" RenderTransformOrigin="0.5,0.5"> <TextBlock x:Name="SortArrowAppId" Text="&#xE70E;" FontFamily="{DynamicResource AppIconFontFamily}" FontSize="11" Foreground="{DynamicResource AppFgColor}" VerticalAlignment="Center" Margin="5,1,0,0" Opacity="0.3" RenderTransformOrigin="0.5,0.5">
<TextBlock.RenderTransform><RotateTransform Angle="0"/></TextBlock.RenderTransform> <TextBlock.RenderTransform><RotateTransform Angle="0"/></TextBlock.RenderTransform>
</TextBlock> </TextBlock>
</StackPanel> </StackPanel>
@@ -684,24 +686,8 @@
</ScrollViewer> </ScrollViewer>
<Border x:Name="LoadingAppsIndicator" CornerRadius="0,0,4,4" Background="{DynamicResource CardBgColor}" Opacity="0.8" Visibility="Collapsed"> <Border x:Name="LoadingAppsIndicator" CornerRadius="0,0,4,4" Background="{DynamicResource CardBgColor}" Opacity="0.8" Visibility="Collapsed">
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock Text="&#xF16A;" FontFamily="Segoe Fluent Icons" FontSize="28" Foreground="{DynamicResource AppFgColor}" HorizontalAlignment="Center" Margin="0,0,0,8" RenderTransformOrigin="0.5,0.5"> <TextBlock Style="{DynamicResource LoadingSpinnerStyle}" Margin="0,0,0,8"/>
<TextBlock.RenderTransform> <TextBlock Text="%LANG:AppLoadingIndicator%" FontSize="16" FontWeight="SemiBold" Foreground="{DynamicResource AppFgColor}" HorizontalAlignment="Center"/>
<RotateTransform Angle="0"/>
</TextBlock.RenderTransform>
<TextBlock.Triggers>
<EventTrigger RoutedEvent="Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)"
From="0" To="360"
Duration="0:0:1.5"
RepeatBehavior="Forever"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</TextBlock.Triggers>
</TextBlock>
<TextBlock Text="Loading apps..." FontSize="16" FontWeight="SemiBold" Foreground="{DynamicResource AppFgColor}" HorizontalAlignment="Center"/>
</StackPanel> </StackPanel>
</Border> </Border>
</Grid> </Grid>
@@ -716,21 +702,21 @@
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<TextBlock x:Name="AppSelectionStatus" Grid.Column="0" Text="" Foreground="{DynamicResource AppFgColor}" Margin="10,0,0,5" HorizontalAlignment="Left" VerticalAlignment="Bottom"/> <TextBlock x:Name="AppSelectionStatus" Grid.Column="0" Text="" Foreground="{DynamicResource AppFgColor}" Margin="10,0,0,5" HorizontalAlignment="Left" VerticalAlignment="Bottom"/>
<StackPanel x:Name="AppColorLegend" Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0,0,10,5"> <StackPanel x:Name="AppColorLegend" Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0,0,10,5">
<TextBlock Text="Legend:" Foreground="{DynamicResource AppFgColor}" FontSize="12" FontWeight="SemiBold" VerticalAlignment="Center" Margin="0,0,10,0" Opacity="0.8"/> <TextBlock Text="%LANG:AppLegendTitle%" Foreground="{DynamicResource AppFgColor}" FontSize="12" FontWeight="SemiBold" VerticalAlignment="Center" Margin="0,0,10,0" Opacity="0.8"/>
<!-- Recommended (safe) --> <!-- Recommended (safe) -->
<StackPanel Orientation="Horizontal" Margin="0,0,16,0" ToolTip="[Recommended] Safe to remove for most users"> <StackPanel Orientation="Horizontal" Margin="0,0,16,0" ToolTip="%LANG:AppLegendRecommendedTooltip%">
<Ellipse Width="9" Height="9" Fill="{DynamicResource AppRecommendationSafeColor}" VerticalAlignment="Center" Margin="0,0,6,0"/> <Ellipse Width="9" Height="9" Fill="{DynamicResource AppRecommendationSafeColor}" VerticalAlignment="Center" Margin="0,0,6,0"/>
<TextBlock Text="Recommended" Foreground="{DynamicResource AppFgColor}" FontSize="12" VerticalAlignment="Center" Opacity="0.8"/> <TextBlock Text="%LANG:AppLegendRecommended%" Foreground="{DynamicResource AppFgColor}" FontSize="12" VerticalAlignment="Center" Opacity="0.8"/>
</StackPanel> </StackPanel>
<!-- Optional (default) --> <!-- Optional (default) -->
<StackPanel Orientation="Horizontal" Margin="0,0,16,0" ToolTip="[Optional] Can be safely removed if you don't need this app"> <StackPanel Orientation="Horizontal" Margin="0,0,16,0" ToolTip="%LANG:AppLegendOptionalTooltip%">
<Ellipse Width="9" Height="9" Fill="{DynamicResource AppRecommendationOptionalColor}" VerticalAlignment="Center" Margin="0,0,6,0"/> <Ellipse Width="9" Height="9" Fill="{DynamicResource AppRecommendationOptionalColor}" VerticalAlignment="Center" Margin="0,0,6,0"/>
<TextBlock Text="Optional" Foreground="{DynamicResource AppFgColor}" FontSize="12" VerticalAlignment="Center" Opacity="0.8"/> <TextBlock Text="%LANG:AppLegendOptional%" Foreground="{DynamicResource AppFgColor}" FontSize="12" VerticalAlignment="Center" Opacity="0.8"/>
</StackPanel> </StackPanel>
<!-- Not Recommended (unsafe) --> <!-- Not Recommended (unsafe) -->
<StackPanel Orientation="Horizontal" ToolTip="[Not Recommended] Only remove if you know what you are doing"> <StackPanel Orientation="Horizontal" ToolTip="%LANG:AppLegendNotRecommendedTooltip%">
<Ellipse Width="9" Height="9" Fill="{DynamicResource AppRecommendationUnsafeColor}" VerticalAlignment="Center" Margin="0,0,6,0"/> <Ellipse Width="9" Height="9" Fill="{DynamicResource AppRecommendationUnsafeColor}" VerticalAlignment="Center" Margin="0,0,6,0"/>
<TextBlock Text="Not Recommended" Foreground="{DynamicResource AppFgColor}" FontSize="12" VerticalAlignment="Center" Opacity="0.8"/> <TextBlock Text="%LANG:AppLegendNotRecommended%" Foreground="{DynamicResource AppFgColor}" FontSize="12" VerticalAlignment="Center" Opacity="0.8"/>
</StackPanel> </StackPanel>
</StackPanel> </StackPanel>
</Grid> </Grid>
@@ -739,25 +725,24 @@
</TabItem> </TabItem>
<!-- Tweaks Tab --> <!-- Tweaks Tab -->
<TabItem Header="Tweaks"> <TabItem Header="%LANG:TweaksTabHeader%">
<DockPanel> <DockPanel>
<Border DockPanel.Dock="Top" Padding="20,4,20,0" Background="{DynamicResource AppBgColor}"> <Border DockPanel.Dock="Top" Padding="20,4,20,0" Background="{DynamicResource AppBgColor}">
<StackPanel> <StackPanel>
<TextBlock Text="System Tweaks" FontWeight="SemiBold" FontSize="24" Foreground="{DynamicResource AppFgColor}"/> <TextBlock Text="%LANG:TweaksTitle%" FontWeight="SemiBold" FontSize="24" Foreground="{DynamicResource AppFgColor}"/>
<TextBlock Text="Select what changes you want to make, you can hover over settings for more information" FontSize="14" Margin="0,5,0,20" Foreground="{DynamicResource AppFgColor}" TextWrapping="Wrap"/> <TextBlock Text="%LANG:TweaksSubtitle%" FontSize="14" Margin="0,5,0,20" Foreground="{DynamicResource AppFgColor}" TextWrapping="Wrap"/>
<!-- Filter Options --> <!-- Filter Options -->
<Grid Margin="0,0,0,12"> <Grid Margin="0,0,0,12">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="10"/> <ColumnDefinition Width="10"/>
<ColumnDefinition Width="Auto"/> <ColumnDefinition Width="*" MaxWidth="300"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" Orientation="Horizontal"> <StackPanel Grid.Column="0" Orientation="Horizontal">
<ToggleButton x:Name="TweaksPresetsBtn" Height="32" Padding="10,0" Margin="0,0,10,0" AutomationProperties.Name="Tweak Presets"> <ToggleButton x:Name="TweaksPresetsBtn" Height="32" Padding="10,0" Margin="0,0,10,0" AutomationProperties.Name="%LANG:TweaksQuickSelectAutomationName%">
<ToggleButton.Style> <ToggleButton.Style>
<Style TargetType="ToggleButton"> <Style TargetType="ToggleButton">
<Setter Property="Background" Value="{DynamicResource SecondaryButtonBgColor}"/> <Setter Property="Background" Value="{DynamicResource SecondaryButtonBgColor}"/>
@@ -789,19 +774,19 @@
</Style> </Style>
</ToggleButton.Style> </ToggleButton.Style>
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE735;" FontFamily="Segoe Fluent Icons" FontSize="14" VerticalAlignment="Center" Margin="0,1,6,0"/> <TextBlock Text="&#xE735;" FontFamily="{DynamicResource AppIconFontFamily}" FontSize="14" VerticalAlignment="Center" Margin="0,1,6,0"/>
<TextBlock Text="Quick Select" FontSize="13" VerticalAlignment="Center" Margin="0,0,6,1"/> <TextBlock Text="%LANG:TweaksQuickSelect%" FontSize="13" VerticalAlignment="Center" Margin="0,0,6,1"/>
<TextBlock x:Name="TweaksPresetsArrow" Text="&#xE70D;" FontFamily="Segoe Fluent Icons" FontSize="10" VerticalAlignment="Center" RenderTransformOrigin="0.5,0.5"> <TextBlock x:Name="TweaksPresetsArrow" Text="&#xE70D;" FontFamily="{DynamicResource AppIconFontFamily}" FontSize="10" VerticalAlignment="Center" RenderTransformOrigin="0.5,0.5">
<TextBlock.RenderTransform> <TextBlock.RenderTransform>
<RotateTransform Angle="0"/> <RotateTransform Angle="0"/>
</TextBlock.RenderTransform> </TextBlock.RenderTransform>
</TextBlock> </TextBlock>
</StackPanel> </StackPanel>
</ToggleButton> </ToggleButton>
<Button x:Name="ClearAllTweaksBtn" ToolTip="Clear all selected tweaks" Style="{DynamicResource SecondaryButtonStyle}" Padding="10,0" Height="32" Margin="0,0,10,0" AutomationProperties.Name="Clear Selection"> <Button x:Name="ClearAllTweaksBtn" ToolTip="%LANG:TweaksClearSelectionTooltip%" Style="{DynamicResource SecondaryButtonStyle}" Padding="10,0" Height="32" Margin="0,0,10,0" AutomationProperties.Name="%LANG:TweaksClearSelection%">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center"> <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="&#xE711;" FontFamily="Segoe Fluent Icons" FontSize="15" VerticalAlignment="Center" Margin="0,3,6,0"/> <TextBlock Text="&#xE711;" FontFamily="{DynamicResource AppIconFontFamily}" FontSize="15" VerticalAlignment="Center" Margin="0,3,6,0"/>
<TextBlock Text="Clear Selection" FontSize="13" VerticalAlignment="Center" Margin="0,0,0,1"/> <TextBlock Text="%LANG:TweaksClearSelection%" FontSize="13" VerticalAlignment="Center" Margin="0,0,0,1"/>
</StackPanel> </StackPanel>
</Button> </Button>
<Popup x:Name="TweaksPresetsPopup" PlacementTarget="{Binding ElementName=TweaksPresetsBtn}" Placement="Bottom" StaysOpen="True" AllowsTransparency="True" VerticalOffset="2"> <Popup x:Name="TweaksPresetsPopup" PlacementTarget="{Binding ElementName=TweaksPresetsBtn}" Placement="Bottom" StaysOpen="True" AllowsTransparency="True" VerticalOffset="2">
@@ -810,19 +795,21 @@
<DropShadowEffect BlurRadius="12" Opacity="0.25" ShadowDepth="4"/> <DropShadowEffect BlurRadius="12" Opacity="0.25" ShadowDepth="4"/>
</Border.Effect> </Border.Effect>
<StackPanel MinWidth="220"> <StackPanel MinWidth="220">
<CheckBox x:Name="PresetDefaultTweaksBtn" Content="Default settings" IsThreeState="True" ToolTip="Select the settings that are recommended for most people" Foreground="{DynamicResource AppFgColor}" Style="{DynamicResource PresetCheckBoxStyle}" AutomationProperties.Name="Default settings"/> <CheckBox x:Name="PresetDefaultTweaksBtn" Content="%LANG:TweaksPresetDefault%" IsThreeState="True" ToolTip="%LANG:TweaksPresetDefaultTooltip%" Foreground="{DynamicResource AppFgColor}" Style="{DynamicResource PresetCheckBoxStyle}" AutomationProperties.Name="%LANG:TweaksPresetDefault%"/>
<CheckBox x:Name="PresetLastUsedTweaksBtn" Content="Previously selected settings" IsThreeState="True" ToolTip="Select the settings that were applied the last time Win11Debloat was run" Foreground="{DynamicResource AppFgColor}" Style="{DynamicResource PresetCheckBoxStyle}" AutomationProperties.Name="Previously selected settings"/> <CheckBox x:Name="PresetLastUsedTweaksBtn" Content="%LANG:TweaksPresetLastUsed%" IsThreeState="True" ToolTip="%LANG:TweaksPresetLastUsedTooltip%" Foreground="{DynamicResource AppFgColor}" Style="{DynamicResource PresetCheckBoxStyle}" AutomationProperties.Name="%LANG:TweaksPresetLastUsed%"/>
<Separator Margin="4,6" Background="{DynamicResource AppBorderColor}"/> <Separator Margin="4,6" Background="{DynamicResource AppBorderColor}"/>
<CheckBox x:Name="PresetPrivacyTweaksBtn" Content="Privacy &amp; suggested content" IsThreeState="True" ToolTip="Select all tweaks related to privacy &amp; suggested content" Foreground="{DynamicResource AppFgColor}" Style="{DynamicResource PresetCheckBoxStyle}" AutomationProperties.Name="All Privacy and Suggested Content"/> <CheckBox x:Name="PresetPrivacyTweaksBtn" Content="%LANG:TweaksPresetPrivacy%" IsThreeState="True" ToolTip="%LANG:TweaksPresetPrivacyTooltip%" Foreground="{DynamicResource AppFgColor}" Style="{DynamicResource PresetCheckBoxStyle}" AutomationProperties.Name="%LANG:TweaksPresetPrivacyAutomationName%"/>
<CheckBox x:Name="PresetAITweaksBtn" Content="AI features" IsThreeState="True" ToolTip="Select all AI related tweaks" Foreground="{DynamicResource AppFgColor}" Style="{DynamicResource PresetCheckBoxStyle}" AutomationProperties.Name="All AI features"/> <CheckBox x:Name="PresetAITweaksBtn" Content="%LANG:TweaksPresetAI%" IsThreeState="True" ToolTip="%LANG:TweaksPresetAITooltip%" Foreground="{DynamicResource AppFgColor}" Style="{DynamicResource PresetCheckBoxStyle}" AutomationProperties.Name="%LANG:TweaksPresetAIAutomationName%"/>
</StackPanel> </StackPanel>
</Border> </Border>
</Popup> </Popup>
</StackPanel> </StackPanel>
<CheckBox x:Name="ShowCurrentlyAppliedTweaksCheckBox" Grid.Column="2" Content="Detect applied tweaks" IsChecked="True" Foreground="{DynamicResource AppFgColor}" VerticalAlignment="Center" AutomationProperties.Name="Detect applied tweaks" ToolTip="Detect all tweaks currently applied for the current user"/> <CheckBox x:Name="ShowCurrentlyAppliedTweaksCheckBox" Grid.Column="1" IsChecked="True" Foreground="{DynamicResource AppFgColor}" VerticalAlignment="Center" HorizontalAlignment="Left" AutomationProperties.Name="%LANG:TweaksDetectApplied%" ToolTip="%LANG:TweaksDetectAppliedTooltip%">
<TextBlock Text="%LANG:TweaksDetectApplied%" TextWrapping="Wrap"/>
</CheckBox>
<Border x:Name="TweakSearchBorder" Grid.Column="4" Width="300"> <Border x:Name="TweakSearchBorder" Grid.Column="3" ClipToBounds="True">
<Border Style="{DynamicResource TextBoxBorderStyle}"> <Border Style="{DynamicResource TextBoxBorderStyle}">
<Border Style="{DynamicResource TextBoxBottomBorderStyle}"> <Border Style="{DynamicResource TextBoxBottomBorderStyle}">
<Grid> <Grid>
@@ -830,9 +817,9 @@
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<TextBlock x:Name="TweakSearchPlaceholder" Grid.Column="0" Text="Search tweaks..." Foreground="{DynamicResource AppFgColor}" Opacity="0.7" FontSize="13" Margin="3,0,0,1" VerticalAlignment="Center" IsHitTestVisible="False"/> <TextBlock x:Name="TweakSearchPlaceholder" Grid.Column="0" Text="%LANG:TweaksSearchPlaceholder%" Foreground="{DynamicResource AppFgColor}" Opacity="0.7" FontSize="13" Margin="3,0,0,1" VerticalAlignment="Center" IsHitTestVisible="False"/>
<TextBox x:Name="TweakSearchBox" Grid.Column="0" Style="{DynamicResource TextBoxInputStyle}" Text="" AutomationProperties.Name="Search tweaks"/> <TextBox x:Name="TweakSearchBox" Grid.Column="0" Style="{DynamicResource TextBoxInputStyle}" Text="" AutomationProperties.Name="%LANG:TweaksSearchAutomationName%"/>
<TextBlock Grid.Column="1" Text="&#xE721;" FontFamily="Segoe Fluent Icons" FontSize="14" VerticalAlignment="Center" Margin="8,0,4,0" Foreground="{DynamicResource AppFgColor}" Opacity="0.7"/> <TextBlock Grid.Column="1" Text="&#xE721;" FontFamily="{DynamicResource AppIconFontFamily}" FontSize="14" VerticalAlignment="Center" Margin="8,0,4,0" Foreground="{DynamicResource AppFgColor}" Opacity="0.7"/>
</Grid> </Grid>
</Border> </Border>
</Border> </Border>
@@ -883,12 +870,12 @@
</TabItem> </TabItem>
<!-- Deployment Settings Tab --> <!-- Deployment Settings Tab -->
<TabItem Header="Deployment Settings" x:Name="DeploymentSettingsTab"> <TabItem Header="%LANG:DeployTabHeader%" x:Name="DeploymentSettingsTab">
<DockPanel> <DockPanel>
<Border DockPanel.Dock="Top" Padding="20,4,20,0"> <Border DockPanel.Dock="Top" Padding="20,4,20,0">
<StackPanel> <StackPanel>
<TextBlock Text="Deployment Settings" FontWeight="SemiBold" FontSize="24" Foreground="{DynamicResource AppFgColor}"/> <TextBlock Text="%LANG:DeployTitle%" FontWeight="SemiBold" FontSize="24" Foreground="{DynamicResource AppFgColor}"/>
<TextBlock Text="Configure how the selected changes will be applied to your system" FontSize="14" Margin="0,5,0,20" Foreground="{DynamicResource AppFgColor}" TextWrapping="Wrap"/> <TextBlock Text="%LANG:DeploySubtitle%" FontSize="14" Margin="0,5,0,20" Foreground="{DynamicResource AppFgColor}" TextWrapping="Wrap"/>
</StackPanel> </StackPanel>
</Border> </Border>
@@ -910,37 +897,39 @@
<!-- Apply Changes To --> <!-- Apply Changes To -->
<Border Grid.Row="0" BorderBrush="{DynamicResource AppBorderColor}" BorderThickness="1" CornerRadius="4" Background="{DynamicResource CardBgColor}" Padding="16,12" Margin="0,0,0,16"> <Border Grid.Row="0" BorderBrush="{DynamicResource AppBorderColor}" BorderThickness="1" CornerRadius="4" Background="{DynamicResource CardBgColor}" Padding="16,12" Margin="0,0,0,16">
<StackPanel> <StackPanel>
<TextBlock Text="Changes will be applied to" Style="{StaticResource CategoryHeaderTextBlock}"/> <TextBlock Text="%LANG:DeployApplyToTitle%" Style="{StaticResource CategoryHeaderTextBlock}"/>
<TextBlock x:Name="UserSelectionDescription" Text="The currently logged-in user profile." Foreground="{DynamicResource AppFgColor}" FontSize="13" TextWrapping="Wrap" Margin="0,-2,0,3"/> <TextBlock x:Name="UserSelectionDescription" Text="%LANG:DeployUserSelectionDescription%" Foreground="{DynamicResource AppFgColor}" FontSize="13" TextWrapping="Wrap" Margin="0,-2,0,3"/>
</StackPanel> </StackPanel>
</Border> </Border>
<!-- App Removal Scope --> <!-- App Removal Scope -->
<Border Grid.Row="1" x:Name="AppRemovalScopeSection" BorderBrush="{DynamicResource AppBorderColor}" BorderThickness="1" CornerRadius="4" Background="{DynamicResource CardBgColor}" Padding="16,12" Margin="0,0,0,16"> <Border Grid.Row="1" x:Name="AppRemovalScopeSection" BorderBrush="{DynamicResource AppBorderColor}" BorderThickness="1" CornerRadius="4" Background="{DynamicResource CardBgColor}" Padding="16,12" Margin="0,0,0,16">
<StackPanel> <StackPanel>
<TextBlock Text="Apps will be removed for" Style="{StaticResource CategoryHeaderTextBlock}"/> <TextBlock Text="%LANG:DeployAppRemovalScopeTitle%" Style="{StaticResource CategoryHeaderTextBlock}"/>
<ComboBox x:Name="AppRemovalScopeCombo" Margin="0,0,0,6" AutomationProperties.Name="App Removal Scope"> <ComboBox x:Name="AppRemovalScopeCombo" Margin="0,0,0,6" AutomationProperties.Name="%LANG:DeployAppRemovalScopeAutomationName%">
<ComboBoxItem x:Name="AppRemovalScopeAllUsers" Content="All users" IsSelected="True"/> <ComboBoxItem x:Name="AppRemovalScopeAllUsers" Content="%LANG:DeployAppRemovalScopeAllUsers%" IsSelected="True"/>
<ComboBoxItem x:Name="AppRemovalScopeCurrentUser" Content="Current user only"/> <ComboBoxItem x:Name="AppRemovalScopeCurrentUser" Content="%LANG:DeployAppRemovalScopeCurrentUser%"/>
<ComboBoxItem x:Name="AppRemovalScopeTargetUser" Content="Target user only" Visibility="Collapsed"/> <ComboBoxItem x:Name="AppRemovalScopeTargetUser" Content="%LANG:DeployAppRemovalScopeTargetUser%" Visibility="Collapsed"/>
</ComboBox> </ComboBox>
<TextBlock x:Name="AppRemovalScopeDescription" Text="Apps will be removed for all users and from the Windows image to prevent reinstallation for new users." Foreground="{DynamicResource AppFgColor}" FontSize="13" TextWrapping="Wrap" Margin="0,6,0,3"/> <TextBlock x:Name="AppRemovalScopeDescription" Text="%LANG:AppRemovalScopeDescriptionAllUsers%" Foreground="{DynamicResource AppFgColor}" FontSize="13" TextWrapping="Wrap" Margin="0,6,0,3"/>
</StackPanel> </StackPanel>
</Border> </Border>
<!-- Options --> <!-- Options -->
<Border Grid.Row="2" BorderBrush="{DynamicResource AppBorderColor}" BorderThickness="1" CornerRadius="4" Background="{DynamicResource CardBgColor}" Padding="16,12,16,3" Margin="0,0,0,16"> <Border Grid.Row="2" BorderBrush="{DynamicResource AppBorderColor}" BorderThickness="1" CornerRadius="4" Background="{DynamicResource CardBgColor}" Padding="16,12,16,3" Margin="0,0,0,16">
<StackPanel> <StackPanel>
<TextBlock Text="Options" Style="{StaticResource CategoryHeaderTextBlock}"/> <TextBlock Text="%LANG:DeployOptionsTitle%" Style="{StaticResource CategoryHeaderTextBlock}"/>
<!-- Restore Point Option -->
<StackPanel> <StackPanel>
<CheckBox x:Name="RestorePointCheckBox" Style="{DynamicResource FeatureCheckboxStyle}" IsChecked="True" Content="Create a system restore point (Recommended)" AutomationProperties.Name="Create a system restore point (Recommended)"/> <CheckBox x:Name="RegistryBackupCheckBox" Style="{DynamicResource FeatureCheckboxStyle}" IsChecked="True" Content="%LANG:DeployOptionRegistryBackup%" AutomationProperties.Name="%LANG:DeployOptionRegistryBackup%"/>
</StackPanel>
<StackPanel>
<CheckBox x:Name="RestorePointCheckBox" Style="{DynamicResource FeatureCheckboxStyle}" IsChecked="True" Content="%LANG:DeployOptionRestorePoint%" AutomationProperties.Name="%LANG:DeployOptionRestorePoint%"/>
</StackPanel> </StackPanel>
<!-- Restart Explorer Option -->
<StackPanel> <StackPanel>
<CheckBox x:Name="RestartExplorerCheckBox" Style="{DynamicResource FeatureCheckboxStyle}" Content="Restart the Windows Explorer process to apply all changes immediately" AutomationProperties.Name="Restart the Windows Explorer process to apply all changes immediately"/> <CheckBox x:Name="RestartExplorerCheckBox" Style="{DynamicResource FeatureCheckboxStyle}" Content="%LANG:DeployOptionRestartExplorer%" AutomationProperties.Name="%LANG:DeployOptionRestartExplorer%"/>
</StackPanel> </StackPanel>
</StackPanel> </StackPanel>
</Border> </Border>
@@ -969,10 +958,10 @@
<!-- Review & Apply Section --> <!-- Review & Apply Section -->
<StackPanel Grid.Row="1" HorizontalAlignment="Stretch" Background="{DynamicResource AppBgColor}"> <StackPanel Grid.Row="1" HorizontalAlignment="Stretch" Background="{DynamicResource AppBgColor}">
<Button x:Name="ReviewChangesBtn" Background="Transparent" BorderThickness="0" Cursor="Hand" HorizontalAlignment="Center" Margin="0,4,0,10" AutomationProperties.Name="Review selected changes"> <Button x:Name="ReviewChangesBtn" Background="Transparent" BorderThickness="0" Cursor="Hand" HorizontalAlignment="Center" Margin="0,4,0,10" AutomationProperties.Name="%LANG:DeployReviewChanges%">
<Button.Template> <Button.Template>
<ControlTemplate TargetType="Button"> <ControlTemplate TargetType="Button">
<TextBlock x:Name="LinkText" Text="Review selected changes" FontSize="16" Foreground="{DynamicResource ButtonBgColor}" FontWeight="SemiBold" HorizontalAlignment="Center"/> <TextBlock x:Name="LinkText" Text="%LANG:DeployReviewChanges%" FontSize="16" Foreground="{DynamicResource ButtonBgColor}" FontWeight="SemiBold" HorizontalAlignment="Center"/>
<ControlTemplate.Triggers> <ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True"> <Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="LinkText" Property="Foreground" Value="{DynamicResource ButtonHoverColor}"/> <Setter TargetName="LinkText" Property="Foreground" Value="{DynamicResource ButtonHoverColor}"/>
@@ -984,10 +973,10 @@
</ControlTemplate> </ControlTemplate>
</Button.Template> </Button.Template>
</Button> </Button>
<Button x:Name="DeploymentApplyBtn" Style="{DynamicResource PrimaryButtonStyle}" Width="200" Height="44" HorizontalAlignment="Center" AutomationProperties.Name="Apply Changes"> <Button x:Name="DeploymentApplyBtn" Style="{DynamicResource PrimaryButtonStyle}" MinWidth="200" Height="44" Padding="12,0" HorizontalAlignment="Center" AutomationProperties.Name="%LANG:DeployApplyChanges%">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center"> <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="&#xE73E;" FontFamily="Segoe Fluent Icons" FontSize="20" FontWeight="SemiBold" VerticalAlignment="Center"/> <TextBlock Text="&#xE73E;" FontFamily="{DynamicResource AppIconFontFamily}" FontSize="20" FontWeight="SemiBold" VerticalAlignment="Center"/>
<TextBlock Text="Apply Changes" VerticalAlignment="Center" FontSize="18" FontWeight="SemiBold" Margin="8,0,0,4"/> <TextBlock Text="%LANG:DeployApplyChanges%" VerticalAlignment="Center" FontSize="18" FontWeight="SemiBold" Margin="8,0,0,4"/>
</StackPanel> </StackPanel>
</Button> </Button>
</StackPanel> </StackPanel>
@@ -1004,18 +993,18 @@
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Button x:Name="PreviousBtn" Grid.Column="0" Width="120" Height="36" Style="{DynamicResource SecondaryButtonStyle}" Visibility="Collapsed" AutomationProperties.Name="Back"> <Button x:Name="PreviousBtn" Grid.Column="0" Width="120" Height="36" Style="{DynamicResource SecondaryButtonStyle}" Visibility="Collapsed" AutomationProperties.Name="%LANG:NavBack%">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center"> <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="&#xE72B;" FontFamily="Segoe Fluent Icons" FontSize="12" Margin="0,0,8,0" VerticalAlignment="Center"/> <TextBlock Text="&#xE72B;" FontFamily="{DynamicResource AppIconFontFamily}" FontSize="12" Margin="0,0,8,0" VerticalAlignment="Center"/>
<TextBlock Text="Back" VerticalAlignment="Center" FontSize="14" Margin="0,0,0,3"/> <TextBlock Text="%LANG:NavBack%" VerticalAlignment="Center" FontSize="14" Margin="0,0,0,3"/>
</StackPanel> </StackPanel>
</Button> </Button>
<StackPanel Grid.Column="2" Orientation="Horizontal" HorizontalAlignment="Right"> <StackPanel Grid.Column="2" Orientation="Horizontal" HorizontalAlignment="Right">
<Button x:Name="NextBtn" Width="120" Height="36" Style="{DynamicResource PrimaryButtonStyle}" AutomationProperties.Name="Next"> <Button x:Name="NextBtn" Width="120" Height="36" Style="{DynamicResource PrimaryButtonStyle}" AutomationProperties.Name="%LANG:NavNext%">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center"> <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="Next" VerticalAlignment="Center" FontSize="14" Margin="0,0,0,3"/> <TextBlock Text="%LANG:NavNext%" VerticalAlignment="Center" FontSize="14" Margin="0,0,0,3"/>
<TextBlock Text="&#xE72A;" FontFamily="Segoe Fluent Icons" FontSize="12" Margin="8,0,0,0" VerticalAlignment="Center"/> <TextBlock Text="&#xE72A;" FontFamily="{DynamicResource AppIconFontFamily}" FontSize="12" Margin="8,0,0,0" VerticalAlignment="Center"/>
</StackPanel> </StackPanel>
</Button> </Button>
</StackPanel> </StackPanel>
@@ -1023,9 +1012,9 @@
<!-- Progress Indicators - Centered independently --> <!-- Progress Indicators - Centered independently -->
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center"> <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<Ellipse x:Name="ProgressIndicator1" Width="10" Height="10" Margin="4,0" Fill="#808080" ToolTip="App Removal"/> <Ellipse x:Name="ProgressIndicator1" Width="10" Height="10" Margin="4,0" Fill="#808080" ToolTip="%LANG:NavProgressAppRemoval%"/>
<Ellipse x:Name="ProgressIndicator2" Width="10" Height="10" Margin="4,0" Fill="#808080" ToolTip="System Tweaks"/> <Ellipse x:Name="ProgressIndicator2" Width="10" Height="10" Margin="4,0" Fill="#808080" ToolTip="%LANG:NavProgressSystemTweaks%"/>
<Ellipse x:Name="ProgressIndicator3" Width="10" Height="10" Margin="4,0" Fill="#808080" ToolTip="Deployment Settings"/> <Ellipse x:Name="ProgressIndicator3" Width="10" Height="10" Margin="4,0" Fill="#808080" ToolTip="%LANG:NavProgressDeploymentSettings%"/>
</StackPanel> </StackPanel>
</Grid> </Grid>
</Grid> </Grid>
+6 -6
View File
@@ -1,6 +1,6 @@
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MessageBox" Title="%LANG:TitleBarAppName%"
Width="440" Width="440"
SizeToContent="Height" SizeToContent="Height"
MaxHeight="501" MaxHeight="501"
@@ -34,8 +34,8 @@
<!-- Title Bar --> <!-- Title Bar -->
<Grid Grid.Row="0" x:Name="TitleBar" Style="{DynamicResource ModalTitleBarStyle}"> <Grid Grid.Row="0" x:Name="TitleBar" Style="{DynamicResource ModalTitleBarStyle}">
<TextBlock x:Name="TitleText" <TextBlock x:Name="TitleText"
Text="Message" Text="%LANG:TitleBarAppName%"
Style="{DynamicResource ModalTitleTextStyle}"/> Style="{DynamicResource ModalTitleTextStyle}"/>
</Grid> </Grid>
@@ -49,7 +49,7 @@
<!-- Icon --> <!-- Icon -->
<TextBlock x:Name="IconText" <TextBlock x:Name="IconText"
Grid.Column="0" Grid.Column="0"
FontFamily="Segoe Fluent Icons" FontFamily="{DynamicResource AppIconFontFamily}"
FontSize="24" FontSize="24"
Foreground="{DynamicResource AppFgColor}" Foreground="{DynamicResource AppFgColor}"
VerticalAlignment="Center" VerticalAlignment="Center"
@@ -84,11 +84,11 @@
<Button x:Name="Button1" <Button x:Name="Button1"
Grid.Column="0" Grid.Column="0"
Content="OK" Content="%LANG:MessageBoxOk%"
Style="{DynamicResource ModalPrimaryStretchedButtonStyle}"/> Style="{DynamicResource ModalPrimaryStretchedButtonStyle}"/>
<Button x:Name="Button2" <Button x:Name="Button2"
Grid.Column="1" Grid.Column="1"
Content="Cancel" Content="%LANG:MessageBoxCancel%"
Style="{DynamicResource ModalSecondaryStretchedButtonStyle}" Style="{DynamicResource ModalSecondaryStretchedButtonStyle}"
Visibility="Collapsed"/> Visibility="Collapsed"/>
</Grid> </Grid>
+31 -31
View File
@@ -1,6 +1,6 @@
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Restore Backup" Title="%LANG:RestoreWindowTitle%"
Width="500" Width="500"
SizeToContent="Height" SizeToContent="Height"
MaxHeight="560" MaxHeight="560"
@@ -63,7 +63,7 @@
<Grid Grid.Row="0" x:Name="TitleBar" Style="{DynamicResource ModalTitleBarStyle}"> <Grid Grid.Row="0" x:Name="TitleBar" Style="{DynamicResource ModalTitleBarStyle}">
<TextBlock x:Name="TitleText" <TextBlock x:Name="TitleText"
Text="Restore Backup" Text="%LANG:RestoreWindowTitle%"
Style="{DynamicResource ModalTitleTextStyle}"/> Style="{DynamicResource ModalTitleTextStyle}"/>
</Grid> </Grid>
@@ -72,8 +72,8 @@
Width="36" Height="32" Width="36" Height="32"
BorderThickness="0" BorderThickness="0"
Cursor="Hand" Cursor="Hand"
ToolTip="Close" ToolTip="%LANG:TitleBarClose%"
AutomationProperties.Name="Close"> AutomationProperties.Name="%LANG:TitleBarClose%">
<Button.Template> <Button.Template>
<ControlTemplate TargetType="Button"> <ControlTemplate TargetType="Button">
<Border Background="{TemplateBinding Background}" BorderThickness="0" CornerRadius="0,8,0,0"> <Border Background="{TemplateBinding Background}" BorderThickness="0" CornerRadius="0,8,0,0">
@@ -92,7 +92,7 @@
</Style.Triggers> </Style.Triggers>
</Style> </Style>
</Button.Style> </Button.Style>
<TextBlock Text="&#xE8BB;" FontFamily="Segoe Fluent Icons" FontSize="10"/> <TextBlock Text="&#xE8BB;" FontFamily="{DynamicResource AppIconFontFamily}" FontSize="10"/>
</Button> </Button>
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto" Margin="0"> <ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto" Margin="0">
@@ -122,7 +122,7 @@
FontSize="14" FontSize="14"
LineHeight="20" LineHeight="20"
Foreground="{DynamicResource AppFgColor}" Foreground="{DynamicResource AppFgColor}"
Text="Choose what changes you want to restore."/> Text="%LANG:RestoreSelectTypePrompt%"/>
<Button x:Name="ChooseRegistryBtn" <Button x:Name="ChooseRegistryBtn"
Grid.Row="1" Grid.Row="1"
@@ -135,17 +135,17 @@
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" <TextBlock Grid.Column="0"
Text="&#xEF58;" Text="&#xEF58;"
FontFamily="Segoe Fluent Icons" FontFamily="{DynamicResource AppIconFontFamily}"
FontSize="24" FontSize="24"
VerticalAlignment="Center" VerticalAlignment="Center"
Margin="14,0,14,0"/> Margin="14,0,14,0"/>
<StackPanel Grid.Column="1" <StackPanel Grid.Column="1"
VerticalAlignment="Center" VerticalAlignment="Center"
Margin="0,0,12,0"> Margin="0,0,12,0">
<TextBlock Text="Restore Registry Backup" <TextBlock Text="%LANG:RestoreChooseRegistryTitle%"
FontSize="16" FontSize="16"
FontWeight="SemiBold"/> FontWeight="SemiBold"/>
<TextBlock Text="Restore system registry configuration from a backup" <TextBlock Text="%LANG:RestoreChooseRegistryDescription%"
FontSize="12" FontSize="12"
Opacity="0.75" Opacity="0.75"
TextWrapping="Wrap" TextWrapping="Wrap"
@@ -165,17 +165,17 @@
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" <TextBlock Grid.Column="0"
Text="&#xE8FC;" Text="&#xE8FC;"
FontFamily="Segoe Fluent Icons" FontFamily="{DynamicResource AppIconFontFamily}"
FontSize="24" FontSize="24"
VerticalAlignment="Center" VerticalAlignment="Center"
Margin="14,0,14,0"/> Margin="14,0,14,0"/>
<StackPanel Grid.Column="1" <StackPanel Grid.Column="1"
VerticalAlignment="Center" VerticalAlignment="Center"
Margin="0,0,12,0"> Margin="0,0,12,0">
<TextBlock Text="Restore Start Menu Backup" <TextBlock Text="%LANG:RestoreChooseStartMenuTitle%"
FontSize="16" FontSize="16"
FontWeight="SemiBold"/> FontWeight="SemiBold"/>
<TextBlock Text="Restore the Start Menu pinned apps layout from a backup" <TextBlock Text="%LANG:RestoreChooseStartMenuDescription%"
FontSize="12" FontSize="12"
Opacity="0.75" Opacity="0.75"
TextWrapping="Wrap" TextWrapping="Wrap"
@@ -204,7 +204,7 @@
FontSize="14" FontSize="14"
LineHeight="20" LineHeight="20"
Foreground="{DynamicResource AppFgColor}" Foreground="{DynamicResource AppFgColor}"
Text="This will restore any system registry changes made by Win11Debloat to the previous state. You can review the changes after selecting a backup file. Removed applications will need to be reinstalled manually."/> Text="%LANG:RestoreRegistryIntro%"/>
<TextBlock Grid.Row="1" <TextBlock Grid.Row="1"
Margin="0,12,0,2" Margin="0,12,0,2"
@@ -212,7 +212,7 @@
FontSize="13" FontSize="13"
Foreground="{DynamicResource AppFgColor}" Foreground="{DynamicResource AppFgColor}"
Opacity="0.75" Opacity="0.75"
Text="Warning: Only use backup files generated by Win11Debloat."/> Text="%LANG:RestoreRegistryWarning%"/>
</Grid> </Grid>
<Grid x:Name="OverviewPanel" Grid.Row="1" Margin="0" Visibility="Collapsed"> <Grid x:Name="OverviewPanel" Grid.Row="1" Margin="0" Visibility="Collapsed">
@@ -237,14 +237,14 @@
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="File:" Style="{DynamicResource ModalInfoLabelTextStyle}"/> <TextBlock Grid.Row="0" Grid.Column="0" Text="%LANG:RestoreFileLabel%" Style="{DynamicResource ModalInfoLabelTextStyle}"/>
<TextBlock x:Name="BackupFileText" Grid.Row="0" Grid.Column="1" Text="Not selected" Style="{DynamicResource ModalInfoValueTextStyle}" TextWrapping="Wrap" Margin="0,0,0,8"/> <TextBlock x:Name="BackupFileText" Grid.Row="0" Grid.Column="1" Text="%LANG:RestoreFileNotSelected%" Style="{DynamicResource ModalInfoValueTextStyle}" TextWrapping="Wrap" Margin="0,0,0,8"/>
<TextBlock Grid.Row="1" Grid.Column="0" Text="Created:" Style="{DynamicResource ModalInfoLabelTextStyle}"/> <TextBlock Grid.Row="1" Grid.Column="0" Text="%LANG:RestoreCreatedLabel%" Style="{DynamicResource ModalInfoLabelTextStyle}"/>
<TextBlock x:Name="BackupCreatedText" Grid.Row="1" Grid.Column="1" Text="N/A" Style="{DynamicResource ModalInfoValueTextStyle}"/> <TextBlock x:Name="BackupCreatedText" Grid.Row="1" Grid.Column="1" Text="%LANG:RestoreCreatedUnavailable%" Style="{DynamicResource ModalInfoValueTextStyle}"/>
<TextBlock Grid.Row="2" Grid.Column="0" Text="Target:" Style="{DynamicResource ModalInfoLabelTextStyle}" Margin="0,0,16,0"/> <TextBlock Grid.Row="2" Grid.Column="0" Text="%LANG:RestoreTargetLabel%" Style="{DynamicResource ModalInfoLabelTextStyle}" Margin="0,0,16,0"/>
<TextBlock x:Name="BackupTargetText" Grid.Row="2" Grid.Column="1" Text="N/A" Style="{DynamicResource ModalInfoValueTextStyle}" Margin="0"/> <TextBlock x:Name="BackupTargetText" Grid.Row="2" Grid.Column="1" Text="%LANG:RestoreCreatedUnavailable%" Style="{DynamicResource ModalInfoValueTextStyle}" Margin="0"/>
</Grid> </Grid>
<Border Grid.Row="1" Height="1" Background="{DynamicResource AppBorderColor}" Margin="0,0,0,12"/> <Border Grid.Row="1" Height="1" Background="{DynamicResource AppBorderColor}" Margin="0,0,0,12"/>
@@ -256,7 +256,7 @@
</Grid.RowDefinitions> </Grid.RowDefinitions>
<TextBlock Grid.Row="0" <TextBlock Grid.Row="0"
Text="The following changes will be reverted:" Text="%LANG:RestoreRevertibleFeaturesTitle%"
FontSize="13" FontSize="13"
Foreground="{DynamicResource AppFgColor}" Foreground="{DynamicResource AppFgColor}"
FontWeight="SemiBold" FontWeight="SemiBold"
@@ -282,7 +282,7 @@
Foreground="{DynamicResource AppFgColor}" Foreground="{DynamicResource AppFgColor}"
TextWrapping="Wrap" TextWrapping="Wrap"
Visibility="Collapsed" Visibility="Collapsed"
Text="This will restore the Start Menu pinned apps layout for the current user."/> Text="%LANG:RestoreStartMenuSummary%"/>
<Border x:Name="ReappliedSeparator" Grid.Row="3" Height="1" Background="{DynamicResource AppBorderColor}" Margin="0,12,0,12" Visibility="Collapsed"/> <Border x:Name="ReappliedSeparator" Grid.Row="3" Height="1" Background="{DynamicResource AppBorderColor}" Margin="0,12,0,12" Visibility="Collapsed"/>
@@ -293,7 +293,7 @@
</Grid.RowDefinitions> </Grid.RowDefinitions>
<TextBlock Grid.Row="0" <TextBlock Grid.Row="0"
Text="The following changes will be re-applied:" Text="%LANG:RestoreReappliedFeaturesTitle%"
FontSize="13" FontSize="13"
Foreground="{DynamicResource AppFgColor}" Foreground="{DynamicResource AppFgColor}"
FontWeight="SemiBold" FontWeight="SemiBold"
@@ -323,7 +323,7 @@
</Grid.RowDefinitions> </Grid.RowDefinitions>
<TextBlock Grid.Row="0" <TextBlock Grid.Row="0"
Text="The following changes won't be reverted:" Text="%LANG:RestoreNonRevertibleFeaturesTitle%"
FontSize="13" FontSize="13"
Foreground="{DynamicResource AppFgColor}" Foreground="{DynamicResource AppFgColor}"
FontWeight="SemiBold" FontWeight="SemiBold"
@@ -345,7 +345,7 @@
<TextBlock x:Name="NonRevertibleWikiLink" <TextBlock x:Name="NonRevertibleWikiLink"
Grid.Row="2" Grid.Row="2"
Margin="0,8,0,0" Margin="0,8,0,0"
Text="Visit the wiki for more information" Text="%LANG:RestoreWikiLink%"
FontSize="13" FontSize="13"
FontWeight="SemiBold" FontWeight="SemiBold"
Style="{DynamicResource HyperlinkStyle}" Style="{DynamicResource HyperlinkStyle}"
@@ -374,7 +374,7 @@
LineHeight="20" LineHeight="20"
Margin="0,0,0,12" Margin="0,0,0,12"
Foreground="{DynamicResource AppFgColor}" Foreground="{DynamicResource AppFgColor}"
Text="This will restore the Start Menu pinned apps layout for the selected user(s) using a backup that is automatically created by Win11Debloat. Manually created backups can also be used."/> Text="%LANG:RestoreStartMenuIntro%"/>
<ComboBox x:Name="StartMenuScopeCombo" <ComboBox x:Name="StartMenuScopeCombo"
Grid.Row="1" Grid.Row="1"
@@ -382,13 +382,13 @@
Margin="0,0,0,2" Margin="0,0,0,2"
MinWidth="408" MinWidth="408"
HorizontalAlignment="Left"> HorizontalAlignment="Left">
<ComboBoxItem Content="Current user" Tag="CurrentUser"/> <ComboBoxItem Content="%LANG:RestoreStartMenuScopeCurrentUser%" Tag="CurrentUser"/>
<ComboBoxItem Content="All users" Tag="AllUsers"/> <ComboBoxItem Content="%LANG:RestoreStartMenuScopeAllUsers%" Tag="AllUsers"/>
</ComboBox> </ComboBox>
<CheckBox x:Name="StartMenuAutoBackupCheck" <CheckBox x:Name="StartMenuAutoBackupCheck"
Grid.Row="2" Grid.Row="2"
Content="Automatically find Start Menu backup" Content="%LANG:RestoreStartMenuAutoBackupCheckbox%"
IsChecked="True" IsChecked="True"
FontSize="12" FontSize="12"
Margin="0,10,0,0" Margin="0,10,0,0"
@@ -411,13 +411,13 @@
<Button x:Name="PrimaryActionBtn" <Button x:Name="PrimaryActionBtn"
Grid.Column="0" Grid.Column="0"
Content="Next" Content="%LANG:NavNext%"
Visibility="Collapsed" Visibility="Collapsed"
Style="{DynamicResource ModalPrimaryStretchedButtonStyle}"/> Style="{DynamicResource ModalPrimaryStretchedButtonStyle}"/>
<Button x:Name="BackBtn" <Button x:Name="BackBtn"
Grid.Column="1" Grid.Column="1"
Content="Back" Content="%LANG:RestoreBackBtnBack%"
Visibility="Collapsed" Visibility="Collapsed"
Style="{DynamicResource ModalSecondaryStretchedButtonStyle}"/> Style="{DynamicResource ModalSecondaryStretchedButtonStyle}"/>
</Grid> </Grid>
+71
View File
@@ -0,0 +1,71 @@
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="%LANG:SettingsTitle%" Width="500" SizeToContent="Height"
ResizeMode="NoResize" WindowStartupLocation="CenterOwner" WindowStyle="None"
AllowsTransparency="True" Background="Transparent" ShowInTaskbar="False">
<Border Style="{DynamicResource ModalCardBorderStyle}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid x:Name="TitleBar" Style="{DynamicResource ModalTitleBarStyle}">
<TextBlock Text="%LANG:SettingsTitle%" Style="{DynamicResource ModalTitleTextStyle}" HorizontalAlignment="Left"/>
</Grid>
<Button x:Name="CloseBtn" Grid.Row="0"
HorizontalAlignment="Right" VerticalAlignment="Top"
Width="36" Height="32"
BorderThickness="0" IsCancel="True"
Cursor="Hand"
ToolTip="%LANG:TitleBarClose%"
AutomationProperties.Name="%LANG:TitleBarClose%">
<Button.Template>
<ControlTemplate TargetType="Button">
<Border Background="{TemplateBinding Background}" BorderThickness="0" CornerRadius="0,8,0,0">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Button.Template>
<Button.Style>
<Style TargetType="Button">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Foreground" Value="{DynamicResource AppFgColor}"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{DynamicResource TitleBarCloseHoverColor}"/>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
<TextBlock Text="&#xE8BB;" FontFamily="{DynamicResource AppIconFontFamily}" FontSize="10"/>
</Button>
<StackPanel Grid.Row="1" Margin="20,4,20,10">
<TextBlock Text="%LANG:SettingsTheme%" Style="{DynamicResource ModalInfoLabelTextStyle}" HorizontalAlignment="Left" Margin="0,0,0,10"/>
<UniformGrid Columns="3" Margin="0,0,0,20">
<Button x:Name="ThemeAutoButton" Tag="Auto" Style="{DynamicResource SecondaryButtonStyle}" Height="32" Padding="12,0" Margin="0,0,6,0" AutomationProperties.Name="%LANG:SettingsThemeAuto%">
<StackPanel Orientation="Horizontal"><TextBlock Text="&#xE770;" FontFamily="{DynamicResource AppIconFontFamily}" Margin="0,0,8,0" VerticalAlignment="Center"/><TextBlock Text="%LANG:SettingsThemeAuto%"/></StackPanel>
</Button>
<Button x:Name="ThemeLightButton" Tag="Light" Style="{DynamicResource SecondaryButtonStyle}" Height="32" Padding="12,0" Margin="3,0,3,0" AutomationProperties.Name="%LANG:SettingsThemeLight%">
<StackPanel Orientation="Horizontal"><TextBlock Text="&#xE706;" FontFamily="{DynamicResource AppIconFontFamily}" Margin="0,0,8,0" VerticalAlignment="Center"/><TextBlock Text="%LANG:SettingsThemeLight%"/></StackPanel>
</Button>
<Button x:Name="ThemeDarkButton" Tag="Dark" Style="{DynamicResource SecondaryButtonStyle}" Height="32" Padding="12,0" Margin="6,0,0,0" AutomationProperties.Name="%LANG:SettingsThemeDark%">
<StackPanel Orientation="Horizontal"><TextBlock Text="&#xE708;" FontFamily="{DynamicResource AppIconFontFamily}" Margin="0,0,8,0" VerticalAlignment="Center"/><TextBlock Text="%LANG:SettingsThemeDark%"/></StackPanel>
</Button>
</UniformGrid>
<TextBlock Text="%LANG:SettingsLanguage%" Style="{DynamicResource ModalInfoLabelTextStyle}" HorizontalAlignment="Left" Margin="0,0,0,10"/>
<ComboBox x:Name="SettingsLanguageCombo" AutomationProperties.Name="%LANG:SettingsLanguage%"/>
<TextBlock x:Name="SettingsErrorText" Style="{DynamicResource ModalSubtextStyle}" Visibility="Collapsed" Margin="0,12,0,0"/>
</StackPanel>
<Border Grid.Row="2" Style="{DynamicResource ModalFooterBorderStyle}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Button x:Name="SaveButton" Grid.Column="1" Content="%LANG:SettingsSave%" IsDefault="True" Padding="12,0" Style="{DynamicResource ModalPrimaryStretchedButtonStyle}"/>
</Grid>
</Border>
</Grid>
</Border>
</Window>
+27 -3
View File
@@ -1,6 +1,30 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- Loading spinner for app inventory. -->
<Style x:Key="LoadingSpinnerStyle" TargetType="TextBlock">
<Setter Property="Text" Value="&#xF16A;"/>
<Setter Property="FontFamily" Value="{DynamicResource AppIconFontFamily}"/>
<Setter Property="FontSize" Value="28"/>
<Setter Property="Foreground" Value="{DynamicResource AppFgColor}"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="RenderTransformOrigin" Value="0.5,0.5"/>
<Setter Property="RenderTransform"><Setter.Value><RotateTransform Angle="0"/></Setter.Value></Setter>
<Style.Triggers>
<Trigger Property="IsVisible" Value="True">
<Trigger.EnterActions>
<BeginStoryboard x:Name="LoadingSpinStoryboard">
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)"
From="0" To="360" Duration="0:0:1.5" RepeatBehavior="Forever"/>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions><RemoveStoryboard BeginStoryboardName="LoadingSpinStoryboard"/></Trigger.ExitActions>
</Trigger>
</Style.Triggers>
</Style>
<!-- Primary Button Style --> <!-- Primary Button Style -->
<Style x:Key="PrimaryButtonStyle" TargetType="Button"> <Style x:Key="PrimaryButtonStyle" TargetType="Button">
<Setter Property="Background" Value="{DynamicResource ButtonBgColor}"/> <Setter Property="Background" Value="{DynamicResource ButtonBgColor}"/>
@@ -272,7 +296,7 @@
<Border x:Name="Border" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="4"> <Border x:Name="Border" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="4">
<TextBlock x:Name="Arrow" <TextBlock x:Name="Arrow"
Text="&#xE70D;" Text="&#xE70D;"
FontFamily="Segoe Fluent Icons" FontFamily="{DynamicResource AppIconFontFamily}"
FontSize="10" FontSize="10"
HorizontalAlignment="Right" HorizontalAlignment="Right"
VerticalAlignment="Center" VerticalAlignment="Center"
@@ -393,12 +417,12 @@
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Border x:Name="CheckBoxBorder" Grid.Column="0" Width="20" Height="20" Background="{DynamicResource CheckBoxBgColor}" BorderBrush="{DynamicResource CheckBoxBorderColor}" BorderThickness="1" CornerRadius="4" Margin="0,0,8,0"> <Border x:Name="CheckBoxBorder" Grid.Column="0" Width="20" Height="20" Background="{DynamicResource CheckBoxBgColor}" BorderBrush="{DynamicResource CheckBoxBorderColor}" BorderThickness="1" CornerRadius="4" Margin="0,0,8,0">
<Grid> <Grid>
<TextBlock x:Name="CheckMark" Text="&#xE73E;" FontFamily="Segoe Fluent Icons" FontSize="13" FontWeight="SemiBold" Foreground="{DynamicResource ButtonBgColor}" HorizontalAlignment="Center" VerticalAlignment="Center" Opacity="0"> <TextBlock x:Name="CheckMark" Text="&#xE73E;" FontFamily="{DynamicResource AppIconFontFamily}" FontSize="13" FontWeight="SemiBold" Foreground="{DynamicResource ButtonBgColor}" HorizontalAlignment="Center" VerticalAlignment="Center" Opacity="0">
<TextBlock.Clip> <TextBlock.Clip>
<RectangleGeometry x:Name="CheckMarkClip" Rect="0,0,0,16"/> <RectangleGeometry x:Name="CheckMarkClip" Rect="0,0,0,16"/>
</TextBlock.Clip> </TextBlock.Clip>
</TextBlock> </TextBlock>
<TextBlock x:Name="IndeterminateMark" Text="&#xe9ae;" FontFamily="Segoe Fluent Icons" FontSize="13" FontWeight="Bold" Foreground="{DynamicResource ButtonBgColor}" HorizontalAlignment="Center" VerticalAlignment="Center" Opacity="0" Margin="1,0,0,1"> <TextBlock x:Name="IndeterminateMark" Text="&#xe9ae;" FontFamily="{DynamicResource AppIconFontFamily}" FontSize="13" FontWeight="Bold" Foreground="{DynamicResource ButtonBgColor}" HorizontalAlignment="Center" VerticalAlignment="Center" Opacity="0" Margin="1,0,0,1">
<TextBlock.Clip> <TextBlock.Clip>
<RectangleGeometry x:Name="IndeterminateMarkClip" Rect="0,0,0,12"/> <RectangleGeometry x:Name="IndeterminateMarkClip" Rect="0,0,0,12"/>
</TextBlock.Clip> </TextBlock.Clip>
-57
View File
@@ -1,57 +0,0 @@
# Forcefully removes Microsoft Edge using its uninstaller
# Credit: Based on work from loadstring1 & ave9858
function ForceRemoveEdge {
Write-Host "> Forcefully uninstalling Microsoft Edge..."
$regView = [Microsoft.Win32.RegistryView]::Registry32
$hklm = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, $regView)
$hklm.CreateSubKey('SOFTWARE\Microsoft\EdgeUpdateDev').SetValue('AllowUninstall', '')
# Create stub (This somehow allows uninstalling Edge)
$edgeStub = "$env:SystemRoot\SystemApps\Microsoft.MicrosoftEdge_8wekyb3d8bbwe"
New-Item $edgeStub -ItemType Directory | Out-Null
New-Item "$edgeStub\MicrosoftEdge.exe" | Out-Null
# Remove edge
$uninstallRegKey = $hklm.OpenSubKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge')
if ($null -ne $uninstallRegKey) {
Write-Host "Running uninstaller..."
$uninstallString = $uninstallRegKey.GetValue('UninstallString') + ' --force-uninstall'
Invoke-NonBlocking -ScriptBlock {
param($cmd)
Start-Process cmd.exe "/c $cmd" -WindowStyle Hidden -Wait
} -ArgumentList $uninstallString
Write-Host "Removing leftover files..."
$edgePaths = @(
"$env:ProgramData\Microsoft\Windows\Start Menu\Programs\Microsoft Edge.lnk",
"$env:APPDATA\Microsoft\Internet Explorer\Quick Launch\Microsoft Edge.lnk",
"$env:APPDATA\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Microsoft Edge.lnk",
"$env:APPDATA\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Tombstones\Microsoft Edge.lnk",
"$env:PUBLIC\Desktop\Microsoft Edge.lnk",
"$env:USERPROFILE\Desktop\Microsoft Edge.lnk",
"$edgeStub"
)
foreach ($path in $edgePaths) {
if (Test-Path -Path $path) {
Remove-Item -Path $path -Force -Recurse -ErrorAction SilentlyContinue
Write-Host " Removed $path" -ForegroundColor DarkGray
}
}
Write-Host "Cleaning up registry..."
# Remove MS Edge from autostart
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /v "MicrosoftEdgeAutoLaunch_A9F6DCE4ABADF4F51CF45CD7129E3C6C" /f *>$null
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /v "Microsoft Edge Update" /f *>$null
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run" /v "MicrosoftEdgeAutoLaunch_A9F6DCE4ABADF4F51CF45CD7129E3C6C" /f *>$null
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run" /v "Microsoft Edge Update" /f *>$null
Write-Host "Microsoft Edge was uninstalled"
}
else {
Write-Host "Unable to forcefully uninstall Microsoft Edge, uninstaller could not be found" -ForegroundColor Red
}
}
@@ -17,7 +17,7 @@
PSCustomObject[] with Name and Id properties. Returns $null on PSCustomObject[] with Name and Id properties. Returns $null on
failure, or an empty array when winget succeeds but lists no apps. failure, or an empty array when winget succeeds but lists no apps.
#> #>
function GetInstalledAppsViaWinget { function Get-WingetInstalledApps {
param ( param (
[int]$TimeOut = 10, [int]$TimeOut = 10,
[switch]$NonBlocking [switch]$NonBlocking
@@ -66,7 +66,14 @@ function GetInstalledAppsViaWinget {
} }
} }
if ($dataStart -lt 0 -or $dataStart -ge $lines.Count) { return @() } # A missing table separator means the output is malformed or empty
if ($dataStart -lt 0) {
return $null
}
if ($dataStart -ge $lines.Count) {
return ,@()
}
$apps = [System.Collections.Generic.List[object]]::new() $apps = [System.Collections.Generic.List[object]]::new()
@@ -94,7 +101,7 @@ function GetInstalledAppsViaWinget {
} }
} }
return @($apps) return ,@($apps)
} }
Remove-Job -Job $job -Force -ErrorAction SilentlyContinue Remove-Job -Job $job -Force -ErrorAction SilentlyContinue
@@ -107,4 +114,4 @@ function GetInstalledAppsViaWinget {
else { else {
return & $fetchBlock $TimeOut return & $fetchBlock $TimeOut
} }
} }
@@ -0,0 +1,146 @@
<#
.SYNOPSIS
Forcefully uninstalls Microsoft Edge and removes its leftover shortcuts and autostart entries.
.OUTPUTS
System.Boolean. $true when Edge is uninstalled and cleanup succeeds; otherwise $false.
#>
function Invoke-ForceRemoveEdge {
if ($script:Params.ContainsKey("WhatIf")) {
Write-Host "[WhatIf] Forcefully uninstall Microsoft Edge" -ForegroundColor Cyan
return $true
}
try {
Write-Host "> Forcefully uninstalling Microsoft Edge..."
$regView = [Microsoft.Win32.RegistryView]::Registry32
$hklm = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, $regView)
$edgeUpdateKey = $hklm.CreateSubKey('SOFTWARE\Microsoft\EdgeUpdateDev')
$edgeUpdateKey.SetValue('AllowUninstall', '')
# Create stub (This somehow allows uninstalling Edge)
$edgeStub = "$env:SystemRoot\SystemApps\Microsoft.MicrosoftEdge_8wekyb3d8bbwe"
New-Item $edgeStub -ItemType Directory -Force -ErrorAction Stop | Out-Null
New-Item "$edgeStub\MicrosoftEdge.exe" -ItemType File -Force -ErrorAction Stop | Out-Null
# Remove edge
$uninstallRegKey = $hklm.OpenSubKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge')
if ($null -eq $uninstallRegKey) {
Write-Host "Unable to forcefully uninstall Microsoft Edge, uninstaller could not be found" -ForegroundColor Red
return $false
}
Write-Host "Running uninstaller..."
$uninstallString = $uninstallRegKey.GetValue('UninstallString') + ' --force-uninstall'
$exitCode = Invoke-NonBlocking -ScriptBlock {
param($cmd)
$process = Start-Process cmd.exe "/c $cmd" -WindowStyle Hidden -Wait -PassThru
return $process.ExitCode
} -ArgumentList $uninstallString
if ($exitCode -ne 0) {
Write-Warning "Microsoft Edge uninstaller failed with exit code $exitCode."
return $false
}
Write-Host "Removing leftover files..."
$cleanupSucceeded = $true
$edgePaths = @(
"$env:ProgramData\Microsoft\Windows\Start Menu\Programs\Microsoft Edge.lnk",
"$env:APPDATA\Microsoft\Internet Explorer\Quick Launch\Microsoft Edge.lnk",
"$env:APPDATA\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Microsoft Edge.lnk",
"$env:APPDATA\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Tombstones\Microsoft Edge.lnk",
"$env:PUBLIC\Desktop\Microsoft Edge.lnk",
"$env:USERPROFILE\Desktop\Microsoft Edge.lnk",
"$edgeStub"
)
foreach ($path in $edgePaths) {
if (Test-Path -Path $path) {
try {
Remove-Item -Path $path -Force -Recurse -ErrorAction Stop
Write-Host " Removed $path" -ForegroundColor DarkGray
}
catch {
Write-Warning "Failed to remove Edge leftover '$path': $($_.Exception.Message)"
$cleanupSucceeded = $false
}
}
}
Write-Host "Cleaning up registry..."
$registryCleanupSucceeded = $true
# Remove MS Edge from autostart. Missing values are already-clean state,
# while failures to inspect or remove an existing value are reported.
$autostartValues = @(
@{ Path = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Run'; Name = 'MicrosoftEdgeAutoLaunch_A9F6DCE4ABADF4F51CF45CD7129E3C6C' },
@{ Path = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Run'; Name = 'Microsoft Edge Update' },
@{ Path = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run'; Name = 'MicrosoftEdgeAutoLaunch_A9F6DCE4ABADF4F51CF45CD7129E3C6C' },
@{ Path = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run'; Name = 'Microsoft Edge Update' }
)
foreach ($autostartValue in $autostartValues) {
if (-not (Remove-EdgeAutostartValue -Path $autostartValue.Path -Name $autostartValue.Name)) {
$registryCleanupSucceeded = $false
}
}
if (-not $cleanupSucceeded -or -not $registryCleanupSucceeded) {
Write-Warning "Microsoft Edge was uninstalled, but some leftover files or autostart entries could not be removed."
return $false
}
Write-Host "Microsoft Edge was uninstalled"
return $true
}
catch {
Write-Warning "Failed to forcefully uninstall Microsoft Edge: $($_.Exception.Message)"
return $false
}
finally {
if ($edgeUpdateKey) { $edgeUpdateKey.Dispose() }
if ($uninstallRegKey) { $uninstallRegKey.Dispose() }
if ($hklm) { $hklm.Dispose() }
}
}
<#
.SYNOPSIS
Removes an Edge autostart registry value when it exists.
.OUTPUTS
System.Boolean. $true when the value is absent or removed; $false when inspection or removal fails.
#>
function Remove-EdgeAutostartValue {
param(
[Parameter(Mandatory)]
[string]$Path,
[Parameter(Mandatory)]
[string]$Name
)
try {
$properties = Get-ItemProperty -Path $Path -ErrorAction Stop
}
catch [System.Management.Automation.ItemNotFoundException] {
return $true
}
catch {
Write-Warning "Failed to inspect Edge autostart entry '$Path\$Name': $($_.Exception.Message)"
return $false
}
if (-not $properties.PSObject.Properties[$Name]) {
return $true
}
try {
Remove-ItemProperty -Path $Path -Name $Name -ErrorAction Stop
return $true
}
catch {
Write-Warning "Failed to remove Edge autostart entry '$Path\$Name': $($_.Exception.Message)"
return $false
}
}
+430
View File
@@ -0,0 +1,430 @@
<#
.SYNOPSIS
Removes one or more Windows app packages based on the target scope.
.DESCRIPTION
Iterates over the provided list of app identifiers and removes each one.
The removal method (winget vs. Appx cmdlets) is determined per-app from
Apps.json. A scheduled task is only created when the User or Sysprep
parameter was passed. After winget removal, the system is checked to
confirm whether the app is still installed before reporting an error.
Returns early if the CancelRequested flag is set.
.PARAMETER appsList
An array of app package identifiers to remove (e.g. 'Microsoft.BingNews').
.EXAMPLE
Remove-SelectedApps @('Microsoft.BingNews', 'Microsoft.BingWeather')
.EXAMPLE
Remove-SelectedApps -appsList (Generate-AppsList)
.OUTPUTS
System.Boolean. $true when all removals can be confirmed; otherwise $false.
#>
function Remove-SelectedApps {
param (
$appslist
)
if ($script:Params.ContainsKey("WhatIf")) {
foreach ($app in $appslist) {
Write-Host "[WhatIf] Remove App Package: $app" -ForegroundColor Cyan
}
return $true
}
$failuresBefore = $script:AppRemovalFailures
$targetUser = Get-TargetUserForAppRemoval
$appCount = @($appsList).Count
$appIndex = 0
$edgeIds = @('Microsoft.Edge', 'XPFFTQ037JWMHS')
$wingetRemovedApps = @()
$wingetRemovalFailures = @{}
if (-not $script:WingetDeferredRemovals) { $script:WingetDeferredRemovals = @{} }
Foreach ($app in $appsList) {
if ($script:CancelRequested) { return $false }
$appIndex++
if ($script:ApplySubStepCallback -and $appCount -gt 1) {
& $script:ApplySubStepCallback (Get-Translation -Key 'RemovingAppsSubStep' -FormatArgs @($appIndex, $appCount)) $appIndex $appCount
}
Write-Host "Removing $app"
if ((Get-AppRemovalMethod $app) -eq 'WinGet') {
$removalSucceeded = Remove-WinGetApp -app $app
$wingetRemovedApps += $app
if (($script:Params.ContainsKey('User') -or $script:Params.ContainsKey('Sysprep')) -and -not $removalSucceeded) {
$wingetRemovalFailures[$app] = $true
}
}
else {
if (-not (Remove-AppxApp -app $app -targetUser $targetUser)) {
$script:AppRemovalFailures++
}
}
}
if ($script:CancelRequested) {
return $false
}
# Check whether any winget-removed apps are still present, and report errors for each one.
if ($wingetRemovedApps.Count -gt 0) {
$wingetRemovedApps = @($wingetRemovedApps | Where-Object { -not $script:WingetDeferredRemovals.ContainsKey($_) })
}
if ($wingetRemovedApps.Count -gt 0) {
$postRemovalList = if ($script:WingetInstalled) { Get-WingetInstalledApps -TimeOut 10 -NonBlocking } else { $null }
$edgeForceRemoveRequested = $false
$edgeForceRemoveSucceeded = $false
if ($null -eq $postRemovalList) {
$script:AppRemovalVerificationUnavailable = $true
foreach ($app in $wingetRemovedApps) {
$wingetRemovalFailures[$app] = $true
}
}
else {
foreach ($app in $wingetRemovedApps) {
if (-not (Test-AppInWingetList -appId $app -InstalledList $postRemovalList)) {
continue
}
if ($edgeIds -contains $app) {
Write-Host "Unable to uninstall Microsoft Edge via WinGet" -ForegroundColor Red
if (-not $edgeForceRemoveRequested) {
$edgeForceRemoveRequested = $true
$edgeForceRemoveSucceeded = Request-EdgeForceRemove
}
if ($edgeForceRemoveSucceeded) {
continue
}
}
else {
Write-Host "Unable to uninstall $app via WinGet" -ForegroundColor Red
}
$wingetRemovalFailures[$app] = $true
}
}
}
$script:AppRemovalFailures += $wingetRemovalFailures.Count
return ($script:AppRemovalFailures -eq $failuresBefore)
}
<#
.SYNOPSIS
Uninstalls an app via WinGet and/or schedules its removal.
.DESCRIPTION
Runs winget uninstall for a single app, with a bounded execution time.
WinGet's own exit code/success reporting is unreliable and is only logged
for diagnostics; it never causes this function to report failure. Callers
verify removal with a post-removal inventory check instead. If WinGet blocks
an elevated uninstall of a user-scope package, removal is deferred to the
target user's next logon. If the User or Sysprep parameter was passed, this
function also schedules removal for future logins.
.PARAMETER app
The WinGet package ID to uninstall (e.g. 'Microsoft.BingNews').
.PARAMETER TimeoutSeconds
Maximum time to allow the foreground WinGet uninstall to run. Defaults
to 120 seconds.
.OUTPUTS
System.Boolean. $true unless the winget invocation threw a terminating error
or any required RunOnce scheduling failed; otherwise $false.
#>
function Remove-WinGetApp {
param(
[string]$app,
[int]$TimeoutSeconds = 120
)
if (-not $script:WingetInstalled) {
Write-Error "WinGet is either not installed or is outdated; $app could not be removed"
return $false
}
$uninstallCommandSucceeded = $true
$exitCode = $null
$uninstallDeferred = $false
try {
$uninstallResult = Invoke-NonBlocking -ScriptBlock {
param($appId)
$output = @(& winget uninstall --accept-source-agreements --disable-interactivity --id $appId 2>&1)
return [PSCustomObject]@{
ExitCode = $LASTEXITCODE
Output = $output
}
} -ArgumentList $app -TimeoutSeconds $TimeoutSeconds
Write-WinGetUninstallOutput -Output $(if ($uninstallResult) { $uninstallResult.Output } else { $null })
$exitCode = if ($uninstallResult) { $uninstallResult.ExitCode } else { 'unknown' }
Write-Verbose "WinGet uninstall for $app returned exit code $exitCode."
# WinGet reports APPINSTALLER_CLI_ERROR_ADMIN_CONTEXT_ACTION_PROHIBITED (0x8A15007D).
# Keep the English message check as a fallback for clients that don't return the specific code.
$userScopeBlocked = ([string]$exitCode -eq '-1978335107') -or ([string]$exitCode -match '^0x0?8A15007D$')
if (-not $userScopeBlocked) {
$userScopeBlocked = @($uninstallResult.Output | Where-Object {
$null -ne $_ -and $_.ToString() -match 'package installed for user scope cannot be uninstalled when running with administrator privileges'
}).Count -gt 0
}
if ($userScopeBlocked) {
$targetUserName = Get-RunOnceWingetTargetUserName
$uninstallDeferred = Set-RunOnceWingetTask -appId $app
if ($uninstallDeferred) {
if (-not $script:WingetDeferredRemovals) { $script:WingetDeferredRemovals = @{} }
$script:WingetDeferredRemovals[$app] = $targetUserName
Write-Host (Get-Translation -Key 'WingetUserScopeUninstallDeferred' -FormatArgs @($app, $targetUserName)) -ForegroundColor Yellow
}
}
}
catch {
$uninstallCommandSucceeded = $false
if ($_.Exception.Message -like 'Operation timed out after *') {
Write-Verbose "WinGet uninstall for $app did not complete within $TimeoutSeconds seconds: $_"
}
else {
Write-Verbose "WinGet uninstall for $app failed: $_"
}
}
$scheduleSucceeded = $true
if (-not $uninstallDeferred -and $script:Params.ContainsKey("User")) {
Write-Host "Adding scheduled task to uninstall $app for user $(Get-UserName)..."
$scheduleSucceeded = Set-RunOnceWingetTask -appId $app
}
elseif (-not $uninstallDeferred -and $script:Params.ContainsKey("Sysprep")) {
Write-Host "Adding scheduled task to uninstall $app for new users..."
$scheduleSucceeded = Set-RunOnceWingetTask -appId $app
}
return ($uninstallCommandSucceeded -and $scheduleSucceeded)
}
<#
.SYNOPSIS
Writes captured WinGet uninstall output to the verbose stream.
.OUTPUTS
None.
#>
function Write-WinGetUninstallOutput {
param(
[object[]]$Output
)
foreach ($line in @($Output)) {
if ($null -eq $line) { continue }
$lineText = if ($line -is [System.Management.Automation.ErrorRecord]) { $line.Exception.Message } else { $line.ToString() }
if ([string]::IsNullOrWhiteSpace($lineText)) { continue }
Write-Verbose $lineText
}
}
<#
.SYNOPSIS
Removes an app via Remove-AppxPackage / Remove-ProvisionedAppxPackage.
.PARAMETER app
The package identifier to remove (e.g. 'Clipchamp.Clipchamp').
.PARAMETER targetUser
Target scope: "AllUsers", "CurrentUser", or a specific username.
#>
function Remove-AppxApp {
param([string]$app, [string]$targetUser)
$appPattern = '*' + $app + '*'
try {
$removalResult = Invoke-NonBlocking -ScriptBlock {
param($pattern, $target)
$removalErrors = @()
$getPackageParams = @{ Name = $pattern; ErrorAction = 'Continue'; ErrorVariable = '+removalErrors' }
$removePackageParams = @{ ErrorAction = 'Continue'; ErrorVariable = '+removalErrors' }
switch ($target) {
'AllUsers' {
$getPackageParams.AllUsers = $true
$removePackageParams.AllUsers = $true
}
'CurrentUser' { }
default {
$userAccount = New-Object System.Security.Principal.NTAccount($target)
$userSid = $userAccount.Translate([System.Security.Principal.SecurityIdentifier]).Value
$getPackageParams.User = $userSid
$removePackageParams.User = $userSid
}
}
foreach ($package in @(Get-AppxPackage @getPackageParams)) {
$removePackageParams.Package = $package.PackageFullName
$null = Remove-AppxPackage @removePackageParams
}
if ($target -eq 'AllUsers') {
$provisionedPackages = @(Get-AppxProvisionedPackage -Online -ErrorAction Continue -ErrorVariable +removalErrors | Where-Object { $_.PackageName -like $pattern })
foreach ($package in $provisionedPackages) {
$null = Remove-ProvisionedAppxPackage -Online -AllUsers -PackageName $package.PackageName -ErrorAction Continue -ErrorVariable +removalErrors
}
}
return [PSCustomObject]@{ Success = ($removalErrors.Count -eq 0) }
} -ArgumentList @($appPattern, $targetUser)
}
catch {
Write-Error "Unable to remove $app via Appx: $_"
return $false
}
return [bool]($removalResult -and $removalResult.Success)
}
<#
.SYNOPSIS
Returns the removal method for an app identifier.
.DESCRIPTION
Parses Apps.json once (cached in script scope) to build a lookup of
AppId -> RemovalMethod. Returns 'WinGet' if the app should be removed
via winget, or 'Appx' if via Remove-AppxPackage. Defaults to 'Appx'
for unknown IDs.
.PARAMETER appId
The package identifier (e.g. 'Clipchamp.Clipchamp').
#>
function Get-AppRemovalMethod {
param([string]$appId)
if (-not $script:AppRemovalMethodCache) {
$script:AppRemovalMethodCache = @{}
try {
if (Test-Path $script:AppsListFilePath) {
$appsJson = Get-Content -Path $script:AppsListFilePath -Raw | ConvertFrom-Json
foreach ($appData in $appsJson.Apps) {
$rawMethod = $appData.RemovalMethod
$method = if ($rawMethod -and $rawMethod -eq 'WinGet') { 'WinGet' } else { 'Appx' }
foreach ($id in @($appData.AppId)) {
if ($id -isnot [string]) { continue }
$normalizedId = $id.Trim()
if (-not [string]::IsNullOrWhiteSpace($normalizedId)) {
$script:AppRemovalMethodCache[$normalizedId] = $method
}
}
}
}
}
catch {
Write-Warning "Failed to load app removal methods from '$script:AppsListFilePath'. Defaulting unknown apps to Appx. Error: $_"
}
}
if ($script:AppRemovalMethodCache.ContainsKey($appId)) {
return $script:AppRemovalMethodCache[$appId]
}
return 'Appx'
}
<#
.SYNOPSIS
Prompts the user to forcefully remove Microsoft Edge when winget cannot uninstall it.
.DESCRIPTION
Only invoked after it has been confirmed that Edge is still present
following all winget uninstall attempts. In GUI mode, displays a
warning message box; in CLI mode, prompts via Read-Host. On
confirmation, performs a force-remove of the Edge package.
.OUTPUTS
System.Boolean. $true when Edge is forcefully removed; otherwise $false.
#>
function Request-EdgeForceRemove {
if ($script:GuiWindow) {
$result = Show-MessageBox -Message (Get-Translation -Key 'ForceRemoveEdgeMessage') -Title (Get-Translation -Key 'ForceRemoveEdgeTitle') -Button 'YesNo' -Icon 'Warning'
if ($result -eq 'Yes') {
Write-Host ""
return (Invoke-ForceRemoveEdge)
}
}
elseif ($(Read-Host -Prompt "Would you like to forcefully uninstall Microsoft Edge? NOT RECOMMENDED! (y/n)") -eq 'y') {
Write-Host ""
return (Invoke-ForceRemoveEdge)
}
return $false
}
function Get-RunOnceWingetTargetUserName {
if ($script:Params.ContainsKey("Sysprep")) { return "Default" }
return Get-UserName
}
<#
.SYNOPSIS
Dynamically sets a RunOnce registry key to schedule a winget uninstall.
.DESCRIPTION
Writes directly to HKEY_USERS\Default\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
via the PowerShell registry API within Invoke-WithTargetUserHive,
which handles hive loading and HKEY_USERS\Default → SID remapping.
Used instead of static .reg files to avoid file dependency for each WinGet app.
The winget command is Base64-encoded and invoked via powershell.exe -EncodedCommand
rather than interpolated directly into cmd.exe /c. This prevents shell metacharacters
(such as &, |, <, >, ^, ") in the app ID from being interpreted as command syntax,
even if future catalog updates introduce IDs containing those characters.
.PARAMETER appId
The winget package ID to schedule for uninstall (e.g. 'XP9CXNGPPJ97XX').
#>
function Set-RunOnceWingetTask {
param([string]$appId)
$targetUserName = Get-RunOnceWingetTargetUserName
# Sanitize appId for use in registry value names (backslashes are path separators)
$safeAppId = $appId.Replace('\', '_')
$taskName = "Uninstall_$safeAppId"
# Escape single quotes in appId, then wrap in single quotes so cmd/pwsh metacharacters
# like & | < > ^ " are treated as literals. Base64-encode the whole command so the
# RunOnce value contains only [A-Za-z0-9+/=] — safe in any shell parser.
$escapedAppId = $appId.Replace("'", "''")
$wingetCommand = "winget uninstall --accept-source-agreements --disable-interactivity --id '$escapedAppId'"
$encodedWingetCommand = [Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($wingetCommand))
$operation = [PSCustomObject]@{
KeyPath = 'HKEY_USERS\Default\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce'
ValueName = $taskName
ValueType = 'String'
ValueData = "powershell.exe -NoProfile -EncodedCommand $encodedWingetCommand"
OperationType = 'SetValue'
}
try {
Invoke-WithTargetUserHive -TargetUserName $targetUserName -ScriptBlock {
param($op)
Invoke-RegistryOperation -Operation $op -RegFilePath '<dynamic>'
} -ArgumentObject $operation
return $true
}
catch {
Write-Error "Failed to schedule uninstall task for $($appId): $_"
return $false
}
}
-392
View File
@@ -1,392 +0,0 @@
<#
.SYNOPSIS
Removes one or more Windows app packages based on the target scope.
.DESCRIPTION
Iterates over the provided list of app identifiers and removes each one.
The removal method (winget vs. Appx cmdlets) is determined per-app from
Apps.json. Microsoft Edge is deferred to the end of the loop so that all
winget attempts run before any force-remove prompt. A scheduled task is
only created when the User or Sysprep parameter was passed.
After each winget removal, the system is checked to confirm whether the
app is still installed before reporting an error.
.PARAMETER appsList
An array of app package identifiers to remove (e.g. 'Microsoft.BingNews').
.EXAMPLE
RemoveApps @('Microsoft.BingNews', 'Microsoft.BingWeather')
.EXAMPLE
RemoveApps -appsList (GenerateAppsList)
#>
function RemoveApps {
param (
$appslist
)
if ($script:Params.ContainsKey("WhatIf")) {
foreach ($app in $appslist) {
Write-Host "[WhatIf] Remove App Package: $app" -ForegroundColor Cyan
}
Write-Host ""
return
}
$targetUser = GetTargetUserForAppRemoval
$appCount = @($appsList).Count
$appIndex = 0
$edgeIds = @('Microsoft.Edge', 'XPFFTQ037JWMHS')
$edgeAppsInList = @()
$wingetRemovedApps = @()
Foreach ($app in $appsList) {
if ($script:CancelRequested) { return }
$appIndex++
if ($script:ApplySubStepCallback -and $appCount -gt 1) {
& $script:ApplySubStepCallback "Removing apps ($appIndex/$appCount)" $appIndex $appCount
}
# Microsoft Edge is handled after the loop to avoid duplicate scheduled tasks and allow fallback if winget fails
if ($edgeIds -contains $app) {
$edgeAppsInList += $app
continue
}
Write-Host "Removing $app"
if ((Get-AppRemovalMethod $app) -eq 'WinGet') {
Remove-WinGetApp -app $app
$wingetRemovedApps += $app
}
else {
Remove-AppxApp -app $app -targetUser $targetUser
}
}
# Remove Microsoft Edge
if ($edgeAppsInList.Count -gt 0) {
Remove-EdgeApp -edgeAppsInList $edgeAppsInList
}
# Check whether any winget-removed apps are still present, and report errors for each one.
if ($wingetRemovedApps.Count -gt 0 -or $edgeAppsInList.Count -gt 0) {
$postRemovalList = if ($script:WingetInstalled) { GetInstalledAppsViaWinget -TimeOut 10 -NonBlocking } else { $null }
foreach ($app in $wingetRemovedApps) {
if (Test-AppStillInstalled -appId $app -InstalledList $postRemovalList) {
Write-Host "Unable to uninstall $app via WinGet" -ForegroundColor Red
}
}
# Verify Edge separately (triggers its own force-remove path if still installed)
$edgeStillInstalled = $false
foreach ($edgeApp in $edgeAppsInList) {
if (Test-AppStillInstalled -appId $edgeApp -InstalledList $postRemovalList) {
$edgeStillInstalled = $true
break
}
}
if ($edgeStillInstalled) {
Write-Host "Unable to uninstall Microsoft Edge via WinGet" -ForegroundColor Red
Request-EdgeForceRemove
}
}
Write-Host ""
}
<#
.SYNOPSIS
Uninstalls a non-Edge app via WinGet and/or schedules its removal.
.DESCRIPTION
Runs winget uninstall for a single app. If the User or Sysprep
parameter was passed, also schedules removal for future logins.
After uninstall, the system is checked to confirm whether the app
is still present — winget output is not trusted on its
own, as it sometimes reports failure after a successful removal.
Edge apps are handled separately after the main loop.
.PARAMETER app
The WinGet package ID to uninstall (e.g. 'Microsoft.BingNews').
#>
function Remove-WinGetApp {
param([string]$app)
if (-not $script:WingetInstalled) {
Write-Host "ERROR: WinGet is either not installed or is outdated, $app could not be removed" -ForegroundColor Red
return
}
if ($script:Params.ContainsKey("User")) {
Write-Host "Adding scheduled task to uninstall $app for user $(GetUserName)..."
Set-RunOnceWingetTask -appId $app
}
elseif ($script:Params.ContainsKey("Sysprep")) {
Write-Host "Adding scheduled task to uninstall $app for new users..."
Set-RunOnceWingetTask -appId $app
}
Invoke-NonBlocking -ScriptBlock {
param($appId)
winget uninstall --accept-source-agreements --disable-interactivity --id $appId
} -ArgumentList $app
}
<#
.SYNOPSIS
Removes Microsoft Edge via WinGet (both AppIds), with fallback to force-remove.
.DESCRIPTION
Edge has multiple package IDs. Runs winget uninstall for each one,
then creates a single scheduled task if the User or Sysprep parameter
was passed. After all attempts, the system is checked to confirm
whether Edge is still present. The force-remove prompt only
appears if Edge remains installed — winget false positives are ignored.
.PARAMETER edgeAppsInList
The Edge AppIds that appear in the removal list (one or both).
#>
function Remove-EdgeApp {
param([string[]]$edgeAppsInList)
if (-not $script:WingetInstalled) {
Write-Host "ERROR: WinGet is either not installed or is outdated, Microsoft Edge could not be removed" -ForegroundColor Red
return
}
if ($script:Params.ContainsKey("User")) {
Write-Host "Adding scheduled task to uninstall Microsoft Edge for user $(GetUserName)..."
Set-RunOnceWingetTask -appId 'Microsoft.Edge'
}
elseif ($script:Params.ContainsKey("Sysprep")) {
Write-Host "Adding scheduled task to uninstall Microsoft Edge for new users..."
Set-RunOnceWingetTask -appId 'Microsoft.Edge'
}
foreach ($edgeApp in $edgeAppsInList) {
Write-Host "Removing $edgeApp"
Invoke-NonBlocking -ScriptBlock {
param($appId)
winget uninstall --accept-source-agreements --disable-interactivity --id $appId
} -ArgumentList $edgeApp
}
}
<#
.SYNOPSIS
Removes an app via Remove-AppxPackage / Remove-ProvisionedAppxPackage.
.PARAMETER app
The package identifier to remove (e.g. 'Clipchamp.Clipchamp').
.PARAMETER targetUser
Target scope: "AllUsers", "CurrentUser", or a specific username.
#>
function Remove-AppxApp {
param([string]$app, [string]$targetUser)
$appPattern = '*' + $app + '*'
try {
switch ($targetUser) {
"AllUsers" {
Invoke-NonBlocking -ScriptBlock {
param($pattern)
Get-AppxPackage -Name $pattern -AllUsers | Remove-AppxPackage -AllUsers -ErrorAction Continue
Get-AppxProvisionedPackage -Online | Where-Object { $_.PackageName -like $pattern } | ForEach-Object { Remove-ProvisionedAppxPackage -Online -AllUsers -PackageName $_.PackageName }
} -ArgumentList $appPattern
}
"CurrentUser" {
Invoke-NonBlocking -ScriptBlock {
param($pattern)
Get-AppxPackage -Name $pattern | Remove-AppxPackage -ErrorAction Continue
} -ArgumentList $appPattern
}
default {
Invoke-NonBlocking -ScriptBlock {
param($pattern, $user)
$userAccount = New-Object System.Security.Principal.NTAccount($user)
$userSid = $userAccount.Translate([System.Security.Principal.SecurityIdentifier]).Value
Get-AppxPackage -Name $pattern -User $userSid | Remove-AppxPackage -User $userSid -ErrorAction Continue
} -ArgumentList @($appPattern, $targetUser)
}
}
}
catch {
Write-Verbose "Something went wrong while trying to remove $($app): $_"
}
}
<#
.SYNOPSIS
Checks whether an app package is still installed after a removal attempt.
.DESCRIPTION
Checks Get-AppxPackage across all users first (fast, no process launch),
then falls back to a pre-fetched or live winget list for non-Appx packages.
Uses Test-AppInWingetList which provides exact-match-first with substring
fallback against the parsed winget objects.
Returns $true if the app is still present, $false otherwise.
.PARAMETER appId
The package identifier to check (e.g. 'Microsoft.BingNews').
.PARAMETER InstalledList
Optional pre-fetched array of winget objects from GetInstalledAppsViaWinget.
When provided, used directly; otherwise a live winget call is made.
#>
function Test-AppStillInstalled {
param(
[string]$appId,
[object[]]$InstalledList
)
# Check Get-AppxPackage for all users first (fast, covers all Store apps).
if (Get-AppxPackage -Name "$appId" -AllUsers -ErrorAction SilentlyContinue) {
return $true
}
# Use the pre-fetched list if provided; otherwise fall back to a live winget call.
if ($InstalledList) {
return (Test-AppInWingetList -appId $appId -InstalledList $InstalledList)
}
if ($script:WingetInstalled) {
$liveList = GetInstalledAppsViaWinget -TimeOut 10 -NonBlocking
if (Test-AppInWingetList -appId $appId -InstalledList $liveList) {
return $true
}
}
else {
Write-Warning "Unable to verify whether '$appId' is still installed (WinGet is unavailable)"
}
return $false
}
<#
.SYNOPSIS
Returns the removal method for an app identifier.
.DESCRIPTION
Parses Apps.json once (cached in script scope) to build a lookup of
AppId -> RemovalMethod. Returns 'WinGet' if the app should be removed
via winget, or 'Appx' if via Remove-AppxPackage. Defaults to 'Appx'
for unknown IDs.
.PARAMETER appId
The package identifier (e.g. 'Clipchamp.Clipchamp').
#>
function Get-AppRemovalMethod {
param([string]$appId)
if (-not $script:AppRemovalMethodCache) {
$script:AppRemovalMethodCache = @{}
try {
if (Test-Path $script:AppsListFilePath) {
$appsJson = Get-Content -Path $script:AppsListFilePath -Raw | ConvertFrom-Json
foreach ($appData in $appsJson.Apps) {
$rawMethod = $appData.RemovalMethod
$method = if ($rawMethod -and $rawMethod -eq 'WinGet') { 'WinGet' } else { 'Appx' }
if ($appData.AppId -is [array]) {
foreach ($id in $appData.AppId) { $script:AppRemovalMethodCache[$id.Trim()] = $method }
}
else {
$script:AppRemovalMethodCache[$appData.AppId.Trim()] = $method
}
}
}
}
catch {
Write-Warning "Failed to load app removal methods from '$script:AppsListFilePath'. Defaulting unknown apps to Appx. Error: $_"
}
}
if ($script:AppRemovalMethodCache.ContainsKey($appId)) {
return $script:AppRemovalMethodCache[$appId]
}
return 'Appx'
}
<#
.SYNOPSIS
Prompts the user to forcefully remove Microsoft Edge when winget cannot uninstall it.
.DESCRIPTION
Only invoked after it has been confirmed that Edge is still present
following all winget uninstall attempts. In GUI mode, displays a
warning message box; in CLI mode, prompts via Read-Host. On
confirmation, performs a force-remove of the Edge package.
#>
function Request-EdgeForceRemove {
if ($script:GuiWindow) {
$result = Show-MessageBox -Message 'Unable to uninstall Microsoft Edge via WinGet. Would you like to forcefully uninstall it? NOT RECOMMENDED!' -Title 'Force Uninstall Microsoft Edge?' -Button 'YesNo' -Icon 'Warning'
if ($result -eq 'Yes') {
Write-Host ""
ForceRemoveEdge
}
}
elseif ($(Read-Host -Prompt "Would you like to forcefully uninstall Microsoft Edge? NOT RECOMMENDED! (y/n)") -eq 'y') {
Write-Host ""
ForceRemoveEdge
}
}
<#
.SYNOPSIS
Dynamically sets a RunOnce registry key to schedule a winget uninstall.
.DESCRIPTION
Writes directly to HKEY_USERS\Default\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
via the PowerShell registry API within Invoke-WithTargetUserHive,
which handles hive loading and HKEY_USERS\Default → SID remapping.
Used instead of static .reg files to avoid file dependency for each WinGet app.
The winget command is Base64-encoded and invoked via powershell.exe -EncodedCommand
rather than interpolated directly into cmd.exe /c. This prevents shell metacharacters
(such as &, |, <, >, ^, ") in the app ID from being interpreted as command syntax,
even if future catalog updates introduce IDs containing those characters.
.PARAMETER appId
The winget package ID to schedule for uninstall (e.g. 'XP9CXNGPPJ97XX').
#>
function Set-RunOnceWingetTask {
param([string]$appId)
$targetUserName = if ($script:Params.ContainsKey("Sysprep")) { "Default" } else { $script:Params.Item("User") }
# Sanitize appId for use in registry value names (backslashes are path separators)
$safeAppId = $appId.Replace('\', '_')
$taskName = "Uninstall_$safeAppId"
# Escape single quotes in appId, then wrap in single quotes so cmd/pwsh metacharacters
# like & | < > ^ " are treated as literals. Base64-encode the whole command so the
# RunOnce value contains only [A-Za-z0-9+/=] — safe in any shell parser.
$escapedAppId = $appId.Replace("'", "''")
$wingetCommand = "winget uninstall --accept-source-agreements --disable-interactivity --id '$escapedAppId'"
$encodedWingetCommand = [Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($wingetCommand))
$operation = [PSCustomObject]@{
KeyPath = 'HKEY_USERS\Default\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce'
ValueName = $taskName
ValueType = 'String'
ValueData = "powershell.exe -NoProfile -EncodedCommand $encodedWingetCommand"
OperationType = 'SetValue'
}
try {
Invoke-WithTargetUserHive -TargetUserName $targetUserName -ScriptBlock {
param($op)
Invoke-RegistryOperation -Operation $op -RegFilePath '<dynamic>'
} -ArgumentObject $operation
}
catch {
Write-Host "Failed to schedule uninstall task for $($appId): $_" -ForegroundColor Red
}
}
+1 -1
View File
@@ -12,7 +12,7 @@
The identifier to search for (e.g. 'Microsoft.Copilot'). The identifier to search for (e.g. 'Microsoft.Copilot').
.PARAMETER InstalledList .PARAMETER InstalledList
An array of PSCustomObject from GetInstalledAppsViaWinget. An array of PSCustomObject from Get-WingetInstalledApps.
#> #>
function Test-AppInWingetList { function Test-AppInWingetList {
param( param(
-11
View File
@@ -1,11 +0,0 @@
function AwaitKeyToExit {
# Suppress prompt if Silent parameter was passed
if (-not $Silent) {
Write-Output ""
Write-Output "Press any key to exit..."
$null = [System.Console]::ReadKey()
}
Stop-Transcript
Exit
}
@@ -1,6 +1,6 @@
# Shows the CLI app removal menu and prompts the user to select which apps to remove. # Shows the CLI app removal menu and prompts the user to select which apps to remove.
function ShowCLIAppRemoval { function Show-CliAppRemoval {
PrintHeader "App Removal" Write-CliHeader "App Removal"
Write-Output "> Opening app selection form..." Write-Output "> Opening app selection form..."
@@ -8,10 +8,10 @@ function ShowCLIAppRemoval {
if ($result -eq $true) { if ($result -eq $true) {
Write-Output "You have selected $($script:SelectedApps.Count) apps for removal" Write-Output "You have selected $($script:SelectedApps.Count) apps for removal"
AddParameter 'RemoveApps' Add-Parameter 'RemoveApps'
AddParameter 'Apps' ($script:SelectedApps -join ',') Add-Parameter 'Apps' ($script:SelectedApps -join ',')
SaveSettings Save-Settings
# Suppress prompt if Silent parameter was passed # Suppress prompt if Silent parameter was passed
if (-not $Silent) { if (-not $Silent) {
@@ -19,7 +19,7 @@ function ShowCLIAppRemoval {
Write-Output "" Write-Output ""
Write-Output "Press enter to remove the selected apps or press CTRL+C to quit..." Write-Output "Press enter to remove the selected apps or press CTRL+C to quit..."
Read-Host | Out-Null Read-Host | Out-Null
PrintHeader "App Removal" Write-CliHeader "App Removal"
} }
} }
else { else {
@@ -1,6 +1,6 @@
# Shows the CLI default mode app removal options. Loops until a valid option is selected. # Shows the CLI default mode app removal options. Loops until a valid option is selected.
function ShowCLIDefaultModeAppRemovalOptions { function Show-CliDefaultModeAppRemovalOptions {
PrintHeader 'Default Mode' Write-CliHeader 'Default Mode'
Write-Host "Please note: The default selection of apps includes Microsoft Teams, Spotify, Sticky Notes and more. Select option 2 to verify and change what apps are removed by the script" -ForegroundColor DarkGray Write-Host "Please note: The default selection of apps includes Microsoft Teams, Spotify, Sticky Notes and more. Select option 2 to verify and change what apps are removed by the script" -ForegroundColor DarkGray
Write-Host "" Write-Host ""
@@ -1,5 +1,5 @@
# Show CLI default mode options for removing apps, or set selection if RunDefaults or RunDefaultsLite parameter was passed # Show CLI default mode options for removing apps, or set selection if RunDefaults or RunDefaultsLite parameter was passed
function ShowCLIDefaultModeOptions { function Show-CliDefaultModeOptions {
if ($RunDefaults) { if ($RunDefaults) {
$RemoveAppsInput = '1' $RemoveAppsInput = '1'
} }
@@ -7,7 +7,7 @@ function ShowCLIDefaultModeOptions {
$RemoveAppsInput = '0' $RemoveAppsInput = '0'
} }
else { else {
$RemoveAppsInput = ShowCLIDefaultModeAppRemovalOptions $RemoveAppsInput = Show-CliDefaultModeAppRemovalOptions
if ($RemoveAppsInput -eq '2' -and ($script:SelectedApps.contains('Microsoft.XboxGameOverlay') -or $script:SelectedApps.contains('Microsoft.XboxGamingOverlay')) -and if ($RemoveAppsInput -eq '2' -and ($script:SelectedApps.contains('Microsoft.XboxGameOverlay') -or $script:SelectedApps.contains('Microsoft.XboxGamingOverlay')) -and
$( Read-Host -Prompt "Disable Game Bar integration and game/screen recording? This also stops ms-gamingoverlay and ms-gamebar popups (y/n)" ) -eq 'y') { $( Read-Host -Prompt "Disable Game Bar integration and game/screen recording? This also stops ms-gamingoverlay and ms-gamebar popups (y/n)" ) -eq 'y') {
@@ -15,40 +15,40 @@ function ShowCLIDefaultModeOptions {
} }
} }
PrintHeader 'Default Mode' Write-CliHeader 'Default Mode'
try { try {
# Select app removal options based on user input # Select app removal options based on user input
switch ($RemoveAppsInput) { switch ($RemoveAppsInput) {
'1' { '1' {
AddParameter 'RemoveApps' Add-Parameter 'RemoveApps'
AddParameter 'Apps' 'Default' Add-Parameter 'Apps' 'Default'
} }
'2' { '2' {
AddParameter 'RemoveApps' Add-Parameter 'RemoveApps'
AddParameter 'Apps' ($script:SelectedApps -join ',') Add-Parameter 'Apps' ($script:SelectedApps -join ',')
if ($DisableGameBarIntegrationInput) { if ($DisableGameBarIntegrationInput) {
AddParameter 'DisableDVR' Add-Parameter 'DisableDVR'
AddParameter 'DisableGameBarIntegration' Add-Parameter 'DisableGameBarIntegration'
} }
} }
} }
LoadSettings -filePath $script:DefaultSettingsFilePath -expectedVersion "1.0" Import-Settings -filePath $script:DefaultSettingsFilePath -expectedVersion "1.0"
} }
catch { catch {
Write-Error "Failed to load settings from DefaultSettings.json file: $_" Write-Error "Failed to load settings from DefaultSettings.json file: $_"
AwaitKeyToExit Wait-ForKeyPress -ExitCode 1
} }
SaveSettings Save-Settings
if ($Silent) { if ($Silent) {
# Skip change summary and confirmation prompt # Skip change summary and confirmation prompt
return return
} }
PrintPendingChanges Write-PendingChanges
PrintHeader 'Default Mode' Write-CliHeader 'Default Mode'
} }
@@ -1,13 +1,13 @@
# Shows the CLI last used settings from LastUsedSettings.json file, displays pending changes and prompts the user to apply them. # Shows the CLI last used settings from LastUsedSettings.json file, displays pending changes and prompts the user to apply them.
function ShowCLILastUsedSettings { function Show-CliLastUsedSettings {
PrintHeader 'Custom Mode' Write-CliHeader 'Custom Mode'
try { try {
LoadSettings -filePath $script:SavedSettingsFilePath -expectedVersion "1.0" Import-Settings -filePath $script:SavedSettingsFilePath -expectedVersion "1.0"
} }
catch { catch {
Write-Error "Failed to load settings from LastUsedSettings.json file: $_" Write-Error "Failed to load settings from LastUsedSettings.json file: $_"
AwaitKeyToExit Wait-ForKeyPress -ExitCode 1
} }
if ($Silent) { if ($Silent) {
@@ -15,6 +15,6 @@ function ShowCLILastUsedSettings {
return return
} }
PrintPendingChanges Write-PendingChanges
PrintHeader 'Custom Mode' Write-CliHeader 'Custom Mode'
} }
@@ -1,9 +1,9 @@
# Shows the CLI menu options and prompts the user to select one. Loops until a valid option is selected. # Shows the CLI menu options and prompts the user to select one. Loops until a valid option is selected.
function ShowCLIMenuOptions { function Show-CliMenuOptions {
Do { Do {
$ModeSelectionMessage = "Please select an option (1/2)" $ModeSelectionMessage = "Please select an option (1/2)"
PrintHeader 'Menu' Write-CliHeader 'Menu'
Write-Host "(1) Default mode: Quickly apply the recommended changes" Write-Host "(1) Default mode: Quickly apply the recommended changes"
Write-Host "(2) App removal mode: Select & remove apps, without making other changes" Write-Host "(2) App removal mode: Select & remove apps, without making other changes"
+22
View File
@@ -0,0 +1,22 @@
<#
.SYNOPSIS
Waits for user acknowledgement, then exits the script.
.PARAMETER ExitCode
Process exit code to return after acknowledgement. Defaults to 0.
#>
function Wait-ForKeyPress {
param(
[int]$ExitCode = 0
)
# Suppress prompt if Silent parameter was passed
if (-not $Silent) {
Write-Output ""
Write-Output "Press any key to exit..."
$null = [System.Console]::ReadKey()
}
Stop-Transcript
Exit $ExitCode
}
@@ -1,5 +1,5 @@
# Prints the header for the script # Prints the header for the script
function PrintHeader { function Write-CliHeader {
param ( param (
$title $title
) )
@@ -10,11 +10,11 @@ function PrintHeader {
$fullTitle = "$fullTitle (Sysprep mode)" $fullTitle = "$fullTitle (Sysprep mode)"
} }
else { else {
$fullTitle = "$fullTitle (User: $(GetUserName))" $fullTitle = "$fullTitle (User: $(Get-UserName))"
} }
Clear-Host Clear-Host
Write-Host "-------------------------------------------------------------------------------------------" Write-Host "-------------------------------------------------------------------------------------------"
Write-Host $fullTitle Write-Host $fullTitle
Write-Host "-------------------------------------------------------------------------------------------" Write-Host "-------------------------------------------------------------------------------------------"
} }
@@ -12,7 +12,7 @@
After printing the summary the function pauses until the user presses After printing the summary the function pauses until the user presses
Enter, giving them an opportunity to review and cancel via Ctrl+C. Enter, giving them an opportunity to review and cancel via Ctrl+C.
#> #>
function PrintPendingChanges { function Write-PendingChanges {
Write-Output "Win11Debloat will make the following changes:" Write-Output "Win11Debloat will make the following changes:"
if ($script:Params['CreateRestorePoint']) { if ($script:Params['CreateRestorePoint']) {
@@ -32,7 +32,7 @@ function PrintPendingChanges {
continue continue
} }
'RemoveApps' { 'RemoveApps' {
$appsList = GenerateAppsList $appsList = Generate-AppsList
if ($appsList.Count -eq 0) { if ($appsList.Count -eq 0) {
Write-Host "No valid apps were selected for removal" -ForegroundColor Yellow Write-Host "No valid apps were selected for removal" -ForegroundColor Yellow
@@ -56,4 +56,4 @@ function PrintPendingChanges {
Write-Output "" Write-Output ""
Write-Output "Press enter to execute the script or press CTRL+C to quit..." Write-Output "Press enter to execute the script or press CTRL+C to quit..."
Read-Host | Out-Null Read-Host | Out-Null
} }
@@ -195,10 +195,19 @@ function Get-RegistryKeySnapshot {
} }
} }
<#
.SYNOPSIS
Converts an open registry key into a backup snapshot.
.DESCRIPTION
Captures all values or selected value names, records missing selected values,
and recursively captures subkeys when requested. Throws if a requested subkey
cannot be read.
#>
function Convert-RegistryKeyToSnapshot { function Convert-RegistryKeyToSnapshot {
param( param(
[Parameter(Mandatory)] [Parameter(Mandatory)]
[Microsoft.Win32.RegistryKey]$RegistryKey, $RegistryKey,
[Parameter(Mandatory)] [Parameter(Mandatory)]
[string]$FullPath, [string]$FullPath,
[bool]$CaptureAllValues = $false, [bool]$CaptureAllValues = $false,
@@ -233,7 +242,9 @@ function Convert-RegistryKeyToSnapshot {
if ($IncludeSubKeys) { if ($IncludeSubKeys) {
foreach ($subKeyName in @($RegistryKey.GetSubKeyNames())) { foreach ($subKeyName in @($RegistryKey.GetSubKeyNames())) {
$childKey = $RegistryKey.OpenSubKey($subKeyName, $false) $childKey = $RegistryKey.OpenSubKey($subKeyName, $false)
if ($null -eq $childKey) { continue } if ($null -eq $childKey) {
throw "Unable to read registry subkey '$($RegistryKey.Name)\$subKeyName' while creating a backup snapshot. The backup was not created."
}
try { try {
$childPath = if ([string]::IsNullOrWhiteSpace($FullPath)) { $subKeyName } else { "$FullPath\$subKeyName" } $childPath = if ([string]::IsNullOrWhiteSpace($FullPath)) { $subKeyName } else { "$FullPath\$subKeyName" }
@@ -253,20 +264,34 @@ function Convert-RegistryKeyToSnapshot {
} }
} }
<#
.SYNOPSIS
Converts a registry value into a serializable backup snapshot.
.DESCRIPTION
Preserves the value kind and normalizes supported data types for JSON
serialization without expanding environment-string values. REG_NONE values
are rejected.
#>
function Convert-RegistryValueToSnapshot { function Convert-RegistryValueToSnapshot {
param( param(
[Parameter(Mandatory)] [Parameter(Mandatory)]
[Microsoft.Win32.RegistryKey]$RegistryKey, $RegistryKey,
[Parameter(Mandatory)] [Parameter(Mandatory)]
[AllowEmptyString()] [AllowEmptyString()]
[string]$ValueName [string]$ValueName
) )
$valueKind = $RegistryKey.GetValueKind($ValueName) $valueKind = $RegistryKey.GetValueKind($ValueName)
if ($valueKind -eq [Microsoft.Win32.RegistryValueKind]::None) {
throw "REG_NONE registry values are not supported for backup. Key='$($RegistryKey.Name)' Name='$ValueName'"
}
$value = $RegistryKey.GetValue($ValueName, $null, [Microsoft.Win32.RegistryValueOptions]::DoNotExpandEnvironmentNames) $value = $RegistryKey.GetValue($ValueName, $null, [Microsoft.Win32.RegistryValueOptions]::DoNotExpandEnvironmentNames)
try { try {
$normalizedValue = switch ($valueKind) { $normalizedValue = switch ($valueKind) {
([Microsoft.Win32.RegistryValueKind]::Binary) { @($value | ForEach-Object { [int]$_ }) } # Prevent an empty byte sequence from being unrolled to $null by the switch pipeline.
([Microsoft.Win32.RegistryValueKind]::Binary) { if ($null -eq $value) { ,@() } else { ,@($value | ForEach-Object { [int]$_ }) } }
([Microsoft.Win32.RegistryValueKind]::MultiString) { @($value) } ([Microsoft.Win32.RegistryValueKind]::MultiString) { @($value) }
([Microsoft.Win32.RegistryValueKind]::DWord) { [BitConverter]::ToUInt32([BitConverter]::GetBytes([int32]$value), 0) } ([Microsoft.Win32.RegistryValueKind]::DWord) { [BitConverter]::ToUInt32([BitConverter]::GetBytes([int32]$value), 0) }
([Microsoft.Win32.RegistryValueKind]::QWord) { [BitConverter]::ToUInt64([BitConverter]::GetBytes([int64]$value), 0) } ([Microsoft.Win32.RegistryValueKind]::QWord) { [BitConverter]::ToUInt64([BitConverter]::GetBytes([int64]$value), 0) }
@@ -287,12 +312,20 @@ function Convert-RegistryValueToSnapshot {
} }
} }
<#
.SYNOPSIS
Describes the user profile targeted by a registry backup.
.DESCRIPTION
Returns DefaultUserProfile for Sysprep, User:<name> for an explicit user,
or CurrentUser:<name> otherwise.
#>
function Get-RegistryBackupTargetDescription { function Get-RegistryBackupTargetDescription {
if ($script:Params.ContainsKey('Sysprep')) { if ($script:Params.ContainsKey('Sysprep')) {
return 'DefaultUserProfile' return 'DefaultUserProfile'
} }
$resolvedUserName = [string](GetUserName) $resolvedUserName = [string](Get-UserName)
if ($script:Params.ContainsKey('User')) { if ($script:Params.ContainsKey('User')) {
return "User:$resolvedUserName" return "User:$resolvedUserName"
@@ -37,7 +37,7 @@ function New-RegistrySettingsBackup {
$backupFilePath = Join-Path $backupDirectory $backupFileName $backupFilePath = Join-Path $backupDirectory $backupFileName
$backupConfig = Get-RegistryBackupPayload -SelectedFeatures $selectedFeatures -UndoFeatures $undoFeatures -CreatedAt $timestamp $backupConfig = Get-RegistryBackupPayload -SelectedFeatures $selectedFeatures -UndoFeatures $undoFeatures -CreatedAt $timestamp
if (-not (SaveToFile -Config $backupConfig -FilePath $backupFilePath -MaxDepth 25)) { if (-not (Save-ToFile -Config $backupConfig -FilePath $backupFilePath -MaxDepth 25)) {
throw "Failed to save registry backup to '$backupFilePath'" throw "Failed to save registry backup to '$backupFilePath'"
} }
@@ -66,7 +66,7 @@ function Test-FeatureApplied {
return (Test-StoreSearchSuggestionsDisabledForAllUsers) return (Test-StoreSearchSuggestionsDisabledForAllUsers)
} }
$storeDbPath = GetStoreAppsDatabasePathForUser -UserName (GetUserName) $storeDbPath = Get-StoreAppsDatabasePathForUser -UserName (Get-UserName)
return (Test-StoreSearchSuggestionsDisabled -StoreAppsDatabase $storeDbPath) return (Test-StoreSearchSuggestionsDisabled -StoreAppsDatabase $storeDbPath)
} }
+120
View File
@@ -0,0 +1,120 @@
<#
.SYNOPSIS
Imports and executes a registry file.
.OUTPUTS
System.Boolean. $true when the registry file is applied or previewed successfully; otherwise $false.
#>
function Import-RegistryFile {
param (
$message,
$path
)
try {
Write-Host $message
$usesOfflineHive = $script:Params.ContainsKey("Sysprep") -or $script:Params.ContainsKey("User")
$regFilePath = Get-RegistryFilePathForFeature -RegistryKey $path
if (-not (Test-Path $regFilePath)) {
$errorMessage = "Unable to find registry file: $path ($regFilePath)"
Write-Host "Error: $errorMessage" -ForegroundColor Red
return $false
}
$importScript = {
param($targetRegFilePath, $hiveContext)
if ($script:Params.ContainsKey("WhatIf")) {
return (Invoke-RegistryOperationsFromRegFile -RegFilePath $targetRegFilePath)
}
# When the target user's hive is already loaded under their SID, the .reg file's
# HKEY_USERS\Default paths won't match. Use the PowerShell registry writer instead,
# which remaps Default → SID via Split-RegistryPath.
$usePowerShellFallbackOnly = $hiveContext -and [bool]$hiveContext.WasAlreadyLoaded
if ($usePowerShellFallbackOnly) {
$fallbackSucceeded = Invoke-RegistryOperationsFromRegFile -RegFilePath $targetRegFilePath
if ($fallbackSucceeded) {
Write-Host "The operation completed successfully via PowerShell registry writer."
}
return $fallbackSucceeded
}
$regResult = Invoke-NonBlocking -ScriptBlock {
param($targetRegFilePath)
$result = @{
Output = @()
ExitCode = 0
Error = $null
}
try {
$global:LASTEXITCODE = 0
$output = reg import $targetRegFilePath 2>&1
$importExitCode = $LASTEXITCODE
if ($output) {
$result.Output = @($output)
}
$result.ExitCode = $importExitCode
if ($importExitCode -ne 0) {
throw "Registry import failed with exit code $importExitCode for '$targetRegFilePath'"
}
}
catch {
$result.Error = $_.Exception.Message
$result.ExitCode = if ($LASTEXITCODE -ne 0) { $LASTEXITCODE } else { 1 }
}
return $result
} -ArgumentList $targetRegFilePath
$regOutput = @($regResult.Output)
$hasSuccess = ($regResult.ExitCode -eq 0) -and -not $regResult.Error
if ($regOutput) {
foreach ($line in $regOutput) {
$lineText = if ($line -is [System.Management.Automation.ErrorRecord]) { $line.Exception.Message } else { $line.ToString() }
if ($lineText -and $lineText.Length -gt 0) {
if ($hasSuccess) {
Write-Host $lineText
}
else {
Write-Host $lineText -ForegroundColor Red
}
}
}
}
if (-not $hasSuccess) {
$details = if ($regResult.Error) { $regResult.Error } else { "Exit code: $($regResult.ExitCode)" }
Write-Warning "reg import failed for '$path'. Falling back to PowerShell registry writer. Details: $details"
$fallbackSucceeded = Invoke-RegistryOperationsFromRegFile -RegFilePath $targetRegFilePath
if ($fallbackSucceeded) {
Write-Host "The operation completed successfully via PowerShell registry writer."
}
return $fallbackSucceeded
}
return $true
}
if ($usesOfflineHive) {
# Sysprep targets Default user, User targets the specified user. Logged-in users already have their hive mounted under HKU\<SID>.
$targetUserName = if ($script:Params.ContainsKey("Sysprep")) { "Default" } else { $script:Params.Item("User") }
$succeeded = Invoke-WithTargetUserHive -TargetUserName $targetUserName -ScriptBlock $importScript -ArgumentObject $regFilePath -PassHiveContext
}
else {
$succeeded = & $importScript $regFilePath $null
}
return [bool]$succeeded
}
catch {
Write-Host $_.Exception.Message -ForegroundColor Red
return $false
}
}
-114
View File
@@ -1,114 +0,0 @@
# Import & execute regfile
function ImportRegistryFile {
param (
$message,
$path
)
Write-Host $message
$usesOfflineHive = $script:Params.ContainsKey("Sysprep") -or $script:Params.ContainsKey("User")
$regFilePath = Get-RegistryFilePathForFeature -RegistryKey $path
if (-not (Test-Path $regFilePath)) {
$errorMessage = "Unable to find registry file: $path ($regFilePath)"
$script:RegistryImportFailures++
Write-Host "Error: $errorMessage" -ForegroundColor Red
Write-Host ""
throw $errorMessage
}
$importScript = {
param($targetRegFilePath, $hiveContext)
if ($script:Params.ContainsKey("WhatIf")) {
Invoke-RegistryOperationsFromRegFile -RegFilePath $targetRegFilePath
Write-Host ""
return
}
# When the target user's hive is already loaded under their SID, the .reg file's
# HKEY_USERS\Default paths won't match. Use the PowerShell registry writer instead,
# which remaps Default → SID via Split-RegistryPath.
$usePowerShellFallbackOnly = $hiveContext -and [bool]$hiveContext.WasAlreadyLoaded
if ($usePowerShellFallbackOnly) {
Invoke-RegistryOperationsFromRegFile -RegFilePath $targetRegFilePath
Write-Host "The operation completed successfully via PowerShell registry writer."
Write-Host ""
return
}
$regResult = Invoke-NonBlocking -ScriptBlock {
param($targetRegFilePath)
$result = @{
Output = @()
ExitCode = 0
Error = $null
}
try {
$global:LASTEXITCODE = 0
$output = reg import $targetRegFilePath 2>&1
$importExitCode = $LASTEXITCODE
if ($output) {
$result.Output = @($output)
}
$result.ExitCode = $importExitCode
if ($importExitCode -ne 0) {
throw "Registry import failed with exit code $importExitCode for '$targetRegFilePath'"
}
}
catch {
$result.Error = $_.Exception.Message
$result.ExitCode = if ($LASTEXITCODE -ne 0) { $LASTEXITCODE } else { 1 }
}
return $result
} -ArgumentList $targetRegFilePath
$regOutput = @($regResult.Output)
$hasSuccess = ($regResult.ExitCode -eq 0) -and -not $regResult.Error
if ($regOutput) {
foreach ($line in $regOutput) {
$lineText = if ($line -is [System.Management.Automation.ErrorRecord]) { $line.Exception.Message } else { $line.ToString() }
if ($lineText -and $lineText.Length -gt 0) {
if ($hasSuccess) {
Write-Host $lineText
}
else {
Write-Host $lineText -ForegroundColor Red
}
}
}
}
if (-not $hasSuccess) {
$details = if ($regResult.Error) { $regResult.Error } else { "Exit code: $($regResult.ExitCode)" }
Write-Warning "reg import failed for '$path'. Falling back to PowerShell registry writer. Details: $details"
Invoke-RegistryOperationsFromRegFile -RegFilePath $targetRegFilePath
Write-Host "The operation completed successfully via PowerShell registry writer."
}
Write-Host ""
}
try {
if ($usesOfflineHive) {
# Sysprep targets Default user, User targets the specified user. Logged-in users already have their hive mounted under HKU\<SID>.
$targetUserName = if ($script:Params.ContainsKey("Sysprep")) { "Default" } else { $script:Params.Item("User") }
Invoke-WithTargetUserHive -TargetUserName $targetUserName -ScriptBlock $importScript -ArgumentObject $regFilePath -PassHiveContext
}
else {
& $importScript $regFilePath $null
}
}
catch {
$script:RegistryImportFailures++
Write-Host $_.Exception.Message -ForegroundColor Red
Write-Host ""
}
}
@@ -4,10 +4,12 @@
.DESCRIPTION .DESCRIPTION
Handles two categories of features: Handles two categories of features:
- Registry-backed: imports the .reg file via ImportRegistryFile, then runs - Registry-backed: imports the .reg file via Import-RegistryFile, then runs
any post-import side effects (e.g., removing companion app packages). any post-import side effects (e.g., removing companion app packages).
- Custom logic: app removal, Windows optional features, start menu - Custom logic: app removal, Windows optional features, start menu
replacement, and other special-case features. replacement, and other special-case features. Returns $true when the
feature completes successfully; otherwise writes a warning and returns
$false.
#> #>
function Invoke-FeatureApply { function Invoke-FeatureApply {
param( param(
@@ -15,137 +17,138 @@ function Invoke-FeatureApply {
[string]$FeatureId [string]$FeatureId
) )
# Resolve feature metadata from Features.json try {
$feature = $script:Features[$FeatureId] # Resolve feature metadata from Features.json
$applyText = $feature.ApplyText $feature = $script:Features[$FeatureId]
$applyText = $feature.ApplyText
# ---- Registry-backed features: import .reg file, then handle side effects ---- # ---- Registry-backed features: import .reg file, then handle additional tasks ----
if ($feature.RegistryKey) { if ($feature.RegistryKey) {
ImportRegistryFile "> $applyText..." $feature.RegistryKey if (-not (Import-RegistryFile "> $applyText..." $feature.RegistryKey)) {
return $false
}
# Post-import side effects for specific features
switch ($FeatureId) { switch ($FeatureId) {
'DisableBing' { 'DisableBing' {
# Also remove the app package for Bing search # Also remove the app package for Bing search
RemoveApps @('Microsoft.BingSearch') return (Remove-SelectedApps @('Microsoft.BingSearch'))
} }
'DisableCopilot' { 'DisableCopilot' {
# Also remove the app packages for Copilot # Also remove the app packages for Copilot
RemoveApps @('Microsoft.Copilot', 'XP9CXNGPPJ97XX') return (Remove-SelectedApps @('Microsoft.Copilot', 'XP9CXNGPPJ97XX'))
} }
'DisableTelemetry' { 'DisableTelemetry' {
# Also disable telemetry scheduled tasks # Also disable telemetry scheduled tasks
Disable-TelemetryScheduledTasks return (Disable-TelemetryScheduledTasks)
} }
} }
return return $true
} }
# ---- Custom features (no registry backing, or special handling required) ---- # ---- Custom features (no registry backing, or special handling required) ----
switch ($FeatureId) { switch ($FeatureId) {
'RemoveApps' { 'RemoveApps' {
Write-Host "> $applyText for $(GetFriendlyTargetUserName)..." Write-Host "> $applyText for $(Get-FriendlyTargetUserName)..."
$appsList = GenerateAppsList $appsList = Generate-AppsList
if ($appsList.Count -eq 0) { if ($appsList.Count -eq 0) {
Write-Host "No valid apps were selected for removal" -ForegroundColor Yellow Write-Host "No valid apps were selected for removal" -ForegroundColor Yellow
Write-Host "" return $true
return
} }
Write-Host "$($appsList.Count) apps selected for removal" Write-Host "$($appsList.Count) apps selected for removal"
RemoveApps $appsList return (Remove-SelectedApps $appsList)
return
} }
'RemoveGamingApps' { 'RemoveGamingApps' {
$appsList = @('Microsoft.GamingApp', 'Microsoft.XboxGameOverlay', 'Microsoft.XboxGamingOverlay') $appsList = @('Microsoft.GamingApp', 'Microsoft.XboxGameOverlay', 'Microsoft.XboxGamingOverlay')
Write-Host "> $applyText..." Write-Host "> $applyText..."
RemoveApps $appsList return (Remove-SelectedApps $appsList)
return
} }
'RemoveHPApps' { 'RemoveHPApps' {
$appsList = @('AD2F1837.HPAIExperienceCenter', 'AD2F1837.HPJumpStarts', 'AD2F1837.HPPCHardwareDiagnosticsWindows', 'AD2F1837.HPPowerManager', 'AD2F1837.HPPrivacySettings', 'AD2F1837.HPSupportAssistant', 'AD2F1837.HPSureShieldAI', 'AD2F1837.HPSystemInformation', 'AD2F1837.HPQuickDrop', 'AD2F1837.HPWorkWell', 'AD2F1837.myHP', 'AD2F1837.HPDesktopSupportUtilities', 'AD2F1837.HPQuickTouch', 'AD2F1837.HPEasyClean', 'AD2F1837.HPConnectedMusic', 'AD2F1837.HPFileViewer', 'AD2F1837.HPRegistration', 'AD2F1837.HPWelcome', 'AD2F1837.HPConnectedPhotopoweredbySnapfish', 'AD2F1837.HPPrinterControl') $appsList = @('AD2F1837.HPAIExperienceCenter', 'AD2F1837.HPJumpStarts', 'AD2F1837.HPPCHardwareDiagnosticsWindows', 'AD2F1837.HPPowerManager', 'AD2F1837.HPPrivacySettings', 'AD2F1837.HPSupportAssistant', 'AD2F1837.HPSureShieldAI', 'AD2F1837.HPSystemInformation', 'AD2F1837.HPQuickDrop', 'AD2F1837.HPWorkWell', 'AD2F1837.myHP', 'AD2F1837.HPDesktopSupportUtilities', 'AD2F1837.HPQuickTouch', 'AD2F1837.HPEasyClean', 'AD2F1837.HPConnectedMusic', 'AD2F1837.HPFileViewer', 'AD2F1837.HPRegistration', 'AD2F1837.HPWelcome', 'AD2F1837.HPConnectedPhotopoweredbySnapfish', 'AD2F1837.HPPrinterControl')
Write-Host "> $applyText..." Write-Host "> $applyText..."
RemoveApps $appsList return (Remove-SelectedApps $appsList)
return }
'ForceRemoveEdge' {
Write-Host "> $applyText..."
return (Invoke-ForceRemoveEdge)
} }
'DisableWidgets' { 'DisableWidgets' {
Write-Host "> $applyText..." Write-Host "> $applyText..."
# Stop widgets related processes before removing the app packages to prevent potential issues # Stop widgets related processes before removing the app packages to prevent potential issues
if (-not $script:Params.ContainsKey("WhatIf")) { if (-not $script:Params.ContainsKey("WhatIf")) {
Get-Process *Widget* -ErrorAction SilentlyContinue | Stop-Process Get-Process *Widget* -ErrorAction SilentlyContinue | Stop-Process -Force -ErrorAction SilentlyContinue
} }
RemoveApps @('Microsoft.StartExperiencesApp','MicrosoftWindows.Client.WebExperience','Microsoft.WidgetsPlatformRuntime') return (Remove-SelectedApps @('Microsoft.StartExperiencesApp','MicrosoftWindows.Client.WebExperience','Microsoft.WidgetsPlatformRuntime'))
return
} }
'EnableWindowsSandbox' { 'EnableWindowsSandbox' {
Write-Host "> $applyText..." Write-Host "> $applyText..."
EnableWindowsFeature "Containers-DisposableClientVM" return (Enable-WindowsFeature "Containers-DisposableClientVM")
Write-Host ""
return
} }
'EnableWindowsSubsystemForLinux' { 'EnableWindowsSubsystemForLinux' {
Write-Host "> $applyText..." Write-Host "> $applyText..."
EnableWindowsFeature "VirtualMachinePlatform" if (-not (Enable-WindowsFeature "VirtualMachinePlatform")) { return $false }
EnableWindowsFeature "Microsoft-Windows-Subsystem-Linux" return (Enable-WindowsFeature "Microsoft-Windows-Subsystem-Linux")
Write-Host ""
return
} }
'ClearStart' { 'ClearStart' {
Write-Host "> $applyText for user $(GetUserName)..." Write-Host "> $applyText for user $(Get-UserName)..."
$startMenuBinFile = GetStartMenuBinPathForUser -UserName (GetUserName) $startMenuBinFile = Get-StartMenuBinPathForUser -UserName (Get-UserName)
if (-not [string]::IsNullOrWhiteSpace($startMenuBinFile)) { if (-not [string]::IsNullOrWhiteSpace($startMenuBinFile)) {
ReplaceStartMenu -startMenuBinFile $startMenuBinFile return (Replace-StartMenu -startMenuBinFile $startMenuBinFile)
} }
Write-Host "" Write-Warning "Unable to apply '$applyText': the Start menu path for user $(Get-UserName) could not be resolved."
return return $false
} }
'ReplaceStart' { 'ReplaceStart' {
Write-Host "> $applyText for user $(GetUserName)..." Write-Host "> $applyText for user $(Get-UserName)..."
$startMenuBinFile = GetStartMenuBinPathForUser -UserName (GetUserName) $startMenuBinFile = Get-StartMenuBinPathForUser -UserName (Get-UserName)
if (-not [string]::IsNullOrWhiteSpace($startMenuBinFile)) { if (-not [string]::IsNullOrWhiteSpace($startMenuBinFile)) {
ReplaceStartMenu -startMenuBinFile $startMenuBinFile -startMenuTemplate $script:Params.Item("ReplaceStart") return (Replace-StartMenu -startMenuBinFile $startMenuBinFile -startMenuTemplate $script:Params.Item("ReplaceStart"))
} }
Write-Host "" Write-Warning "Unable to apply '$applyText': the Start menu path for user $(Get-UserName) could not be resolved."
return return $false
} }
'ClearStartAllUsers' { 'ClearStartAllUsers' {
ReplaceStartMenuForAllUsers return (Replace-StartMenuForAllUsers)
return
} }
'ReplaceStartAllUsers' { 'ReplaceStartAllUsers' {
ReplaceStartMenuForAllUsers -startMenuTemplate $script:Params.Item("ReplaceStartAllUsers") return (Replace-StartMenuForAllUsers -startMenuTemplate $script:Params.Item("ReplaceStartAllUsers"))
return
} }
'DisableStoreSearchSuggestions' { 'DisableStoreSearchSuggestions' {
if ($script:Params.ContainsKey("Sysprep")) { if ($script:Params.ContainsKey("Sysprep")) {
Write-Host "> Disabling Microsoft Store search suggestions in the start menu for all users..." Write-Host "> Disabling Microsoft Store search suggestions in the start menu for all users..."
DisableStoreSearchSuggestionsForAllUsers return (Set-StoreSearchSuggestionsDisabledForAllUsers)
Write-Host ""
return
} }
Write-Host "> Disabling Microsoft Store search suggestions for user $(GetUserName)..." Write-Host "> Disabling Microsoft Store search suggestions for user $(Get-UserName)..."
$storeDb = GetStoreAppsDatabasePathForUser -UserName (GetUserName) $storeDb = Get-StoreAppsDatabasePathForUser -UserName (Get-UserName)
if ($storeDb) { if ($storeDb) {
DisableStoreSearchSuggestions -StoreAppsDatabase $storeDb return (Set-StoreSearchSuggestionsDisabled -StoreAppsDatabase $storeDb)
} }
Write-Host "" Write-Warning "Unable to disable Microsoft Store search suggestions because the Store database for user $(Get-UserName) could not be resolved."
return return $false
} }
} }
}
catch {
Write-Warning "Failed to apply '$applyText': $($_.Exception.Message)"
return $false
}
Write-Warning "Unknown feature '$FeatureId' could not be applied."
return $false
} }
<# <#
.SYNOPSIS .SYNOPSIS
Undoes a single feature that has no RegistryUndoKey. Undoes a single feature.
.DESCRIPTION .DESCRIPTION
Handles undo for features that require custom logic rather than a simple Handles registry-backed undo imports and custom undo logic. Returns
.reg file import. Features with a RegistryUndoKey are handled directly $true when the requested undo succeeds; otherwise writes a warning and
via ImportRegistryFile in Invoke-UndoFeatures. returns $false.
#> #>
function Invoke-FeatureUndo { function Invoke-FeatureUndo {
param( param(
@@ -154,43 +157,65 @@ function Invoke-FeatureUndo {
) )
$feature = if ($script:Features.ContainsKey($FeatureId)) { $script:Features[$FeatureId] } else { $null } $feature = if ($script:Features.ContainsKey($FeatureId)) { $script:Features[$FeatureId] } else { $null }
if (-not $feature) {
Write-Warning "Unknown feature '$FeatureId' could not be undone."
return $false
}
switch ($FeatureId) { $undoText = if ($feature.ApplyUndoText) { $feature.ApplyUndoText } elseif ($feature.UndoLabel) { $feature.UndoLabel } else { $FeatureId }
'DisableStoreSearchSuggestions' {
if ($script:Params.ContainsKey('Sysprep')) { try {
Write-Host "> Re-enabling Microsoft Store search suggestions in the start menu for all users..." # ---- Registry-backed features: import undo data, then handle additional tasks ----
EnableStoreSearchSuggestionsForAllUsers if ($feature.RegistryUndoKey) {
Write-Host "" if (-not (Import-RegistryFile "> $undoText" (Resolve-UndoRegFilePath $feature.RegistryUndoKey))) {
return return $false
} }
Write-Host "> Re-enabling Microsoft Store search suggestions for user $(GetUserName)..." switch ($FeatureId) {
$storeDb = GetStoreAppsDatabasePathForUser -UserName (GetUserName) 'DisableTelemetry' {
if ($storeDb) { # Also re-enable telemetry scheduled tasks.
EnableStoreSearchSuggestions -StoreAppsDatabase $storeDb return (Enable-TelemetryScheduledTasks)
}
} }
Write-Host ""
return return $true
} }
'EnableWindowsSandbox' {
Write-Host "> $($feature.ApplyUndoText)..." # ---- Custom undo features (no registry backing) ----
DisableWindowsFeature 'Containers-DisposableClientVM' switch ($FeatureId) {
Write-Host "" 'DisableStoreSearchSuggestions' {
return if ($script:Params.ContainsKey('Sysprep')) {
} Write-Host "> Re-enabling Microsoft Store search suggestions in the start menu for all users..."
'EnableWindowsSubsystemForLinux' { return (Set-StoreSearchSuggestionsEnabledForAllUsers)
Write-Host "> $($feature.ApplyUndoText)..." }
DisableWindowsFeature 'Microsoft-Windows-Subsystem-Linux'
DisableWindowsFeature 'VirtualMachinePlatform' Write-Host "> Re-enabling Microsoft Store search suggestions for user $(Get-UserName)..."
Write-Host "" $storeDb = Get-StoreAppsDatabasePathForUser -UserName (Get-UserName)
return if ($storeDb) {
} return (Set-StoreSearchSuggestionsEnabled -StoreAppsDatabase $storeDb)
'DisableTelemetry' { }
# Also re-enable telemetry scheduled tasks Write-Warning "Unable to re-enable Microsoft Store search suggestions because the Store database for user $(Get-UserName) could not be resolved."
Enable-TelemetryScheduledTasks return $false
return }
'EnableWindowsSandbox' {
Write-Host "> $undoText..."
return (Disable-WindowsFeature 'Containers-DisposableClientVM')
}
'EnableWindowsSubsystemForLinux' {
Write-Host "> $undoText..."
if (-not (Disable-WindowsFeature 'Microsoft-Windows-Subsystem-Linux')) { return $false }
return (Disable-WindowsFeature 'VirtualMachinePlatform')
}
} }
} }
catch {
Write-Warning "Failed to undo '$undoText': $($_.Exception.Message)"
return $false
}
Write-Warning "Feature '$FeatureId' does not support undo."
return $false
} }
@@ -240,13 +265,19 @@ function Invoke-ApplyFeatures {
# Resolve display name for the progress indicator # Resolve display name for the progress indicator
$f = $script:Features[$featureId] $f = $script:Features[$featureId]
$displayName = $f.ApplyText $displayName = Get-Translation -Key $featureId -Field 'ApplyText' -Section 'Features'
if ($script:ApplyProgressCallback) { if ($script:ApplyProgressCallback) {
& $script:ApplyProgressCallback $step $TotalSteps $displayName & $script:ApplyProgressCallback $step $TotalSteps $displayName
} }
Invoke-FeatureApply -FeatureId $featureId # Compare app-removal failure counts so a feature that only fails due to
# app removal isn't also double-reported as a feature failure.
$appRemovalFailuresBefore = $script:AppRemovalFailures
if ((-not (Invoke-FeatureApply -FeatureId $featureId)) -and ($script:AppRemovalFailures -eq $appRemovalFailuresBefore)) {
$script:FeatureFailures++
}
Write-Host ""
$step++ $step++
} }
} }
@@ -257,9 +288,8 @@ function Invoke-ApplyFeatures {
Undoes a list of features, reporting progress for each. Undoes a list of features, reporting progress for each.
.DESCRIPTION .DESCRIPTION
Iterates through the provided feature IDs. Features with a RegistryUndoKey Iterates through the provided feature IDs and delegates each to
are handled by importing the undo .reg file; all others delegate to Invoke-FeatureUndo, which handles registry-backed and custom undo logic.
Invoke-FeatureUndo for custom undo logic.
This is called by Invoke-AllChanges during the undo phase. This is called by Invoke-AllChanges during the undo phase.
#> #>
function Invoke-UndoFeatures { function Invoke-UndoFeatures {
@@ -279,18 +309,17 @@ function Invoke-UndoFeatures {
if ($script:CancelRequested) { return } if ($script:CancelRequested) { return }
$f = if ($script:Features.ContainsKey($featureId)) { $script:Features[$featureId] } else { $null } $f = if ($script:Features.ContainsKey($featureId)) { $script:Features[$featureId] } else { $null }
$undoLabel = if ($f -and $f.UndoLabel) { $f.UndoLabel } else { $featureId } $undoLabel = if ($f -and $f.UndoLabel) { Get-Translation -Key $featureId -Field 'UndoLabel' -Section 'Features' } else { $featureId }
$undoText = if ($f -and $f.ApplyUndoText) { $f.ApplyUndoText } else { $undoLabel } $undoText = if ($f -and $f.ApplyUndoText) { Get-Translation -Key $featureId -Field 'ApplyUndoText' -Section 'Features' } else { $undoLabel }
if ($script:ApplyProgressCallback) { if ($script:ApplyProgressCallback) {
& $script:ApplyProgressCallback $step $TotalSteps $undoText & $script:ApplyProgressCallback $step $TotalSteps $undoText
} }
if ($f -and $f.RegistryUndoKey) { if (-not (Invoke-FeatureUndo -FeatureId $featureId)) {
ImportRegistryFile "> $undoText" (Resolve-UndoRegFilePath $f.RegistryUndoKey) $script:FeatureFailures++
} }
Write-Host ""
Invoke-FeatureUndo -FeatureId $featureId
$step++ $step++
} }
} }
@@ -302,8 +331,8 @@ function Invoke-UndoFeatures {
.DESCRIPTION .DESCRIPTION
Sequenced in four phases: Sequenced in four phases:
1. Registry backup 1. Registry backup (skipped when SkipRegistryBackup is present)
2. System restore point 2. System restore point (skipped when CreateRestorePoint is absent)
3. Apply phase - applies all selected features via Invoke-ApplyFeatures 3. Apply phase - applies all selected features via Invoke-ApplyFeatures
4. Undo phase - undoes selected features via Invoke-UndoFeatures 4. Undo phase - undoes selected features via Invoke-UndoFeatures
@@ -311,13 +340,18 @@ function Invoke-UndoFeatures {
(used by the GUI modal). Cancellation is checked between each step. (used by the GUI modal). Cancellation is checked between each step.
#> #>
function Invoke-AllChanges { function Invoke-AllChanges {
if ($script:CancelRequested) { return }
# Guard: prevent running as SYSTEM account without explicit target user # Guard: prevent running as SYSTEM account without explicit target user
$isSystem = ([Security.Principal.WindowsIdentity]::GetCurrent().User.Value -eq 'S-1-5-18') $isSystem = Test-RunningAsSystem
if ($isSystem -and -not $script:Params.ContainsKey("User") -and -not $script:Params.ContainsKey("Sysprep")) { if ($isSystem -and -not $script:Params.ContainsKey("User") -and -not $script:Params.ContainsKey("Sysprep")) {
throw "Win11Debloat is running as the SYSTEM account. Use the '-User' or '-Sysprep' parameter to target a specific user." throw "Win11Debloat is running as the SYSTEM account. Use the '-User' or '-Sysprep' parameter to target a specific user."
} }
$script:RegistryImportFailures = 0 $script:AppRemovalFailures = 0
$script:FeatureFailures = 0
$script:AppRemovalVerificationUnavailable = $false
$script:WingetDeferredRemovals = @{}
# ---- Gather work items ---- # ---- Gather work items ----
$applyIds = @() $applyIds = @()
@@ -347,17 +381,18 @@ function Invoke-AllChanges {
# ---- Calculate total progress steps ---- # ---- Calculate total progress steps ----
$totalSteps = $applyIds.Count + $undoIds.Count $totalSteps = $applyIds.Count + $undoIds.Count
if ($needsBackup) { $totalSteps++ } if ($needsBackup -and -not $script:Params.ContainsKey('SkipRegistryBackup')) { $totalSteps++ }
if ($script:Params.ContainsKey("CreateRestorePoint")) { $totalSteps++ } if ($script:Params.ContainsKey("CreateRestorePoint")) { $totalSteps++ }
$step = 0 $step = 0
# ================================================================ # ================================================================
# Phase 1: Registry backup # Phase 1: Registry backup
# ================================================================ # ================================================================
if ($needsBackup) { if ($needsBackup -and -not $script:Params.ContainsKey('SkipRegistryBackup')) {
if ($script:CancelRequested) { return }
$step++ $step++
if ($script:ApplyProgressCallback) { if ($script:ApplyProgressCallback) {
& $script:ApplyProgressCallback $step $totalSteps "Creating registry backup..." & $script:ApplyProgressCallback $step $totalSteps (Get-Translation -Key 'ApplyCreatingRegistryBackup')
} }
if ($script:Params.ContainsKey("WhatIf")) { if ($script:Params.ContainsKey("WhatIf")) {
@@ -384,9 +419,10 @@ function Invoke-AllChanges {
# Phase 2: System restore point # Phase 2: System restore point
# ================================================================ # ================================================================
if ($script:Params.ContainsKey("CreateRestorePoint")) { if ($script:Params.ContainsKey("CreateRestorePoint")) {
if ($script:CancelRequested) { return }
$step++ $step++
if ($script:ApplyProgressCallback) { if ($script:ApplyProgressCallback) {
& $script:ApplyProgressCallback $step $totalSteps "Creating system restore point, this may take a moment..." & $script:ApplyProgressCallback $step $totalSteps (Get-Translation -Key 'ApplyCreatingRestorePoint')
} }
if ($script:Params.ContainsKey("WhatIf")) { if ($script:Params.ContainsKey("WhatIf")) {
Write-Host "[WhatIf] Create system restore point" -ForegroundColor Cyan Write-Host "[WhatIf] Create system restore point" -ForegroundColor Cyan
@@ -394,7 +430,11 @@ function Invoke-AllChanges {
} }
else { else {
Write-Host "> Creating a system restore point..." Write-Host "> Creating a system restore point..."
CreateSystemRestorePoint $restorePointSucceeded = Invoke-SystemRestorePoint
if (-not $restorePointSucceeded) {
if ($script:CancelRequested) { return }
$script:FeatureFailures++
}
Write-Host "" Write-Host ""
} }
} }
@@ -407,6 +447,8 @@ function Invoke-AllChanges {
$step += $applyIds.Count $step += $applyIds.Count
} }
if ($script:CancelRequested) { return }
# ================================================================ # ================================================================
# Phase 4: Undo features # Phase 4: Undo features
# ================================================================ # ================================================================
@@ -416,10 +458,37 @@ function Invoke-AllChanges {
} }
# ================================================================ # ================================================================
# Final: Report registry import failures # Final: Report failures
# ================================================================ # ================================================================
if ($script:RegistryImportFailures -gt 0) { if ($script:AppRemovalFailures -gt 0) {
Write-Host "" Write-Host ""
Write-Host "$($script:RegistryImportFailures) registry import change(s) failed. See output above for details." -ForegroundColor Yellow Write-Warning "$($script:AppRemovalFailures) app removal(s) failed. See output above for details."
} }
if ($script:FeatureFailures -gt 0) {
Write-Host ""
Write-Warning "$($script:FeatureFailures) feature change(s) failed. See output above for details."
}
if ($script:AppRemovalVerificationUnavailable) {
Write-Host ""
Write-Warning "Unable to verify if all apps were uninstalled successfully."
}
}
<#
.SYNOPSIS
Tests whether Win11Debloat is running under the SYSTEM account.
.DESCRIPTION
Compares the current Windows identity's security identifier (SID) with
the well-known Local System SID (S-1-5-18).
.OUTPUTS
System.Boolean
Returns $true when the current process runs as SYSTEM; otherwise, $false.
#>
function Test-RunningAsSystem {
return ([Security.Principal.WindowsIdentity]::GetCurrent().User.Value -eq 'S-1-5-18')
} }
@@ -1,30 +1,29 @@
# Restart the Windows Explorer process <#
function RestartExplorer { .SYNOPSIS
# Restarting Explorer while running in Sysprep or User context is not necessary Restarts Windows Explorer to apply system changes.
if ($script:Params.ContainsKey("Sysprep") -or $script:Params.ContainsKey("User")) {
return
}
.DESCRIPTION
Restarts the Explorer process to ensure all UI modifications take effect. Shows a warning if any of the applied features require a reboot to take full effect.
#>
function Invoke-RestartExplorer {
if ($script:Params.ContainsKey("WhatIf")) { if ($script:Params.ContainsKey("WhatIf")) {
Write-Host "[WhatIf] Restart the Windows Explorer process" -ForegroundColor Cyan Write-Host "[WhatIf] Restart the Windows Explorer process" -ForegroundColor Cyan
return return
} }
Write-Host "> Attempting to restart the Windows Explorer process to apply all changes..." Write-Host "> Attempting to restart the Windows Explorer process to apply all changes..."
if ($script:Params.ContainsKey("NoRestartExplorer")) { if ($script:Params.ContainsKey('SkipExplorerRestart')) {
Write-Host "Explorer process restart was skipped, please manually reboot your PC to apply all changes" -ForegroundColor Yellow Write-Host "Explorer process restart was skipped, please manually reboot your PC to apply all changes" -ForegroundColor Yellow
return return
} }
foreach ($paramKey in $script:Params.Keys) { $rebootFeatures = Get-RebootFeatureLabels
if ($script:Features.ContainsKey($paramKey) -and $script:Features[$paramKey].RequiresReboot -eq $true) { foreach ($displayLabel in $rebootFeatures) {
$feature = $script:Features[$paramKey] Write-Host "Warning: '$displayLabel' requires a reboot to take full effect" -ForegroundColor Yellow
Write-Host "Warning: '$($feature.Label)' requires a reboot to take full effect" -ForegroundColor Yellow
}
} }
# Only restart if the powershell process matches the OS architecture. # Only restart if the PowerShell process matches the OS architecture.
# Restarting explorer from a 32bit PowerShell window will fail on a 64bit OS # Restarting explorer from a 32bit PowerShell window will fail on a 64bit OS
if ([Environment]::Is64BitProcess -eq [Environment]::Is64BitOperatingSystem) { if ([Environment]::Is64BitProcess -eq [Environment]::Is64BitOperatingSystem) {
Write-Host "Restarting the Windows Explorer process... (This may cause your screen to flicker)" Write-Host "Restarting the Windows Explorer process... (This may cause your screen to flicker)"
@@ -33,4 +32,4 @@ function RestartExplorer {
else { else {
Write-Host "Unable to restart Windows Explorer process, please manually reboot your PC to apply all changes" -ForegroundColor Yellow Write-Host "Unable to restart Windows Explorer process, please manually reboot your PC to apply all changes" -ForegroundColor Yellow
} }
} }
@@ -1,10 +1,25 @@
function CreateSystemRestorePoint { <#
$SysRestore = Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore" -Name "RPSessionInterval" .SYNOPSIS
$failed = $false Creates a system restore point.
if ($SysRestore.RPSessionInterval -eq 0) { .OUTPUTS
System.Boolean. $true when a restore point is created; otherwise $false.
#>
function Invoke-SystemRestorePoint {
$failed = $false
$isSilent = ($script:Params -and $script:Params.ContainsKey('Silent')) -or $script:Silent
try {
$SysRestore = Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore" -Name "RPSessionInterval" -ErrorAction Stop
}
catch {
Write-Host "Error: Unable to determine whether System Restore is enabled: $($_.Exception.Message)" -ForegroundColor Red
$failed = $true
}
if (-not $failed -and $SysRestore.RPSessionInterval -eq 0) {
# In GUI mode, skip the prompt and just try to enable it # In GUI mode, skip the prompt and just try to enable it
if ($script:GuiWindow -or $Silent -or $( Read-Host -Prompt "System restore is disabled, would you like to enable it and create a restore point? (y/n)") -eq 'y') { if ($script:GuiWindow -or $isSilent -or $( Read-Host -Prompt "System restore is disabled, would you like to enable it and create a restore point? (y/n)") -eq 'y') {
try { try {
$enableResult = Invoke-NonBlocking -TimeoutSeconds 90 -ScriptBlock { $enableResult = Invoke-NonBlocking -TimeoutSeconds 90 -ScriptBlock {
try { try {
@@ -26,7 +41,6 @@ function CreateSystemRestorePoint {
} }
} }
else { else {
Write-Host ""
$failed = $true $failed = $true
} }
} }
@@ -75,21 +89,24 @@ function CreateSystemRestorePoint {
# Ensure that the user is aware if creating a restore point failed, and give them the option to continue without a restore point or cancel the script # Ensure that the user is aware if creating a restore point failed, and give them the option to continue without a restore point or cancel the script
if ($failed) { if ($failed) {
if ($script:GuiWindow) { if ($script:GuiWindow) {
$result = Show-MessageBox "Failed to create a system restore point. Do you want to continue without a restore point?" "Restore Point Creation Failed" "YesNo" "Warning" $result = Show-MessageBox (Get-Translation -Key 'RestorePointFailedMessage') (Get-Translation -Key 'RestorePointFailedTitle') "YesNo" "Warning"
if ($result -ne "Yes") { if ($result -ne "Yes") {
$script:CancelRequested = $true $script:CancelRequested = $true
return return $false
} }
} }
elseif (-not $Silent) { elseif (-not $isSilent) {
Write-Host "Failed to create a system restore point. Do you want to continue without a restore point? (y/n)" -ForegroundColor Yellow Write-Host "Failed to create a system restore point. Do you want to continue without a restore point? (y/n)" -ForegroundColor Yellow
if ($( Read-Host ) -ne 'y') { if ($( Read-Host ) -ne 'y') {
$script:CancelRequested = $true $script:CancelRequested = $true
return return $false
} }
} }
Write-Host "Warning: Continuing without restore point" -ForegroundColor Yellow Write-Host "Warning: Continuing without restore point" -ForegroundColor Yellow
return $false
} }
return $true
} }
@@ -1,3 +1,11 @@
<#
.SYNOPSIS
Extracts and deduplicates the SelectedFeatures list from a backup, validating each entry.
.DESCRIPTION
Returns an empty SelectedFeatures array with an error when the property is missing
entirely, and flags (without stopping) any entry that isn't a non-empty string.
#>
function Get-NormalizedSelectedFeatureIdsFromBackup { function Get-NormalizedSelectedFeatureIdsFromBackup {
param( param(
[Parameter(Mandatory)] [Parameter(Mandatory)]
@@ -10,7 +18,7 @@ function Get-NormalizedSelectedFeatureIdsFromBackup {
$hasInvalidSelectedFeatureId = $false $hasInvalidSelectedFeatureId = $false
if (-not $Backup.PSObject.Properties['SelectedFeatures']) { if (-not $Backup.PSObject.Properties['SelectedFeatures']) {
$errors.Add('Missing property: SelectedFeatures') $errors.Add((Get-Translation -Key 'BackupMissingProperty' -FormatArgs @('SelectedFeatures')))
return [PSCustomObject]@{ return [PSCustomObject]@{
SelectedFeatures = $selectedFeatures.ToArray() SelectedFeatures = $selectedFeatures.ToArray()
Errors = $errors.ToArray() Errors = $errors.ToArray()
@@ -30,7 +38,7 @@ function Get-NormalizedSelectedFeatureIdsFromBackup {
} }
if ($hasInvalidSelectedFeatureId) { if ($hasInvalidSelectedFeatureId) {
$errors.Add('SelectedFeatures must contain non-empty string feature IDs.') $errors.Add((Get-Translation -Key 'BackupSelectedFeaturesMustBeStrings'))
} }
return [PSCustomObject]@{ return [PSCustomObject]@{
@@ -39,6 +47,14 @@ function Get-NormalizedSelectedFeatureIdsFromBackup {
} }
} }
<#
.SYNOPSIS
Extracts and deduplicates the SelectedUndoFeatures list from a backup, validating each entry.
.DESCRIPTION
Unlike SelectedFeatures, this property is optional: a missing property returns an
empty array with no error, since not every backup has undone features to restore.
#>
function Get-NormalizedSelectedUndoFeatureIdsFromBackup { function Get-NormalizedSelectedUndoFeatureIdsFromBackup {
param( param(
[Parameter(Mandatory)] [Parameter(Mandatory)]
@@ -71,7 +87,7 @@ function Get-NormalizedSelectedUndoFeatureIdsFromBackup {
} }
if ($hasInvalidSelectedUndoFeatureId) { if ($hasInvalidSelectedUndoFeatureId) {
$errors.Add('SelectedUndoFeatures must contain non-empty string feature IDs.') $errors.Add((Get-Translation -Key 'BackupSelectedUndoFeaturesMustBeStrings'))
} }
return [PSCustomObject]@{ return [PSCustomObject]@{
@@ -80,6 +96,15 @@ function Get-NormalizedSelectedUndoFeatureIdsFromBackup {
} }
} }
<#
.SYNOPSIS
Normalizes a raw registry key snapshot into a consistent shape, recursing into sub-keys.
.DESCRIPTION
Fills in defaults for optional properties (Exists, Values, SubKeys) so downstream
validation can read a predictable shape regardless of what the backup file omitted.
Throws if Path is missing, since every snapshot must be anchored to a real key.
#>
function Normalize-RegistryKeySnapshot { function Normalize-RegistryKeySnapshot {
param( param(
[Parameter(Mandatory)] [Parameter(Mandatory)]
@@ -87,7 +112,7 @@ function Normalize-RegistryKeySnapshot {
) )
if (-not $Snapshot.PSObject.Properties['Path'] -or [string]::IsNullOrWhiteSpace([string]$Snapshot.Path)) { if (-not $Snapshot.PSObject.Properties['Path'] -or [string]::IsNullOrWhiteSpace([string]$Snapshot.Path)) {
throw 'Backup validation failed: Registry key snapshot is missing Path.' throw (Get-Translation -Key 'BackupSnapshotMissingPath')
} }
$exists = $false $exists = $false
@@ -127,6 +152,16 @@ function Normalize-RegistryKeySnapshot {
} }
} }
<#
.SYNOPSIS
Validates that a backup's registry snapshots only contain paths and values the
selected (and undo) features are actually allowed to touch.
.DESCRIPTION
Builds an allow-list from the capture plans of the selected features, then checks
every snapshot against it. Returns an array of translated error strings; an empty
array means the backup is valid.
#>
function Test-RegistryBackupMatchesSelectedFeatures { function Test-RegistryBackupMatchesSelectedFeatures {
param( param(
[Parameter(Mandatory)] [Parameter(Mandatory)]
@@ -145,7 +180,7 @@ function Test-RegistryBackupMatchesSelectedFeatures {
$errors = New-Object System.Collections.Generic.List[string] $errors = New-Object System.Collections.Generic.List[string]
if (-not $script:Features -or $script:Features.Count -eq 0) { if (-not $script:Features -or $script:Features.Count -eq 0) {
$errors.Add('Unable to validate registry backup allowlist because feature definitions are not loaded.') $errors.Add((Get-Translation -Key 'BackupFeatureCatalogNotLoaded'))
return $errors.ToArray() return $errors.ToArray()
} }
@@ -161,7 +196,7 @@ function Test-RegistryBackupMatchesSelectedFeatures {
$planMap = New-RegistryBackupAllowListPlanMap -CapturePlans @($capturePlans) $planMap = New-RegistryBackupAllowListPlanMap -CapturePlans @($capturePlans)
if ($planMap.Count -eq 0 -and @($RegistryKeys).Count -gt 0) { if ($planMap.Count -eq 0 -and @($RegistryKeys).Count -gt 0) {
$errors.Add('Backup contains registry snapshots but no allowed registry paths were derived from the selected features.') $errors.Add((Get-Translation -Key 'BackupNoAllowedRegistryPaths'))
} }
foreach ($rootSnapshot in @($RegistryKeys)) { foreach ($rootSnapshot in @($RegistryKeys)) {
@@ -171,6 +206,15 @@ function Test-RegistryBackupMatchesSelectedFeatures {
return $errors.ToArray() return $errors.ToArray()
} }
<#
.SYNOPSIS
Resolves selected feature IDs to their catalog entries, keeping only the ones with a
registry-backed apply or undo key relevant to the requested direction.
.DESCRIPTION
Appends a translated error to the caller-supplied Errors list for any feature ID that
isn't in the current catalog, rather than failing the whole validation outright.
#>
function Get-SelectedRegistryFeaturesForBackupValidation { function Get-SelectedRegistryFeaturesForBackupValidation {
param( param(
[Parameter(Mandatory)] [Parameter(Mandatory)]
@@ -186,11 +230,13 @@ function Get-SelectedRegistryFeaturesForBackupValidation {
if ($null -eq $Errors -or -not ($Errors -is [System.Collections.IList])) { if ($null -eq $Errors -or -not ($Errors -is [System.Collections.IList])) {
throw 'Get-SelectedRegistryFeaturesForBackupValidation requires Errors to be a mutable list collection.' throw 'Get-SelectedRegistryFeaturesForBackupValidation requires Errors to be a mutable list collection.'
} }
# Intentionally not localized: this throw signals a programming error (a caller passing the
# wrong collection type), not a condition a user's backup file can trigger.
$selectedRegistryFeatures = New-Object System.Collections.Generic.List[object] $selectedRegistryFeatures = New-Object System.Collections.Generic.List[object]
foreach ($featureId in @($SelectedFeatureIds)) { foreach ($featureId in @($SelectedFeatureIds)) {
if (-not $script:Features.ContainsKey($featureId)) { if (-not $script:Features.ContainsKey($featureId)) {
$Errors.Add("Selected feature '$featureId' was not found in the current feature catalog.") $Errors.Add((Get-Translation -Key 'BackupFeatureNotInCatalog' -FormatArgs @($featureId)))
continue continue
} }
@@ -248,6 +294,14 @@ function New-RegistryBackupAllowListPlanMap {
return $planMap return $planMap
} }
<#
.SYNOPSIS
Converts registry value names into a case-insensitive set.
.DESCRIPTION
Preserves empty names and prevents PowerShell from enumerating the returned
HashSet.
#>
function ConvertTo-RegistryValueNameSet { function ConvertTo-RegistryValueNameSet {
param( param(
[AllowEmptyCollection()] [AllowEmptyCollection()]
@@ -259,9 +313,18 @@ function ConvertTo-RegistryValueNameSet {
$null = $valueNameSet.Add([string]$valueName) $null = $valueNameSet.Add([string]$valueName)
} }
return $valueNameSet # Prevent PowerShell from enumerating the HashSet into an array or single string
return ,$valueNameSet
} }
<#
.SYNOPSIS
Validates a registry snapshot against the selected-feature allow list.
.DESCRIPTION
Recursively validates snapshot paths, value names, value kinds, and value
data, appending validation errors to the supplied list.
#>
function Test-RegistrySnapshotAgainstAllowList { function Test-RegistrySnapshotAgainstAllowList {
param( param(
[Parameter(Mandatory)] [Parameter(Mandatory)]
@@ -276,13 +339,13 @@ function Test-RegistrySnapshotAgainstAllowList {
$snapshotPath = [string]$Snapshot.Path $snapshotPath = [string]$Snapshot.Path
$normalizedPath = Get-NormalizedRegistryPathKey -Path $snapshotPath $normalizedPath = Get-NormalizedRegistryPathKey -Path $snapshotPath
if ([string]::IsNullOrWhiteSpace($normalizedPath)) { if ([string]::IsNullOrWhiteSpace($normalizedPath)) {
$Errors.Add("Backup contains unsupported registry path '$snapshotPath'.") $Errors.Add((Get-Translation -Key 'BackupUnsupportedRegistryPath' -FormatArgs @($snapshotPath)))
return return
} }
$planMatch = Find-RegistryAllowListPlanMatch -NormalizedPath $normalizedPath -PlanMap $PlanMap $planMatch = Find-RegistryAllowListPlanMatch -NormalizedPath $normalizedPath -PlanMap $PlanMap
if ($null -eq $planMatch) { if ($null -eq $planMatch) {
$Errors.Add("Backup contains unexpected registry path '$snapshotPath' that is not allowed by SelectedFeatures.") $Errors.Add((Get-Translation -Key 'BackupUnexpectedRegistryPath' -FormatArgs @($snapshotPath)))
return return
} }
@@ -291,18 +354,21 @@ function Test-RegistrySnapshotAgainstAllowList {
$valueExists = [bool]$valueSnapshot.Exists $valueExists = [bool]$valueSnapshot.Exists
if (-not (Test-RegistryValueAllowedByPlan -PlanMatch $planMatch -ValueName $valueName)) { if (-not (Test-RegistryValueAllowedByPlan -PlanMatch $planMatch -ValueName $valueName)) {
$Errors.Add("Backup contains unexpected value '$valueName' under '$snapshotPath'.") $Errors.Add((Get-Translation -Key 'BackupUnexpectedValue' -FormatArgs @($valueName, $snapshotPath)))
} }
$kindName = if ($valueSnapshot.PSObject.Properties['Kind']) { [string]$valueSnapshot.Kind } else { '' } $kindName = if ($valueSnapshot.PSObject.Properties['Kind']) { [string]$valueSnapshot.Kind } else { '' }
$valueReference = Get-RegistryValueReferenceForError -SnapshotPath $snapshotPath -ValueName $valueName $valueReference = Get-RegistryValueReferenceForError -SnapshotPath $snapshotPath -ValueName $valueName
if ($valueExists) { if ($valueExists) {
if (-not (Test-RegistryValueKindNameSupported -KindName $kindName)) { if (-not (Test-RegistryValueKindNameSupported -KindName $kindName)) {
$Errors.Add("Backup contains unsupported registry value kind '$kindName' for '$valueReference'.") $Errors.Add((Get-Translation -Key 'BackupUnsupportedValueKind' -FormatArgs @($kindName, $valueReference)))
}
elseif (-not (Test-RegistryValueDataMatchesKind -KindName $kindName -Data $valueSnapshot.Data)) {
$Errors.Add((Get-Translation -Key 'BackupInvalidValueData' -FormatArgs @($kindName, $valueReference)))
} }
} }
elseif (-not [string]::IsNullOrWhiteSpace($kindName)) { elseif (-not [string]::IsNullOrWhiteSpace($kindName)) {
$Errors.Add("Backup value '$valueReference' must not define Kind when Exists is false.") $Errors.Add((Get-Translation -Key 'BackupValueMustNotDefineKind' -FormatArgs @($valueReference)))
} }
} }
@@ -311,6 +377,64 @@ function Test-RegistrySnapshotAgainstAllowList {
} }
} }
<#
.SYNOPSIS
Tests whether backed-up registry data is valid for its declared value kind.
.DESCRIPTION
Rejects corrupted or hand-edited backup data that cannot be restored safely,
such as a DWord that overflows UInt32 or binary data containing an invalid byte.
This validation runs before Restore-RegistryKeySnapshot mutates the live
registry, preventing a failed conversion from leaving a partially restored key.
.PARAMETER KindName
The declared registry value kind name, such as DWord, QWord, or Binary.
.PARAMETER Data
The backed-up value data to validate against the declared kind.
.OUTPUTS
System.Boolean
#>
function Test-RegistryValueDataMatchesKind {
param(
[Parameter(Mandatory)]
[string]$KindName,
[AllowNull()]
$Data
)
$kind = [System.Enum]::Parse([Microsoft.Win32.RegistryValueKind], $KindName, $true)
switch ($kind) {
([Microsoft.Win32.RegistryValueKind]::DWord) {
$parsed = [uint32]0
return [uint32]::TryParse([string]$Data, [System.Globalization.NumberStyles]::Integer, [System.Globalization.CultureInfo]::InvariantCulture, [ref]$parsed)
}
([Microsoft.Win32.RegistryValueKind]::QWord) {
$parsed = [uint64]0
return [uint64]::TryParse([string]$Data, [System.Globalization.NumberStyles]::Integer, [System.Globalization.CultureInfo]::InvariantCulture, [ref]$parsed)
}
([Microsoft.Win32.RegistryValueKind]::Binary) {
if ($null -eq $Data -or $Data -isnot [array]) { return $false }
foreach ($item in @($Data)) {
if ($item -isnot [ValueType] -and $item -isnot [string]) { return $false }
$parsed = 0
if (-not [int]::TryParse([string]$item, [ref]$parsed) -or $parsed -lt 0 -or $parsed -gt 255) {
return $false
}
}
return $true
}
([Microsoft.Win32.RegistryValueKind]::MultiString) {
foreach ($item in @($Data)) {
if ($item -isnot [string]) { return $false }
}
return $true
}
default { return ($null -eq $Data -or $Data -is [string]) }
}
}
function Test-RegistryValueAllowedByPlan { function Test-RegistryValueAllowedByPlan {
param( param(
[Parameter(Mandatory)] [Parameter(Mandatory)]
@@ -428,6 +552,14 @@ function Get-NormalizedRegistryPathKey {
return "$normalizedHive\\$normalizedSubKey" return "$normalizedHive\\$normalizedSubKey"
} }
<#
.SYNOPSIS
Tests whether a registry value-kind name is supported in backups.
.DESCRIPTION
Parses kind names case-insensitively and rejects empty, invalid, Unknown,
and None values.
#>
function Test-RegistryValueKindNameSupported { function Test-RegistryValueKindNameSupported {
param( param(
[string]$KindName [string]$KindName
@@ -439,9 +571,10 @@ function Test-RegistryValueKindNameSupported {
try { try {
$kind = [System.Enum]::Parse([Microsoft.Win32.RegistryValueKind], $KindName, $true) $kind = [System.Enum]::Parse([Microsoft.Win32.RegistryValueKind], $KindName, $true)
return $kind -ne [Microsoft.Win32.RegistryValueKind]::Unknown return $kind -notin @([Microsoft.Win32.RegistryValueKind]::Unknown, [Microsoft.Win32.RegistryValueKind]::None)
} }
catch { catch {
return $false return $false
} }
} }
@@ -14,12 +14,15 @@
bundled with the script (Assets/Start/start2.bin). bundled with the script (Assets/Start/start2.bin).
.EXAMPLE .EXAMPLE
ReplaceStartMenuForAllUsers Replace-StartMenuForAllUsers
.EXAMPLE .EXAMPLE
ReplaceStartMenuForAllUsers -startMenuTemplate "C:\CustomLayout.bin" Replace-StartMenuForAllUsers -startMenuTemplate "C:\CustomLayout.bin"
.OUTPUTS
System.Boolean. $true when all resolved profiles are updated or the change is previewed; otherwise $false.
#> #>
function ReplaceStartMenuForAllUsers { function Replace-StartMenuForAllUsers {
param ( param (
[string]$startMenuTemplate = "$script:AssetsPath\Start\start2.bin" [string]$startMenuTemplate = "$script:AssetsPath\Start\start2.bin"
) )
@@ -29,37 +32,49 @@ function ReplaceStartMenuForAllUsers {
# Check if template bin file exists # Check if template bin file exists
if (-not (Test-Path $startMenuTemplate)) { if (-not (Test-Path $startMenuTemplate)) {
Write-Host "Error: Unable to clear start menu, start2.bin file missing from script folder" -ForegroundColor Red Write-Host "Error: Unable to clear start menu, start2.bin file missing from script folder" -ForegroundColor Red
Write-Host "" return $false
return
} }
# Get path to start menu file for all users # Get path to start menu file for all users
$userPathString = GetUserDirectory -userName "*" -fileName "AppData\Local\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState" $userPathString = Get-UserDirectory -userName "*" -fileName "AppData\Local\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState"
$usersStartMenuPaths = Get-ChildItem -Path $userPathString -ErrorAction SilentlyContinue $usersStartMenuPaths = Get-ChildItem -Path $userPathString -ErrorAction SilentlyContinue
# Go through all users and replace the start menu file # Go through all users and replace the start menu file
$success = $true
ForEach ($startMenuPath in $usersStartMenuPaths) { ForEach ($startMenuPath in $usersStartMenuPaths) {
ReplaceStartMenu -startMenuBinFile "$($startMenuPath.Fullname)\start2.bin" -startMenuTemplate $startMenuTemplate if (-not (Replace-StartMenu -startMenuBinFile "$($startMenuPath.Fullname)\start2.bin" -startMenuTemplate $startMenuTemplate)) {
$success = $false
}
} }
# Also replace the start menu file for the default user profile # Also replace the start menu file for the default user profile
$defaultStartMenuPath = GetUserDirectory -userName "Default" -fileName "AppData\Local\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState" -exitIfPathNotFound $false $defaultStartMenuPath = Get-UserDirectory -userName "Default" -fileName "AppData\Local\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState" -exitIfPathNotFound $false
if ($script:Params.ContainsKey("WhatIf")) { if ($script:Params.ContainsKey("WhatIf")) {
Write-Host "[WhatIf] Replace Start Menu for Default user profile with template $startMenuTemplate" -ForegroundColor Cyan Write-Host "[WhatIf] Replace Start Menu for Default user profile with template $startMenuTemplate" -ForegroundColor Cyan
return return $true
} }
# Create folder if it doesn't exist # Create folder if it doesn't exist
if (-not (Test-Path $defaultStartMenuPath)) { if (-not (Test-Path $defaultStartMenuPath)) {
new-item $defaultStartMenuPath -ItemType Directory -Force | Out-Null try {
Write-Host "Created LocalState folder for default user profile" New-Item $defaultStartMenuPath -ItemType Directory -Force -ErrorAction Stop | Out-Null
Write-Host "Created LocalState folder for default user profile"
}
catch {
Write-Warning "Failed to create the Default profile Start Menu directory: $($_.Exception.Message)"
return $false
}
} }
# Copy template to default profile # Copy template to default profile
ReplaceStartMenu -startMenuBinFile "$($defaultStartMenuPath)\start2.bin" -startMenuTemplate $startMenuTemplate if (-not (Replace-StartMenu -startMenuBinFile "$($defaultStartMenuPath)\start2.bin" -startMenuTemplate $startMenuTemplate)) {
Write-Host "Replaced start menu for the default user profile" $success = $false
Write-Host "" }
else {
Write-Host "Replaced start menu for the default user profile"
}
return $success
} }
@@ -83,12 +98,15 @@ function ReplaceStartMenuForAllUsers {
bundled with the script (Assets/Start/start2.bin). bundled with the script (Assets/Start/start2.bin).
.EXAMPLE .EXAMPLE
ReplaceStartMenu -startMenuBinFile "$env:LOCALAPPDATA\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState\start2.bin" Replace-StartMenu -startMenuBinFile "$env:LOCALAPPDATA\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState\start2.bin"
.EXAMPLE .EXAMPLE
ReplaceStartMenu -startMenuBinFile "$env:LOCALAPPDATA\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState\start2.bin" -startMenuTemplate "C:\CustomLayout.bin" Replace-StartMenu -startMenuBinFile "$env:LOCALAPPDATA\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState\start2.bin" -startMenuTemplate "C:\CustomLayout.bin"
.OUTPUTS
System.Boolean. $true when the template is valid and copied, or the change is previewed; otherwise $false.
#> #>
function ReplaceStartMenu { function Replace-StartMenu {
param ( param (
[Parameter(Mandatory)] [Parameter(Mandatory)]
[string]$startMenuBinFile, [string]$startMenuBinFile,
@@ -98,19 +116,19 @@ function ReplaceStartMenu {
# Check if template bin file exists # Check if template bin file exists
if (-not (Test-Path $startMenuTemplate)) { if (-not (Test-Path $startMenuTemplate)) {
Write-Host "Error: Unable to replace start menu, template file not found" -ForegroundColor Red Write-Host "Error: Unable to replace start menu, template file not found" -ForegroundColor Red
return return $false
} }
if ([IO.Path]::GetExtension($startMenuTemplate) -ne ".bin") { if ([IO.Path]::GetExtension($startMenuTemplate) -ne ".bin") {
Write-Host "Error: Unable to replace start menu, template file is not a valid .bin file" -ForegroundColor Red Write-Host "Error: Unable to replace start menu, template file is not a valid .bin file" -ForegroundColor Red
return return $false
} }
$userName = GetStartMenuUserNameFromPath -StartMenuBinFile $startMenuBinFile $userName = Get-StartMenuUserNameFromPath -StartMenuBinFile $startMenuBinFile
if ($script:Params.ContainsKey("WhatIf")) { if ($script:Params.ContainsKey("WhatIf")) {
Write-Host "[WhatIf] Replace Start Menu for user $userName with template $startMenuTemplate" -ForegroundColor Cyan Write-Host "[WhatIf] Replace Start Menu for user $userName with template $startMenuTemplate" -ForegroundColor Cyan
return return $true
} }
$timestamp = Get-Date -Format 'yyyyMMdd_HHmmss' $timestamp = Get-Date -Format 'yyyyMMdd_HHmmss'
@@ -118,20 +136,27 @@ function ReplaceStartMenu {
$startMenuDir = Split-Path $startMenuBinFile -Parent $startMenuDir = Split-Path $startMenuBinFile -Parent
$backupBinFile = Join-Path $startMenuDir $backupFileName $backupBinFile = Join-Path $startMenuDir $backupFileName
if (Test-Path $startMenuBinFile) { try {
# Backup current start menu file if (Test-Path $startMenuBinFile) {
Copy-Item -Path $startMenuBinFile -Destination $backupBinFile -Force # Backup current start menu file
Write-Verbose "Start menu backup for user $userName saved to $backupFileName" Copy-Item -Path $startMenuBinFile -Destination $backupBinFile -Force -ErrorAction Stop
} Write-Verbose "Start menu backup for user $userName saved to $backupFileName"
else { }
Write-Host "Unable to find original start2.bin file for user $userName, no backup was created for this user" -ForegroundColor Yellow else {
New-Item -ItemType File -Path $startMenuBinFile -Force Write-Host "Unable to find original start2.bin file for user $userName, no backup was created for this user" -ForegroundColor Yellow
} New-Item -ItemType File -Path $startMenuBinFile -Force -ErrorAction Stop | Out-Null
}
# Copy template file # Copy template file
Copy-Item -Path $startMenuTemplate -Destination $startMenuBinFile -Force Copy-Item -Path $startMenuTemplate -Destination $startMenuBinFile -Force -ErrorAction Stop
}
catch {
Write-Warning "Failed to replace Start Menu for user ${userName}: $($_.Exception.Message)"
return $false
}
Write-Host "Replaced start menu for user $userName" Write-Host "Replaced start menu for user $userName"
return $true
} }
<# <#
@@ -147,12 +172,12 @@ function ReplaceStartMenu {
The target username. Pass an empty string or omit to resolve for the current user. The target username. Pass an empty string or omit to resolve for the current user.
.EXAMPLE .EXAMPLE
GetStartMenuBinPathForUser -UserName "Jeff" Get-StartMenuBinPathForUser -UserName "Jeff"
.EXAMPLE .EXAMPLE
GetStartMenuBinPathForUser -UserName "Default" Get-StartMenuBinPathForUser -UserName "Default"
#> #>
function GetStartMenuBinPathForUser { function Get-StartMenuBinPathForUser {
param( param(
[string]$UserName [string]$UserName
) )
@@ -161,7 +186,7 @@ function GetStartMenuBinPathForUser {
return "$env:LOCALAPPDATA\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState\start2.bin" return "$env:LOCALAPPDATA\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState\start2.bin"
} }
return (GetUserDirectory -userName $UserName -fileName "AppData\Local\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState\start2.bin" -exitIfPathNotFound $false) return (Get-UserDirectory -userName $UserName -fileName "AppData\Local\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState\start2.bin" -exitIfPathNotFound $false)
} }
<# <#
@@ -177,9 +202,9 @@ function GetStartMenuBinPathForUser {
The full path to a start2.bin file. The full path to a start2.bin file.
.EXAMPLE .EXAMPLE
GetStartMenuUserNameFromPath -StartMenuBinFile "$env:LOCALAPPDATA\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState\start2.bin" Get-StartMenuUserNameFromPath -StartMenuBinFile "$env:LOCALAPPDATA\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState\start2.bin"
#> #>
function GetStartMenuUserNameFromPath { function Get-StartMenuUserNameFromPath {
param( param(
[string]$StartMenuBinFile [string]$StartMenuBinFile
) )
@@ -230,7 +255,7 @@ function Get-StartMenuBackupPath {
return $null return $null
} }
else { else {
$userPathString = GetUserDirectory -userName "*" -fileName "AppData\Local\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState" $userPathString = Get-UserDirectory -userName "*" -fileName "AppData\Local\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState"
$usersStartMenuPaths = Get-ChildItem -Path $userPathString -ErrorAction SilentlyContinue $usersStartMenuPaths = Get-ChildItem -Path $userPathString -ErrorAction SilentlyContinue
foreach ($startMenuPath in $usersStartMenuPaths) { foreach ($startMenuPath in $usersStartMenuPaths) {
$latestBackup = Get-ChildItem -Path (Join-Path $startMenuPath.FullName 'Win11Debloat-StartBackup-*.bak') -ErrorAction SilentlyContinue | $latestBackup = Get-ChildItem -Path (Join-Path $startMenuPath.FullName 'Win11Debloat-StartBackup-*.bak') -ErrorAction SilentlyContinue |
@@ -261,19 +286,19 @@ function Get-StartMenuBackupPath {
finds the latest Win11Debloat-StartBackup-*.bak file. finds the latest Win11Debloat-StartBackup-*.bak file.
.EXAMPLE .EXAMPLE
RestoreStartMenuFromBackup -StartMenuBinFile "$env:LOCALAPPDATA\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState\start2.bin" Restore-StartMenuFromBackup -StartMenuBinFile "$env:LOCALAPPDATA\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState\start2.bin"
.EXAMPLE .EXAMPLE
RestoreStartMenuFromBackup -StartMenuBinFile "$env:LOCALAPPDATA\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState\start2.bin" -BackupFilePath "C:\Backups\Win11Debloat-StartBackup-20260101_120000.bak" Restore-StartMenuFromBackup -StartMenuBinFile "$env:LOCALAPPDATA\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState\start2.bin" -BackupFilePath "C:\Backups\Win11Debloat-StartBackup-20260101_120000.bak"
#> #>
function RestoreStartMenuFromBackup { function Restore-StartMenuFromBackup {
param( param(
[Parameter(Mandatory)] [Parameter(Mandatory)]
[string]$StartMenuBinFile, [string]$StartMenuBinFile,
[string]$BackupFilePath [string]$BackupFilePath
) )
$userName = GetStartMenuUserNameFromPath -StartMenuBinFile $StartMenuBinFile $userName = Get-StartMenuUserNameFromPath -StartMenuBinFile $StartMenuBinFile
$backupBinFile = if ([string]::IsNullOrWhiteSpace($BackupFilePath)) { $backupBinFile = if ([string]::IsNullOrWhiteSpace($BackupFilePath)) {
# Auto-detect latest backup in the same folder as the start2.bin # Auto-detect latest backup in the same folder as the start2.bin
$startMenuDir = Split-Path $StartMenuBinFile -Parent $startMenuDir = Split-Path $StartMenuBinFile -Parent
@@ -294,7 +319,7 @@ function RestoreStartMenuFromBackup {
return [PSCustomObject]@{ return [PSCustomObject]@{
UserName = $userName UserName = $userName
Result = $false Result = $false
Message = "No start menu backup file found for user $userName." Message = Get-Translation -Key 'StartMenuNoBackupFoundForUser' -FormatArgs @($userName)
} }
} }
@@ -303,7 +328,7 @@ function RestoreStartMenuFromBackup {
return [PSCustomObject]@{ return [PSCustomObject]@{
UserName = $userName UserName = $userName
Result = $true Result = $true
Message = "[WhatIf] Restored start menu for user $userName." Message = Get-Translation -Key 'StartMenuWhatIfRestoredForUser' -FormatArgs @($userName)
} }
} }
@@ -311,7 +336,7 @@ function RestoreStartMenuFromBackup {
return [PSCustomObject]@{ return [PSCustomObject]@{
UserName = $userName UserName = $userName
Result = $false Result = $false
Message = "No start menu backup file found for user $userName." Message = Get-Translation -Key 'StartMenuNoBackupFoundForUser' -FormatArgs @($userName)
} }
} }
@@ -324,14 +349,14 @@ function RestoreStartMenuFromBackup {
return [PSCustomObject]@{ return [PSCustomObject]@{
UserName = $userName UserName = $userName
Result = $true Result = $true
Message = "Restored start menu for user $userName." Message = Get-Translation -Key 'StartMenuRestoredForUser' -FormatArgs @($userName)
} }
} }
catch { catch {
return [PSCustomObject]@{ return [PSCustomObject]@{
UserName = $userName UserName = $userName
Result = $false Result = $false
Message = "Failed to restore start menu for user $userName. $($_.Exception.Message)" Message = Get-Translation -Key 'StartMenuRestoreFailedForUser' -FormatArgs @($userName, $_.Exception.Message)
} }
} }
} }
@@ -342,19 +367,19 @@ function RestoreStartMenuFromBackup {
.DESCRIPTION .DESCRIPTION
Resolves the start2.bin path for the currently logged-in user, then Resolves the start2.bin path for the currently logged-in user, then
delegates to RestoreStartMenuFromBackup. delegates to Restore-StartMenuFromBackup.
.PARAMETER BackupFilePath .PARAMETER BackupFilePath
Path to the backup file to restore from. If omitted, automatically Path to the backup file to restore from. If omitted, automatically
finds the latest Win11Debloat-StartBackup-*.bak file. finds the latest Win11Debloat-StartBackup-*.bak file.
.EXAMPLE .EXAMPLE
RestoreStartMenu Restore-StartMenu
.EXAMPLE .EXAMPLE
RestoreStartMenu -BackupFilePath "C:\Backups\Win11Debloat-StartBackup-20260101_120000.bak" Restore-StartMenu -BackupFilePath "C:\Backups\Win11Debloat-StartBackup-20260101_120000.bak"
#> #>
function RestoreStartMenu { function Restore-StartMenu {
param( param(
[string]$BackupFilePath [string]$BackupFilePath
) )
@@ -364,7 +389,7 @@ function RestoreStartMenu {
Write-Host "Restoring start menu for user $targetUserName from backup..." Write-Host "Restoring start menu for user $targetUserName from backup..."
return RestoreStartMenuFromBackup -StartMenuBinFile $startMenuBinFile -BackupFilePath $BackupFilePath return Restore-StartMenuFromBackup -StartMenuBinFile $startMenuBinFile -BackupFilePath $BackupFilePath
} }
<# <#
@@ -384,17 +409,17 @@ function RestoreStartMenu {
LocalState folder. LocalState folder.
.EXAMPLE .EXAMPLE
RestoreStartMenuForAllUsers Restore-StartMenuForAllUsers
.EXAMPLE .EXAMPLE
RestoreStartMenuForAllUsers -BackupFilePath "C:\Backups\Win11Debloat-StartBackup-20260101_120000.bak" Restore-StartMenuForAllUsers -BackupFilePath "C:\Backups\Win11Debloat-StartBackup-20260101_120000.bak"
#> #>
function RestoreStartMenuForAllUsers { function Restore-StartMenuForAllUsers {
param( param(
[string]$BackupFilePath [string]$BackupFilePath
) )
$userPathString = GetUserDirectory -userName "*" -fileName "AppData\Local\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState" $userPathString = Get-UserDirectory -userName "*" -fileName "AppData\Local\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState"
$usersStartMenuPaths = Get-ChildItem -Path $userPathString -ErrorAction SilentlyContinue $usersStartMenuPaths = Get-ChildItem -Path $userPathString -ErrorAction SilentlyContinue
$results = @() $results = @()
@@ -402,10 +427,10 @@ function RestoreStartMenuForAllUsers {
foreach ($startMenuPath in $usersStartMenuPaths) { foreach ($startMenuPath in $usersStartMenuPaths) {
$startMenuBinFile = Join-Path $startMenuPath.FullName 'start2.bin' $startMenuBinFile = Join-Path $startMenuPath.FullName 'start2.bin'
$results += RestoreStartMenuFromBackup -StartMenuBinFile $startMenuBinFile -BackupFilePath $BackupFilePath $results += Restore-StartMenuFromBackup -StartMenuBinFile $startMenuBinFile -BackupFilePath $BackupFilePath
} }
$defaultStartMenuPath = GetUserDirectory -userName "Default" -fileName "AppData\Local\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState" -exitIfPathNotFound $false $defaultStartMenuPath = Get-UserDirectory -userName "Default" -fileName "AppData\Local\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState" -exitIfPathNotFound $false
if (Test-Path $defaultStartMenuPath) { if (Test-Path $defaultStartMenuPath) {
$defaultStartMenuBinFile = Join-Path $defaultStartMenuPath 'start2.bin' $defaultStartMenuBinFile = Join-Path $defaultStartMenuPath 'start2.bin'
@@ -415,7 +440,7 @@ function RestoreStartMenuForAllUsers {
$results += [PSCustomObject]@{ $results += [PSCustomObject]@{
UserName = 'Default' UserName = 'Default'
Result = $true Result = $true
Message = '[WhatIf] Removed start2.bin for the default user profile.' Message = Get-Translation -Key 'StartMenuWhatIfRemovedDefaultProfile'
} }
} }
else { else {
@@ -424,14 +449,14 @@ function RestoreStartMenuForAllUsers {
$results += [PSCustomObject]@{ $results += [PSCustomObject]@{
UserName = 'Default' UserName = 'Default'
Result = $true Result = $true
Message = 'Removed start2.bin for the default user profile.' Message = Get-Translation -Key 'StartMenuRemovedDefaultProfile'
} }
} }
catch { catch {
$results += [PSCustomObject]@{ $results += [PSCustomObject]@{
UserName = 'Default' UserName = 'Default'
Result = $false Result = $false
Message = "Failed to remove start2.bin for the default user profile. $($_.Exception.Message)" Message = Get-Translation -Key 'StartMenuRemoveFailedDefaultProfile' -FormatArgs @($_.Exception.Message)
} }
} }
} }
@@ -442,9 +467,9 @@ function RestoreStartMenuForAllUsers {
$results += [PSCustomObject]@{ $results += [PSCustomObject]@{
UserName = 'unknown' UserName = 'unknown'
Result = $false Result = $false
Message = 'No user start menu locations were found.' Message = Get-Translation -Key 'StartMenuNoUserLocationsFound'
} }
} }
return $results return $results
} }
@@ -0,0 +1,353 @@
<#
.SYNOPSIS
Runs a script block against the registry hive for a backup target.
.PARAMETER Target
A supported backup target: DefaultUserProfile or User:<user name>.
.PARAMETER ScriptBlock
The operation to run after the target user hive is available.
.PARAMETER ArgumentObject
Optional object passed to the script block.
#>
function Invoke-WithLoadedRestoreHive {
param(
[Parameter(Mandatory)]
[string]$Target,
[Parameter(Mandatory)]
[scriptblock]$ScriptBlock,
$ArgumentObject = $null
)
$targetUserName = if ($Target -eq 'DefaultUserProfile') {
'Default'
}
elseif ($Target -like 'User:*') {
$userName = $Target.Substring(5)
if ([string]::IsNullOrWhiteSpace($userName)) {
throw 'Invalid backup target format for user restore.'
}
$userName
}
else {
throw "Unsupported backup target '$Target'."
}
Invoke-WithTargetUserHive -TargetUserName $targetUserName -ScriptBlock $ScriptBlock -ArgumentObject $ArgumentObject
}
<#
.SYNOPSIS
Restores a registry key and its child keys from a backup snapshot.
.PARAMETER Snapshot
The saved registry-key state, including existence, values, and subkeys.
#>
function Restore-RegistryKeySnapshot {
param(
[Parameter(Mandatory)]
$Snapshot
)
$registryParts = Split-RegistryPath -path $Snapshot.Path
if (-not $registryParts) {
throw "Unsupported registry path in backup: $($Snapshot.Path)"
}
$rootKey = Get-RegistryRootKey -hiveName $registryParts.Hive
if (-not $rootKey) {
throw "Unsupported registry hive in backup: $($registryParts.Hive)"
}
$subKeyPath = $registryParts.SubKey
if ([string]::IsNullOrWhiteSpace($subKeyPath)) {
throw "Unsupported root-level registry path in backup: $($Snapshot.Path)"
}
Test-RegistryKeySnapshotCanBeRestored -Snapshot $Snapshot
Restore-RegistryKeySnapshotAtPath -Snapshot $Snapshot -RootKey $rootKey -SubKeyPath $subKeyPath
}
<#
.SYNOPSIS
Validates registry values and subkey paths in a snapshot before live registry state is changed.
.PARAMETER Snapshot
The registry key snapshot to validate before it is restored.
#>
function Test-RegistryKeySnapshotCanBeRestored {
param(
[Parameter(Mandatory)]
$Snapshot
)
if (-not [bool]$Snapshot.Exists) { return }
$childNames = New-Object 'System.Collections.Generic.HashSet[string]' ([System.StringComparer]::OrdinalIgnoreCase)
foreach ($valueSnapshot in @($Snapshot.Values)) {
if ([bool]$valueSnapshot.Exists) {
$valueKind = Convert-RegistryValueKindFromBackup -KindName $valueSnapshot.Kind
$null = Convert-RegistryValueDataFromBackup -Kind $valueKind -Data $valueSnapshot.Data
}
}
foreach ($subKeySnapshot in @($Snapshot.SubKeys)) {
$childName = Get-DirectRegistrySnapshotChildName -ParentPath $Snapshot.Path -ChildPath $subKeySnapshot.Path
if ([string]::IsNullOrWhiteSpace($childName) -or -not $childNames.Add($childName)) {
throw "Backup contains duplicate or unsupported registry child path: $($subKeySnapshot.Path)"
}
Test-RegistryKeySnapshotCanBeRestored -Snapshot $subKeySnapshot
}
}
<#
.SYNOPSIS
Returns a snapshot child's name only when it is directly below its parent.
.PARAMETER ParentPath
The registry path of the expected parent snapshot.
.PARAMETER ChildPath
The registry path of the child snapshot to validate.
#>
function Get-DirectRegistrySnapshotChildName {
param(
[Parameter(Mandatory)]
[string]$ParentPath,
[Parameter(Mandatory)]
[string]$ChildPath
)
$parentParts = Split-RegistryPath -path $ParentPath
$childParts = Split-RegistryPath -path $ChildPath
if (-not $parentParts -or -not $childParts -or
-not $parentParts.Hive.Equals($childParts.Hive, [System.StringComparison]::OrdinalIgnoreCase) -or
[string]::IsNullOrWhiteSpace($parentParts.SubKey) -or
[string]::IsNullOrWhiteSpace($childParts.SubKey)) {
throw "Unsupported registry child path in backup: $ChildPath"
}
$childName = Split-Path -Path $childParts.SubKey -Leaf
$expectedSubKey = "$($parentParts.SubKey)\$childName"
if ([string]::IsNullOrWhiteSpace($childName) -or
-not $childParts.SubKey.Equals($expectedSubKey, [System.StringComparison]::OrdinalIgnoreCase)) {
throw "Registry child path '$ChildPath' is not directly below parent '$ParentPath'."
}
return $childName
}
<#
.SYNOPSIS
Restores a snapshot to a specific path below an already resolved registry root.
.DESCRIPTION
Writes only values and descendants represented by the backup. Existing keys are
retained so their security descriptors and unrelated data are not destroyed.
#>
function Restore-RegistryKeySnapshotAtPath {
param(
[Parameter(Mandatory)]
$Snapshot,
[Parameter(Mandatory)]
$RootKey,
[Parameter(Mandatory)]
[string]$SubKeyPath
)
if (-not $Snapshot.Exists) {
Remove-RegistrySubKeyTreeIfExists -RootKey $RootKey -SubKeyPath $SubKeyPath
return
}
$key = $RootKey.CreateSubKey($SubKeyPath)
if ($null -eq $key) {
throw "Unable to create or open registry key '$($Snapshot.Path)'"
}
try {
foreach ($valueSnapshot in @($Snapshot.Values)) {
Restore-RegistryValueSnapshot -RegistryKey $key -Snapshot $valueSnapshot
}
}
finally {
$key.Close()
}
foreach ($subKeySnapshot in @($Snapshot.SubKeys)) {
$childName = Get-DirectRegistrySnapshotChildName -ParentPath $Snapshot.Path -ChildPath $subKeySnapshot.Path
Restore-RegistryKeySnapshotAtPath -Snapshot $subKeySnapshot -RootKey $RootKey -SubKeyPath "$SubKeyPath\$childName"
}
}
<#
.SYNOPSIS
Restores or removes a registry value from a backup snapshot.
.PARAMETER RegistryKey
The open registry key that contains the value.
.PARAMETER Snapshot
The saved registry-value state to apply.
#>
function Restore-RegistryValueSnapshot {
param(
[Parameter(Mandatory)]
$RegistryKey,
[Parameter(Mandatory)]
$Snapshot
)
$valueName = if ($null -ne $Snapshot.Name) { [string]$Snapshot.Name } else { '' }
if (-not [bool]$Snapshot.Exists) {
try {
$RegistryKey.DeleteValue($valueName, $false)
}
catch {
throw "Failed deleting registry value '$valueName' in '$($RegistryKey.Name)': $($_.Exception.Message)"
}
return
}
$valueKind = Convert-RegistryValueKindFromBackup -KindName $Snapshot.Kind
$normalizedData = Convert-RegistryValueDataFromBackup -Kind $valueKind -Data $Snapshot.Data
try {
$RegistryKey.SetValue($valueName, $normalizedData, $valueKind)
}
catch {
throw "Failed setting registry value '$valueName' in '$($RegistryKey.Name)': $($_.Exception.Message)"
}
}
<#
.SYNOPSIS
Converts a backed-up registry value-kind name to its .NET enum value.
.PARAMETER KindName
The registry value-kind name stored in the backup.
.OUTPUTS
Microsoft.Win32.RegistryValueKind
#>
function Convert-RegistryValueKindFromBackup {
param(
[string]$KindName
)
if ([string]::IsNullOrWhiteSpace($KindName)) {
return [Microsoft.Win32.RegistryValueKind]::String
}
try {
return [System.Enum]::Parse([Microsoft.Win32.RegistryValueKind], $KindName, $true)
}
catch {
throw "Unsupported registry value kind in backup: $KindName"
}
}
<#
.SYNOPSIS
Converts backed-up data to a value suitable for registry restoration.
.PARAMETER Kind
The registry value kind that determines how the data is converted.
.PARAMETER Data
The serialized value data from the backup.
#>
function Convert-RegistryValueDataFromBackup {
param(
[Microsoft.Win32.RegistryValueKind]$Kind,
$Data
)
switch ($Kind) {
([Microsoft.Win32.RegistryValueKind]::DWord) {
$unsigned = [uint32]$Data
return [BitConverter]::ToInt32([BitConverter]::GetBytes($unsigned), 0)
}
([Microsoft.Win32.RegistryValueKind]::QWord) {
$unsigned = [uint64]$Data
return [BitConverter]::ToInt64([BitConverter]::GetBytes($unsigned), 0)
}
([Microsoft.Win32.RegistryValueKind]::MultiString) { return ,([string[]]@($Data | ForEach-Object { [string]$_ })) }
([Microsoft.Win32.RegistryValueKind]::Binary) {
if ($null -eq $Data) {
return ,(New-Object byte[] 0)
}
$bytes = Convert-BackupDataToByteArray -Data $Data
if ($null -eq $bytes) {
throw 'Invalid binary registry data in backup. Expected byte values from 0 through 255.'
}
# Keep the byte array intact instead of writing each byte to the
# pipeline. RegistryKey.SetValue requires a byte[] for Binary.
return ,$bytes
}
default {
if ($null -ne $Data) {
return [string]$Data
}
return ''
}
}
}
<#
.SYNOPSIS
Converts serialized binary backup data to a byte array.
.PARAMETER Data
A byte array or collection of integer byte values from the backup.
.OUTPUTS
System.Byte[]
Returns $null when the input contains invalid byte data.
#>
function Convert-BackupDataToByteArray {
param(
$Data
)
if ($null -eq $Data) {
return $null
}
if ($Data -is [byte[]]) {
return ,$Data
}
$items = @($Data)
if ($items.Count -eq 0) {
return ,(New-Object byte[] 0)
}
foreach ($item in $items) {
if ($item -isnot [ValueType] -and $item -isnot [string]) {
return $null
}
$parsed = 0
if (-not [int]::TryParse([string]$item, [ref]$parsed)) {
return $null
}
if ($parsed -lt 0 -or $parsed -gt 255) {
return $null
}
}
$bytes = New-Object byte[] $items.Count
for ($i = 0; $i -lt $items.Count; $i++) {
$bytes[$i] = [byte][int]$items[$i]
}
return ,$bytes
}
@@ -1,24 +1,58 @@
function Load-RegistryBackupFromFile { <#
.SYNOPSIS
Loads a registry backup from a JSON file and normalizes its contents.
.DESCRIPTION
Loads a registry backup from disk and returns a normalized representation
of its contents suitable for use by the restore workflow. Throws if the
file is missing, unreadable, or not valid JSON.
.PARAMETER FilePath
The absolute path to the registry backup JSON file to load.
.OUTPUTS
PSCustomObject
A normalized registry backup object produced by ConvertTo-NormalizedRegistryBackup.
#>
function Import-RegistryBackup {
param( param(
[Parameter(Mandatory)] [Parameter(Mandatory)]
[string]$FilePath [string]$FilePath
) )
if (-not (Test-Path -LiteralPath $FilePath)) { if (-not (Test-Path -LiteralPath $FilePath)) {
throw "Backup file was not found: $FilePath" throw (Get-Translation -Key 'BackupFileNotFound' -FormatArgs @($FilePath))
} }
try { try {
$rawBackup = Get-Content -LiteralPath $FilePath -Raw -ErrorAction Stop | ConvertFrom-Json -ErrorAction Stop $rawBackup = Get-Content -LiteralPath $FilePath -Raw -ErrorAction Stop | ConvertFrom-Json -ErrorAction Stop
} }
catch { catch {
throw "Failed to read backup file '$FilePath'. The file is not valid JSON." throw (Get-Translation -Key 'BackupFileNotValidJson' -FormatArgs @($FilePath))
} }
return Normalize-RegistryBackup -Backup $rawBackup return ConvertTo-NormalizedRegistryBackup -Backup $rawBackup
} }
function Normalize-RegistryBackup { <#
.SYNOPSIS
Validates and normalizes a raw registry backup object.
.DESCRIPTION
Validates the structure and content of the supplied backup and converts
it into a normalized representation that can be safely consumed by the
restore workflow. Throws if validation fails.
.PARAMETER Backup
The raw backup object (typically parsed from JSON) to normalize.
.OUTPUTS
PSCustomObject
A normalized backup with Version, BackupType, CreatedAt, CreatedBy,
ComputerName, Target, SelectedFeatures, SelectedUndoFeatures, and
RegistryKeys properties.
#>
function ConvertTo-NormalizedRegistryBackup {
param( param(
[Parameter(Mandatory)] [Parameter(Mandatory)]
$Backup $Backup
@@ -27,22 +61,22 @@ function Normalize-RegistryBackup {
$errors = New-Object System.Collections.Generic.List[string] $errors = New-Object System.Collections.Generic.List[string]
if (-not $Backup.PSObject.Properties['Version']) { if (-not $Backup.PSObject.Properties['Version']) {
$errors.Add('Missing property: Version') $errors.Add((Get-Translation -Key 'BackupMissingProperty' -FormatArgs @('Version')))
} }
elseif ([string]$Backup.Version -ne '1.0') { elseif ([string]$Backup.Version -ne '1.0') {
$errors.Add("Unsupported backup version '$($Backup.Version)'.") $errors.Add((Get-Translation -Key 'BackupUnsupportedVersion' -FormatArgs @($Backup.Version)))
} }
if (-not $Backup.PSObject.Properties['BackupType']) { if (-not $Backup.PSObject.Properties['BackupType']) {
$errors.Add('Missing property: BackupType') $errors.Add((Get-Translation -Key 'BackupMissingProperty' -FormatArgs @('BackupType')))
} }
elseif ([string]$Backup.BackupType -ne 'RegistryState') { elseif ([string]$Backup.BackupType -ne 'RegistryState') {
$errors.Add("Unsupported BackupType '$($Backup.BackupType)'.") $errors.Add((Get-Translation -Key 'BackupUnsupportedType' -FormatArgs @($Backup.BackupType)))
} }
$normalizedTarget = '' $normalizedTarget = ''
if (-not $Backup.PSObject.Properties['Target'] -or [string]::IsNullOrWhiteSpace([string]$Backup.Target)) { if (-not $Backup.PSObject.Properties['Target'] -or [string]::IsNullOrWhiteSpace([string]$Backup.Target)) {
$errors.Add('Missing property: Target') $errors.Add((Get-Translation -Key 'BackupMissingProperty' -FormatArgs @('Target')))
} }
else { else {
$normalizedTarget = [string]$Backup.Target $normalizedTarget = [string]$Backup.Target
@@ -54,23 +88,27 @@ function Normalize-RegistryBackup {
$targetUserName = $normalizedTarget.Substring(5) $targetUserName = $normalizedTarget.Substring(5)
$targetValidation = Test-TargetUserName -UserName $targetUserName $targetValidation = Test-TargetUserName -UserName $targetUserName
if (-not $targetValidation.IsValid) { if (-not $targetValidation.IsValid) {
$errors.Add("Invalid user '$normalizedTarget'") $errors.Add((Get-Translation -Key 'BackupInvalidUser' -FormatArgs @($normalizedTarget)))
} }
} }
elseif ($normalizedTarget -like 'CurrentUser:*') { elseif ($normalizedTarget -like 'CurrentUser:*') {
$targetCurrentUserName = $normalizedTarget.Substring(12) $targetCurrentUserName = $normalizedTarget.Substring(12)
if ([string]::IsNullOrWhiteSpace($targetCurrentUserName) -or ($targetCurrentUserName -ne $env:USERNAME)) { if (Test-RunningAsSystem) {
$errors.Add("Backup was made for '$targetCurrentUserName', this does not match current user '$env:USERNAME'.") $errors.Add((Get-Translation -Key 'BackupUserScopedWrongContext' -FormatArgs @($targetCurrentUserName)))
}
elseif ([string]::IsNullOrWhiteSpace($targetCurrentUserName) -or
-not (Test-UserNameMatch -UserNameA $targetCurrentUserName -UserNameB $env:USERNAME)) {
$errors.Add((Get-Translation -Key 'BackupUserMismatch' -FormatArgs @($targetCurrentUserName, $env:USERNAME)))
} }
} }
else { else {
$errors.Add("Unsupported Target '$normalizedTarget'.") $errors.Add((Get-Translation -Key 'BackupUnsupportedTarget' -FormatArgs @($normalizedTarget)))
} }
} }
$registryKeys = @() $registryKeys = @()
if (-not $Backup.PSObject.Properties['RegistryKeys']) { if (-not $Backup.PSObject.Properties['RegistryKeys']) {
$errors.Add('Missing property: RegistryKeys') $errors.Add((Get-Translation -Key 'BackupMissingProperty' -FormatArgs @('RegistryKeys')))
} }
else { else {
$registryKeys = @($Backup.RegistryKeys) $registryKeys = @($Backup.RegistryKeys)
@@ -95,20 +133,27 @@ function Normalize-RegistryBackup {
$allSelectedFeatures = @($selectedFeatures) + @($selectedUndoFeatures) $allSelectedFeatures = @($selectedFeatures) + @($selectedUndoFeatures)
if ($allSelectedFeatures.Count -eq 0) { if ($allSelectedFeatures.Count -eq 0) {
$errors.Add('Backup must contain at least one feature ID in SelectedFeatures or SelectedUndoFeatures.') $errors.Add((Get-Translation -Key 'BackupMissingSelectedFeatures'))
} }
$allowListValidationErrors = @(Test-RegistryBackupMatchesSelectedFeatures -SelectedFeatureIds @($selectedFeatures) -SelectedUndoFeatureIds @($selectedUndoFeatures) -Target $normalizedTarget -RegistryKeys @($normalizedKeys)) else {
foreach ($allowListValidationError in $allowListValidationErrors) { try {
$errors.Add([string]$allowListValidationError) $allowListValidationErrors = @(Test-RegistryBackupMatchesSelectedFeatures -SelectedFeatureIds @($selectedFeatures) -SelectedUndoFeatureIds @($selectedUndoFeatures) -Target $normalizedTarget -RegistryKeys @($normalizedKeys))
foreach ($allowListValidationError in $allowListValidationErrors) {
$errors.Add([string]$allowListValidationError)
}
}
catch {
$errors.Add((Get-Translation -Key 'BackupAllowlistValidationFailed' -FormatArgs @($_.Exception.Message)))
}
} }
if ($errors.Count -gt 0) { if ($errors.Count -gt 0) {
Write-Error "Backup validation failed: $($errors -join ' ')" Write-Error "Backup validation failed: $($errors -join ' ')"
if ($errors.Count -eq 1) { if ($errors.Count -eq 1) {
throw ("Validation failed: $($errors[0])") throw (Get-Translation -Key 'BackupValidationSingleError' -FormatArgs @($errors[0]))
} }
else { else {
throw ("Validation failed with $($errors.Count) errors. See console output for details.") throw (Get-Translation -Key 'BackupValidationMultipleErrors' -FormatArgs @($errors.Count))
} }
} }
@@ -125,13 +170,30 @@ function Normalize-RegistryBackup {
} }
} }
<#
.SYNOPSIS
Restores registry state from a normalized backup object.
.DESCRIPTION
Applies the registry state described by the supplied backup back to the
registry, loading the appropriate user hive when required.
.PARAMETER Backup
A normalized backup object (as produced by ConvertTo-NormalizedRegistryBackup) whose
RegistryKeys snapshots should be restored.
.OUTPUTS
PSCustomObject
Returns an object with a Result property set to $true when the restore
completes successfully.
#>
function Restore-RegistryBackupState { function Restore-RegistryBackupState {
param( param(
[Parameter(Mandatory)] [Parameter(Mandatory)]
$Backup $Backup
) )
$friendlyTarget = GetFriendlyRegistryBackupTarget -Target ([string]$Backup.Target) $friendlyTarget = Get-FriendlyRegistryBackupTarget -Target ([string]$Backup.Target)
if ($script:Params.ContainsKey("WhatIf")) { if ($script:Params.ContainsKey("WhatIf")) {
Write-Host "[WhatIf] Restore registry backup for $friendlyTarget" -ForegroundColor Cyan Write-Host "[WhatIf] Restore registry backup for $friendlyTarget" -ForegroundColor Cyan
@@ -1,224 +0,0 @@
function Invoke-WithLoadedRestoreHive {
param(
[Parameter(Mandatory)]
[string]$Target,
[Parameter(Mandatory)]
[scriptblock]$ScriptBlock,
$ArgumentObject = $null
)
$targetUserName = if ($Target -eq 'DefaultUserProfile') {
'Default'
}
elseif ($Target -like 'User:*') {
$userName = $Target.Substring(5)
if ([string]::IsNullOrWhiteSpace($userName)) {
throw 'Invalid backup target format for user restore.'
}
$userName
}
else {
throw "Unsupported backup target '$Target'."
}
Invoke-WithTargetUserHive -TargetUserName $targetUserName -ScriptBlock $ScriptBlock -ArgumentObject $ArgumentObject
}
function Restore-RegistryKeySnapshot {
param(
[Parameter(Mandatory)]
$Snapshot
)
$registryParts = Split-RegistryPath -path $Snapshot.Path
if (-not $registryParts) {
throw "Unsupported registry path in backup: $($Snapshot.Path)"
}
$rootKey = Get-RegistryRootKey -hiveName $registryParts.Hive
if (-not $rootKey) {
throw "Unsupported registry hive in backup: $($registryParts.Hive)"
}
$subKeyPath = $registryParts.SubKey
if ([string]::IsNullOrWhiteSpace($subKeyPath)) {
throw "Unsupported root-level registry path in backup: $($Snapshot.Path)"
}
if (-not $Snapshot.Exists) {
Remove-RegistrySubKeyTreeIfExists -RootKey $rootKey -SubKeyPath $subKeyPath
return
}
$forceFullTree = @($Snapshot.SubKeys).Count -gt 0
if ($forceFullTree) {
Remove-RegistrySubKeyTreeIfExists -RootKey $rootKey -SubKeyPath $subKeyPath
}
$key = $rootKey.CreateSubKey($subKeyPath)
if ($null -eq $key) {
throw "Unable to create or open registry key '$($Snapshot.Path)'"
}
try {
foreach ($valueSnapshot in @($Snapshot.Values)) {
Restore-RegistryValueSnapshot -RegistryKey $key -Snapshot $valueSnapshot
}
}
finally {
$key.Close()
}
foreach ($subKeySnapshot in @($Snapshot.SubKeys)) {
Restore-RegistryKeySnapshot -Snapshot $subKeySnapshot
}
}
function Restore-RegistryValueSnapshot {
param(
[Parameter(Mandatory)]
[Microsoft.Win32.RegistryKey]$RegistryKey,
[Parameter(Mandatory)]
$Snapshot
)
$valueName = if ($null -ne $Snapshot.Name) { [string]$Snapshot.Name } else { '' }
if (-not [bool]$Snapshot.Exists) {
try {
$RegistryKey.DeleteValue($valueName, $false)
}
catch {
throw "Failed deleting registry value '$valueName' in '$($RegistryKey.Name)': $($_.Exception.Message)"
}
return
}
$valueKind = Convert-RegistryValueKindFromBackup -KindName $Snapshot.Kind
$normalizedData = Convert-RegistryValueDataFromBackup -Kind $valueKind -Data $Snapshot.Data
try {
$RegistryKey.SetValue($valueName, $normalizedData, $valueKind)
}
catch {
$retryBytes = Convert-BackupDataToByteArray -Data $Snapshot.Data
if ($null -ne $retryBytes) {
try {
$RegistryKey.SetValue($valueName, $retryBytes, [Microsoft.Win32.RegistryValueKind]::Binary)
return
}
catch {
# Fall through to original error message for context.
}
}
throw "Failed setting registry value '$valueName' in '$($RegistryKey.Name)': $($_.Exception.Message)"
}
}
function Convert-RegistryValueKindFromBackup {
param(
[string]$KindName
)
if ([string]::IsNullOrWhiteSpace($KindName)) {
return [Microsoft.Win32.RegistryValueKind]::String
}
try {
return [System.Enum]::Parse([Microsoft.Win32.RegistryValueKind], $KindName, $true)
}
catch {
throw "Unsupported registry value kind in backup: $KindName"
}
}
function Convert-RegistryValueDataFromBackup {
param(
[Microsoft.Win32.RegistryValueKind]$Kind,
$Data
)
switch ($Kind) {
([Microsoft.Win32.RegistryValueKind]::DWord) {
$unsigned = [uint32]$Data
return [BitConverter]::ToInt32([BitConverter]::GetBytes($unsigned), 0)
}
([Microsoft.Win32.RegistryValueKind]::QWord) {
$unsigned = [uint64]$Data
return [BitConverter]::ToInt64([BitConverter]::GetBytes($unsigned), 0)
}
([Microsoft.Win32.RegistryValueKind]::MultiString) { return @($Data | ForEach-Object { [string]$_ }) }
([Microsoft.Win32.RegistryValueKind]::Binary) {
$bytes = Convert-BackupDataToByteArray -Data $Data
if ($null -eq $bytes) {
return (New-Object byte[] 0)
}
return $bytes
}
([Microsoft.Win32.RegistryValueKind]::None) { return $null }
default {
if ($null -ne $Data) {
return [string]$Data
}
return ''
}
}
}
function Convert-BackupDataToByteArray {
param(
$Data
)
if ($null -eq $Data) {
return $null
}
if ($Data -is [byte[]]) {
return ,$Data
}
$items = @($Data)
if ($items.Count -eq 0) {
return ,(New-Object byte[] 0)
}
foreach ($item in $items) {
if ($item -isnot [ValueType] -and $item -isnot [string]) {
return $null
}
$parsed = 0
if (-not [int]::TryParse([string]$item, [ref]$parsed)) {
return $null
}
if ($parsed -lt 0 -or $parsed -gt 255) {
return $null
}
}
$bytes = New-Object byte[] $items.Count
for ($i = 0; $i -lt $items.Count; $i++) {
$bytes[$i] = [byte][int]$items[$i]
}
return ,$bytes
}
function Remove-RegistrySubKeyTreeIfExists {
param(
[Parameter(Mandatory)]
[Microsoft.Win32.RegistryKey]$RootKey,
[Parameter(Mandatory)]
[string]$SubKeyPath
)
$existing = $RootKey.OpenSubKey($SubKeyPath, $false)
if ($existing) {
$existing.Close()
$RootKey.DeleteSubKeyTree($SubKeyPath, $false)
}
}
@@ -10,22 +10,41 @@
.EXAMPLE .EXAMPLE
DisableStoreSearchSuggestionsForAllUsers DisableStoreSearchSuggestionsForAllUsers
.OUTPUTS
System.Boolean. $true when a profile is processed and all ACL changes succeed; otherwise $false.
#> #>
function DisableStoreSearchSuggestionsForAllUsers { function Set-StoreSearchSuggestionsDisabledForAllUsers {
$success = $true
$processedProfiles = 0
# Get path to Store app database for all users # Get path to Store app database for all users
$userPathString = GetUserDirectory -userName "*" -fileName "AppData\Local\Packages" $userPathString = Get-UserDirectory -userName "*" -fileName "AppData\Local\Packages"
$usersStoreDbPaths = Get-ChildItem -Path $userPathString -ErrorAction SilentlyContinue $usersStoreDbPaths = Get-ChildItem -Path $userPathString -ErrorAction SilentlyContinue
# Go through all users and disable start search suggestions # Go through all users and disable start search suggestions
foreach ($storeDbPath in $usersStoreDbPaths) { foreach ($storeDbPath in $usersStoreDbPaths) {
DisableStoreSearchSuggestions -StoreAppsDatabase ($storeDbPath.FullName + "\Microsoft.WindowsStore_8wekyb3d8bbwe\LocalState\store.db") $processedProfiles++
if (-not (Set-StoreSearchSuggestionsDisabled -StoreAppsDatabase ($storeDbPath.FullName + "\Microsoft.WindowsStore_8wekyb3d8bbwe\LocalState\store.db"))) {
$success = $false
}
} }
# Also disable start search suggestions for the default user profile # Also disable start search suggestions for the default user profile
$defaultStoreDbPath = GetStoreAppsDatabasePathForUser -UserName "Default" $defaultStoreDbPath = Get-StoreAppsDatabasePathForUser -UserName "Default"
if ($defaultStoreDbPath) { if ($defaultStoreDbPath) {
DisableStoreSearchSuggestions -StoreAppsDatabase $defaultStoreDbPath $processedProfiles++
if (-not (Set-StoreSearchSuggestionsDisabled -StoreAppsDatabase $defaultStoreDbPath)) {
$success = $false
}
} }
if ($processedProfiles -eq 0) {
Write-Warning 'Unable to disable Microsoft Store search suggestions because no target user profiles could be resolved.'
return $false
}
return $success
} }
@@ -44,8 +63,11 @@ function DisableStoreSearchSuggestionsForAllUsers {
.EXAMPLE .EXAMPLE
DisableStoreSearchSuggestions -StoreAppsDatabase "$env:LOCALAPPDATA\Packages\Microsoft.WindowsStore_8wekyb3d8bbwe\LocalState\store.db" DisableStoreSearchSuggestions -StoreAppsDatabase "$env:LOCALAPPDATA\Packages\Microsoft.WindowsStore_8wekyb3d8bbwe\LocalState\store.db"
.OUTPUTS
System.Boolean. $true when the database ACL is restricted or previewed; otherwise $false.
#> #>
function DisableStoreSearchSuggestions { function Set-StoreSearchSuggestionsDisabled {
param ( param (
[Parameter(Mandatory)] [Parameter(Mandatory)]
[string]$StoreAppsDatabase [string]$StoreAppsDatabase
@@ -56,30 +78,35 @@ function DisableStoreSearchSuggestions {
if ($script:Params.ContainsKey("WhatIf")) { if ($script:Params.ContainsKey("WhatIf")) {
Write-Host "[WhatIf] Disable Microsoft Store search suggestions for user $userName by restricting access to ${StoreAppsDatabase}" -ForegroundColor Cyan Write-Host "[WhatIf] Disable Microsoft Store search suggestions for user $userName by restricting access to ${StoreAppsDatabase}" -ForegroundColor Cyan
return return $true
} }
# This file doesn't exist in EEA (No Store app suggestions). try {
if (-not (Test-Path -Path $StoreAppsDatabase)) # This file doesn't exist in EEA (No Store app suggestions).
{ if (-not (Test-Path -Path $StoreAppsDatabase)) {
Write-Host "Unable to find Store app database for user $userName, creating it now to prevent Windows from creating it later..." -ForegroundColor Yellow Write-Host "Unable to find Store app database for user $userName, creating it now to prevent Windows from creating it later..." -ForegroundColor Yellow
$storeDbDir = Split-Path -Path $StoreAppsDatabase -Parent $storeDbDir = Split-Path -Path $StoreAppsDatabase -Parent
if (-not (Test-Path -Path $storeDbDir)) {
New-Item -Path $storeDbDir -ItemType Directory -Force -ErrorAction Stop | Out-Null
}
if (-not (Test-Path -Path $storeDbDir)) { New-Item -Path $StoreAppsDatabase -ItemType File -Force -ErrorAction Stop | Out-Null
New-Item -Path $storeDbDir -ItemType Directory -Force | Out-Null
} }
New-Item -Path $StoreAppsDatabase -ItemType File -Force | Out-Null $AccountSid = [System.Security.Principal.SecurityIdentifier]::new('S-1-1-0') # 'EVERYONE' group
$Acl = Get-Acl -Path $StoreAppsDatabase -ErrorAction Stop
$Ace = [System.Security.AccessControl.FileSystemAccessRule]::new($AccountSid, 'FullControl', 'Deny')
$Acl.SetAccessRule($Ace) | Out-Null
Set-Acl -Path $StoreAppsDatabase -AclObject $Acl -ErrorAction Stop | Out-Null
}
catch {
Write-Warning "Failed to restrict ACL for store database '$StoreAppsDatabase': $($_.Exception.Message)"
return $false
} }
$AccountSid = [System.Security.Principal.SecurityIdentifier]::new('S-1-1-0') # 'EVERYONE' group
$Acl = Get-Acl -Path $StoreAppsDatabase
$Ace = [System.Security.AccessControl.FileSystemAccessRule]::new($AccountSid, 'FullControl', 'Deny')
$Acl.SetAccessRule($Ace) | Out-Null
Set-Acl -Path $StoreAppsDatabase -AclObject $Acl | Out-Null
Write-Host "Disabled Microsoft Store search suggestions for user $userName" Write-Host "Disabled Microsoft Store search suggestions for user $userName"
return $true
} }
<# <#
@@ -94,22 +121,41 @@ function DisableStoreSearchSuggestions {
.EXAMPLE .EXAMPLE
EnableStoreSearchSuggestionsForAllUsers EnableStoreSearchSuggestionsForAllUsers
.OUTPUTS
System.Boolean. $true when a profile is processed and all ACL changes succeed; otherwise $false.
#> #>
function EnableStoreSearchSuggestionsForAllUsers { function Set-StoreSearchSuggestionsEnabledForAllUsers {
$success = $true
$processedProfiles = 0
# Get path to Store app database for all users # Get path to Store app database for all users
$userPathString = GetUserDirectory -userName "*" -fileName "AppData\Local\Packages" $userPathString = Get-UserDirectory -userName "*" -fileName "AppData\Local\Packages"
$usersStoreDbPaths = Get-ChildItem -Path $userPathString -ErrorAction SilentlyContinue $usersStoreDbPaths = Get-ChildItem -Path $userPathString -ErrorAction SilentlyContinue
# Go through all users and re-enable start search suggestions # Go through all users and re-enable start search suggestions
foreach ($storeDbPath in $usersStoreDbPaths) { foreach ($storeDbPath in $usersStoreDbPaths) {
EnableStoreSearchSuggestions -StoreAppsDatabase ($storeDbPath.FullName + "\Microsoft.WindowsStore_8wekyb3d8bbwe\LocalState\store.db") $processedProfiles++
if (-not (Set-StoreSearchSuggestionsEnabled -StoreAppsDatabase ($storeDbPath.FullName + "\Microsoft.WindowsStore_8wekyb3d8bbwe\LocalState\store.db"))) {
$success = $false
}
} }
# Also re-enable for the default user profile # Also re-enable for the default user profile
$defaultStoreDbPath = GetStoreAppsDatabasePathForUser -UserName "Default" $defaultStoreDbPath = Get-StoreAppsDatabasePathForUser -UserName "Default"
if ($defaultStoreDbPath) { if ($defaultStoreDbPath) {
EnableStoreSearchSuggestions -StoreAppsDatabase $defaultStoreDbPath $processedProfiles++
if (-not (Set-StoreSearchSuggestionsEnabled -StoreAppsDatabase $defaultStoreDbPath)) {
$success = $false
}
} }
if ($processedProfiles -eq 0) {
Write-Warning 'Unable to re-enable Microsoft Store search suggestions because no target user profiles could be resolved.'
return $false
}
return $success
} }
<# <#
@@ -127,8 +173,11 @@ function EnableStoreSearchSuggestionsForAllUsers {
.EXAMPLE .EXAMPLE
EnableStoreSearchSuggestions -StoreAppsDatabase "$env:LOCALAPPDATA\Packages\Microsoft.WindowsStore_8wekyb3d8bbwe\LocalState\store.db" EnableStoreSearchSuggestions -StoreAppsDatabase "$env:LOCALAPPDATA\Packages\Microsoft.WindowsStore_8wekyb3d8bbwe\LocalState\store.db"
.OUTPUTS
System.Boolean. $true when the deny ACL is removed, the database is absent, or the change is previewed; otherwise $false.
#> #>
function EnableStoreSearchSuggestions { function Set-StoreSearchSuggestionsEnabled {
param ( param (
[Parameter(Mandatory)] [Parameter(Mandatory)]
[string]$StoreAppsDatabase [string]$StoreAppsDatabase
@@ -139,28 +188,41 @@ function EnableStoreSearchSuggestions {
if ($script:Params.ContainsKey("WhatIf")) { if ($script:Params.ContainsKey("WhatIf")) {
Write-Host "[WhatIf] Re-enable Microsoft Store search suggestions for user $userName by restoring access to ${StoreAppsDatabase}" -ForegroundColor Cyan Write-Host "[WhatIf] Re-enable Microsoft Store search suggestions for user $userName by restoring access to ${StoreAppsDatabase}" -ForegroundColor Cyan
return return $true
} }
if (-not (Test-Path -Path $StoreAppsDatabase)) { if (-not (Test-Path -Path $StoreAppsDatabase)) {
Write-Host "Store app database not found for user $userName, nothing to undo" Write-Host "Store app database not found for user $userName, nothing to undo"
return return $true
} }
# Ensure we can modify/delete the file even if restrictive ACLs were set. # Ensure we can modify/delete the file even if restrictive ACLs were set.
$global:LASTEXITCODE = 0 $global:LASTEXITCODE = 0
takeown /F "$StoreAppsDatabase" /A | Out-Null takeown /F "$StoreAppsDatabase" /A | Out-Null
if ($LASTEXITCODE -ne 0) {
Write-Warning "Failed to take ownership of store database '$StoreAppsDatabase' while undoing Microsoft Store search suggestions. Exit code: $LASTEXITCODE"
return $false
}
icacls "$StoreAppsDatabase" /grant *S-1-5-32-544:F /C | Out-Null icacls "$StoreAppsDatabase" /grant *S-1-5-32-544:F /C | Out-Null
if ($LASTEXITCODE -ne 0) {
Write-Warning "Failed to grant Administrators access to store database '$StoreAppsDatabase' while undoing Microsoft Store search suggestions. Exit code: $LASTEXITCODE"
return $false
}
$everyoneSid = [System.Security.Principal.SecurityIdentifier]::new('S-1-1-0') # 'EVERYONE' group $everyoneSid = [System.Security.Principal.SecurityIdentifier]::new('S-1-1-0') # 'EVERYONE' group
try { try {
$acl = Get-Acl -Path $StoreAppsDatabase $acl = Get-Acl -Path $StoreAppsDatabase -ErrorAction Stop
$denyRules = @( $denyRules = @(
$acl.Access | Where-Object { $acl.Access | Where-Object {
$_.AccessControlType -eq [System.Security.AccessControl.AccessControlType]::Deny -and if ($_.AccessControlType -ne [System.Security.AccessControl.AccessControlType]::Deny) { return $false }
(($_.FileSystemRights -band [System.Security.AccessControl.FileSystemRights]::FullControl) -ne 0) -and if (($_.FileSystemRights -band [System.Security.AccessControl.FileSystemRights]::FullControl) -eq 0) { return $false }
(try { $_.IdentityReference.Translate([System.Security.Principal.SecurityIdentifier]) -eq $everyoneSid } catch { $false }) try {
return ($_.IdentityReference.Translate([System.Security.Principal.SecurityIdentifier]) -eq $everyoneSid)
}
catch {
return $false
}
} }
) )
@@ -168,7 +230,7 @@ function EnableStoreSearchSuggestions {
$null = $acl.RemoveAccessRuleSpecific($denyRule) $null = $acl.RemoveAccessRuleSpecific($denyRule)
} }
Set-Acl -Path $StoreAppsDatabase -AclObject $acl | Out-Null Set-Acl -Path $StoreAppsDatabase -AclObject $acl -ErrorAction Stop | Out-Null
} }
catch { catch {
Write-Warning "Failed to normalize ACL for store database '$StoreAppsDatabase': $($_.Exception.Message)" Write-Warning "Failed to normalize ACL for store database '$StoreAppsDatabase': $($_.Exception.Message)"
@@ -177,9 +239,11 @@ function EnableStoreSearchSuggestions {
try { try {
Remove-Item -Path $StoreAppsDatabase -Force -ErrorAction Stop Remove-Item -Path $StoreAppsDatabase -Force -ErrorAction Stop
Write-Host "Re-enabled Microsoft Store search suggestions for user $userName" Write-Host "Re-enabled Microsoft Store search suggestions for user $userName"
return $true
} }
catch { catch {
throw "Failed to remove '$StoreAppsDatabase' while undoing Microsoft Store search suggestions for user $userName. $($_.Exception.Message)" Write-Warning "Failed to remove '$StoreAppsDatabase' while undoing Microsoft Store search suggestions for user $userName. $($_.Exception.Message)"
return $false
} }
} }
@@ -196,12 +260,12 @@ function EnableStoreSearchSuggestions {
The target username. Pass an empty string or omit to resolve for the current user. The target username. Pass an empty string or omit to resolve for the current user.
.EXAMPLE .EXAMPLE
GetStoreAppsDatabasePathForUser -UserName "Jeff" Get-StoreAppsDatabasePathForUser -UserName "Jeff"
.EXAMPLE .EXAMPLE
GetStoreAppsDatabasePathForUser -UserName "Default" Get-StoreAppsDatabasePathForUser -UserName "Default"
#> #>
function GetStoreAppsDatabasePathForUser { function Get-StoreAppsDatabasePathForUser {
param( param(
[string]$UserName [string]$UserName
) )
@@ -210,7 +274,7 @@ function GetStoreAppsDatabasePathForUser {
return "$env:LOCALAPPDATA\Packages\Microsoft.WindowsStore_8wekyb3d8bbwe\LocalState\store.db" return "$env:LOCALAPPDATA\Packages\Microsoft.WindowsStore_8wekyb3d8bbwe\LocalState\store.db"
} }
return (GetUserDirectory -userName $UserName -fileName "AppData\Local\Packages\Microsoft.WindowsStore_8wekyb3d8bbwe\LocalState\store.db" -exitIfPathNotFound $false) return (Get-UserDirectory -userName $UserName -fileName "AppData\Local\Packages\Microsoft.WindowsStore_8wekyb3d8bbwe\LocalState\store.db" -exitIfPathNotFound $false)
} }
<# <#
@@ -282,13 +346,13 @@ function Test-StoreSearchSuggestionsDisabled {
function Test-StoreSearchSuggestionsDisabledForAllUsers { function Test-StoreSearchSuggestionsDisabledForAllUsers {
$paths = @() $paths = @()
$userPathString = GetUserDirectory -userName "*" -fileName "AppData\Local\Packages" $userPathString = Get-UserDirectory -userName "*" -fileName "AppData\Local\Packages"
$usersStoreDbPaths = Get-ChildItem -Path $userPathString -ErrorAction SilentlyContinue $usersStoreDbPaths = Get-ChildItem -Path $userPathString -ErrorAction SilentlyContinue
foreach ($storeDbPath in $usersStoreDbPaths) { foreach ($storeDbPath in $usersStoreDbPaths) {
$paths += ($storeDbPath.FullName + "\Microsoft.WindowsStore_8wekyb3d8bbwe\LocalState\store.db") $paths += ($storeDbPath.FullName + "\Microsoft.WindowsStore_8wekyb3d8bbwe\LocalState\store.db")
} }
$defaultStoreDbPath = GetStoreAppsDatabasePathForUser -UserName "Default" $defaultStoreDbPath = Get-StoreAppsDatabasePathForUser -UserName "Default"
if ($defaultStoreDbPath) { if ($defaultStoreDbPath) {
$paths += $defaultStoreDbPath $paths += $defaultStoreDbPath
} }
@@ -304,4 +368,4 @@ function Test-StoreSearchSuggestionsDisabledForAllUsers {
} }
return $true return $true
} }
@@ -34,45 +34,67 @@ function Get-TelemetryScheduledTasks {
.EXAMPLE .EXAMPLE
Disable-TelemetryScheduledTasks Disable-TelemetryScheduledTasks
.OUTPUTS
System.Boolean. $true when every task is disabled, absent, already disabled, or previewed; otherwise $false.
#> #>
function Disable-TelemetryScheduledTasks { function Disable-TelemetryScheduledTasks {
Write-Host "> Disabling telemetry scheduled tasks..." Write-Host "> Disabling telemetry scheduled tasks..."
$tasks = Get-TelemetryScheduledTasks $tasks = Get-TelemetryScheduledTasks
$success = $true
foreach ($task in $tasks) { foreach ($task in $tasks) {
if ($script:CancelRequested) { return $false }
if ($script:Params.ContainsKey("WhatIf")) { if ($script:Params.ContainsKey("WhatIf")) {
Write-Host "[WhatIf] Disable Scheduled Task: $($task.Path)$($task.Name)" -ForegroundColor Cyan Write-Host "[WhatIf] Disable Scheduled Task: $($task.Path)$($task.Name)" -ForegroundColor Cyan
continue continue
} }
$result = Invoke-NonBlocking -ScriptBlock { try {
param($path, $name) $result = Invoke-NonBlocking -ScriptBlock {
Import-Module ScheduledTasks -ErrorAction SilentlyContinue param($path, $name)
$taskObj = Get-ScheduledTask -TaskPath $path -TaskName $name -ErrorAction SilentlyContinue
if (-not $taskObj) {
return @{ Success = $true; Status = 'NotFound' }
}
if ($taskObj.State -ne 'Disabled') {
try { try {
Disable-ScheduledTask -TaskPath $path -TaskName $name -ErrorAction Stop | Out-Null Import-Module ScheduledTasks -ErrorAction Stop
return @{ Success = $true; Status = 'Disabled' } $taskObj = Get-ScheduledTask -TaskPath $path -TaskName $name -ErrorAction Stop
} }
catch { catch {
if ($_.Exception -isnot [System.Management.Automation.CommandNotFoundException] -and $_.CategoryInfo.Category -eq [System.Management.Automation.ErrorCategory]::ObjectNotFound) {
return @{ Success = $true; Status = 'NotFound' }
}
return @{ Success = $false; Status = 'Error'; Error = $_.Exception.Message } return @{ Success = $false; Status = 'Error'; Error = $_.Exception.Message }
} }
} if (-not $taskObj) {
return @{ Success = $true; Status = 'AlreadyDisabled' } return @{ Success = $true; Status = 'NotFound' }
} -ArgumentList @($task.Path, $task.Name) }
if ($taskObj.State -ne 'Disabled') {
try {
Disable-ScheduledTask -TaskPath $path -TaskName $name -ErrorAction Stop | Out-Null
return @{ Success = $true; Status = 'Disabled' }
}
catch {
return @{ Success = $false; Status = 'Error'; Error = $_.Exception.Message }
}
}
return @{ Success = $true; Status = 'AlreadyDisabled' }
} -ArgumentList @($task.Path, $task.Name)
}
catch {
Write-Warning "Failed to disable Scheduled Task: $($task.Path)$($task.Name) - $($_.Exception.Message)"
$success = $false
continue
}
switch ($result.Status) { switch ($result.Status) {
'Disabled' { Write-Host "Disabled Scheduled Task: $($task.Path)$($task.Name)" } 'Disabled' { Write-Host "Disabled Scheduled Task: $($task.Path)$($task.Name)" }
'AlreadyDisabled' { Write-Host "Scheduled Task $($task.Path)$($task.Name) is already disabled" -ForegroundColor DarkGray } 'AlreadyDisabled' { Write-Host "Scheduled Task $($task.Path)$($task.Name) is already disabled" -ForegroundColor DarkGray }
'NotFound' { Write-Host "Scheduled Task $($task.Path)$($task.Name) not found" -ForegroundColor DarkGray } 'NotFound' { Write-Host "Scheduled Task $($task.Path)$($task.Name) not found" -ForegroundColor DarkGray }
'Error' { Write-Host "Failed to disable Scheduled Task: $($task.Path)$($task.Name) - $($result.Error)" -ForegroundColor Yellow } 'Error' { Write-Host "Failed to disable Scheduled Task: $($task.Path)$($task.Name) - $($result.Error)" -ForegroundColor Yellow; $success = $false }
default { Write-Warning "Unable to determine the result of disabling Scheduled Task: $($task.Path)$($task.Name)."; $success = $false }
} }
} }
Write-Host "" return $success
} }
<# <#
@@ -86,43 +108,65 @@ function Disable-TelemetryScheduledTasks {
.EXAMPLE .EXAMPLE
Enable-TelemetryScheduledTasks Enable-TelemetryScheduledTasks
.OUTPUTS
System.Boolean. $true when every task is enabled, absent, already enabled, or previewed; otherwise $false.
#> #>
function Enable-TelemetryScheduledTasks { function Enable-TelemetryScheduledTasks {
Write-Host "> Enabling telemetry scheduled tasks..." Write-Host "> Enabling telemetry scheduled tasks..."
$tasks = Get-TelemetryScheduledTasks $tasks = Get-TelemetryScheduledTasks
$success = $true
foreach ($task in $tasks) { foreach ($task in $tasks) {
if ($script:CancelRequested) { return $false }
if ($script:Params.ContainsKey("WhatIf")) { if ($script:Params.ContainsKey("WhatIf")) {
Write-Host "[WhatIf] Enable Scheduled Task: $($task.Path)$($task.Name)" -ForegroundColor Cyan Write-Host "[WhatIf] Enable Scheduled Task: $($task.Path)$($task.Name)" -ForegroundColor Cyan
continue continue
} }
$result = Invoke-NonBlocking -ScriptBlock { try {
param($path, $name) $result = Invoke-NonBlocking -ScriptBlock {
Import-Module ScheduledTasks -ErrorAction SilentlyContinue param($path, $name)
$taskObj = Get-ScheduledTask -TaskPath $path -TaskName $name -ErrorAction SilentlyContinue
if (-not $taskObj) {
return @{ Success = $true; Status = 'NotFound' }
}
if ($taskObj.State -eq 'Disabled') {
try { try {
Enable-ScheduledTask -TaskPath $path -TaskName $name -ErrorAction Stop | Out-Null Import-Module ScheduledTasks -ErrorAction Stop
return @{ Success = $true; Status = 'Enabled' } $taskObj = Get-ScheduledTask -TaskPath $path -TaskName $name -ErrorAction Stop
} }
catch { catch {
if ($_.Exception -isnot [System.Management.Automation.CommandNotFoundException] -and $_.CategoryInfo.Category -eq [System.Management.Automation.ErrorCategory]::ObjectNotFound) {
return @{ Success = $true; Status = 'NotFound' }
}
return @{ Success = $false; Status = 'Error'; Error = $_.Exception.Message } return @{ Success = $false; Status = 'Error'; Error = $_.Exception.Message }
} }
} if (-not $taskObj) {
return @{ Success = $true; Status = 'NotFound' }
}
if ($taskObj.State -eq 'Disabled') {
try {
Enable-ScheduledTask -TaskPath $path -TaskName $name -ErrorAction Stop | Out-Null
return @{ Success = $true; Status = 'Enabled' }
}
catch {
return @{ Success = $false; Status = 'Error'; Error = $_.Exception.Message }
}
}
return @{ Success = $true; Status = 'AlreadyEnabled' } return @{ Success = $true; Status = 'AlreadyEnabled' }
} -ArgumentList @($task.Path, $task.Name) } -ArgumentList @($task.Path, $task.Name)
}
catch {
Write-Warning "Failed to enable Scheduled Task: $($task.Path)$($task.Name) - $($_.Exception.Message)"
$success = $false
continue
}
switch ($result.Status) { switch ($result.Status) {
'Enabled' { Write-Host "Enabled Scheduled Task: $($task.Path)$($task.Name)" } 'Enabled' { Write-Host "Enabled Scheduled Task: $($task.Path)$($task.Name)" }
'AlreadyEnabled' { Write-Host "Scheduled Task $($task.Path)$($task.Name) is already enabled." -ForegroundColor DarkGray } 'AlreadyEnabled' { Write-Host "Scheduled Task $($task.Path)$($task.Name) is already enabled." -ForegroundColor DarkGray }
'NotFound' { Write-Host "Scheduled Task $($task.Path)$($task.Name) not found." -ForegroundColor DarkGray } 'NotFound' { Write-Host "Scheduled Task $($task.Path)$($task.Name) not found." -ForegroundColor DarkGray }
'Error' { Write-Host "Failed to enable Scheduled Task: $($task.Path)$($task.Name) - $($result.Error)" -ForegroundColor Yellow } 'Error' { Write-Host "Failed to enable Scheduled Task: $($task.Path)$($task.Name) - $($result.Error)" -ForegroundColor Yellow; $success = $false }
default { Write-Warning "Unable to determine the result of enabling Scheduled Task: $($task.Path)$($task.Name)."; $success = $false }
} }
} }
Write-Host "" return $success
} }
@@ -0,0 +1,119 @@
<#
.SYNOPSIS
Enables a Windows optional feature and pipes its output to the console.
.OUTPUTS
System.Boolean. $true when enabling succeeds or is previewed; otherwise $false.
#>
function Enable-WindowsFeature {
param (
[string]$FeatureName
)
if ($script:Params.ContainsKey("WhatIf")) {
Write-Host "[WhatIf] Enable Windows feature: $FeatureName" -ForegroundColor Cyan
return $true
}
try {
$result = Invoke-NonBlocking -ScriptBlock {
param($name)
try {
$output = Enable-WindowsOptionalFeature -Online -FeatureName $name -All -NoRestart -ErrorAction Stop
return [PSCustomObject]@{
Success = $true
Output = if ($output) { ($output | Out-String).Trim() } else { $null }
Error = $null
}
}
catch {
return [PSCustomObject]@{
Success = $false
Output = $null
Error = $_.Exception.Message
}
}
} -ArgumentList $FeatureName
}
catch {
Write-Warning "Failed to enable Windows feature '$FeatureName': $($_.Exception.Message)"
return $false
}
if (-not $result -or -not $result.Success) {
$details = if ($result -and $result.Error) { ": $($result.Error)" } else { '' }
Write-Warning "Failed to enable Windows feature '$FeatureName'$details"
return $false
}
if ($result.Output) { Write-Host $result.Output }
return $true
}
<#
.SYNOPSIS
Disables a Windows optional feature and pipes its output to the console.
.OUTPUTS
System.Boolean. $true when disabling succeeds or is previewed; otherwise $false.
#>
function Disable-WindowsFeature {
param (
[string]$FeatureName
)
if ($script:Params.ContainsKey("WhatIf")) {
Write-Host "[WhatIf] Disable Windows feature: $FeatureName" -ForegroundColor Cyan
return $true
}
try {
$result = Invoke-NonBlocking -ScriptBlock {
param($name)
try {
$output = Disable-WindowsOptionalFeature -Online -FeatureName $name -NoRestart -ErrorAction Stop
return [PSCustomObject]@{
Success = $true
Output = if ($output) { ($output | Out-String).Trim() } else { $null }
Error = $null
}
}
catch {
return [PSCustomObject]@{
Success = $false
Output = $null
Error = $_.Exception.Message
}
}
} -ArgumentList $FeatureName
}
catch {
Write-Warning "Failed to disable Windows feature '$FeatureName': $($_.Exception.Message)"
return $false
}
if (-not $result -or -not $result.Success) {
$details = if ($result -and $result.Error) { ": $($result.Error)" } else { '' }
Write-Warning "Failed to disable Windows feature '$FeatureName'$details"
return $false
}
if ($result.Output) { Write-Host $result.Output }
return $true
}
function Test-WindowsOptionalFeatureEnabled {
param (
[Parameter(Mandatory)]
[string]$FeatureName
)
try {
$feature = Get-WindowsOptionalFeature -Online -FeatureName $FeatureName -ErrorAction Stop
}
catch {
return $false
}
return ($feature.State -eq 'Enabled')
}
@@ -1,61 +0,0 @@
# Enables a Windows optional feature and pipes its output to the console
function EnableWindowsFeature {
param (
[string]$FeatureName
)
if ($script:Params.ContainsKey("WhatIf")) {
Write-Host "[WhatIf] Enable Windows feature: $FeatureName" -ForegroundColor Cyan
Write-Host ""
return
}
$result = Invoke-NonBlocking -ScriptBlock {
param($name)
Enable-WindowsOptionalFeature -Online -FeatureName $name -All -NoRestart
} -ArgumentList $FeatureName
$dismResult = @($result) | Where-Object { $_ -is [Microsoft.Dism.Commands.ImageObject] }
if ($dismResult) {
Write-Host ($dismResult | Out-String).Trim()
}
}
# Disables a Windows optional feature and pipes its output to the console
function DisableWindowsFeature {
param (
[string]$FeatureName
)
if ($script:Params.ContainsKey("WhatIf")) {
Write-Host "[WhatIf] Disable Windows feature: $FeatureName" -ForegroundColor Cyan
Write-Host ""
return
}
$result = Invoke-NonBlocking -ScriptBlock {
param($name)
Disable-WindowsOptionalFeature -Online -FeatureName $name -NoRestart
} -ArgumentList $FeatureName
$dismResult = @($result) | Where-Object { $_ -is [Microsoft.Dism.Commands.ImageObject] }
if ($dismResult) {
Write-Host ($dismResult | Out-String).Trim()
}
}
function Test-WindowsOptionalFeatureEnabled {
param (
[Parameter(Mandatory)]
[string]$FeatureName
)
try {
$feature = Get-WindowsOptionalFeature -Online -FeatureName $FeatureName -ErrorAction Stop
}
catch {
return $false
}
return ($feature.State -eq 'Enabled')
}
@@ -1,10 +1,10 @@
# Returns a validated list of apps based on the provided appsList and the supported apps from Apps.json # Returns a validated list of apps based on the provided appsList and the supported apps from Apps.json
function ValidateAppslist { function Get-ValidatedAppList {
param ( param (
$appsList $appsList
) )
$supportedAppsList = @(LoadAppsDetailsFromJson | ForEach-Object { @($_.AppId) }) | ForEach-Object { $_.Trim() } | Where-Object { $_.Length -gt 0 } $supportedAppsList = @(Import-AppDetailsFromJson | ForEach-Object { @($_.AppId) }) | ForEach-Object { $_.Trim() } | Where-Object { $_.Length -gt 0 }
$validatedAppsList = @() $validatedAppsList = @()
# Validate provided appsList against supportedAppsList # Validate provided appsList against supportedAppsList
@@ -0,0 +1,148 @@
<#
.SYNOPSIS
Loads application details from Apps.json.
.DESCRIPTION
Reads the application definitions from Apps.json, optionally filters the
results to installed applications, and returns normalized app objects for
display and selection.
.PARAMETER OnlyInstalled
Filters the results to applications detected through Appx or the supplied
winget installation list.
.PARAMETER InstalledList
A pre-fetched winget installation list used when filtering installed apps.
.PARAMETER InitialCheckedFromJson
Sets each returned app's IsChecked value from its SelectedByDefault setting.
.OUTPUTS
System.Management.Automation.PSCustomObject[]
Application detail objects containing display, selection, and removal data.
#>
function Import-AppDetailsFromJson {
param (
[switch]$OnlyInstalled,
[object[]]$InstalledList = $null,
[switch]$InitialCheckedFromJson
)
$apps = @()
try {
$jsonContent = Get-Content -Path $script:AppsListFilePath -Raw | ConvertFrom-Json
}
catch {
Write-Error "Failed to read Apps.json: $_"
return $apps
}
$installedAppNames = @{}
if ($OnlyInstalled) {
# Get-AppxPackage is expensive; query it once and use its package names for the catalog lookup.
foreach ($installedApp in @(Get-AppxPackage -ErrorAction SilentlyContinue)) {
if ($installedApp.Name -is [string]) {
$installedAppNames[$installedApp.Name] = $true
}
}
}
foreach ($appData in $jsonContent.Apps) {
# Handle AppId as array (could be single or multiple IDs)
$appIdArray = @(
foreach ($rawAppId in @($appData.AppId)) {
if ($rawAppId -isnot [string]) { continue }
$normalizedAppId = $rawAppId.Trim()
if ($normalizedAppId.Length -gt 0) { $normalizedAppId }
}
)
if ($appIdArray.Count -eq 0) { continue }
if ($OnlyInstalled) {
$isInstalled = $false
foreach ($appId in $appIdArray) {
if ($installedAppNames.ContainsKey($appId)) {
$isInstalled = $true
break
}
# Then check the pre-fetched winget list
if ($InstalledList -and (Test-AppInWingetList -appId $appId -InstalledList $InstalledList)) {
$isInstalled = $true
break
}
}
if (-not $isInstalled) { continue }
}
# Use first AppId for fallback names, join all for display
$primaryAppId = $appIdArray[0]
$appIdDisplay = $appIdArray -join ', '
$friendlyName = Get-Translation -Key $primaryAppId -Field 'FriendlyName' -Section 'Apps'
$displayName = "$friendlyName ($appIdDisplay)"
$isChecked = if ($InitialCheckedFromJson) { $appData.SelectedByDefault } else { $false }
$apps += [PSCustomObject]@{
AppId = $appIdArray
AppIdDisplay = $appIdDisplay
FriendlyName = $friendlyName
DisplayName = $displayName
IsChecked = $isChecked
Description = Get-Translation -Key $primaryAppId -Field 'Description' -Section 'Apps'
SelectedByDefault = $appData.SelectedByDefault
Recommendation = $appData.Recommendation
RemovalMethod = if ($appData.RemovalMethod -and $appData.RemovalMethod -eq 'WinGet') { 'WinGet' } else { 'Appx' }
}
}
return $apps
}
<#
.SYNOPSIS
Runs Import-AppDetailsFromJson in a background runspace via Invoke-NonBlocking.
.DESCRIPTION
The runspace inherits neither dot-sourced functions nor script-scoped variables, so
this dot-sources the app loader, its winget helper, and the language loader inside the
scriptblock, and passes $Lang through to be reassigned to $script:Lang there.
.PARAMETER OnlyInstalled
Filters the results to applications detected through Appx or the supplied
winget installation list.
.PARAMETER InstalledList
A pre-fetched winget installation list used when filtering installed apps.
.PARAMETER InitialCheckedFromJson
Sets each returned app's IsChecked value from its SelectedByDefault setting.
.PARAMETER Lang
The loaded language object ($script:Lang) to make available inside the runspace.
#>
function Invoke-AppDetailsFromJsonAsync {
param (
[string]$LoaderScriptPath = $script:LoadAppsDetailsScriptPath,
[string]$HelperScriptPath = $script:TestAppInWingetListScriptPath,
[string]$LanguageFileScriptPath = $script:ImportLanguageFileScriptPath,
[string]$AppsFilePath = $script:AppsListFilePath,
[object[]]$InstalledList = $null,
[switch]$OnlyInstalled,
[switch]$InitialCheckedFromJson,
[object]$Lang = $script:Lang
)
$onlyInstalledValue = [bool]$OnlyInstalled
$initialCheckedFromJsonValue = [bool]$InitialCheckedFromJson
return Invoke-NonBlocking -ScriptBlock {
param($loaderScript, $helperScript, $languageFileScript, $appsListFilePath, $installedList, $onlyInstalled, $initialCheckedFromJson, $Lang)
$script:AppsListFilePath = $appsListFilePath
$script:Lang = $Lang
. $helperScript
. $languageFileScript
. $loaderScript
Import-AppDetailsFromJson -OnlyInstalled:$onlyInstalled -InstalledList $installedList -InitialCheckedFromJson:$initialCheckedFromJson
} -ArgumentList $LoaderScriptPath, $HelperScriptPath, $LanguageFileScriptPath, $AppsFilePath, $InstalledList, $onlyInstalledValue, $initialCheckedFromJsonValue, $Lang
}
@@ -1,6 +1,8 @@
# Read Apps.json and return the list of preset objects (Name + AppIds). <#
# Returns an empty array if the file cannot be read or contains no presets. .SYNOPSIS
function LoadAppPresetsFromJson { Returns preset names and application IDs from Apps.json, or an empty array when unavailable.
#>
function Import-AppPresetsFromJson {
try { try {
$jsonContent = Get-Content -Path $script:AppsListFilePath -Raw | ConvertFrom-Json $jsonContent = Get-Content -Path $script:AppsListFilePath -Raw | ConvertFrom-Json
} }
@@ -14,7 +14,7 @@
System.String[]. An array of app ID strings, or an empty array if the System.String[]. An array of app ID strings, or an empty array if the
file does not exist or contains no selected-by-default apps. file does not exist or contains no selected-by-default apps.
#> #>
function LoadAppsFromFile { function Import-AppsFromFile {
param ( param (
$appsFilePath $appsFilePath
) )
@@ -41,6 +41,6 @@ function LoadAppsFromFile {
} }
catch { catch {
Write-Error "Unable to read apps list from file: $appsFilePath" Write-Error "Unable to read apps list from file: $appsFilePath"
AwaitKeyToExit Wait-ForKeyPress -ExitCode 1
} }
} }
@@ -1,6 +1,8 @@
# Loads a JSON file from the specified path and returns the parsed object <#
# Returns $null if the file doesn't exist or if parsing fails .SYNOPSIS
function LoadJsonFile { Imports a JSON file, optionally validates its version, and returns $null on failure.
#>
function Import-JsonFile {
param ( param (
[string]$filePath, [string]$filePath,
[string]$expectedVersion = $null, [string]$expectedVersion = $null,
@@ -15,7 +17,7 @@ function LoadJsonFile {
} }
try { try {
$jsonContent = Get-Content -Path $filePath -Raw | ConvertFrom-Json $jsonContent = Get-Content -Path $filePath -Raw -Encoding UTF8 | ConvertFrom-Json
# Validate version if specified # Validate version if specified
if ($expectedVersion -and $jsonContent.Version -and $jsonContent.Version -ne $expectedVersion) { if ($expectedVersion -and $jsonContent.Version -and $jsonContent.Version -ne $expectedVersion) {
+479
View File
@@ -0,0 +1,479 @@
<#
.SYNOPSIS
Returns the required language catalog names.
.OUTPUTS
System.String. The required catalog names.
#>
function Get-LanguageCatalogNames {
return @('Chrome', 'Features', 'Categories', 'Apps')
}
<#
.SYNOPSIS
Lists language folders containing every required JSON catalog.
.PARAMETER LanguagesPath
The directory containing language folders. Defaults to $script:LanguagesPath.
.OUTPUTS
System.IO.DirectoryInfo. The available language folders.
#>
function Get-AvailableLanguageFolders {
param([string]$LanguagesPath = $script:LanguagesPath)
$catalogNames = Get-LanguageCatalogNames
foreach ($folder in (Get-ChildItem -LiteralPath $LanguagesPath -Directory | Sort-Object Name)) {
$missingCatalogs = @($catalogNames | Where-Object {
-not (Test-Path -LiteralPath (Join-Path $folder.FullName "$_.json") -PathType Leaf)
})
if ($missingCatalogs.Count -eq 0) { $folder }
}
}
<#
.SYNOPSIS
Resolves a language code to an available Config/Languages folder, or falls back to en-US.
#>
function Resolve-LanguageFolder {
param(
[Parameter(Mandatory)]
[string]$LanguageCode,
[string]$LanguagesPath = $script:LanguagesPath
)
$exactPath = Join-Path $LanguagesPath $LanguageCode
if (Test-Path $exactPath -PathType Container) {
return $LanguageCode
}
$languagePrefix = ($LanguageCode -split '-')[0]
$prefixMatch = Get-ChildItem -Path $LanguagesPath -Directory -Filter "$languagePrefix-*" -ErrorAction SilentlyContinue | Select-Object -First 1
if ($prefixMatch) {
return $prefixMatch.Name
}
return 'en-US'
}
<#
.SYNOPSIS
Loads Chrome/Features/Categories/Apps JSON for a language folder, or returns $null on failure.
#>
function Import-LanguageContent {
param(
[Parameter(Mandatory)]
[string]$LanguageFolder,
[string]$LanguagesPath = $script:LanguagesPath
)
$folderPath = Join-Path $LanguagesPath $LanguageFolder
$catalogs = @{}
foreach ($name in (Get-LanguageCatalogNames)) {
$catalogs[$name] = Import-JsonFile -filePath (Join-Path $folderPath "$name.json")
}
if (@($catalogs.Values | Where-Object { -not $_ }).Count) { return $null }
return [PSCustomObject]@{
LanguageCode = $LanguageFolder
Chrome = $catalogs.Chrome
Features = $catalogs.Features.Features
UiGroups = $catalogs.Features.UiGroups
Categories = $catalogs.Categories
Apps = $catalogs.Apps
}
}
<#
.SYNOPSIS
Loads the active language content, falling back to en-US when the requested language fails to load.
#>
function Import-LanguageFile {
param(
[string]$LanguageCode = ([System.Globalization.CultureInfo]::CurrentUICulture.Name),
[string]$LanguagesPath = $script:LanguagesPath
)
$resolvedFolder = Resolve-LanguageFolder -LanguageCode $LanguageCode -LanguagesPath $LanguagesPath
$content = Import-LanguageContent -LanguageFolder $resolvedFolder -LanguagesPath $LanguagesPath
if (-not $content -and $resolvedFolder -ne 'en-US') {
Write-Warning "Failed to load language '$resolvedFolder', falling back to en-US."
$content = Import-LanguageContent -LanguageFolder 'en-US' -LanguagesPath $LanguagesPath
}
if (-not $content) {
Write-Error "Unable to load the en-US language files. The GUI cannot continue without them."
return $null
}
if ($content.LanguageCode -ne 'en-US') {
$content | Add-Member -MemberType NoteProperty -Name 'Fallback' -Value (Import-LanguageContent -LanguageFolder 'en-US' -LanguagesPath $LanguagesPath)
}
return $content
}
<#
.SYNOPSIS
Returns the CLDR plural category ('one', 'other', etc.) for a count in the given language.
.DESCRIPTION
Each language's CLDR plural rule is its own case, keyed by language prefix ('en' matches
both 'en-US' and 'en-GB'). A language without a case falls back to the English rule, which
is also correct for Dutch and German but wrong for languages with 3+ plural categories or
a different singular/plural split.
#>
function Get-PluralCategory {
param(
[Parameter(Mandatory)]
[string]$LanguageCode,
[Parameter(Mandatory)]
[int]$Count
)
$languagePrefix = ($LanguageCode -split '-')[0].ToLowerInvariant()
switch ($languagePrefix) {
# Portuguese CLDR rule: 'one' for 0 and 1, 'many' for positive multiples
# of 1,000,000, and 'other' for every remaining count.
'pt' {
if ($Count -le 1) {
return 'one'
}
if ($Count % 1000000 -eq 0) {
return 'many'
}
return 'other'
}
# English CLDR rule: singular only for exactly 1, plural otherwise. Also correct for Dutch/German.
default {
if ($Count -eq 1) {
return 'one'
}
return 'other'
}
}
}
<#
.SYNOPSIS
Returns a language and its Fallback (if any) as an ordered lookup chain, skipping nulls.
#>
function Get-LanguageFallbackChain {
param(
[object]$Lang
)
return @($Lang, $Lang.Fallback) | Where-Object { $_ }
}
<#
.SYNOPSIS
Finds the named section object (Chrome, Features, UiGroups, Categories, or Apps) that owns a key.
.DESCRIPTION
A FeatureId, GroupId, and CategoryId aren't guaranteed to be disjoint (Config/Features.json
can and does reuse the same string as both a GroupId and a FeatureId), so the default search
order below is only a fallback for callers who don't know which section their key belongs to.
Pass -Section to look in exactly one section instead of guessing from the order.
#>
function Find-TranslationSection {
param(
[Parameter(Mandatory)]
[object]$Lang,
[Parameter(Mandatory)]
[string]$Key,
[ValidateSet('', 'Chrome', 'Features', 'UiGroups', 'Categories', 'Apps')]
[string]$Section = ''
)
if ($Section) {
$sectionObject = $Lang.$Section
if ($sectionObject -and $sectionObject.PSObject.Properties[$Key]) {
return $sectionObject
}
return $null
}
foreach ($sectionName in 'Chrome', 'Features', 'UiGroups', 'Categories', 'Apps') {
$sectionObject = $Lang.$sectionName
if ($sectionObject -and $sectionObject.PSObject.Properties[$Key]) {
return $sectionObject
}
}
return $null
}
<#
.SYNOPSIS
Looks up a translated value from the active language, falling back to en-US, then to the key itself.
.DESCRIPTION
Chrome.json keys are flat strings, so -Field is omitted for those. Features/UiGroups/Categories/Apps
keys (FeatureId/GroupId/CategoryId/AppId) resolve to an object, so -Field picks the property on it
(Label, ToolTip, ApplyText, UndoLabel, ApplyUndoText for Features/UiGroups/Categories;
FriendlyName, Description for Apps). One generic lookup covers every section instead of a
separate function per section.
A FeatureId and a GroupId aren't guaranteed to be distinct strings, so pass -Section
('Features', 'UiGroups', 'Categories', or 'Apps') whenever the caller knows which one it
means, rather than relying on Find-TranslationSection's search order to guess correctly.
When -Count is supplied, tries the plural-suffixed key ("$Key`_$category") before the bare key,
so callers don't need to add a plural variant for every string, only the ones that need one.
.OUTPUTS
System.String. The translated string, or the original Key if no language has it.
#>
function Get-Translation {
param(
[Parameter(Mandatory)]
[string]$Key,
[string]$Field = $null,
[object]$Lang = $script:Lang,
[Nullable[int]]$Count = $null,
[object[]]$FormatArgs = $null,
[ValidateSet('', 'Chrome', 'Features', 'UiGroups', 'Categories', 'Apps')]
[string]$Section = ''
)
if (-not $Lang) {
return $Key
}
$lookupKeys = @($Key)
if ($null -ne $Count) {
$category = Get-PluralCategory -LanguageCode $Lang.LanguageCode -Count $Count
$lookupKeys = @("${Key}_$category", $Key)
}
$resolved = $Key
:langLoop foreach ($candidateLang in (Get-LanguageFallbackChain -Lang $Lang)) {
foreach ($lookupKey in $lookupKeys) {
$sectionObject = Find-TranslationSection -Lang $candidateLang -Key $lookupKey -Section $Section
if (-not $sectionObject) { continue }
$entry = $sectionObject.$lookupKey
if ($Field) {
if ($entry.PSObject.Properties[$Field]) {
$resolved = [string]$entry.$Field
break langLoop
}
continue
}
$resolved = [string]$entry
break langLoop
}
}
if ($null -ne $FormatArgs -and $FormatArgs.Count -gt 0) {
try {
return $resolved -f $FormatArgs
}
catch {
Write-Warning "Translation '$Key' has a placeholder mismatch with its format arguments: $($_.Exception.Message)"
return $resolved
}
}
return $resolved
}
<#
.SYNOPSIS
Looks up a translated label for one value of a UiGroup, falling back to en-US, then to the raw label.
.DESCRIPTION
UiGroups[GroupId].Values in the language files is a FeatureId -> Label map, one level deeper
than Get-Translation's -Field lookup handles, so this has its own small fallback walk instead
of overloading Get-Translation's flat-field shape.
#>
function Get-GroupValueTranslation {
param(
[Parameter(Mandatory)]
[string]$GroupId,
[Parameter(Mandatory)]
[string]$FeatureId,
[Parameter(Mandatory)]
[string]$FallbackLabel,
[object]$Lang = $script:Lang
)
if (-not $Lang) {
return $FallbackLabel
}
foreach ($candidateLang in (Get-LanguageFallbackChain -Lang $Lang)) {
if (-not $candidateLang.UiGroups) { continue }
$group = $candidateLang.UiGroups.$GroupId
if (-not $group -or -not $group.Values) { continue }
$valueEntry = $group.Values.PSObject.Properties[$FeatureId]
if ($valueEntry) {
return [string]$valueEntry.Value
}
}
return $FallbackLabel
}
<#
.SYNOPSIS
Flattens a loaded language object into a sorted set of dotted key paths.
.DESCRIPTION
Chrome.json keys are already flat and are used as-is. Features/UiGroups/Categories/Apps
keys are one level deeper (EntryId -> {Field: value}), so each field becomes its own
"Section.EntryId.Field" path (e.g. "Features.DisableTelemetry.Label"). UiGroups' nested
Values map becomes "UiGroups.GroupId.Values.FeatureId". Used by Test-LanguageKeyCoverage
to diff one language's key set against another's.
#>
function Get-LanguageKeyPaths {
param(
[Parameter(Mandatory)]
[object]$Lang
)
$paths = New-Object System.Collections.Generic.List[string]
foreach ($chromeKey in @($Lang.Chrome.PSObject.Properties.Name)) {
if ([string]::IsNullOrEmpty($chromeKey)) { continue }
$paths.Add($chromeKey)
}
foreach ($sectionName in 'Features', 'Categories', 'Apps') {
$section = $Lang.$sectionName
if (-not $section) { continue }
foreach ($entryId in @($section.PSObject.Properties.Name)) {
if ([string]::IsNullOrEmpty($entryId)) { continue }
foreach ($field in @($section.$entryId.PSObject.Properties.Name)) {
if ([string]::IsNullOrEmpty($field)) { continue }
$paths.Add("$sectionName.$entryId.$field")
}
}
}
foreach ($groupId in @($Lang.UiGroups.PSObject.Properties.Name)) {
if ([string]::IsNullOrEmpty($groupId)) { continue }
$group = $Lang.UiGroups.$groupId
foreach ($field in @($group.PSObject.Properties.Name)) {
if ([string]::IsNullOrEmpty($field)) { continue }
if ($field -eq 'Values') {
foreach ($featureId in @($group.Values.PSObject.Properties.Name)) {
if ([string]::IsNullOrEmpty($featureId)) { continue }
$paths.Add("UiGroups.$groupId.Values.$featureId")
}
continue
}
$paths.Add("UiGroups.$groupId.$field")
}
}
return @($paths | Sort-Object -Unique)
}
<#
.SYNOPSIS
Diffs a language's key set against a baseline language, reporting missing and extra keys.
.DESCRIPTION
Loads both languages fresh from disk (independent of any already-cached $script:Lang),
flattens each with Get-LanguageKeyPaths, and compares the two sets. Intended to run
against en-US as the baseline; useful today (catches a key present in one en-US file but
not another) and becomes the real translation-completeness check once non-English
language folders are contributed.
.OUTPUTS
PSCustomObject with ResolvedLanguageCode (the folder actually compared, after the same
exact/prefix/en-US resolution Import-LanguageFile applies), MissingKeys (present in
Baseline, absent from LanguageCode), and ExtraKeys (present in LanguageCode, absent from
Baseline) properties, the latter two sorted arrays.
#>
function Test-LanguageKeyCoverage {
param(
[Parameter(Mandatory)]
[string]$LanguageCode,
[string]$BaselineLanguageCode = 'en-US',
[string]$LanguagesPath = $script:LanguagesPath
)
$resolvedLanguageCode = Resolve-LanguageFolder -LanguageCode $LanguageCode -LanguagesPath $LanguagesPath
$baseline = Import-LanguageContent -LanguageFolder $BaselineLanguageCode -LanguagesPath $LanguagesPath
$target = Import-LanguageContent -LanguageFolder $resolvedLanguageCode -LanguagesPath $LanguagesPath
if (-not $baseline -or -not $target) {
Write-Error "Unable to load language content for coverage comparison ('$BaselineLanguageCode' vs '$resolvedLanguageCode')."
return $null
}
$baselineKeys = [System.Collections.Generic.HashSet[string]]::new([string[]](Get-LanguageKeyPaths -Lang $baseline))
$targetKeys = [System.Collections.Generic.HashSet[string]]::new([string[]](Get-LanguageKeyPaths -Lang $target))
$missingKeys = @($baselineKeys | Where-Object { -not $targetKeys.Contains($_) } | Sort-Object)
$extraKeys = @($targetKeys | Where-Object { -not $baselineKeys.Contains($_) } | Sort-Object)
return [PSCustomObject]@{
ResolvedLanguageCode = $resolvedLanguageCode
MissingKeys = $missingKeys
ExtraKeys = $extraKeys
}
}
<#
.SYNOPSIS
Replaces %LANG:Key% markers with translated text or dynamic language resources.
.DESCRIPTION
Resolves Chrome catalog markers using the active language and its English fallback.
Supports embedded text or dynamic resources for windows that allow language changes.
Throws when a marker's key is missing from both languages.
.PARAMETER Xaml
The XAML text containing %LANG:Key% markers to replace.
.PARAMETER Lang
The loaded language object and its optional Fallback. Defaults to $script:Lang.
.PARAMETER DynamicResources
Uses DynamicResource references to Language_<key> resources for live language updates.
The window must provide those resources. When omitted, embeds XML-escaped translated text.
.OUTPUTS
System.String. The XAML text with localization markers replaced.
#>
function ConvertTo-LocalizedXaml {
param(
[Parameter(Mandatory)]
[string]$Xaml,
[object]$Lang = $script:Lang,
# For live windows, keep a resource reference instead of embedding the translated text.
[switch]$DynamicResources
)
$missingKeys = New-Object System.Collections.Generic.List[string]
$evaluator = [System.Text.RegularExpressions.MatchEvaluator]{
param($match)
$key = $match.Groups[1].Value
$resolvesSomewhere = @(Get-LanguageFallbackChain -Lang $Lang) | Where-Object { $_.Chrome -and $_.Chrome.PSObject.Properties[$key] }
if (-not $resolvesSomewhere) { $missingKeys.Add($key) }
if ($DynamicResources) { return "{DynamicResource Language_$key}" }
$value = if ($resolvesSomewhere) { Get-Translation -Key $key -Lang $Lang } else { $key }
return [System.Security.SecurityElement]::Escape($value)
}
$result = [System.Text.RegularExpressions.Regex]::Replace($Xaml, '%LANG:([A-Za-z0-9_]+)%', $evaluator)
if ($missingKeys.Count -gt 0) {
throw "Unresolved localization marker(s) in XAML, key(s) not found in any language: $($missingKeys -join ', ')"
}
return $result
}
@@ -1,11 +1,14 @@
# Loads settings from a JSON file and adds them to script params <#
function LoadSettings { .SYNOPSIS
Imports enabled, compatible feature settings from a JSON file into the active parameters.
#>
function Import-Settings {
param ( param (
[string]$filePath, [string]$filePath,
[string]$expectedVersion = "1.0" [string]$expectedVersion = "1.0"
) )
$settingsJson = LoadJsonFile -filePath $filePath -expectedVersion $expectedVersion $settingsJson = Import-JsonFile -filePath $filePath -expectedVersion $expectedVersion
if (-not $settingsJson -or -not $settingsJson.Settings) { if (-not $settingsJson -or -not $settingsJson.Settings) {
throw "Failed to load settings from $(Split-Path $filePath -Leaf)" throw "Failed to load settings from $(Split-Path $filePath -Leaf)"
@@ -29,6 +32,6 @@ function LoadSettings {
continue continue
} }
AddParameter $setting.Name $setting.Value Add-Parameter $setting.Name $setting.Value
} }
} }
@@ -1,64 +0,0 @@
# Read Apps.json and return list of app objects with optional filtering
function LoadAppsDetailsFromJson {
param (
[switch]$OnlyInstalled,
[object[]]$InstalledList = $null,
[switch]$InitialCheckedFromJson
)
$apps = @()
try {
$jsonContent = Get-Content -Path $script:AppsListFilePath -Raw | ConvertFrom-Json
}
catch {
Write-Error "Failed to read Apps.json: $_"
return $apps
}
foreach ($appData in $jsonContent.Apps) {
# Handle AppId as array (could be single or multiple IDs)
$appIdArray = if ($appData.AppId -is [array]) { $appData.AppId } else { @($appData.AppId) }
$appIdArray = $appIdArray | ForEach-Object { $_.Trim() } | Where-Object { $_.length -gt 0 }
if ($appIdArray.Count -eq 0) { continue }
if ($OnlyInstalled) {
$isInstalled = $false
foreach ($appId in $appIdArray) {
# Check Get-AppxPackage first (fast, no process launch)
if (Get-AppxPackage -Name $appId) {
$isInstalled = $true
break
}
# Then check the pre-fetched winget list
if ($InstalledList -and (Test-AppInWingetList -appId $appId -InstalledList $InstalledList)) {
$isInstalled = $true
break
}
}
if (-not $isInstalled) { continue }
}
# Use first AppId for fallback names, join all for display
$primaryAppId = $appIdArray[0]
$appIdDisplay = $appIdArray -join ', '
$friendlyName = if ($appData.FriendlyName) { $appData.FriendlyName } else { $primaryAppId }
$displayName = if ($appData.FriendlyName) { "$($appData.FriendlyName) ($appIdDisplay)" } else { $appIdDisplay }
$isChecked = if ($InitialCheckedFromJson) { $appData.SelectedByDefault } else { $false }
$apps += [PSCustomObject]@{
AppId = $appIdArray
AppIdDisplay = $appIdDisplay
FriendlyName = $friendlyName
DisplayName = $displayName
IsChecked = $isChecked
Description = $appData.Description
SelectedByDefault = $appData.SelectedByDefault
Recommendation = $appData.Recommendation
RemovalMethod = if ($appData.RemovalMethod -and $appData.RemovalMethod -eq 'WinGet') { 'WinGet' } else { 'Appx' }
}
}
return $apps
}
@@ -1,5 +1,8 @@
# Saves the current settings, excluding control parameters, to 'LastUsedSettings.json' file <#
function SaveSettings { .SYNOPSIS
Saves active feature settings, excluding control parameters, unless running in WhatIf mode.
#>
function Save-Settings {
if ($script:Params.ContainsKey("WhatIf")) { if ($script:Params.ContainsKey("WhatIf")) {
Write-Host "[WhatIf] Save settings to LastUsedSettings.json" -ForegroundColor Cyan Write-Host "[WhatIf] Save settings to LastUsedSettings.json" -ForegroundColor Cyan
return return
@@ -21,8 +24,8 @@ function SaveSettings {
} }
} }
if (-not (SaveToFile -Config $settings -FilePath $script:SavedSettingsFilePath)) { if (-not (Save-ToFile -Config $settings -FilePath $script:SavedSettingsFilePath)) {
Write-Output "" Write-Output ""
Write-Host "Error: Failed to save settings to LastUsedSettings.json file" -ForegroundColor Red Write-Host "Error: Failed to save settings to LastUsedSettings.json file" -ForegroundColor Red
} }
} }
+37
View File
@@ -0,0 +1,37 @@
<#
.SYNOPSIS
Serializes a configuration hashtable to a UTF-8 JSON file.
.PARAMETER Config
The configuration data to serialize.
.PARAMETER FilePath
The destination file path.
.PARAMETER MaxDepth
The maximum object depth passed to ConvertTo-Json.
.OUTPUTS
System.Boolean. $true when the file is written; otherwise $false.
#>
function Save-ToFile {
param (
[Parameter(Mandatory=$true)]
[hashtable]$Config,
[Parameter(Mandatory=$true)]
[string]$FilePath,
[Parameter(Mandatory=$false)]
[int]$MaxDepth = 10
)
try {
$Config | ConvertTo-Json -Depth $MaxDepth | Set-Content -Path $FilePath -Encoding UTF8 -ErrorAction Stop
return $true
}
catch {
Write-Error "Failed to write '$FilePath': $($_.Exception.Message)"
return $false
}
}
-22
View File
@@ -1,22 +0,0 @@
# Saves configuration JSON to a file.
# Returns $true on success, $false on failure.
function SaveToFile {
param (
[Parameter(Mandatory=$true)]
[hashtable]$Config,
[Parameter(Mandatory=$true)]
[string]$FilePath,
[Parameter(Mandatory=$false)]
[int]$MaxDepth = 10
)
try {
$Config | ConvertTo-Json -Depth $MaxDepth | Set-Content -Path $FilePath -Encoding UTF8
return $true
}
catch {
return $false
}
}
@@ -1,6 +1,20 @@
# Applies settings from a JSON object to UI controls (checkboxes and comboboxes) <#
# Used by LoadDefaultsBtn and LoadLastUsedBtn in the UI .SYNOPSIS
function ApplySettingsToUiControls { Applies enabled settings from JSON to mapped checkbox and combo-box controls.
.PARAMETER Window
The window that owns the mapped controls.
.PARAMETER SettingsJson
The settings object containing a Settings collection.
.PARAMETER UiControlMappings
The feature-to-control mapping used to locate and update controls.
.OUTPUTS
System.Boolean. $false for invalid settings input; otherwise $true.
#>
function Apply-SettingsToUiControls {
param ( param (
$window, $window,
$settingsJson, $settingsJson,
@@ -1,10 +1,20 @@
# Attaches shift-click selection behavior to a checkbox in an apps panel <#
# Parameters: .SYNOPSIS
# - $checkbox: The checkbox to attach the behavior to Attaches shift-click range-selection behavior to an application checkbox.
# - $appsPanel: The StackPanel containing checkbox items
# - $lastSelectedCheckboxRef: A reference to a variable storing the last clicked checkbox .PARAMETER Checkbox
# - $updateStatusCallback: Optional callback to update selection status The checkbox that receives the mouse event handler.
function AttachShiftClickBehavior {
.PARAMETER AppsPanel
The panel whose visible checkboxes participate in range selection.
.PARAMETER LastSelectedCheckboxRef
A reference that stores the previously clicked checkbox.
.PARAMETER UpdateStatusCallback
An optional callback invoked after a range selection changes.
#>
function Attach-ShiftClickBehavior {
param ( param (
[System.Windows.Controls.CheckBox]$checkbox, [System.Windows.Controls.CheckBox]$checkbox,
[System.Windows.Controls.StackPanel]$appsPanel, [System.Windows.Controls.StackPanel]$appsPanel,
@@ -1,7 +1,13 @@
# Checks if the system is set to use dark mode for apps <#
function GetSystemUsesDarkMode { .SYNOPSIS
Returns whether Windows apps are configured to use dark mode.
.OUTPUTS
System.Boolean. $false when the personalization setting cannot be read.
#>
function Get-SystemUsesDarkMode {
try { try {
$personalizeKey = Get-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize' $personalizeKey = Get-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize' -ErrorAction Stop
if ($null -eq $personalizeKey) { if ($null -eq $personalizeKey) {
Write-Host "WARNING: Unable to retrieve personalization settings." -ForegroundColor Yellow Write-Host "WARNING: Unable to retrieve personalization settings." -ForegroundColor Yellow
+127 -38
View File
@@ -142,6 +142,15 @@ function Update-AppsPanelSort {
} }
} }
<#
.SYNOPSIS
Updates the "N apps selected" status text and shows or hides the app-removal scope section.
.DESCRIPTION
The scope section only makes sense once at least one app is selected, so it's hidden
entirely at zero and its description text is refreshed via Update-AppRemovalScopeDescription
whenever the selection count changes.
#>
function Update-AppSelectionStatus { function Update-AppSelectionStatus {
param( param(
[System.Windows.Controls.Panel]$AppsPanel, [System.Windows.Controls.Panel]$AppsPanel,
@@ -158,7 +167,7 @@ function Update-AppSelectionStatus {
$selectedCount++ $selectedCount++
} }
} }
$AppSelectionStatus.Text = "$selectedCount app(s) selected for removal" $AppSelectionStatus.Text = Get-Translation -Key 'AppSelectionStatusSelected' -Count $selectedCount -FormatArgs @($selectedCount)
if ($AppRemovalScopeCombo -and $AppRemovalScopeSection -and $AppRemovalScopeDescription) { if ($AppRemovalScopeCombo -and $AppRemovalScopeSection -and $AppRemovalScopeDescription) {
if ($selectedCount -gt 0) { if ($selectedCount -gt 0) {
@@ -174,6 +183,10 @@ function Update-AppSelectionStatus {
} }
} }
<#
.SYNOPSIS
Updates the app-removal scope description to match the selected ComboBoxItem.
#>
function Update-AppRemovalScopeDescription { function Update-AppRemovalScopeDescription {
param( param(
[System.Windows.Controls.ComboBox]$AppRemovalScopeCombo, [System.Windows.Controls.ComboBox]$AppRemovalScopeCombo,
@@ -182,20 +195,60 @@ function Update-AppRemovalScopeDescription {
$selectedItem = $AppRemovalScopeCombo.SelectedItem $selectedItem = $AppRemovalScopeCombo.SelectedItem
if ($selectedItem) { if ($selectedItem) {
switch ($selectedItem.Content) { # Content is the display text and will change once translated; Name is stable.
"All users" { switch ($selectedItem.Name) {
$AppRemovalScopeDescription.Text = "Apps will be removed for all users and from the Windows image to prevent reinstallation for new users." "AppRemovalScopeAllUsers" {
$AppRemovalScopeDescription.Text = Get-Translation -Key 'AppRemovalScopeDescriptionAllUsers'
} }
"Current user only" { "AppRemovalScopeCurrentUser" {
$AppRemovalScopeDescription.Text = "Apps will only be removed for the current user." $AppRemovalScopeDescription.Text = Get-Translation -Key 'AppRemovalScopeDescriptionCurrentUser'
} }
"Target user only" { "AppRemovalScopeTargetUser" {
$AppRemovalScopeDescription.Text = "Apps will only be removed for the specified target user." $AppRemovalScopeDescription.Text = Get-Translation -Key 'AppRemovalScopeDescriptionTargetUser'
} }
} }
} }
} }
<#
.SYNOPSIS
Tests whether the app-removal scope combo is currently set to "Target user only".
#>
function Test-AppRemovalScopeTargetsOtherUser {
param(
[System.Windows.Controls.ComboBox]$AppRemovalScopeCombo
)
return ($AppRemovalScopeCombo -and $AppRemovalScopeCombo.SelectedItem -and $AppRemovalScopeCombo.SelectedItem.Name -eq 'AppRemovalScopeTargetUser')
}
<#
.SYNOPSIS
Resolves the -AppRemovalTarget value for the selected app-removal scope.
#>
function Get-AppRemovalScopeTarget {
param(
[System.Windows.Controls.ComboBox]$AppRemovalScopeCombo,
[System.Windows.Controls.TextBox]$OtherUsernameTextBox
)
$selectedItem = $AppRemovalScopeCombo.SelectedItem
if (-not $selectedItem) { return $null }
if (Test-AppRemovalScopeTargetsOtherUser -AppRemovalScopeCombo $AppRemovalScopeCombo) {
return $OtherUsernameTextBox.Text.Trim()
}
switch ($selectedItem.Name) {
"AppRemovalScopeAllUsers" { return 'AllUsers' }
"AppRemovalScopeCurrentUser" { return 'CurrentUser' }
default {
Write-Warning "Unrecognized app-removal scope item '$($selectedItem.Name)'. Skipping app removal."
return $null
}
}
}
function Invoke-AppPreset { function Invoke-AppPreset {
param( param(
[System.Windows.Controls.Panel]$AppsPanel, [System.Windows.Controls.Panel]$AppsPanel,
@@ -223,7 +276,7 @@ function Update-AppPresetStates {
$script:UpdatingPresets = $true $script:UpdatingPresets = $true
try { try {
# Helper: count matching and checked apps, set checkbox state # Helper: count matching and checked apps, set checkbox state
function SetPresetState($CheckBox, [scriptblock]$MatchFilter) { function Set-PresetState($CheckBox, [scriptblock]$MatchFilter) {
$total = 0; $checked = 0 $total = 0; $checked = 0
foreach ($child in $AppsPanel.Children) { foreach ($child in $AppsPanel.Children) {
if ($child -is [System.Windows.Controls.CheckBox]) { if ($child -is [System.Windows.Controls.CheckBox]) {
@@ -241,15 +294,15 @@ function Update-AppPresetStates {
$presetDefaultApps = $window.FindName('PresetDefaultApps') $presetDefaultApps = $window.FindName('PresetDefaultApps')
$presetLastUsed = $window.FindName('PresetLastUsed') $presetLastUsed = $window.FindName('PresetLastUsed')
SetPresetState $presetDefaultApps { param($c) $c.SelectedByDefault -eq $true } Set-PresetState $presetDefaultApps { param($c) $c.SelectedByDefault -eq $true }
foreach ($jsonCb in $script:JsonPresetCheckboxes) { foreach ($jsonCb in $script:JsonPresetCheckboxes) {
$localIds = $jsonCb.PresetAppIds $localIds = $jsonCb.PresetAppIds
SetPresetState $jsonCb { param($c) (@($c.AppIds) | Where-Object { $localIds -contains $_ }).Count -gt 0 }.GetNewClosure() Set-PresetState $jsonCb { param($c) (@($c.AppIds) | Where-Object { $localIds -contains $_ }).Count -gt 0 }.GetNewClosure()
} }
# Last used preset: only update if it's visible (has saved apps) # Last used preset: only update if it's visible (has saved apps)
if ($presetLastUsed.Visibility -ne 'Collapsed' -and $script:SavedAppIds) { if ($presetLastUsed.Visibility -ne 'Collapsed' -and $script:SavedAppIds) {
SetPresetState $presetLastUsed { param($c) (@($c.AppIds) | Where-Object { $script:SavedAppIds -contains $_ }).Count -gt 0 } Set-PresetState $presetLastUsed { param($c) (@($c.AppIds) | Where-Object { $script:SavedAppIds -contains $_ }).Count -gt 0 }
} }
} }
finally { finally {
@@ -304,7 +357,29 @@ function Find-ParentScrollViewer {
return $null return $null
} }
function Load-AppsWithList { <#
.SYNOPSIS
Loads application details and adds their interactive checkboxes to the main window.
.PARAMETER Window
The main application window and resource owner.
.PARAMETER AppsPanel
The panel populated with application checkboxes.
.PARAMETER OnlyInstalledAppsBox
The filter control that determines whether only installed apps are loaded.
.PARAMETER LoadingAppsIndicator
The loading indicator shown while application details are prepared.
.PARAMETER ImportConfigBtn
The optional import control re-enabled after loading completes.
.PARAMETER ListOfApps
An optional pre-fetched list of installed WinGet applications.
#>
function Add-AppsToMainWindow {
param( param(
[System.Windows.Window]$Window, [System.Windows.Window]$Window,
[System.Windows.Controls.Panel]$AppsPanel, [System.Windows.Controls.Panel]$AppsPanel,
@@ -316,27 +391,15 @@ function Load-AppsWithList {
$script:MainWindowLastSelectedCheckbox = $null $script:MainWindowLastSelectedCheckbox = $null
$loaderScriptPath = $script:LoadAppsDetailsScriptPath
$helperScriptPath = $script:TestAppInWingetListScriptPath
$appsFilePath = $script:AppsListFilePath
$onlyInstalled = [bool]$OnlyInstalledAppsBox.IsChecked $onlyInstalled = [bool]$OnlyInstalledAppsBox.IsChecked
# Use preloaded data if available; otherwise load in background job # Use preloaded data if available; otherwise load in a background job to keep the UI responsive.
if (-not $onlyInstalled -and $script:PreloadedAppData) { if (-not $onlyInstalled -and $script:PreloadedAppData) {
$rawAppData = $script:PreloadedAppData $rawAppData = $script:PreloadedAppData
$script:PreloadedAppData = $null $script:PreloadedAppData = $null
} }
else { else {
# Load apps details in a background job to keep the UI responsive. $rawAppData = Invoke-AppDetailsFromJsonAsync -OnlyInstalled:$onlyInstalled -InstalledList $ListOfApps
# The helper is dot-sourced inside the job because the runspace
# does not inherit the parent scope's dot-sourced functions.
$rawAppData = Invoke-NonBlocking -ScriptBlock {
param($loaderScript, $helperScript, $appsListFilePath, $installedList, $onlyInstalled)
$script:AppsListFilePath = $appsListFilePath
. $helperScript
. $loaderScript
LoadAppsDetailsFromJson -OnlyInstalled:$onlyInstalled -InstalledList $installedList -InitialCheckedFromJson:$false
} -ArgumentList $loaderScriptPath, $helperScriptPath, $appsFilePath, $ListOfApps, $onlyInstalled
} }
$appsToAdd = @($rawAppData | Where-Object { $_ -and ($_.AppId -or $_.FriendlyName) } | Sort-Object -Property FriendlyName) $appsToAdd = @($rawAppData | Where-Object { $_ -and ($_.AppId -or $_.FriendlyName) } | Sort-Object -Property FriendlyName)
@@ -381,11 +444,12 @@ function Load-AppsWithList {
$dot = New-Object System.Windows.Shapes.Ellipse $dot = New-Object System.Windows.Shapes.Ellipse
$dot.Style = $Window.Resources['AppRecommendationDotStyle'] $dot.Style = $Window.Resources['AppRecommendationDotStyle']
$dot.Fill = switch ($app.Recommendation) { 'safe' { $brushSafe } 'unsafe' { $brushUnsafe } default { $brushDefault } } $dot.Fill = switch ($app.Recommendation) { 'safe' { $brushSafe } 'unsafe' { $brushUnsafe } default { $brushDefault } }
$dot.ToolTip = switch ($app.Recommendation) { $recommendationKey = switch ($app.Recommendation) {
'safe' { '[Recommended] Safe to remove for most users' } 'safe' { 'AppLegendRecommendedTooltip' }
'unsafe' { '[Not Recommended] Only remove if you know what you are doing' } 'unsafe' { 'AppLegendNotRecommendedTooltip' }
default { "[Optional] Can be safely removed if you don't need this app" } default { 'AppLegendOptionalTooltip' }
} }
$dot.SetResourceReference([System.Windows.FrameworkElement]::ToolTipProperty, "Language_$recommendationKey")
[System.Windows.Controls.Grid]::SetColumn($dot, 0) [System.Windows.Controls.Grid]::SetColumn($dot, 0)
$tbName = New-Object System.Windows.Controls.TextBlock $tbName = New-Object System.Windows.Controls.TextBlock
@@ -416,6 +480,8 @@ function Load-AppsWithList {
Add-Member -InputObject $checkbox -MemberType NoteProperty -Name 'SelectedByDefault' -Value $app.SelectedByDefault Add-Member -InputObject $checkbox -MemberType NoteProperty -Name 'SelectedByDefault' -Value $app.SelectedByDefault
Add-Member -InputObject $checkbox -MemberType NoteProperty -Name 'AppIds' -Value @($app.AppId) Add-Member -InputObject $checkbox -MemberType NoteProperty -Name 'AppIds' -Value @($app.AppId)
Add-Member -InputObject $checkbox -MemberType NoteProperty -Name 'AppIdDisplay' -Value $app.AppIdDisplay Add-Member -InputObject $checkbox -MemberType NoteProperty -Name 'AppIdDisplay' -Value $app.AppIdDisplay
Add-Member -InputObject $checkbox -MemberType NoteProperty -Name 'AppNameText' -Value $tbName
Add-Member -InputObject $checkbox -MemberType NoteProperty -Name 'AppDescriptionText' -Value $tbDesc
$checkbox.Add_Checked({ $checkbox.Add_Checked({
$w = $script:MainWindow $w = $script:MainWindow
@@ -435,7 +501,7 @@ function Load-AppsWithList {
-AppRemovalScopeDescription $w.FindName('AppRemovalScopeDescription') ` -AppRemovalScopeDescription $w.FindName('AppRemovalScopeDescription') `
-UserSelectionCombo $w.FindName('UserSelectionCombo') -UserSelectionCombo $w.FindName('UserSelectionCombo')
}) })
AttachShiftClickBehavior -checkbox $checkbox -appsPanel $AppsPanel ` Attach-ShiftClickBehavior -checkbox $checkbox -appsPanel $AppsPanel `
-lastSelectedCheckboxRef ([ref]$script:MainWindowLastSelectedCheckbox) ` -lastSelectedCheckboxRef ([ref]$script:MainWindowLastSelectedCheckbox) `
-updateStatusCallback { -updateStatusCallback {
$w = $script:MainWindow $w = $script:MainWindow
@@ -449,7 +515,7 @@ function Load-AppsWithList {
$AppsPanel.Children.Add($checkbox) | Out-Null $AppsPanel.Children.Add($checkbox) | Out-Null
if (($i + 1) % $batchSize -eq 0) { DoEvents } if (($i + 1) % $batchSize -eq 0) { Invoke-DoEvents }
} }
$sortArrowName = $Window.FindName('SortArrowName') $sortArrowName = $Window.FindName('SortArrowName')
@@ -480,7 +546,26 @@ function Load-AppsWithList {
} }
} }
function Load-AppsIntoMainUI { <#
.SYNOPSIS
Starts asynchronous loading of application checkboxes for the main window.
.PARAMETER Window
The main application window.
.PARAMETER AppsPanel
The panel that receives application checkboxes.
.PARAMETER OnlyInstalledAppsBox
The installed-applications filter control.
.PARAMETER LoadingAppsIndicator
The loading indicator shown until loading completes.
.PARAMETER ImportConfigBtn
The optional import control disabled while loading is in progress.
#>
function Initialize-MainWindowApps {
param( param(
[System.Windows.Window]$Window, [System.Windows.Window]$Window,
[System.Windows.Controls.Panel]$AppsPanel, [System.Windows.Controls.Panel]$AppsPanel,
@@ -492,6 +577,8 @@ function Load-AppsIntoMainUI {
# Prevent concurrent loads # Prevent concurrent loads
if ($script:IsLoadingApps) { return } if ($script:IsLoadingApps) { return }
$script:IsLoadingApps = $true $script:IsLoadingApps = $true
$settingsButton = $Window.FindName('SettingsBtn')
if ($settingsButton) { $settingsButton.IsEnabled = $false }
if ($ImportConfigBtn) { if ($ImportConfigBtn) {
$ImportConfigBtn.IsEnabled = $false $ImportConfigBtn.IsEnabled = $false
@@ -511,7 +598,7 @@ function Load-AppsIntoMainUI {
# Force a render so the loading indicator is visible, then schedule the # Force a render so the loading indicator is visible, then schedule the
# actual loading at Background priority so this call returns immediately. # actual loading at Background priority so this call returns immediately.
# This is critical when called from Add_Loaded: the window must finish # This is critical when called from Add_Loaded: the window must finish
# its initialization before we start a nested message pump via DoEvents. # its initialization before we start a nested message pump via Invoke-DoEvents.
$Window.Dispatcher.Invoke([System.Windows.Threading.DispatcherPriority]::Render, [action] {}) $Window.Dispatcher.Invoke([System.Windows.Threading.DispatcherPriority]::Render, [action] {})
$Window.Dispatcher.BeginInvoke([System.Windows.Threading.DispatcherPriority]::Background, [action] { $Window.Dispatcher.BeginInvoke([System.Windows.Threading.DispatcherPriority]::Background, [action] {
try { try {
@@ -519,16 +606,16 @@ function Load-AppsIntoMainUI {
if ($OnlyInstalledAppsBox.IsChecked -and ($script:WingetInstalled -eq $true)) { if ($OnlyInstalledAppsBox.IsChecked -and ($script:WingetInstalled -eq $true)) {
Write-Host "Retrieving installed apps via winget..." Write-Host "Retrieving installed apps via winget..."
$listOfApps = GetInstalledAppsViaWinget -TimeOut 20 -NonBlocking $listOfApps = Get-WingetInstalledApps -TimeOut 20 -NonBlocking
if ($null -eq $listOfApps) { if ($null -eq $listOfApps) {
Write-Warning "WinGet returned no data (command timed out or failed)" Write-Warning "WinGet returned no data (command timed out or failed)"
Show-MessageBox -Message 'Unable to load list of installed apps via WinGet.' -Title 'Error' -Button 'OK' -Icon 'Error' | Out-Null Show-MessageBox -Message (Get-Translation -Key 'AppSelectionWinGetLoadFailedMessage') -Title (Get-Translation -Key 'ErrorTitle') -Button 'OK' -Icon 'Error' | Out-Null
$OnlyInstalledAppsBox.IsChecked = $false $OnlyInstalledAppsBox.IsChecked = $false
} }
} }
Load-AppsWithList -Window $Window -AppsPanel $AppsPanel -OnlyInstalledAppsBox $OnlyInstalledAppsBox ` Add-AppsToMainWindow -Window $Window -AppsPanel $AppsPanel -OnlyInstalledAppsBox $OnlyInstalledAppsBox `
-LoadingAppsIndicator $LoadingAppsIndicator -ImportConfigBtn $ImportConfigBtn -ListOfApps $listOfApps -LoadingAppsIndicator $LoadingAppsIndicator -ImportConfigBtn $ImportConfigBtn -ListOfApps $listOfApps
} }
catch { catch {
@@ -540,6 +627,8 @@ function Load-AppsIntoMainUI {
} }
finally { finally {
$script:IsLoadingApps = $false $script:IsLoadingApps = $false
$settingsButton = $Window.FindName('SettingsBtn')
if ($settingsButton) { $settingsButton.IsEnabled = $true }
} }
}) | Out-Null }) | Out-Null
} }

Some files were not shown because too many files have changed in this diff Show More