PowerShell の試験的機能の使用
PowerShell の試験的機能のサポートは、試験的機能を PowerShell または PowerShell モジュールの既存の安定した機能と共存させるためのメカニズムを提供します。
試験的機能は、設計が未完成である機能です。 この機能は、ユーザーがテストしてフィードバックを提供するために使用できます。 試験的機能が完成すると、設計の変更が破壊的変更になります。
注意事項
試験的機能は、変更が破壊的になる可能性があるため、運用環境で使用することは想定されていません。 試験的機能は正式にはサポートされていません。 しかし、フィードバックとバグ レポートは歓迎いたします。 GitHub ソース リポジトリでイシューを送信できます。
これらの機能を有効または無効にする方法の詳細については、「about_Experimental_Features」を参照してください。
試験的機能のライフサイクル
Get-ExperimentalFeature コマンドレットは、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 コマンドレットを使用します。 この変更を有効にするには、新しい PowerShell セッションを開始する必要があります。 次のコマンドを実行して、PSCommandNotFoundSuggestion
機能を有効にします:
Enable-ExperimentalFeature PSCommandNotFoundSuggestion
WARNING: Enabling and disabling experimental features do not take effect until next start
of PowerShell.
試験的機能がメインストリームになると、機能が PowerShell エンジンまたはモジュールの一部になるため、試験的な能として使用できなくなります。 たとえば、PowerShell 7.3 では PSAnsiRenderingFileInfo
機能がメインストリームになりました。 機能は自動的に取得されます。
Note
一部の機能には、基本設定変数などの構成要件があり、機能から目的の結果を取得するために設定する必要があります。
試験的機能が 廃止されると、その機能は PowerShell で使用できなくなります。 たとえば、PSNativePSPathResolution
機能は PowerShell 7.3 で廃止されました。
利用可能な機能
この記事では、使用可能な試験的機能と、その機能の使用方法について説明します。
凡例
- アイコンは、PowerShell のバージョンで実験的機能を利用できることを示します
- アイコンは、実験的機能がメインストリームになった PowerShell のバージョンを示します
- アイコンは、実験的機能が取り除かれた PowerShell のバージョンを示します
PSCommandNotFoundSuggestion
Note
この機能は、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
Note
この機能は、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 State Configuration v3 を参照してください。
PSFeedbackProvider
この機能を有効にすると、PowerShell はコマンドが見つからないときに、新しいフィードバック プロバイダーを使用してフィードバックを提供します。 フィードバック プロバイダーは拡張可能であり、サード パーティのモジュールで実装できます。 このフィードバック プロバイダーは、IntelliSense の予測結果を提供するために、予測サブシステムなどの他のサブシステムでも使用できます。
この機能には、次の 2 つの組み込みのフィードバック プロバイダーが含まれています。
GeneralCommandErrorFeedback は、現在存在するのと同じ提案機能を提供します
UnixCommandNotFound は Linux で使用でき、bash に似たフィードバックを提供します。
UnixCommandNotFound は、フィードバック プロバイダーと予測提供者の両方として機能します。 command-not-found コマンドからの提案は、対話型の実行でコマンドが見つからないときにフィードバックを提供するときと、次のコマンド ラインに IntelliSense の予測結果を提供したりするときの両方に使用できます。
この機能は、PowerShell 7.4-preview.3 で追加されました。
PSLoadAssemblyFromNativeCode
ネイティブ コードからのアセンブリの読み込みを許可する API を公開します。
PSModuleAutoLoadSkipOfflineFiles
Note
この機能は、PowerShell 7.5-preview.5 でメインストリームになりました。
この機能を有効にすると、ユーザーの PSModulePath に OneDrive などのクラウド プロバイダーのフォルダーが含まれている場合、PowerShell はそのフォルダーに含まれるすべてのファイルのダウンロードをトリガーしなくなります。 ダウンロードされていないとマークされたファイルはすべてスキップされます。 クラウド プロバイダーを使用してマシン間でモジュールを同期するユーザーは、モジュール フォルダーをピン留め済みまたは OneDrive 以外のプロバイダーの同等の状態としてマークする必要があります。 モジュール フォルダーをピン留め済みに設定すると、ファイルは常にディスクに保持されます。
この機能は、PowerShell 7.4-preview.1 で追加されました。
PSRedirectToVariable
Note
この試験的な機能は、PowerShell 7.5 - プレビュー 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
外のサブシステム アセンブリに分割される可能性があります。
この試験的機能には、新しいコマンドレット Get-PSSubsystem が含まれています。 このコマンドレットは、機能が有効になっている場合にのみ使用できます。 このコマンドレットを使用すると、システムで使用可能なサブシステムに関する情報が返されます。
PSNativeWindowsTildeExpansion
この機能が有効になっている場合、PowerShell では、ネイティブ コマンドを呼び出す前に、引用符で囲まれていないチルダ (~
) がユーザーの現在のホーム フォルダーに展開されます。 次の例はこの機能のしくみを示しています。
この機能を無効にすると、チルダはリテラル文字列としてネイティブ コマンドに渡されます。
PS> cmd.exe /c echo ~
~
この機能を有効にすると、ネイティブ コマンドに渡される前に、PowerShell によってチルダが展開されます。
PS> cmd.exe /c echo ~
C:\Users\username
この機能は Windows にのみ適用されます。 Windows 以外のプラットフォームでは、チルダ展開はネイティブに処理されます。
この機能は、PowerShell 7.5-preview.2 で追加されました。
PSSerializeJSONLongEnumAsNumber
この機能により、コマンドレット ConvertTo-Json は、その列挙値の文字列表現ではなく、Int64/long
または UInt64/ulong
に基づいて任意の列挙値を数値としてシリアル化ができます。 これによって、列挙型のシリアル化の動作が他の列挙型に合わせて調整されます。この場合、コマンドレットは列挙型を数値としてシリアル化します。 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" }
PowerShell