about_Experimental_Features
PowerShell の試験的機能のサポートは、試験的機能を PowerShell または PowerShell モジュールの既存の安定した機能と共存させるためのメカニズムを提供します。
試験的機能は、設計が未完成です。 この機能は、ユーザーがテストしてフィードバックを提供するために使用できます。 試験的機能が完成すると、設計の変更が破壊的変更になります。 試験的機能は、変更が破壊的になる可能性があるため、運用環境で使用することは想定されていません。
試験的機能は既定で無効になっており、システムのユーザーまたは管理者が明示的に有効にする必要があります。
有効な試験的機能は、すべてのユーザーの$PSHOME
のpowershell.config.json
ファイル、または特定のユーザーのユーザー固有の構成ファイルに一覧表示されます。
Note
ユーザー構成ファイルで有効になっている試験的機能は、システム構成ファイルに記載されている試験的機能よりも優先されます。
試験段階の属性
Experimental
属性を使用して、いくつかのコードを試験段階として宣言します。
実験用機能の名前と実験用機能が有効になっている場合に実行するアクションを指定する Experimental
属性を宣言するには、次の構文を使用します。
[Experimental(NameOfExperimentalFeature, ExperimentAction)]
モジュールの場合、 NameOfExperimentalFeature
は <modulename>.<experimentname>
の形式に従う必要があります。 ExperimentAction
パラメーターを指定する必要があり、有効な値は次のみです。
Show
は、機能が有効になっている場合にこの試験的な機能を表示することを意味しますHide
は、機能が有効になっている場合にこの試験的な機能を非表示にすることを意味します
C で記述されたモジュールでの試験的特徴の宣言#
試験的機能フラグを使用するモジュール作成者は、 Experimental
属性を使用して、コマンドレットを試験段階として宣言できます。
[Experimental("MyWebCmdlets.PSWebCmdletV2", ExperimentAction.Show)]
[Cmdlet(Verbs.Invoke, "WebRequest")]
public class InvokeWebRequestCommandV2 : WebCmdletBaseV2 { ... }
PowerShell で記述されたモジュールでの実験用機能の宣言
PowerShell で記述されたモジュールでは、 Experimental
属性を使用して実験用コマンドレットを宣言することもできます。
function Enable-SSHRemoting {
[Experimental("MyRemoting.PSSSHRemoting", "Show")]
[CmdletBinding()]
param()
...
}
実験用機能に関するメタデータは、モジュール マニフェストに保持されます。 モジュール マニフェストの PrivateData.PSData.ExperimentalFeatures
プロパティを使用して、モジュールから実験用機能を公開します。 ExperimentalFeatures
プロパティは、機能の名前と説明を含むハッシュテーブルの配列です。
次に例を示します。
PrivateData = @{
PSData = @{
ExperimentalFeatures = @(
@{
Name = "PSWebCmdletV2"
Description = "Rewrite the web cmdlets for better performance"
},
@{
Name = "PSRestCmdletV2"
Description = "Rewrite the REST API cmdlets for better performance"
}
)
}
}
相互排他的な試験的特徴
実験用の機能が、既存の機能または別の実験用機能と共存できない場合があります。
たとえば、既存のコマンドレットをオーバーライドする実験用コマンドレットを使用できます。 2 つのバージョンを並べて共存させることはできません。 ExperimentAction.Hide
設定では、2 つのコマンドレットのうち 1 つだけを一度に有効にすることができます。
この例では、新しい試験的な Invoke-WebRequest
コマンドレットを作成します。
InvokeWebRequestCommand
には非試験的な実装が含まれています。
InvokeWebRequestCommandV2
には、コマンドレットの実験用バージョンが含まれています。
ExperimentAction.Hide
を使用すると、2 つの機能のうち 1 つだけを一度に有効にすることができます。
[Experimental("MyWebCmdlets.PSWebCmdletV2", ExperimentAction.Show)]
[Cmdlet(Verbs.Invoke, "WebRequest")]
public class InvokeWebRequestCommandV2 : WebCmdletBaseV2 { ... }
[Experimental("MyWebCmdlets.PSWebCmdletV2", ExperimentAction.Hide)]
[Cmdlet(Verbs.Invoke, "WebRequest")]
public class InvokeWebRequestCommand : WebCmdletBase { ... }
MyWebCmdlets.PSWebCmdletV2
試験的機能が有効になっている場合、既存のInvokeWebRequestCommand
実装は非表示になり、InvokeWebRequestCommandV2
はInvoke-WebRequest
の実装を提供します。
これにより、ユーザーは新しいコマンドレットを試してフィードバックを提供し、必要に応じて非試験的なバージョンに戻すことができます。
コマンドレットの実験用パラメーター
Experimental
属性は、個々のパラメーターにも適用できます。 これにより、まったく新しいコマンドレットではなく、既存のコマンドレットの実験用のパラメーター セットを作成できます。
C# の例を次に示します。
[Experimental("MyModule.PSNewAddTypeCompilation", ExperimentAction.Show)]
[Parameter(ParameterSet = "NewCompilation")]
public CompilationParameters CompileParameters { ... }
[Experimental("MyModule.PSNewAddTypeCompilation", ExperimentAction.Hide)]
[Parameter()]
public CodeDom CodeDom { ... }
PowerShell スクリプトの別の例を次に示します。
param(
[Experimental("MyModule.PSNewFeature", "Show")]
[string] $NewName,
[Experimental("MyModule.PSNewFeature", "Hide")]
[string] $OldName
)
試験的な機能が有効になっているかどうかを確認する
コードでは、適切なアクションを実行する前に、実験用機能が有効になっているかどうかを確認する必要があります。 System.Management.Automation.ExperimentalFeature
クラスの静的IsEnabled()
メソッドを使用して、試験的な機能が有効になっているかどうかを確認できます。
C# の例を次に示します。
if (ExperimentalFeature.IsEnabled("MyModule.MyExperimentalFeature"))
{
// code specific to the experimental feature
}
PowerShell スクリプトの例を次に示します。
if ([ExperimentalFeature]::IsEnabled("MyModule.MyExperimentalFeature"))
{
# code specific to the experimental feature
}
関連項目
PowerShell