11---
22description : Lists the currently available experimental features and how to use them.
3- ms.date : 11/21 /2025
3+ ms.date : 12/09 /2025
44title : Using Experimental Features in PowerShell
55---
66# Using Experimental Features in PowerShell
@@ -15,14 +15,14 @@ breaking changes.
1515> [ !CAUTION]
1616> Experimental features aren't intended to be used in production since the changes are allowed to be
1717> breaking. Experimental features aren't officially supported. However, we appreciate any feedback
18- > and bug reports. You can file issues in the [ GitHub source repository] [ 16 ] .
18+ > and bug reports. You can file issues in the [ GitHub source repository] [ 17 ] .
1919
2020For more information about enabling or disabling these features, see
2121[ about_Experimental_Features] [ 05 ] .
2222
2323## Experimental feature lifecycle
2424
25- The [ Get-ExperimentalFeature] [ 19 ] cmdlet returns all experimental features available to PowerShell.
25+ The [ Get-ExperimentalFeature] [ 21 ] cmdlet returns all experimental features available to PowerShell.
2626Experimental features can come from modules or the PowerShell engine. Module-based experimental
2727features are only available after you import the module. In the following example, the
2828** PSDesiredStateConfiguration** isn't loaded, so the ` PSDesiredStateConfiguration.InvokeDscResource `
@@ -43,7 +43,7 @@ PSSerializeJSONLongEnumAsNumber True PSEngine Serialize enums based on long o
4343PSSubsystemPluginModel True PSEngine A plugin model for registering and un-registering PowerShell subsyste…
4444```
4545
46- Use the [ Enable-ExperimentalFeature] [ 18 ] and [ Disable-ExperimentalFeature] [ 17 ] cmdlets to enable or
46+ Use the [ Enable-ExperimentalFeature] [ 20 ] and [ Disable-ExperimentalFeature] [ 19 ] cmdlets to enable or
4747disable a feature. You must start a new PowerShell session for this change to be in effect. Run the
4848following command to enable the ` PSCommandNotFoundSuggestion ` feature:
4949
@@ -86,13 +86,14 @@ Legend
8686| [ PSCommandNotFoundSuggestion] [ 06 ] | ![ Experimental] [ 02 ] | ![ Mainstream] [ 01 ] | ![ Mainstream] [ 01 ] |
8787| [ PSCommandWithArgs] [ 07 ] | ![ Experimental] [ 02 ] | ![ Mainstream] [ 01 ] | ![ Mainstream] [ 01 ] |
8888| [ PSDesiredStateConfiguration.InvokeDscResource] [ 08 ] | ![ Experimental] [ 02 ] | ![ Experimental] [ 02 ] | ![ Experimental] [ 02 ] |
89- | [ PSFeedbackProvider] [ 09 ] | ![ Experimental] [ 02 ] | ![ Experimental] [ 02 ] | ![ Experimental ] [ 02 ] |
89+ | [ PSFeedbackProvider] [ 09 ] | ![ Experimental] [ 02 ] | ![ Experimental] [ 02 ] | ![ Mainstream ] [ 01 ] |
9090| [ PSLoadAssemblyFromNativeCode] [ 10 ] | ![ Experimental] [ 02 ] | ![ Experimental] [ 02 ] | ![ Experimental] [ 02 ] |
9191| [ PSModuleAutoLoadSkipOfflineFiles] [ 11 ] | ![ Experimental] [ 02 ] | ![ Mainstream] [ 01 ] | ![ Mainstream] [ 01 ] |
92- | [ PSNativeWindowsTildeExpansion] [ 12 ] | | ![ Experimental] [ 02 ] | ![ Experimental] [ 02 ] |
93- | [ PSRedirectToVariable] [ 13 ] | | ![ Experimental] [ 02 ] | ![ Experimental] [ 02 ] |
94- | [ PSSerializeJSONLongEnumAsNumber] [ 14 ] | | ![ Experimental] [ 02 ] | ![ Experimental] [ 02 ] |
95- | [ PSSubsystemPluginModel] [ 15 ] | ![ Experimental] [ 02 ] | ![ Experimental] [ 02 ] | ![ Experimental] [ 02 ] |
92+ | [ PSNativeWindowsTildeExpansion] [ 12 ] | | ![ Experimental] [ 02 ] | ![ Mainstream] [ 01 ] |
93+ | [ PSProfileDSCResource] [ 13 ] | | | ![ Experimental] [ 02 ] |
94+ | [ PSRedirectToVariable] [ 14 ] | | ![ Experimental] [ 02 ] | ![ Mainstream] [ 01 ] |
95+ | [ PSSerializeJSONLongEnumAsNumber] [ 15 ] | | ![ Experimental] [ 02 ] | ![ Experimental] [ 02 ] |
96+ | [ PSSubsystemPluginModel] [ 16 ] | ![ Experimental] [ 02 ] | ![ Experimental] [ 02 ] | ![ Mainstream] [ 01 ] |
9697
9798### PSCommandNotFoundSuggestion
9899
@@ -155,6 +156,10 @@ use or support MOF compilation. For more information, see
155156
156157### PSFeedbackProvider
157158
159+ > [ !NOTE]
160+ > This experimental feature was added in PowerShell 7.4-preview.3. This feature became mainstream in
161+ > PowerShell 7.6-preview.6.
162+
158163When you enable this feature, PowerShell uses a new feedback provider to give you feedback when a
159164command can't be found. The feedback provider is extensible, and can be implemented by third-party
160165modules. The feedback provider can be used by other subsystems, such as the predictor subsystem, to
@@ -170,8 +175,6 @@ This feature includes two built-in feedback providers:
170175 in an interactive run, and for providing predictive IntelliSense results for the next command
171176 line.
172177
173- This feature was added in PowerShell 7.4-preview.3.
174-
175178### PSLoadAssemblyFromNativeCode
176179
177180Exposes an API to allow assembly loading from native code.
@@ -190,10 +193,54 @@ always kept on disk.
190193
191194This feature was added in PowerShell 7.4-preview.1.
192195
196+ ### PSNativeWindowsTildeExpansion
197+
198+ > [ !NOTE]
199+ > This experimental feature was added in PowerShell 7.5-preview.2. This feature became mainstream in
200+ > PowerShell 7.6-preview.6.
201+
202+ When this feature is enabled, PowerShell expands unquoted tilde (` ~ ` ) to the user's current home
203+ folder before invoking native commands. The following examples show how the feature works.
204+
205+ With the feature disabled, the tilde is passed to the native command as a literal string.
206+
207+ ``` powershell
208+ PS> cmd.exe /c echo ~
209+ ~
210+ ```
211+
212+ With the feature enabled, PowerShell expands the tilde before it's passed to the native command.
213+
214+ ``` powershell
215+ PS> cmd.exe /c echo ~
216+ C:\Users\username
217+ ```
218+
219+ This feature only applies to Windows. On non-Windows platforms, tilde expansion is handled natively.
220+
221+ ### PSProfileDSCResource
222+
223+ > [ !NOTE]
224+ > This experimental feature was added in PowerShell 7.6-preview.6.
225+
226+ The PowerShell 7.6-preview.6 release added this feature as an advertisement for a new DSCv3
227+ resource. The experimental feature flag doesn't do anything. You can use the new DSC v3 resource
228+ regardless of whether this feature is enabled or disabled.
229+
230+ The ` Microsoft.PowerShell/Profile ` resource enables you to manage PowerShell profiles using Desired
231+ State Configuration (DSC) v3. This release includes two new files in the ` $PSHOME ` folder:
232+
233+ - ` pwsh.profile.dsc.resource.json ` - DSC v3 resource manifest file
234+ - ` pwsh.profile.resource.ps1 ` - DSC v3 resource implementation file
235+
236+ The resource supports operations to get, set, and export profile content for different profile
237+ types. For more information, see the notes in the PR [ PowerShell/PowerShell #26157 ] [ 26157 ] .
238+
193239### PSRedirectToVariable
194240
195241> [ !NOTE]
196- > This experimental feature was added in PowerShell 7.5-preview.4.
242+ > This experimental feature was added in PowerShell 7.5-preview.4. This feature became mainstream in
243+ > PowerShell 7.6-preview.6.
197244
198245When enabled, this feature adds support for redirecting to the Variable: drive. This feature allows
199246you to redirect data to a variable using the ` Variable:name ` syntax. PowerShell inspects the target
@@ -217,48 +264,12 @@ Output 2
217264WARNING: Warning, Warning!
218265```
219266
220- ### PSSubsystemPluginModel
221-
222- This feature enables the subsystem plugin model in PowerShell. The feature makes it possible to
223- separate components of ` System.Management.Automation.dll ` into individual subsystems that reside in
224- their own assembly. This separation reduces the disk footprint of the core PowerShell engine and
225- allows these components to become optional features for a minimal PowerShell installation.
226-
227- Currently, only the ** CommandPredictor** subsystem is supported. This subsystem is used along with
228- the PSReadLine module to provide custom prediction plugins. In future, ** Job** ,
229- ** CommandCompleter** , ** Remoting** and other components could be separated into subsystem assemblies
230- outside of ` System.Management.Automation.dll ` .
231-
232- The experimental feature includes a new cmdlet, [ Get-PSSubsystem] [ 20 ] . This cmdlet is only available
233- when the feature is enabled. This cmdlet returns information about the subsystems that are available
234- on the system.
235-
236- ### PSNativeWindowsTildeExpansion
237-
238- When this feature is enabled, PowerShell expands unquoted tilde (` ~ ` ) to the user's current home
239- folder before invoking native commands. The following examples show how the feature works.
240-
241- With the feature disabled, the tilde is passed to the native command as a literal string.
242-
243- ``` powershell
244- PS> cmd.exe /c echo ~
245- ~
246- ```
247-
248- With the feature enabled, PowerShell expands the tilde before it's passed to the native command.
249-
250- ``` powershell
251- PS> cmd.exe /c echo ~
252- C:\Users\username
253- ```
254-
255- This feature only applies to Windows. On non-Windows platforms, tilde expansion is handled natively.
256-
257- This feature was added in PowerShell 7.5-preview.2.
258-
259267### PSSerializeJSONLongEnumAsNumber
260268
261- This feature enables the cmdlet [ ConvertTo-Json] [ 21 ] to serialize any enum values based on
269+ > [ !NOTE]
270+ > This experimental feature was added in PowerShell 7.5-preview.5.
271+
272+ This feature enables the cmdlet [ ConvertTo-Json] [ 23 ] to serialize any enum values based on
262273` Int64/long ` or ` UInt64/ulong ` as a numeric value rather than the string representation of that enum
263274value. This aligns the behavior of enum serialization with other enum base types where the cmdlet
264275serializes enums as their numeric value. Use the ** EnumsAsStrings** parameter to serialize as the
@@ -286,6 +297,25 @@ For example:
286297# { "Key": "Cmdlets" }
287298```
288299
300+ ### PSSubsystemPluginModel
301+
302+ > [ !NOTE]
303+ > This feature became mainstream in PowerShell 7.6-preview.6.
304+
305+ This feature enables the subsystem plugin model in PowerShell. The feature makes it possible to
306+ separate components of ` System.Management.Automation.dll ` into individual subsystems that reside in
307+ their own assembly. This separation reduces the disk footprint of the core PowerShell engine and
308+ allows these components to become optional features for a minimal PowerShell installation.
309+
310+ Currently, only the ** CommandPredictor** subsystem is supported. This subsystem is used along with
311+ the PSReadLine module to provide custom prediction plugins. In future, ** Job** ,
312+ ** CommandCompleter** , ** Remoting** and other components could be separated into subsystem assemblies
313+ outside of ` System.Management.Automation.dll ` .
314+
315+ The experimental feature includes a new cmdlet, [ Get-PSSubsystem] [ 22 ] . This cmdlet is only available
316+ when the feature is enabled. This cmdlet returns information about the subsystems that are available
317+ on the system.
318+
289319<!-- link references -->
290320[ 01 ] : ../../media/shared/check-mark-button-2705.svg
291321[ 02 ] : ../../media/shared/construction-sign-1f6a7.svg
@@ -299,12 +329,14 @@ For example:
299329[ 10 ] : #psloadassemblyfromnativecode
300330[ 11 ] : #psmoduleautoloadskipofflinefiles
301331[ 12 ] : #psnativewindowstildeexpansion
302- [ 13 ] : #psredirecttovariable
303- [ 14 ] : #psserializejsonlongenumasnumber
304- [ 15 ] : #pssubsystempluginmodel
305- [ 16 ] : https://github.com/PowerShell/PowerShell/issues/new/choose
306- [ 17 ] : xref:Microsoft.PowerShell.Core.Disable-ExperimentalFeature
307- [ 18 ] : xref:Microsoft.PowerShell.Core.Enable-ExperimentalFeature
308- [ 19 ] : xref:Microsoft.PowerShell.Core.Get-ExperimentalFeature
309- [ 20 ] : xref:Microsoft.PowerShell.Core.Get-PSSubsystem
310- [ 21 ] : xref:Microsoft.PowerShell.Utility.ConvertTo-Json
332+ [ 13 ] : #psprofiledscresource
333+ [ 14 ] : #psredirecttovariable
334+ [ 15 ] : #psserializejsonlongenumasnumber
335+ [ 16 ] : #pssubsystempluginmodel
336+ [ 17 ] : https://github.com/PowerShell/PowerShell/issues/new/choose
337+ [ 19 ] : xref:Microsoft.PowerShell.Core.Disable-ExperimentalFeature
338+ [ 20 ] : xref:Microsoft.PowerShell.Core.Enable-ExperimentalFeature
339+ [ 21 ] : xref:Microsoft.PowerShell.Core.Get-ExperimentalFeature
340+ [ 22 ] : xref:Microsoft.PowerShell.Core.Get-PSSubsystem
341+ [ 23 ] : xref:Microsoft.PowerShell.Utility.ConvertTo-Json
342+ [ 26157 ] : https://github.com/PowerShell/PowerShell/pull/26157
0 commit comments