What's New in PowerShell 7.4 (preview)
PowerShell 7.4-preview.5 includes the following features, updates, and breaking changes. PowerShell 7.4 is now built on .NET 8.0.0-preview.7.
For a complete list of changes, see the CHANGELOG in the GitHub repository.
Breaking changes
- Nano server docker images aren't available for this release
- Added the ProgressAction parameter to the Common Parameters
- Update some PowerShell APIs to throw ArgumentException instead of ArgumentNullException when the argument is an empty string (#19215) (Thanks @xtqqczze!)
- Remove code related to #requires -pssnapin (#19320)
Test-Json
now uses Json.Schema.Net instead of Newtonsoft.Json.Schema. With this change,Test-Json
no longer supports the older Draft 4 schemas. (#18141) (Thanks @gregsdennis!)- Output from
Test-Connection
now includes more detailed information about TCP connection tests
Installer updates
The Windows MSI package now provides an option to disable PowerShell telemetry during installation. For more information, see Install the msi package from the command line.
PowerShellGet v3
As of PowerShell 7.4-preview.4, Microsoft.PowerShell.PSResourceGet (also known as PowerShellGet v3) is now included in PowerShell 7.4. This module is installed side-by-side with PowerShellGet v2.2.5 and PackageManagement v1.4.8.1.
For more information, see the documentation for Microsoft.PowerShell.PSResourceGet.
Tab completion improvements
Many thanks to @MartinGC94 and others for all the work on improving tab completion.
- Fix issue when completing the first command in a script with an empty array expression ([#18355)
- Fix positional argument completion (#17796)
- Prioritize the default parameter set when completing positional arguments (#18755)
- Improve pseudo binding for dynamic parameters (#18030)
- Improve type inference of hashtable keys (#17907)
- Fix type inference error for empty return statements (#18351)
- Improve type inference for Get-Random (#18972)
- Fix type inference for all scope variables (#18758)
- Improve enumeration of inferred types in pipeline (#17799)
- Add completion for values in comparisons when comparing Enums (#17654)
- Add property assignment completion for enums (#19178)
- Fix completion for PSCustomObject variable properties (#18682)
- Fix member completion in attribute argument (#17902)
- Exclude redundant parameter aliases from completion results (#19382)
- Fix class member completion for classes with base types (#19179)
- Add completion for Using keywords (#16514)
- Fix TabExpansion2 variable leak when completing variables (#18763)
- Enable completion of variables across ScriptBlock scopes (#19819)
- Fix completion of the foreach statement variable (#19814)
- Fix variable type inference precedence (#18691)
- Fix member completion for PowerShell Enum class (#19740)
- Fix parsing for array literals in index expressions in method calls (#19224)
- Improve path completion (#19489)
- Fix an indexing out of bound error in CompleteInput for empty script input (#19501)
- Improve variable completion performance (#19595)
- Improve Hashtable key completion for type constrained variable assignments, nested Hashtables and more (#17660)
- Infer external application output as strings (#19193)
- Update parameter completion for enums to exclude values not allowed by
ValidateRange
attributes (#17750) (Thanks @fflaten!). - Fix dynamic parameter completion (#19510)
- Add completion for variables assigned by the Data statement (#19831)
Web cmdlet improvements
Many thanks to @CarloToso and others for all the work on improving web cmdlets.
- Webcmdlets add 308 to redirect codes and small cleanup (#18536)
- Complete the progress bar rendering in Invoke-WebRequest when downloading is complete or cancelled (#18130)
- Web cmdlets get Retry-After interval from response headers if the status code is 429 (#18717)
- Web cmdlets set default charset encoding to UTF8 (#18219)
- Preserve WebSession.MaximumRedirection from changes (#19190)
- WebCmdlets parse XML declaration to get encoding value, if present. (#18748)
- Fix using xml -Body in webcmdlets without an encoding (#19281)
- Adjust PUT method behavior to POST one for default content type in WebCmdlets (#19152)
- Take into account ContentType from Headers in WebCmdlets (#19227)
- Allow to preserve the original HTTP method by adding -PreserveHttpMethodOnRedirect to Web cmdlets (#18894)
- Webcmdlets display an error on https to http redirect (#18595)
- Add AllowInsecureRedirect switch to Web cmdlets (#18546)
- Improve verbose message in web cmdlets when content length is unknown (#19252)
- Build the relative URI for links from the response in
Invoke-WebRequest
(#19092) - Fix redirection for
-CustomMethod POST
in WebCmdlets (#19111) - Dispose previous response in Webcmdlets (#19117)
- Improve
Invoke-WebRequest
xml and json errors format (#18837) - Add ValidateNotNullOrEmpty to OutFile and InFile parameters of WebCmdlets (#19044)
- HttpKnownHeaderNames update headers list (#18947)
Invoke-RestMethod -FollowRelLink
fix links containing commas (#18829)- Fix bug with managing redirection and KeepAuthorization in Web cmdlets (#18902)
- Add StatusCode to HttpResponseException (#18842)
- Support HTTP persistent connections in Web Cmdlets (#19249) (Thanks @stevenebutler!)
- Small cleanup
Invoke-RestMethod
(#19490) - Improve the verbose message of WebCmdlets to show correct HTTP version (#19616)
- Add FileNameStar to MultipartFileContent in WebCmdlets (#19467)
- Fix HTTP status from 409 to 429 for WebCmdlets to get retry interval from Retry-After header. (#19622) (Thanks @mkht!)
- Change
-TimeoutSec
to-ConnectionTimeoutSeconds
and add-OperationTimeoutSeconds
to web cmdlets (#19558) (Thanks @stevenebutler!) Other cmdlets - Support Ctrl+c when connection hangs while reading data in WebCmdlets (#19330) (Thanks @stevenebutler!)
- Support Unix domain socket in WebCmdlets (#19343)
Other cmdlet improvements
- Add output types to Format commands (#18746) (Thanks @MartinGC94!)
- Add output type attributes for
Get-WinEvent
(#17948) (Thanks @MartinGC94!) - Add Path and LiteralPath parameters to
Test-Json
cmdlet (#19042) (Thanks @ArmaanMcleod!) - Add NoHeader parameter to
ConvertTo-Csv
andExport-Csv
cmdlets (#19108) (Thanks @ArmaanMcleod!) - Add Confirm and WhatIf parameters to
Stop-Transcript
(#18731) (Thanks @JohnLBevan!) - Add FuzzyMinimumDistance parameter to
Get-Command
(#18261) - Make Encoding parameter able to take
ANSI
encoding in PowerShell (#19298) (Thanks @CarloToso!) - Add progress to
Copy-Item
(#18735) Update-Help
now reports an error when using implicit culture on non-US systems. (#17780) (Thanks @dkaszews!)- Do not require activity when creating a completed progress record (#18474) (Thanks @MartinGC94!)
- Disallow negative values for
Get-Content
cmdlet parameters-Head
and-Tail
(#19715) (Thanks @CarloToso!) - Make
Update-Help
throw proper error when current culture is not associated with a language (#19765) (Thanks @josea!) - Allow combining of
-Skip
and-SkipLast
parameters inSelect-Object
cmdlet. (#18849) (Thanks @ArmaanMcleod!) - Add
Get-SecureRandom
cmdlet (#19587) Set-Clipboard -AsOSC52
for remote usage (#18222) (Thanks @dkaszews!)- Speed up
Resolve-Path
relative path resolution (#19171) (Thanks @MartinGC94!) - Added the switch parameter
-CaseInsensitive
toSelect-Object
andGet-Unique
cmdlets (#19683) (Thanks @ArmaanMcleod!) Restart-Computer
andStop-Computer
should fail with error when not running via sudo on Unix (#19824)
Engine improvements
Updates to $PSStyle
- Adds Dim and DimOff properties (#18653)
- Added static methods to the PSStyle class that map foreground and background ConsoleColor values to ANSI escape sequences (#17938)
- New formatting properties added by experimental features
- Add support of respecting
$PSStyle.OutputRendering
on the remote host (#19601)
Other Engine updates
- Make PowerShell class not affiliate with Runspace when declaring the
NoRunspaceAffinity
attribute (#18138) - Add the
ValidateNotNullOrWhiteSpace
attribute (#17191) (Thanks @wmentha!) - Add
sqlcmd
to the list for legacy argument passing (#18559) - Add the function
cd~
(#18308) (Thanks @GigaScratch!) - Fix array type parsing in generic types (#19205) (Thanks @MartinGC94!)
- Fix wildcard globbing in root of device paths (#19442) (Thanks @MartinGC94!)
- Add a public API for getting locations of PSModulePath elements (#19422)
- Fix incorrect string to type conversion (#19560) (Thanks @MartinGC94!)
- Fix slow execution when many breakpoints are used (#14953) (Thanks @nohwnd!)
- Remove code related to
#requires -pssnapin
(#19320)
Experimental Features
PowerShell 7.4 introduces the following experimental features:
- PSCustomTableHeaderLabelDecoration - Add formatting differentiation for table header labels
that aren't property members.
- This feature also adds the CustomTableHeaderLabel property to
$PSStyle.Formatting
that allows you to change the formatting of the header label.
- This feature also adds the CustomTableHeaderLabel property to
- PSFeedbackProvider - Replaces the hard-coded suggestion framework with an extensible
feedback provider.
- This feature also adds the FeedbackProvider and FeedbackText properties to
$PSStyle.Formatting
that allow you to change the formatting of feedback messages.
- This feature also adds the FeedbackProvider and FeedbackText properties to
- PSModuleAutoLoadSkipOfflineFiles - Module discovery now skips over files that are marked by cloud providers as not fully on disk.
- PSCommandWithArgs - Add support for passing arguments to commands as a single string
- PSConstrainedAuditLogging - Add support for logging message about code that would not be allowed in Constrained language mode
- PSNativeCommandPreserveBytePipe - Preserves the byte-stream data when redirecting the stdout stream of a native command to a file or when piping byte-stream data to the stdin stream of a native command.
- PSWindowsNativeCommandArgPassing - Changes the default value of
$PSNativeCommandArgumentPassing
on Windows
PowerShell 7.4 changed the following experimental features:
- PSNativeCommandErrorActionPreference -
$PSNativeCommandUseErrorActionPreference
is set to$true
when feature is enabled (#18695) - PSCommandNotFoundSuggestion - This feature now uses an extensible feedback provider rather than hard-coded suggestions (#18726)
For more information about the Experimental Features, see Using Experimental Features.
Feedback
Submit and view feedback for