powershell-2025-changes

安装量: 54
排名: #13615

安装

npx skills add https://github.com/josiahsiegel/claude-plugin-marketplace --skill powershell-2025-changes

PowerShell 2025 Breaking Changes & Migrations Critical changes, deprecations, and migration paths for PowerShell in 2025. PowerShell 2.0 Removal (August-September 2025) What's Removed PowerShell 2.0 has been completely removed from: Windows 11 version 24H2 (August 2025) Windows Server 2025 (September 2025) Why: Security improvements, reduced attack surface, legacy code cleanup Migration Path

Check if PowerShell 2.0 is installed

Get-WindowsOptionalFeature

Online

FeatureName MicrosoftWindowsPowerShellV2Root

If you still need PowerShell 2.0 (NOT RECOMMENDED)

- Use older Windows versions

- Use Windows containers with older base images

- Upgrade scripts to PowerShell 5.1 or 7+

Recommended: Migrate to PowerShell 7.5+

winget install Microsoft . PowerShell Action Required: Audit all scripts and remove -Version 2.0 parameters from any PowerShell invocations. MSOnline & AzureAD Module Retirement Retirement Timeline Module Stop Working Retirement Complete MSOnline Late May 2025 May 31, 2025 AzureAD March 30, 2025 After July 1, 2025 Critical: These modules will stop functioning - not just deprecated, but completely non-functional . Migration Path From MSOnline/AzureAD to Microsoft.Graph:

OLD (MSOnline) - STOPS WORKING MAY 2025

Connect-MsolService Get-MsolUser Set-MsolUser - UserPrincipalName "user@domain.com" - UsageLocation "US"

NEW (Microsoft.Graph 2.32.0)

Connect-MgGraph

Scopes "User.ReadWrite.All" Get-MgUser Update-MgUser - UserId "user@domain.com" - UsageLocation "US"

OLD (AzureAD) - STOPS WORKING MARCH 2025

Connect-AzureAD Get-AzureADUser New-AzureADUser - DisplayName "John Doe" - UserPrincipalName "john@domain.com"

NEW (Microsoft.Graph 2.32.0)

Connect-MgGraph

Scopes "User.ReadWrite.All" Get-MgUser New-MgUser - DisplayName "John Doe" - UserPrincipalName "john@domain.com" Alternative: Use Microsoft Entra PowerShell module (successor to AzureAD) Install-Module - Name Microsoft . Graph . Entra - Scope CurrentUser Connect-Entra Get-EntraUser Common Command Mappings MSOnline/AzureAD Microsoft.Graph Notes Get-MsolUser / Get-AzureADUser Get-MgUser Requires User.Read.All scope Get-MsolGroup / Get-AzureADGroup Get-MgGroup Requires Group.Read.All scope Get-MsolDevice / Get-AzureADDevice Get-MgDevice Requires Device.Read.All scope Connect-MsolService / Connect-AzureAD Connect-MgGraph Scope-based permissions WMIC Removal (Windows 11 25H2) What's Removed Windows Management Instrumentation Command-line (WMIC) tool removed after upgrading to Windows 11 25H2+. Migration Path From WMIC to PowerShell WMI/CIM:

OLD (WMIC) - REMOVED

wmic process list brief wmic os get caption

NEW (PowerShell CIM)

Get-CimInstance

ClassName Win32_Process | Select-Object Name , ProcessId , CommandLine Get-CimInstance - ClassName Win32_OperatingSystem | Select-Object Caption , Version

For detailed process info

Get-Process | Format-Table Name , Id , CPU , WorkingSet - AutoSize

For system info

Get-ComputerInfo | Select-Object WindowsProductName , WindowsVersion PowerShellGet → PSResourceGet Migration Modern Package Management (2025) PSResourceGet is the official successor to PowerShellGet (2x faster, actively developed).

Install PSResourceGet (ships with PowerShell 7.4+)

Install-Module

Name Microsoft . PowerShell . PSResourceGet - Force

New commands (PSResourceGet)

Install-PSResource

Name Az

Scope CurrentUser

Replaces Install-Module

Find-PSResource

Name "Azure"

Replaces Find-Module

Update-PSResource

Name Az

Replaces Update-Module

Get-InstalledPSResource

Replaces Get-InstalledModule

Compatibility layer available for legacy scripts

Your old Install-Module commands still work but call PSResourceGet internally

Performance Comparison:
PowerShellGet
10-15 seconds to install module
PSResourceGet
5-7 seconds to install module (2x faster) Test-Json Schema Changes Breaking Change (PowerShell 7.4+) Test-Json now uses JsonSchema.NET instead of Newtonsoft.Json.Schema . Impact: No longer supports Draft 4 JSON schemas.

OLD (Draft 4 schema) - NO LONGER SUPPORTED

