在 PowerShell 中使用實驗性功能
PowerShell 中的實驗性功能支援提供一種機制,讓實驗性功能與 PowerShell 或 PowerShell 模組中現有的穩定功能共存。
實驗性功能是未完成設計的實驗功能。 此功能可供用戶測試並提供意見反應。 完成實驗性功能之後,設計變更就會變成重大變更。
警告
實驗性功能不適用於生產環境,因為允許變更中斷。 未正式支持實驗性功能。 不過,我們很欣賞任何意見反應和錯誤報告。 您可以在 GitHub 來源存放 庫中提出問題。
如需啟用或停用這些功能的詳細資訊,請參閱 about_Experimental_Features。
實驗性功能生命週期
Get-ExperimentalFeature Cmdlet 會傳回 PowerShell 可用的所有實驗性功能。
實驗性功能可能來自模組或PowerShell引擎。 模組型實驗功能只有在匯入模組之後才能使用。 在下列範例中 ,不會載入 PSDesiredStateConfiguration ,因此 PSDesiredStateConfiguration.InvokeDscResource
無法使用此功能。
Get-ExperimentalFeature
Name Enabled Source Description
---- ------- ------ -----------
PSCommandNotFoundSuggestion False PSEngine Recommend potential commands based on fuzzy searc…
PSCommandWithArgs False PSEngine Enable `-CommandWithArgs` parameter for pwsh
PSFeedbackProvider True PSEngine Replace the hard-coded suggestion framework with …
PSLoadAssemblyFromNativeCode False PSEngine Expose an API to allow assembly loading from nati…
PSModuleAutoLoadSkipOfflineFiles True PSEngine Module discovery will skip over files that are ma…
PSSerializeJSONLongEnumAsNumber True PSEngine Serialize enums based on long or ulong as an nume…
PSSubsystemPluginModel True PSEngine A plugin model for registering and un-registering…
使用 Enable-ExperimentalFeature 和 Disable-ExperimentalFeature Cmdlet 來啟用或停用功能。 您必須啟動新的PowerShell工作階段,此變更才能生效。 執行下列命令以啟用 PSCommandNotFoundSuggestion
此功能:
Enable-ExperimentalFeature PSCommandNotFoundSuggestion
WARNING: Enabling and disabling experimental features do not take effect until next start
of PowerShell.
當實驗性功能成為 主流功能時,因為功能現在是 PowerShell 引擎或模組的一部分,所以不再作為實驗性功能。 例如,此功能 PSAnsiRenderingFileInfo
在PowerShell 7.3中成為主流。 您會自動取得功能的功能。
注意
某些功能具有設定需求,例如喜好設定變數,必須設定為從功能取得所需的結果。
當實驗性功能 停止時,PowerShell 中就無法再使用該功能。 例如,此功能 PSNativePSPathResolution
已在PowerShell 7.3中停止。
可用的功能
本文說明可用的實驗性功能,以及如何使用此功能。
圖例
- 圖示 表示實驗性功能可在PowerShell版本中使用
- 圖示 指出實驗性功能成為主流的PowerShell版本
- 圖示 指出移除實驗功能的PowerShell版本
PSCommandNotFoundSuggestion
注意
此功能在 PowerShell 7.5-preview.5 中成為主流。
建議在 CommandNotFoundException 之後,根據模糊比對搜尋來建議可能的命令。
PS> get
get: The term 'get' isn't recognized as the name of a cmdlet, function, script file,
or operable program. Check the spelling of the name, or if a path was included, verify
that the path is correct and try again.
Suggestion [4,General]: The most similar commands are: set, del, ft, gal, gbp, gc, gci,
gcm, gdr, gcs.
PSCommandWithArgs
注意
此功能在 PowerShell 7.5-preview.5 中成為主流。
這項功能會啟用 -CommandWithArgs
的參數 pwsh
。 此參數可讓您使用自變數來執行 PowerShell 命令。 不同於 -Command
,此參數會填入 $args
命令可使用的內建變數。
第一個字串是命令,並以空格符分隔的後續字串是自變數。
例如:
pwsh -CommandWithArgs '$args | % { "arg: $_" }' arg1 arg2
這個範例會產生下列輸出:
arg: arg1
arg: arg2
此功能已在 PowerShell 7.4-preview.2 中新增。
PSDesiredStateConfiguration.InvokeDscResource
在非 Windows 系統上啟用 MOF 的編譯,並可讓您在沒有 LCM 的情況下使用 Invoke-DSCResource
。
從 PowerShell 7.2 開始, PSDesiredStateConfiguration 模組已移除,且此功能預設為停用。 若要啟用此功能,您必須從 PowerShell 資源庫 安裝 PSDesiredStateConfiguration v2.0.5 模組,並啟用此功能。
DSC v3 沒有此實驗性功能。 DSC v3 僅支援 Invoke-DSCResource
且不支援MOF編譯。 如需詳細資訊,請參閱 PowerShell Desired 狀態設定 v3。
PSFeedbackProvider
當您啟用此功能時,PowerShell 會使用新的意見反應提供者,在找不到命令時提供意見反應。 意見反應提供者是可延伸的,而且可由第三方模組實作。 其他子系統可以使用意見反應提供者,例如預測子子系統來提供預測性 IntelliSense 結果。
此功能包含兩個內建的意見反應提供者:
GeneralCommandErrorFeedback 提供目前現有的相同建議功能
Linux 上提供的 UnixCommandNotFound 提供類似 bash 的意見反應。
UnixCommandNotFound 同時作為意見反應提供者和預測器。 在互動式執行中找不到命令時,會使用命令找不到的建議,以及提供下一個命令行的預測性 IntelliSense 結果時提供意見反應。
此功能已在 PowerShell 7.4-preview.3 中新增。
PSLoadAssemblyFromNativeCode
公開 API 以允許從機器碼載入元件。
PSModuleAutoLoadSkipOfflineFiles
注意
此功能在 PowerShell 7.5-preview.5 中成為主流。
啟用此功能后,如果使用者的 PSModulePath 包含來自雲端提供者的資料夾,例如 OneDrive,PowerShell 就不會再觸發下載該資料夾中包含的所有檔案。 系統會略過標示為未下載的任何檔案。 使用雲端提供者在計算機之間同步模組的使用者,應將模組資料夾標示為 [已釘選 ] 或 OneDrive 以外的提供者的對等狀態。 將模組資料夾標示為 Pinned 可確保檔案一律保留在磁碟上。
此功能已在 PowerShell 7.4-preview.1 中新增。
PSRedirectToVariable
注意
此實驗性功能已在 PowerShell 7.5-preview.4 中新增。
啟用時,此功能會新增重新導向至變數磁碟驅動器的支援。 此功能可讓您使用 variable:name
語法將數據重新導向至變數。 PowerShell 會檢查重新導向的目標,如果它使用變數提供者,則會呼叫 Set-Variable
,而不是 Out-File
。
下列範例示範如何將命令的輸出重新導向至變數:
. {
"Output 1"
Write-Warning "Warning, Warning!"
"Output 2"
} 3> variable:warnings
$warnings
Output 1
Output 2
WARNING: Warning, Warning!
PSSubsystemPluginModel
此功能可在PowerShell中啟用子系統外掛程式模型。 此功能可讓您將的 System.Management.Automation.dll
元件分成位於其本身元件中的個別子系統。 此區隔可減少核心 PowerShell 引擎的磁碟使用量,並讓這些元件成為最小 PowerShell 安裝的選用功能。
目前僅 支援 CommandPredictor 子系統。 此子系統會與 PSReadLine 模組搭配使用,以提供自定義預測外掛程式。 未來, Job、 CommandCompleter、 Remoting 和其他元件可以分成 外部 System.Management.Automation.dll
的子系統元件。
實驗性功能包含新的 Cmdlet Get-PSSubsystem。 只有啟用此功能時,才能使用此 Cmdlet。 此 Cmdlet 會傳回系統上可用子系統的相關信息。
PSNativeWindowsTildeExpansion
啟用此功能時,PowerShell 會在叫用原生命令之前,先將未加上批注的波狀符號 (~
) 展開至使用者的目前主資料夾。 下列範例顯示功能的運作方式。
停用功能時,會將 tilde 傳遞至原生命令做為常值字串。
PS> cmd.exe /c echo ~
~
啟用此功能后,PowerShell 會在傳遞至原生命令之前,先展開並排。
PS> cmd.exe /c echo ~
C:\Users\username
此功能僅適用於 Windows。 在非 Windows 平臺上,會以原生方式處理並排展開。
此功能已在 PowerShell 7.5-preview.2 中新增。
PSSerializeJSONLongEnumAsNumber
這項功能可讓 Cmdlet ConvertTo-Json 根據 或 Int64/long
串行化任何列舉值UInt64/ulong
,而不是該列舉值的字串表示。 這會將列舉串行化的行為與其他列舉基底類型對齊,其中 Cmdlet 會將列舉串行化為其數值。
使用 EnumsAsStrings 參數串行化為字串表示法。
例如:
# PSSerializeJSONLongEnumAsNumber disabled
@{
Key = [System.Management.Automation.Tracing.PowerShellTraceKeywords]::Cmdlets
} | ConvertTo-Json
# { "Key": "Cmdlets" }
# PSSerializeJSONLongEnumAsNumber enabled
@{
Key = [System.Management.Automation.Tracing.PowerShellTraceKeywords]::Cmdlets
} | ConvertTo-Json
# { "Key": 32 }
# -EnumsAsStrings to revert back to the old behaviour
@{
Key = [System.Management.Automation.Tracing.PowerShellTraceKeywords]::Cmdlets
} | ConvertTo-Json -EnumsAsStrings
# { "Key": "Cmdlets" }