Share via


about_Experimental_Features

PowerShell의 실험적 기능 지원은 PowerShell 또는 PowerShell 모듈의 기존 안정적인 기능과 공존하는 실험적 기능을 위한 메커니즘을 제공합니다.

실험적 기능은 디자인이 완성되지 않은 기능입니다. 이 기능은 사용자가 테스트하고 피드백을 제공할 수 있습니다. 실험적 기능이 완료되면 디자인 변경 내용이 호환성이 손상되는 변경이 됩니다. 변경 내용이 중단될 수 있으므로 실험적 기능은 프로덕션에서 사용할 수 없습니다.

실험적 기능은 기본적으로 사용하지 않도록 설정되며 시스템의 사용자 또는 관리자가 명시적으로 사용하도록 설정해야 합니다.

사용 가능한 실험적 기능은 모든 사용자 또는 특정 사용자에 대한 사용자별 구성 파일의 파일에 $PSHOME 나열 powershell.config.json 됩니다.

참고 항목

사용자 구성 파일에서 사용하도록 설정된 실험적 기능은 시스템 구성 파일에 나열된 실험적 기능보다 우선합니다.

실험적 특성

Experimental 특성을 사용하여 일부 코드를 실험적 코드로 선언합니다.

다음 구문을 사용하여 실험적 기능의 이름과 실험적 기능이 사용하도록 설정된 경우 수행할 작업을 제공하는 특성을 선언 Experimental 합니다.

[Experimental(NameOfExperimentalFeature, ExperimentAction)]

모듈의 경우 형식을 NameOfExperimentalFeature<modulename>.<experimentname>따라야 합니다. 매개 변수를 ExperimentAction 지정해야 하며 유효한 값은 다음과 같습니다.

  • Show 는 기능이 활성화된 경우 이 실험적 기능을 표시하는 것을 의미합니다.
  • Hide 는 기능이 활성화된 경우 이 실험적 기능을 숨기는 것을 의미합니다.

C로 작성된 모듈에서 실험적 기능 선언#

실험적 기능 플래그를 사용하려는 모듈 작성자는 특성을 사용하여 cmdlet을 실험적 cmdlet으로 선언할 Experimental 수 있습니다.

[Experimental("MyWebCmdlets.PSWebCmdletV2", ExperimentAction.Show)]
[Cmdlet(Verbs.Invoke, "WebRequest")]
public class InvokeWebRequestCommandV2 : WebCmdletBaseV2 { ... }

PowerShell로 작성된 모듈에서 실험적 기능 선언

PowerShell로 작성된 모듈은 특성을 사용하여 Experimental 실험적 cmdlet을 선언할 수도 있습니다.

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"
      }
    )
  }
}

상호 배타적 실험적 기능

실험적 기능이 기존 기능 또는 다른 실험적 기능과 나란히 공존할 수 없는 경우가 있습니다.

예를 들어 기존 cmdlet을 재정의하는 실험적 cmdlet을 가질 수 있습니다. 두 버전은 나란히 공존할 수 없습니다. 이 ExperimentAction.Hide 설정을 사용하면 두 cmdlet 중 하나만 한 번에 사용하도록 설정할 수 있습니다.

이 예제에서는 새 실험 Invoke-WebRequest 적 cmdlet을 만듭니다. InvokeWebRequestCommand 에는 비 실험적 구현이 포함되어 있습니다. InvokeWebRequestCommandV2 에는 cmdlet의 실험적 버전이 포함되어 있습니다.

이 기능을 사용하면 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제공됩니다.

이를 통해 사용자는 새 cmdlet을 사용해 보고 피드백을 제공한 다음 필요한 경우 비 실험적 버전으로 되돌리기 수 있습니다.

Cmdlet의 실험적 매개 변수

Experimental 개별 매개 변수에도 특성을 적용할 수 있습니다. 이렇게 하면 완전히 새로운 cmdlet이 아닌 기존 cmdlet에 대한 실험적 매개 변수 집합을 만들 수 있습니다.

다음은 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
}

참고 항목