$schema = @ " { " $schema ": " http: / / json-schema . org/draft-04/schema

",

"type" : "object" } "@ Test-Json -Json $json -Schema $schema

FAILS in PowerShell 7.4+

NEW (Draft 6+ schema) - SUPPORTED

$schema = @" { " $schema " : "http://json-schema.org/draft-06/schema#" , "type" : "object" } "@ Test-Json - Json $json - Schema $schema

WORKS

Requires -PSSnapin Removed

Breaking Change (PowerShell 7.4+) All code related to

Requires -PSSnapin

has been removed.

OLD (PowerShell 5.1 and earlier)

Requires -PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn

NEW (Use modules instead)

Requires -Modules ExchangeOnlineManagement

Import-Module ExchangeOnlineManagement Connect-ExchangeOnline Security Hardening (2025 Standards) Just Enough Administration (JEA) JEA is now a security requirement for production environments:

Create JEA session configuration

New-PSSessionConfigurationFile

SessionType RestrictedRemoteServer `

Path "C:\JEA\RestrictedAdmin.pssc" - VisibleCmdlets @ { Name = 'Restart-Service' Parameters = @ { Name = 'Name' ; ValidateSet = 'Spooler' } } - LanguageMode NoLanguage

Register JEA endpoint

Register-PSSessionConfiguration

Name RestrictedAdmin `

Path "C:\JEA\RestrictedAdmin.pssc" ` - Force

Connect with limited privileges

Enter-PSSession

ComputerName Server01

ConfigurationName RestrictedAdmin Windows Defender Application Control (WDAC) WDAC replaces AppLocker for PowerShell script control:

Create WDAC policy for PowerShell scripts

New-CIPolicy

FilePath "C:\WDAC\PowerShellPolicy.xml" - ScanPath "C:\Scripts" - Level FilePublisher ` - Fallback Hash

Convert to binary and deploy

ConvertFrom-CIPolicy

XmlFilePath "C:\WDAC\PowerShellPolicy.xml" ` - BinaryFilePath "C:\Windows\System32\CodeIntegrity\SIPolicy.p7b" Constrained Language Mode Constrained Language Mode is now recommended for all users without admin privileges:

Check current language mode

$ExecutionContext . SessionState . LanguageMode

Output: FullLanguage (admin) or ConstrainedLanguage (standard user)

Set system-wide constrained language mode via Group Policy or Environment Variable

Set HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment__PSLockdownPolicy = 4

PowerShell 7.6 Preview Features
Current Status (October 2025)
PowerShell 7.6.0 Preview 5 available (built on .NET 9.0.101)
New Features:
PSRedirectToVariable
Allow redirecting to a variable
Module Rename
ThreadJob → Microsoft.PowerShell.ThreadJob
PSResourceGet 1.1.0
Improved performance and Azure Artifacts support

Check PowerShell version

$PSVersionTable . PSVersion

7.5.4 (stable) or 7.6.0-preview.5

.NET version

[System.Runtime.InteropServices.RuntimeInformation] ::FrameworkDescription

.NET 9.0.101

Migration Checklist Immediate Actions Required (2025) Audit MSOnline/AzureAD usage - Migrate to Microsoft.Graph 2.32.0 before May 2025 Remove PowerShell 2.0 references - Upgrade to PowerShell 7.5+ Replace WMIC commands - Use Get-CimInstance/Get-Process Update JSON schemas - Migrate Draft 4 to Draft 6+ Remove PSSnapin requirements - Convert to modules Adopt PSResourceGet - Faster, modern package management Implement JEA - Role-based access control for production Enable WDAC - Application control for PowerShell scripts Test Constrained Language Mode - For non-admin users Recommended Actions Upgrade to PowerShell 7.5.4 - Latest stable with .NET 9 Adopt Az 14.5.0 - Latest Azure module with zone redundancy Use Microsoft.Graph 2.32.0 - Actively maintained Graph SDK Enable Script Block Logging - Security auditing Implement Code Signing - For production scripts Use Azure Key Vault - For credential management Testing Migration

Test for deprecated module usage

Get-Module MSOnline , AzureAD - ListAvailable

If found, plan migration immediately

Test for PowerShell 2.0 dependencies

Get-Content "script.ps1" | Select-String - Pattern "powershell.exe -Version 2"

If found, remove version parameter

Test for WMIC usage

Get-ChildItem

Path "C:\Scripts" - Recurse - Filter "*.ps1" | Select-String - Pattern "wmic" | Select-Object Path , Line

Verify PowerShell version compatibility

Requires -Version 7.0

Test-Path $PSCommandPath

Ensures script is PowerShell 7+

Resources PowerShell 7.5 Release Notes MSOnline/AzureAD Retirement Info PSResourceGet Documentation JEA Documentation WDAC Documentation Last Updated: October 2025

返回排行榜