次の方法で共有


about_Experimental_Features

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

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

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

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

注意

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

試験的な属性

属性を使用して、一部の 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
)

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

コードでは、適切なアクションを実行する前に、試験的な機能が有効になっているかどうかをチェックする必要があります。 クラスの静的 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
}

こちらもご覧ください