From 08572aa40316415b581274983238543b0c001f83 Mon Sep 17 00:00:00 2001 From: undergroundwires <git@undergroundwires.dev> Date: Sat, 6 Apr 2024 13:23:34 +0200 Subject: [PATCH] win: improve Windows feature disablement scripts - Migrate feature disablement to PowerShell for clarity and robustness. - Improve log outputs and error handling for missing or default-disabled features. This fixes false-positive errors by treating the absence of a targeted feature as a success condition, and treats features disabled by the OS as non-issues. - Fix revert logic to align with OS defaults, correcting previous behavior that indiscriminately enabled features without considering their default state. - Fix usage of incorrect feature name for `LDPPrintService`, correcting attempts to disable a non-existing feature. - Standardize script recommendations for outdated or missing features on modern Windows versions by recommending them on 'Standard' selection, providing clearer guidance for users. - Rename feature-related scripts for consistency with Windows display names, improving consistency and script discoverability. - Expand documentation for all feature-disabling scripts, adding details such as display names, descriptions, and default states, thereby informing users about the specifics and rationale of each script. - Rename `DisableFeature` function to `DisableWindowsFeature` for increased descriptiveness and alignment with PowerShell conventions. - Harmonize the use of the `DisableWindowsFeature` function across scripts targeting various features, including SMBv1 and PowerShell 2.0 downgrade attacks, enhancing consistency and maintainability. - Add code comments in the generated disable/enable feature scripts, improving understandability for users. - Add the ability to revert to default OS behavior for feature enablement/disablement to align with OS defaults. --- src/application/collections/windows.yaml | 599 +++++++++++++++++++---- 1 file changed, 515 insertions(+), 84 deletions(-) diff --git a/src/application/collections/windows.yaml b/src/application/collections/windows.yaml index 012c0f509..b25a867eb 100644 --- a/src/application/collections/windows.yaml +++ b/src/application/collections/windows.yaml @@ -5834,25 +5834,93 @@ actions: - name: Disable unsafe SMBv1 protocol recommend: standard - docs: https://techcommunity.microsoft.com/t5/storage-at-microsoft/stop-using-smb1/ba-p/425858 - code: |- - dism /online /Disable-Feature /FeatureName:"SMB1Protocol" /NoRestart - dism /Online /Disable-Feature /FeatureName:"SMB1Protocol-Client" /NoRestart - dism /Online /Disable-Feature /FeatureName:"SMB1Protocol-Server" /NoRestart - revertCode: |- - dism /online /Enable-Feature /FeatureName:"SMB1Protocol" /NoRestart - dism /Online /Enable-Feature /FeatureName:"SMB1Protocol-Client" /NoRestart - dism /Online /Enable-Feature /FeatureName:"SMB1Protocol-Server" /NoRestart + docs: |- + See: [Stop using SMB1 | techcommunity.microsoft.com](https://techcommunity.microsoft.com/t5/storage-at-microsoft/stop-using-smb1/ba-p/425858) + + ### Overview of default feature statuses + + `SMB1Protocol`: + + | | | + | ---- | --- | + | **Feature name** | `SMB1Protocol` | + | **Display name** | SMB 1.0/CIFS File Sharing Support | + | **Description** | Support for the SMB 1.0/CIFS file sharing protocol, and the Computer Browser protocol. | + | **Default** (Windows 11 ≥ 23H2) | 🔴 Disabled | + | **Default** (Windows 10 ≥ 22H2) | 🔴 Disabled | + + `SMB1Protocol-Client`: + + | | | + | ---- | --- | + | **Feature name** | `SMB1Protocol-Client` | + | **Display name** | SMB 1.0/CIFS Client | + | **Description** | Support for the SMB 1.0/CIFS client for accessing legacy servers. | + | **Default** (Windows 11 ≥ 23H2) | 🔴 Disabled | + | **Default** (Windows 10 ≥ 22H2) | 🔴 Disabled | + + `SMB1Protocol-Server`: + + | | | + | ---- | --- | + | **Feature name** | `SMB1Protocol-Server` | + | **Display name** | SMB 1.0/CIFS Server | + | **Description** | Support for the SMB 1.0/CIFS file server for sharing data with legacy clients and browsing the network neighborhood. | + | **Default** (Windows 11 ≥ 23H2) | 🔴 Disabled | + | **Default** (Windows 10 ≥ 22H2) | 🔴 Disabled | + + call: + - + function: DisableWindowsFeature + parameters: + featureName: SMB1Protocol # Get-WindowsOptionalFeature -FeatureName 'SMB1Protocol' -Online + disabledByDefault: true + - + function: DisableWindowsFeature + parameters: + featureName: SMB1Protocol-Client # Get-WindowsOptionalFeature -FeatureName 'SMB1Protocol-Client' -Online + disabledByDefault: true + - + function: DisableWindowsFeature + parameters: + featureName: SMB1Protocol-Server # Get-WindowsOptionalFeature -FeatureName 'SMB1Protocol-Server' -Online + disabledByDefault: true - name: Enable security against PowerShell 2.0 downgrade attacks recommend: standard - docs: https://www.stigviewer.com/stig/windows_10/2017-02-21/finding/V-70637 - code: |- - dism /online /Disable-Feature /FeatureName:"MicrosoftWindowsPowerShellV2Root" /NoRestart - dism /online /Disable-Feature /FeatureName:"MicrosoftWindowsPowerShellV2" /NoRestart - revertCode: |- - dism /online /Enable-Feature /FeatureName:"MicrosoftWindowsPowerShellV2Root" /NoRestart - dism /online /Enable-Feature /FeatureName:"MicrosoftWindowsPowerShellV2" /NoRestart + docs: |- + See: [The Windows PowerShell 2.0 feature must be disabled on the system. | stigviewer.com](https://web.archive.org/web/20240406114721/https://www.stigviewer.com/stig/windows_10/2017-02-21/finding/V-70637) + + ### Overview of default feature statuses + + `MicrosoftWindowsPowerShellV2`: + + | | | + | ---- | --- | + | **Feature name** | `MicrosoftWindowsPowerShellV2` | + | **Display name** | Windows PowerShell 2.0 Engine | + | **Description** | Adds or Removes Windows PowerShell 2.0 Engine | + | **Default** (Windows 11 ≥ 23H2) | 🟢 Enabled | + | **Default** (Windows 10 ≥ 22H2) | 🟢 Enabled | + + `MicrosoftWindowsPowerShellV2Root`: + + | | | + | ---- | --- | + | **Feature name** | `MicrosoftWindowsPowerShellV2Root` | + | **Display name** | Windows PowerShell 2.0 | + | **Description** | Adds or Removes Windows PowerShell 2.0 | + | **Default** (Windows 11 ≥ 23H2) | 🟢 Enabled | + | **Default** (Windows 10 ≥ 22H2) | 🟢 Enabled | + call: + - + function: DisableWindowsFeature + parameters: + featureName: MicrosoftWindowsPowerShellV2 # Get-WindowsOptionalFeature -FeatureName 'MicrosoftWindowsPowerShellV2' -Online + - + function: DisableWindowsFeature + parameters: + featureName: MicrosoftWindowsPowerShellV2Root # Get-WindowsOptionalFeature -FeatureName 'MicrosoftWindowsPowerShellV2Root' -Online - name: Disable "Windows Connect Now" wizard recommend: standard @@ -15024,31 +15092,66 @@ actions: children: - name: Disable "Direct Play" feature + docs: |- + ### Overview of default feature statuses + + | | | + | ---- | --- | + | **Feature name** | `DirectPlay` | + | **Display name** | DirectPlay | + | **Description** | Enables the installation of DirectPlay component. | + | **Default** (Windows 11 ≥ 23H2) | 🔴 Disabled | + | **Default** (Windows 10 ≥ 22H2) | 🔴 Disabled | call: - function: DisableFeature + function: DisableWindowsFeature parameters: - featureName: DirectPlay + featureName: DirectPlay # Get-WindowsOptionalFeature -FeatureName 'DirectPlay' -Online + disabledByDefault: true - name: Disable "Internet Explorer" feature + docs: |- + ### Overview of default feature statuses + + | | | + | ---- | --- | + | **Feature name** | `Internet-Explorer-Optional-amd64`, `Internet-Explorer-Optional-x84`, `Internet-Explorer-Optional-x64` | + | **Display name** | Internet Explorer 11 | + | **Description** | Finds and displays information and Web sites on the Internet. | + | **Default** (Windows 11 ≥ 23H2) | 🟡 Missing | + | **Default** (Windows 10 ≥ 22H2) | 🟢 Enabled (or 🟡 Missing based on architecture) | call: - - function: DisableFeature + function: DisableWindowsFeature parameters: - featureName: Internet-Explorer-Optional-x64 + featureName: Internet-Explorer-Optional-x64 # Get-WindowsOptionalFeature -FeatureName 'Internet-Explorer-Optional-x64' -Online + treatMissingStateAsOk: true - - function: DisableFeature + function: DisableWindowsFeature parameters: - featureName: Internet-Explorer-Optional-x84 + featureName: Internet-Explorer-Optional-x84 # Get-WindowsOptionalFeature -FeatureName 'Internet-Explorer-Optional-x84' -Online + treatMissingStateAsOk: true - - function: DisableFeature + function: DisableWindowsFeature parameters: - featureName: Internet-Explorer-Optional-amd64 + featureName: Internet-Explorer-Optional-amd64 # Get-WindowsOptionalFeature -FeatureName 'Internet-Explorer-Optional-amd64' -Online + treatMissingStateAsOk: true - name: Disable "Legacy Components" feature + docs: |- + ### Overview of default feature statuses + + | | | + | ---- | --- | + | **Feature name** | `LegacyComponents` | + | **Display name** | Legacy Components | + | **Description** | Controls legacy components in Windows. | + | **Default** (Windows 11 ≥ 23H2) | 🔴 Disabled | + | **Default** (Windows 10 ≥ 22H2) | 🔴 Disabled | call: - function: DisableFeature + function: DisableWindowsFeature parameters: - featureName: LegacyComponents + featureName: LegacyComponents # Get-WindowsOptionalFeature -FeatureName 'LegacyComponents' -Online + disabledByDefault: true - category: Disable server features children: @@ -15057,55 +15160,144 @@ actions: children: - name: Disable "Hyper-V" feature + docs: |- + ### Overview of default feature statuses + + | | | + | ---- | --- | + | **Feature name** | `Microsoft-Hyper-V-All` | + | **Display name** | Hyper-V | + | **Description** | Provides services and management tools for creating and running virtual machines and their resources. | + | **Default** (Windows 11 ≥ 23H2) | 🔴 Disabled | + | **Default** (Windows 10 ≥ 22H2) | 🔴 Disabled | call: - function: DisableFeature + function: DisableWindowsFeature parameters: - featureName: Microsoft-Hyper-V-All + featureName: Microsoft-Hyper-V-All # Get-WindowsOptionalFeature -FeatureName 'Microsoft-Hyper-V-All' -Online + disabledByDefault: true - name: Disable "Hyper-V GUI Management Tools" feature + docs: |- + ### Overview of default feature statuses + + | | | + | ---- | --- | + | **Feature name** | `Microsoft-Hyper-V-Management-Clients` | + | **Display name** | Hyper-V GUI Management Tools | + | **Description** | Includes the Hyper-V Manager snap-in and Virtual Machine Connection tool. | + | **Default** (Windows 11 ≥ 23H2) | 🔴 Disabled | + | **Default** (Windows 10 ≥ 22H2) | 🔴 Disabled | call: - function: DisableFeature + function: DisableWindowsFeature parameters: - featureName: Microsoft-Hyper-V-Management-Clients + featureName: Microsoft-Hyper-V-Management-Clients # Get-WindowsOptionalFeature -FeatureName 'Microsoft-Hyper-V-Management-Clients' -Online + disabledByDefault: true - name: Disable "Hyper-V Management Tools" feature + docs: |- + ### Overview of default feature statuses + + | | | + | ---- | --- | + | **Feature name** | `Microsoft-Hyper-V-Tools-All` | + | **Display name** | Hyper-V Management Tools | + | **Description** | Includes GUI and command-line tools for managing Hyper-V. | + | **Default** (Windows 11 ≥ 23H2) | 🔴 Disabled | + | **Default** (Windows 10 ≥ 22H2) | 🔴 Disabled | call: - function: DisableFeature + function: DisableWindowsFeature parameters: - featureName: Microsoft-Hyper-V-Tools-All + featureName: Microsoft-Hyper-V-Tools-All # Get-WindowsOptionalFeature -FeatureName 'Microsoft-Hyper-V-Tools-All' -Online + disabledByDefault: true # Default: Disabled (tested: Windows 10 22H2, Windows 11 23H2) - name: Disable "Hyper-V Module for Windows PowerShell" feature + docs: |- + ### Overview of default feature statuses + + | | | + | ---- | --- | + | **Feature name** | `Microsoft-Hyper-V-Management-PowerShell` | + | **Display name** | Hyper-V Module for Windows PowerShell | + | **Description** | Includes Windows PowerShell cmdlets for managing Hyper-V. | + | **Default** (Windows 11 ≥ 23H2) | 🔴 Disabled | + | **Default** (Windows 10 ≥ 22H2) | 🔴 Disabled | call: - function: DisableFeature + function: DisableWindowsFeature parameters: - featureName: Microsoft-Hyper-V-Management-PowerShell + featureName: Microsoft-Hyper-V-Management-PowerShell # Get-WindowsOptionalFeature -FeatureName 'Microsoft-Hyper-V-Management-PowerShell' -Online + disabledByDefault: true - name: Disable "Telnet Client" feature - docs: https://web.archive.org/web/20231207105605/https://social.technet.microsoft.com/wiki/contents/articles/38433.windows-10-enabling-telnet-client.aspx + docs: |- + See: [Windows 10: Enabling Telnet Client - TechNet Articles - United States (English) - TechNet Wiki | social.technet.microsoft.com](https://web.archive.org/web/20231207105605/https://social.technet.microsoft.com/wiki/contents/articles/38433.windows-10-enabling-telnet-client.aspx) + + ### Overview of default feature statuses + + | | | + | ---- | --- | + | **Feature name** | `TelnetClient` | + | **Display name** | Telnet Client | + | **Description** | Allows you to connect to other computers remotely. | + | **Default** (Windows 11 ≥ 23H2) | 🔴 Disabled | + | **Default** (Windows 10 ≥ 22H2) | 🔴 Disabled | call: - function: DisableFeature + function: DisableWindowsFeature parameters: - featureName: TelnetClient + featureName: TelnetClient # Get-WindowsOptionalFeature -FeatureName 'TelnetClient' -Online + disabledByDefault: true - name: Disable "Net.TCP Port Sharing" feature - docs: https://web.archive.org/web/20240314102452/https://learn.microsoft.com/en-us/dotnet/framework/wcf/feature-details/net-tcp-port-sharing + docs: |- + See: [Net.TCP Port Sharing - WCF | Microsoft Learn | learn.microsoft.com](https://web.archive.org/web/20240314102452/https://learn.microsoft.com/en-us/dotnet/framework/wcf/feature-details/net-tcp-port-sharing) + + ### Overview of default feature statuses + + | | | + | ---- | --- | + | **Feature name** | `WCF-TCP-PortSharing45` | + | **Display name** | TCP Port Sharing | + | **Description** | TCP Port Sharing | + | **Default** (Windows 11 ≥ 23H2) | 🟢 Enabled | + | **Default** (Windows 10 ≥ 22H2) | 🟢 Enabled | call: - function: DisableFeature + function: DisableWindowsFeature parameters: - featureName: WCF-TCP-PortSharing45 + featureName: WCF-TCP-PortSharing45 # Get-WindowsOptionalFeature -FeatureName 'WCF-TCP-PortSharing45' -Online - name: Disable "SMB Direct" feature - docs: https://web.archive.org/web/20240314102437/https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-direct?tabs=disable + docs: |- + [Improve performance of a file server with SMB Direct | Microsoft Learn | learn.microsoft.com](https://web.archive.org/web/20240314102437/https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-direct?tabs=disable) + + ### Overview of default feature statuses + + | | | + | ---- | --- | + | **Feature name** | `SMB Direct` | + | **Display name** | SMB Direct | + | **Description** | Remote Direct Memory Access (RDMA) support for the SMB 3.x file sharing protocol | + | **Default** (Windows 11 ≥ 23H2) | 🟢 Enabled | + | **Default** (Windows 10 ≥ 22H2) | 🟢 Enabled | call: - function: DisableFeature + function: DisableWindowsFeature parameters: - featureName: SmbDirect + featureName: SmbDirect # Get-WindowsOptionalFeature -FeatureName 'SmbDirect' -Online - name: Disable "TFTP Client" feature + docs: |- + ### Overview of default feature statuses + + | | | + | ---- | --- | + | **Feature name** | `TFTP` | + | **Display name** | TFTP Client | + | **Description** | Transfer files using the Trivial File Transfer Protocol | + | **Default** (Windows 11 ≥ 23H2) | 🔴 Disabled | + | **Default** (Windows 10 ≥ 22H2) | 🔴 Disabled | call: - function: DisableFeature + function: DisableWindowsFeature parameters: - featureName: TFTP + featureName: TFTP # Get-WindowsOptionalFeature -FeatureName 'TFTP' -Online + disabledByDefault: true - category: Disable printing features children: @@ -15114,86 +15306,238 @@ actions: children: - name: Disable "Internet Printing Client" feature + docs: |- + ### Overview of default feature statuses + + | | | + | ---- | --- | + | **Feature name** | `Printing-Foundation-InternetPrinting-Client` | + | **Display name** | Internet Printing Client | + | **Description** | Enables clients to use HTTP to connect to printers on Web print servers | + | **Default** (Windows 11 ≥ 23H2) | 🟢 Enabled | + | **Default** (Windows 10 ≥ 22H2) | 🟢 Enabled | call: - function: DisableFeature + function: DisableWindowsFeature parameters: - featureName: Printing-Foundation-InternetPrinting-Client + featureName: Printing-Foundation-InternetPrinting-Client # Get-WindowsOptionalFeature -FeatureName 'Printing-Foundation-InternetPrinting-Client' -Online - name: Disable "LPD Print Service" feature + docs: |- + ### Overview of default feature statuses + + | | | + | ---- | --- | + | **Feature name** | `Printing-Foundation-LPDPrintService` | + | **Display name** | LPD Print Service | + | **Description** | Makes your Windows computer work as a Line Printer Daemon (LPD) and Remote Line Printer client | + | **Default** (Windows 11 ≥ 23H2) | 🔴 Disabled | + | **Default** (Windows 10 ≥ 22H2) | 🔴 Disabled | call: - function: DisableFeature + function: DisableWindowsFeature parameters: - featureName: LPDPrintService + featureName: Printing-Foundation-LPDPrintService # Get-WindowsOptionalFeature -FeatureName 'Printing-Foundation-LPDPrintService' -Online + disabledByDefault: true - name: Disable "LPR Port Monitor" feature + docs: |- + ### Overview of default feature statuses + + | | | + | ---- | --- | + | **Feature name** | `Printing-Foundation-LPRPortMonitor` | + | **Display name** | LPR Port Monitor | + | **Description** | Enables clients to print to TCP/IP printers connected to a Unix (or VAX) server | + | **Default** (Windows 11 ≥ 23H2) | 🔴 Disabled | + | **Default** (Windows 10 ≥ 22H2) | 🔴 Disabled | call: - function: DisableFeature + function: DisableWindowsFeature parameters: - featureName: Printing-Foundation-LPRPortMonitor + featureName: Printing-Foundation-LPRPortMonitor # Get-WindowsOptionalFeature -FeatureName 'Printing-Foundation-LPRPortMonitor' -Online + disabledByDefault: true - name: Disable "Microsoft Print to PDF" feature + docs: |- + ### Overview of default feature statuses + + | | | + | ---- | --- | + | **Feature name** | `Printing-PrintToPDFServices-Features` | + | **Display name** | Microsoft Print to PDF | + | **Description** | Provides binaries on the system for creating the Microsoft Print to PDF Print Queue | + | **Default** (Windows 11 ≥ 23H2) | 🟢 Enabled | + | **Default** (Windows 10 ≥ 22H2) | 🟢 Enabled | call: - function: DisableFeature + function: DisableWindowsFeature parameters: - featureName: Printing-PrintToPDFServices-Features + featureName: Printing-PrintToPDFServices-Features # Get-WindowsOptionalFeature -FeatureName 'Printing-PrintToPDFServices-Features' -Online - name: Disable "Print and Document Services" feature + docs: |- + ### Overview of default feature statuses + + | | | + | ---- | --- | + | **Feature name** | `Printing-Foundation-Features` | + | **Display name** | Print and Document Services | + | **Description** | Enable print, fax, and scan tasks on this computer | + | **Default** (Windows 11 ≥ 23H2) | 🟢 Enabled | + | **Default** (Windows 10 ≥ 22H2) | 🟢 Enabled | call: - function: DisableFeature + function: DisableWindowsFeature parameters: - featureName: Printing-Foundation-Features + featureName: Printing-Foundation-Features # Get-WindowsOptionalFeature -FeatureName 'Printing-Foundation-Features' -Online - name: Disable "Work Folders Client" feature - docs: https://web.archive.org/web/20240314102358/https://learn.microsoft.com/en-us/windows-server/storage/work-folders/work-folders-overview + docs: |- + See: [Work Folders overview | Microsoft Learn | learn.microsoft.com](https://web.archive.org/web/20240314102358/https://learn.microsoft.com/en-us/windows-server/storage/work-folders/work-folders-overview) + + ### Overview of default feature statuses + + | | | + | ---- | --- | + | **Feature name** | `WorkFolders-Client` | + | **Display name** | Work Folders Client | + | **Description** | Allows file synchronization with a configured file server. | + | **Default** (Windows 11 ≥ 23H2) | 🟢 Enabled | + | **Default** (Windows 10 ≥ 22H2) | 🟢 Enabled | call: - function: DisableFeature + function: DisableWindowsFeature parameters: - featureName: WorkFolders-Client + featureName: WorkFolders-Client # Get-WindowsOptionalFeature -FeatureName 'WorkFolders-Client' -Online - category: Disable XPS support features children: - - - name: Disable "XPS Services" feature - call: - function: DisableFeature - parameters: - featureName: Printing-XPSServices-Features - - - name: Disable "XPS Viewer" feature - call: - function: DisableFeature - parameters: - featureName: Xps-Foundation-Xps-Viewer + - + name: Disable "Microsoft XPS Document Writer" feature + docs: |- + ### Overview of default feature statuses + + | | | + | ---- | --- | + | **Feature name** | `Printing-XPSServices-Features` | + | **Display name** | Microsoft XPS Document Writer | + | **Description** | Provides binaries on the system for creating the XPS Document Writer Print Queue. | + | **Default** (Windows 11 ≥ 23H2) | 🔴 Disabled | + | **Default** (Windows 10 ≥ 22H2) | 🟢 Enabled | + call: + function: DisableWindowsFeature + parameters: + featureName: Printing-XPSServices-Features # Get-WindowsOptionalFeature -FeatureName 'Printing-XPSServices-Features' -Online + disabledByDefault: true + - + name: Disable "XPS Viewer" feature + recommend: standard # Deprecated and missing on modern versions of Windows + docs: |- + This feature has been part of older versions on Windows [1]. + + ### Overview of default feature statuses + + | | | + | ---- | --- | + | **Feature name** | `Xps-Foundation-Xps-Viewer` | + | **Display name** | XPS Viewer | + | **Description** | Allows you to read, copy, print, sign, and set permissions for XPS documents. | + | **Default** (Windows 11 ≥ 23H2) | 🟡 Missing | + | **Default** (Windows 10 ≥ 22H2) | 🟡 Missing | + + [1]: "Unattended Windows Setup Reference | systemscenter.ru" https://web.archive.org/web/20240406125031/https://systemscenter.ru/unattend.en/index.html?page=html%2Fdb43485b-ffad-476f-9b22-97bde41ceb47.htm + call: + function: DisableWindowsFeature + parameters: + featureName: Xps-Foundation-Xps-Viewer # Get-WindowsOptionalFeature -FeatureName 'Xps-Foundation-Xps-Viewer' -Online + treatMissingStateAsOk: true - name: Disable "Media Features" feature + docs: |- + ### Overview of default feature statuses + + | | | + | ---- | --- | + | **Feature name** | `MediaPlayback` | + | **Display name** | Media Features | + | **Description** | Controls media features such as Windows Media Player. | + | **Default** (Windows 11 ≥ 23H2) | 🟢 Enabled | + | **Default** (Windows 10 ≥ 22H2) | 🟢 Enabled | call: - function: DisableFeature + function: DisableWindowsFeature parameters: - featureName: MediaPlayback + featureName: MediaPlayback # Get-WindowsOptionalFeature -FeatureName 'MediaPlayback' -Online - name: Disable "Scan Management" feature + recommend: standard # Deprecated and missing on modern versions of Windows + docs: |- + This feature has been part of older versions on Windows [1]. + + ### Overview of default feature statuses + + | | | + | ---- | --- | + | **Feature name** | `ScanManagementConsole` | + | **Display name** | Scan Management | + | **Description** | Manages distributed scanners, scan processes, and scan servers. | + | **Default** (Windows 11 ≥ 23H2) | 🟡 Missing | + | **Default** (Windows 10 ≥ 22H2) | 🟡 Missing | + + [1]: "Unattended Windows Setup Reference | systemscenter.ru" https://web.archive.org/web/20240406125031/https://systemscenter.ru/unattend.en/index.html?page=html%2Fdb43485b-ffad-476f-9b22-97bde41ceb47.htm call: - function: DisableFeature + function: DisableWindowsFeature parameters: - featureName: ScanManagementConsole + featureName: ScanManagementConsole # Get-WindowsOptionalFeature -FeatureName 'ScanManagementConsole' -Online + treatMissingStateAsOk: true - name: Disable "Windows Fax and Scan" feature + recommend: standard # Deprecated and missing on modern versions of Windows + docs: |- + This feature has been part of older versions on Windows [1]. + + ### Overview of default feature statuses + + | | | + | ---- | --- | + | **Feature name** | `FaxServicesClientPackage` | + | **Display name** | Windows Fax and Scan | + | **Description** | Enable fax and scan tasks on this computer | + | **Default** (Windows 11 ≥ 23H2) | 🟡 Missing | + | **Default** (Windows 10 ≥ 22H2) | 🟡 Missing | + + [1]: "Unattended Windows Setup Reference | systemscenter.ru" https://web.archive.org/web/20240406125031/https://systemscenter.ru/unattend.en/index.html?page=html%2Fdb43485b-ffad-476f-9b22-97bde41ceb47.htm call: - function: DisableFeature + function: DisableWindowsFeature parameters: - featureName: FaxServicesClientPackage + featureName: FaxServicesClientPackage # Get-WindowsOptionalFeature -FeatureName 'FaxServicesClientPackage' -Online + treatMissingStateAsOk: true - name: Disable "Windows Media Player" feature + docs: |- + ### Overview of default feature statuses + + | | | + | ---- | --- | + | **Feature name** | `WindowsMediaPlayer` | + | **Display name** | Windows Media Player | + | **Description** | Windows Media Player | + | **Default** (Windows 11 ≥ 23H2) | 🟢 Enabled | + | **Default** (Windows 10 ≥ 22H2) | 🟢 Enabled | call: - function: DisableFeature + function: DisableWindowsFeature parameters: - featureName: WindowsMediaPlayer + featureName: WindowsMediaPlayer # Get-WindowsOptionalFeature -FeatureName 'WindowsMediaPlayer' -Online - name: Disable "Windows Search" feature + docs: |- + ### Overview of default feature statuses + + | | | + | ---- | --- | + | **Feature name** | `SearchEngine-Client-Package` | + | **Display name** | Windows Search | + | **Description** | Provides content indexing, property caching, and search results for files, e-mail, and other content. | + | **Default** (Windows 11 ≥ 23H2) | 🟢 Enabled | + | **Default** (Windows 10 ≥ 22H2) | 🟢 Enabled | call: - function: DisableFeature + function: DisableWindowsFeature parameters: - featureName: SearchEngine-Client-Package + featureName: SearchEngine-Client-Package # Get-WindowsOptionalFeature -FeatureName 'SearchEngine-Client-Package' -Online - category: Remove on-demand capabilities and features docs: https://web.archive.org/web/20240314062310/https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/features-on-demand-non-language-fod?view=windows-11#fods-that-are-not-preinstalled-but-may-need-to-be-preinstalled @@ -16269,11 +16613,98 @@ functions: code: reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\{{ $executableNameWithExtension }}" /v "Debugger" /t REG_SZ /d "%WINDIR%\System32\taskkill.exe" /f revertCode: reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\{{ $executableNameWithExtension }}" /v "Debugger" /f 2>nul - - name: DisableFeature + name: DisableWindowsFeature + docs: |- + This function manages the enabling and disabling of specified Windows features. + Its primary role is to disable a target feature, with options to handle cases where the feature is + absent or to maintain its default state upon reversal. parameters: - - name: featureName - code: dism /Online /Disable-Feature /FeatureName:"{{ $featureName }}" /NoRestart - revertCode: dism /Online /Enable-Feature /FeatureName:"{{ $featureName }}" /NoRestart + - name: featureName # The name of the Windows feature to be disabled + - name: disabledByDefault # Specifies whether the feature is disabled by default in the operating system. + # If set to true, the function will not re-enable the feature during a revert operation. + optional: true + - name: treatMissingStateAsOk # Determines how to handle scenarios where the target feature is missing. When set to true,' + # the function gracefully exits if the feature cannot be found, rather than throwing an error. + optional: false + call: + - + function: Comment + parameters: + codeComment: Disable the "{{ $featureName }}" feature + revertCodeComment: Revert the '{{ $featureName }}' feature to its default settings + - + function: RunPowerShell + parameters: + code: |- + $featureName = '{{ $featureName }}' + $feature = Get-WindowsOptionalFeature ` + -FeatureName "$featureName" ` + -Online ` + -ErrorAction Stop + if (-Not $feature) { + Write-Output "Skipping: The feature `"$featureName`" is not found. No action required." + Exit 0 + } + if ($feature.State -eq [Microsoft.Dism.Commands.FeatureState]::Disabled) { + Write-Output "Skipping: The feature `"$featureName`" is already disabled. No action required." + Exit 0 + } + try { + Write-Host "Disabling feature: `"$featureName`"." + Disable-WindowsOptionalFeature ` + -FeatureName "$featureName" ` + -Online ` + -NoRestart ` + -LogLevel ([Microsoft.Dism.Commands.LogLevel]::Errors) ` + -WarningAction SilentlyContinue ` + -ErrorAction Stop ` + | Out-Null + } catch { + Write-Error "Failed to disable the feature `"$featureName`": $($_.Exception.Message)" + Exit 1 + } + Write-Output "Successfully disabled the feature `"$featureName`"." + Exit 0 + revertCode: |- + $featureName = '{{ $featureName }}' + $treatMissingStateAsOk = {{ with $treatMissingStateAsOk }} $true # {{ end }} $false + $disabledByDefault = {{ with $disabledByDefault }} $true # {{ end }} $false + $feature = Get-WindowsOptionalFeature ` + -FeatureName "$featureName" ` + -Online ` + -ErrorAction Stop + if (-Not $feature) { + if ($treatMissingStateAsOk) { + Write-Output "Skipping: The feature `"$featureName`" is not found. No action required." + Exit 0 + } + Write-Error "Failed to revert changes to the feature `"$featureName`". The feature is not found." + Exit 1 + } + if ($feature.State -eq [Microsoft.Dism.Commands.FeatureState]::Enabled) { + Write-Output "Skipping: The feature `"$featureName`" is already enabled. No action required." + Exit 0 + } + if ($disabledByDefault) { + Write-Output "Skipping: The feature `"$featureName`" is already disabled and this is the default configuration." + Exit 0 + } + try { + Write-Host "Enabling feature: `"$featureName`"." + Enable-WindowsOptionalFeature ` + -FeatureName "$featureName" ` + -Online ` + -NoRestart ` + -LogLevel ([Microsoft.Dism.Commands.LogLevel]::Errors) ` + -WarningAction SilentlyContinue ` + -ErrorAction Stop ` + | Out-Null + } catch { + Write-Error "Failed to enable feature `"$featureName`": $($_.Exception.Message)" + Exit 1 + } + Write-Output "Successfully enabled the feature `"$featureName`"." + Exit 0 - name: UninstallStoreApp parameters: