about_Experimental_Features

PowerShell の試験的機能のサポートは、試験的機能を PowerShell または PowerShell モジュールの既存の安定した機能と共存させるためのメカニズムを提供します。

試験的機能は、設計が未完成です。 この機能は、ユーザーがテストしてフィードバックを提供するために使用できます。 試験的機能が完成すると、設計の変更が破壊的変更になります。 試験的機能は、変更が破壊的になる可能性があるため、運用環境で使用することは想定されていません。

試験的な機能は既定で無効になっており、システムのユーザーまたは管理者が明示的に有効にする必要があります。

有効な試験的な機能は、 powershell.config.json $PSHOME 特定のユーザーのすべてのユーザーまたはユーザー固有の構成ファイルのファイルに一覧表示されます。

注意

ユーザー構成ファイルで有効になっている試験的な機能は、システム構成ファイルに記載されている試験的な機能よりも優先されます。

実験的属性

属性を使用し 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()
    ...
}

相互排他的な実験用の機能

試験的な機能を既存の機能または別の試験的な機能と並行して共存させることができない場合があります。

たとえば、既存のコマンドレットをオーバーライドする実験的なコマンドレットを使用できます。 2つのバージョンをサイドバイサイドで共存させることはできません。 この ExperimentAction.Hide 設定では、2 つのコマンドレットの 1 つのみを一度に有効にできます。

この例では、新しい試験的なコマンドレットを作成 Invoke-WebRequest します。 InvokeWebRequestCommand には、試験的でない実装が含まれている。 InvokeWebRequestCommandV2 には、 コマンドレットの試験段階バージョンが含まれている。

を使用すると、2 つの機能の 1 つのみを一 ExperimentAction.Hide 度に有効にできます。

[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
)

試験的機能が有効になっているか確認する

コードでは、適切なアクションを実行する前に、試験的な機能が有効になっているか確認する必要があります。 クラスの静的メソッドを使用して、試験的な機能が有効 IsEnabled() になっているかどうかを確認 System.Management.Automation.ExperimentalFeature できます。

C# の例を次に示します。

if (ExperimentalFeature.IsEnabled("MyModule.MyExperimentalFeature"))
{
   // code specific to the experimental feature
}

PowerShell スクリプトの例を次に示します。

if ([ExperimentalFeature]::IsEnabled("MyModule.MyExperimentalFeature"))
{
  # code specific to the experimental feature
}

こちらもご覧ください

Enable-ExperimentalFeature

Disable-ExperimentalFeature

Get-ExperimentalFeature