🛡️ Essential 8 Guide

Implementation guidance for Australian Essential Eight controls in Microsoft environments - ISM controls with PSPF mappings

About
HOME ← ISM-1585
ISM-1622 →

Windows PowerShell 2.0 is disabled or removed

Property Value
ISM Control ISM-1621
Revision 1
Updated Sep-21
Guideline Not provided
Section Operating system hardening
Topic PowerShell
Essential Eight ML3
PSPF Levels NC, OS, P, S, TS

Summary

Disabling Windows PowerShell 2.0 reduces attack surface by removing a legacy execution engine. Microsoft guidance for Essential Eight user application hardening maps this outcome to deployment of UserApplicationHardening-RemoveFeatures.ps1 via Intune scripts; this script disables Windows PowerShell 2.0 and .NET Framework 3.5 (including .NET 2.0 and 3.0), and can also remove Internet Explorer 11 on supported Windows 10 platforms.12

[!IMPORTANT] PowerShell 2.0 predates Antimalware Scan Interface (AMSI), script-block logging (Event 4104), and module logging. An attacker can invoke powershell.exe -Version 2 to run malicious code that bypasses all modern logging and detection. Critically, the legacy v2 engine also bypasses Constrained Language Mode (CLM) enforced by WDAC (ISM-1622): a v2 session always runs in Full Language mode regardless of any App Control policy. These two controls (ISM-1621 and ISM-1622) are complementary — both must be applied together for effective protection.

Design Decision

[!NOTE] The UserApplicationHardening-RemoveFeatures.ps1 script will be deployed via Intune Platform scripts to disable Windows PowerShell 2.0 and .NET Framework 3.5. On supported Windows 10 systems, the script also disables Internet Explorer 11. The script will be assigned to the relevant deployment group for execution.

Prerequisites

Implementation Steps

Using UserApplicationHardening-RemoveFeatures.ps1 Script with Intune Platform scripts

  1. In Intune admin center, go to Devices > Scripts and remediations > Platform scripts > Add > Windows 10 and later and upload UserApplicationHardening-RemoveFeatures.ps1.3

  2. Configure script settings as follows:

    • Run this script using the logged on credentials: No
    • Enforce script signature check: No
    • Run script in 64-bit PowerShell Host: No1
  3. Assign the script to the required Microsoft Entra device/user group based on your deployment scope.3

  4. Monitor deployment using Device status / User status and, when troubleshooting is required, review IME logs on the client at C:\ProgramData\Microsoft\IntuneManagementExtension\Logs (for example AgentExecutor.log and IntuneManagementExtension.log).23

  5. Verify the feature is disabled on each device by running:

    Get-WindowsOptionalFeature -Online -FeatureName MicrosoftWindowsPowerShellV2Root
    

    The output should show State : Disabled. A state of Enabled indicates the feature was not removed and the script should be re-triggered or the feature disabled manually with:

    Disable-WindowsOptionalFeature -Online -FeatureName MicrosoftWindowsPowerShellV2Root
    

Note: This script also disables .NET Framework 3.5 (includes .NET 2.0 and 3.0) and Windows PowerShell 2.0.
1

HOME ← ISM-1585
ISM-1622 →