We’re excited to announce the General Availability of PowerShell 7.7, the next Standard Term Support
(STS) release of PowerShell. PowerShell 7.7 is built on .NET 11, continuing the alignment between
PowerShell and the modern .NET platform.
PowerShell 7.7 focuses on security hardening, new and improved commands, and reliability across the
engine, remoting, and interactive shell experience.
Notable areas of improvement include:
- Security hardening across Constrained Language Mode, remoting, and help
- New commands and parameters
- More predictable handling of switch parameters
- Startup, tab completion, and file system fixes
- Module updates
For support dates, see the PowerShell support lifecycle article.
Highlights
- PowerShell 7.7 is built on .NET 11
- PowerShell 7.7 includes updates to the following modules:
- Microsoft.PowerShell.PSResourceGet
- Microsoft.PowerShell.Archive
- New and improved commands
- Added the
New-TemporaryDirectorycmdlet - Added the
-Extensionparameter toJoin-Path - Added the
-ExcludePropertyparameter toFormat-Table,Format-List, andFormat-Custom Get-AuthenticodeSignaturenow returns aSubjectAlternativeNameproperty- Added a
ToRegex()method toWildcardPattern New-Guidnow generates version 7 (time-sortable) UUIDs by default
- Added the
- Security hardening
- Additional protections for Constrained Language Mode, including property assignment on
non-core objects - Stronger argument and frame validation in PowerShell remoting, and restored schema validation
in the CIM cmdlets - Implicit remoting protections now apply to resolved aliases
- Stricter validation when extracting updatable help
- Tighter file permissions for the fallback temporary home directory on Unix platforms
Test-Jsonno longer resolves external schema references unless you ask it to
- Additional protections for Constrained Language Mode, including property assignment on
- More predictable switch parameters
- Explicit
-Switch:$falsevalues are now respected bySplit-Path,New-PSSession,
Test-Connection,Get-TimeZone,Get-Random,Get-SecureRandom,Get-Uptime, and
New-Guid, and by the operator parameters ofWhere-Object
- Explicit
- Reliability and quality improvements
- A damaged or unreadable per-user
powershell.config.jsonno longer stops PowerShell from
starting - Fixed
Resolve-Path -Relativefor names that begin with a dot - Fixed duplicate results from
Get-Commandfuzzy matching - Fixed
Clear-Hostfor remote Windows sessions from non-Windows platforms - Fixed tab completion of positional parameters and completion for
$PSBoundParameters.Keys - Improved handling of custom argument completers that return empty or null results
- Fixed
pwsh -filedot-sourcing of advanced-function scripts - Fixed progress bar rendering for double-width Unicode characters
- A damaged or unreadable per-user
- Telemetry now respects the Windows diagnostics and feedback setting
A quick example
New-TemporaryDirectory creates a uniquely named directory in the system temp folder and returns a
DirectoryInfo object. Use -Prefix to make the directory easier to recognize:
# Create a uniquely named directory in the system temp folder
$workDir = New-TemporaryDirectory -Prefix build
$workDir.FullName
# Remove it when you're done
Remove-Item -LiteralPath $workDir.FullName -Recurse
Breaking changes
PowerShell 7.7 includes a small number of breaking changes. Review them before you upgrade
production scripts.
New-Guidgenerates version 7 (time-sortable) UUIDs by default instead of version 4. Use
[guid]::NewGuid()when you need a fully random GUID.Format-Table,Format-List, andFormat-Customnow validate that-Propertyis not null or
empty.- Null-or-empty argument validation now throws
System.ArgumentException. - Explicit false values for
Where-Objectoperator switches, such as-EQ:$false, are now handled correctly.
Other behavior changes
These changes might also affect existing scripts:
- The update notification feature was removed from PowerShell.
Test-Jsonrequires-FetchExternalReferenceto resolve external schema references.Export-Csvno longer accepts-Appendtogether with-NoHeader. Using-NoTypeInformation
on the CSV cmdlets now writes a deprecation warning and has no effect.Get-ChildItem -Namewith-Recursenow returns matching files in subdirectories when the path
contains a wildcard or names a file.- Constrained Language Mode restricts property assignment on non-core objects, including through
ForEach().
Community contributions
PowerShell is built by a global community of users and contributors. Thank you to everyone who
filed issues, tested previews, improved docs, and submitted fixes during the PowerShell 7.7
release cycle.
We want to give a special thanks to the community members who spent the most time helping
others in the repository this release:
- Top pull request commenters: @iSazonov, @muffy86, and @KirtiRamchandani
- Top issue commenters: @mklement0, @237dmitry, and @rhubarb-geek-nz
The following individuals contributed code to the PowerShell 7.7 release:
- @adamdriscoll, @amritanand-py, @behradbhrmi, @cuiweixie, @jborean93
- @jorgeasaurus, @kasperk81, @KirtiRamchandani, @logiclrd, @MartinGC94
- @MathiasMagnus, @mikkas456, @powercode, @reabr, @rwp0
- @scuzqy, @SufficientDaikon, @ThioJoe, @trackd, @xtqqczze
- @yotsuda, @yuunnn
Call to action
Install PowerShell 7.7 now.
For more information, see the following articles:
Looking ahead
We continue to work on future releases of PowerShell. Preview releases will continue to provide
early access to new capabilities and improvements, and your feedback on them helps us ship with
confidence.
PowerShell Team
The post Announcing PowerShell 7.7 GA Release appeared first on PowerShell Team.


