PowerShell에서 실험적 기능 사용

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

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

주의

변경 내용이 중단될 수 있으므로 실험적 기능은 프로덕션에서 사용할 수 없습니다. 실험적 기능은 공식적으로 지원되지 않습니다. 그러나 피드백 및 버그 보고서에 감사드립니다. GitHub 소스 리포지토리에서 문제를 제출할 수 있습니다.

이러한 기능을 사용하거나 사용하지 않도록 설정하는 방법에 대한 자세한 내용은 about_Experimental_Features 참조하세요.

실험적 기능 수명 주기

Get-ExperimentalFeature cmdlet은 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…
PSSubsystemPluginModel              True PSEngine A plugin model for registering and un-registering…

Enable-ExperimentalFeatureDisable-ExperimentalFeature cmdlet을 사용하여 기능을 사용하거나 사용하지 않도록 설정합니다. 이 변경 내용이 적용되려면 새 PowerShell 세션을 시작해야 합니다. 다음 명령을 실행하여 기능을 사용하도록 설정합니다 PSCommandNotFoundSuggestion .

Enable-ExperimentalFeature PSCommandNotFoundSuggestion
WARNING: Enabling and disabling experimental features do not take effect until next start
of PowerShell.

실험적 기능이 기본stream이 되면 이제 기능이 PowerShell 엔진 또는 모듈의 일부이므로 더 이상 실험적 기능으로 사용할 수 없습니다. 예를 들어 이 PSAnsiRenderingFileInfo 기능은 PowerShell 7.3에서 기본stream이 되었습니다. 기능의 기능을 자동으로 가져옵니다.

참고 항목

일부 기능에는 기능에서 원하는 결과를 가져오도록 설정해야 하는 기본 설정 변수와 같은 구성 요구 사항이 있습니다.

실험적 기능이 중단되면 PowerShell에서 해당 기능을 더 이상 사용할 수 없습니다. 예를 들어 이 PSNativePSPathResolution 기능은 PowerShell 7.3에서 중단되었습니다.

사용 가능한 기능

이 문서에서는 사용 가능한 실험적 기능과 이 기능을 사용하는 방법을 설명합니다.

범례

  • 이 아이콘은 실험적 PowerShell 버전에서 실험적 기능을 사용할 수 있음을 나타냅니다.
  • 아이콘은 일반 실험적 기능이 기본stream이 된 PowerShell 버전을 나타냅니다.
  • 아이콘은 단종 실험적 기능이 제거된 PowerShell 버전을 나타냅니다.
속성 7.2 7.3 7.4 7.5(미리 보기)
PSCommandNotFoundSuggestion 실험적 실험적 실험적 실험적
PSDesiredStateConfiguration.InvokeDscResource 실험적 실험적 실험적 실험적
PSNativePSPathResolution 실험적 단종
PSSubsystemPluginModel 실험적 실험적 실험적 실험적
PSNativeCommandArgumentPassing 실험적 일반
PSAnsiRenderingFileInfo 실험적 일반
PSLoadAssemblyFromNativeCode 실험적 실험적 실험적 실험적
PSNativeCommandErrorActionPreference 실험적 일반
PSFeedbackProvider 실험적 실험적
PSModuleAutoLoadSkipOfflineFiles 실험적 실험적
PSCommandWithArgs 실험적 실험적
PSNativeWindowsTildeExpansion 실험적

PSAnsiRenderingFileInfo

참고 항목

이 기능은 PowerShell 7.3에서 일반화되었습니다.

ANSI 서식 지정 기능이 PowerShell 7.2에 추가되었습니다. 이 기능은 멤버를 $PSStyle.FileInfo 추가하고 특정 파일 형식의 색을 설정할 수 있습니다.

  • $PSStyle.FileInfo.Directory - 디렉터리에 대한 색을 지정하는 기본 제공 멤버
  • $PSStyle.FileInfo.SymbolicLink - 기호 링크의 색을 지정하는 기본 제공 멤버
  • $PSStyle.FileInfo.Executable - 실행 파일의 색을 지정하는 기본 제공 멤버입니다.
  • $PSStyle.FileInfo.Extension - 이 멤버를 사용하여 다른 파일 확장자의 색을 정의합니다. 확장 멤버에는 보관 파일 및 PowerShell 파일용 확장자가 사전에 포함되어 있습니다.

자세한 내용은 about_Automatic_Variables를 참조하세요.

PSCommandNotFoundSuggestion

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

이 기능은 에 대한 pwsh매개 변수를 -CommandWithArgs 사용하도록 설정합니다. 이 매개 변수를 사용하면 인수를 사용하여 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 결과를 제공하기 위해 예측기 하위 시스템 같은 다른 하위 시스템에 의해 사용될 수 있습니다.

이 기능에는 다음과 같은 두 가지 기본 제공 피드백 공급자가 포함됩니다.

  • GeneralCommandErrorFeedback 은 현재 기존과 동일한 제안 기능을 제공합니다.

  • Linux에서 사용할 수 있는 UnixCommandNotFound는 bash와 유사한 피드백을 제공합니다.

    UnixCommandNotFound피드백 공급자 및 예측자 역할을 합니다. 명령에서 찾을 수 없는 명령의 제안은 대화형 실행에서 명령을 찾을 수 없는 경우 피드백을 제공하고 다음 명령줄에 대한 예측 IntelliSense 결과를 제공하는 데 사용됩니다.

이 기능은 PowerShell 7.4-preview.3에 추가되었습니다.

PSLoadAssemblyFromNativeCode

네이티브 코드에서 어셈블리 로드를 허용하는 API를 노출합니다.

PSModuleAutoLoadSkipOfflineFiles

이 기능을 사용하도록 설정하면 사용자의 PSModulePath에 OneDrive와 같은 클라우드 공급자의 폴더가 포함된 경우 PowerShell은 더 이상 해당 폴더 내에 포함된 모든 파일의 다운로드를 트리거하지 않습니다. 다운로드되지 않은 것으로 표시된 모든 파일은 건너뜁니다. 클라우드 공급자를 사용하여 컴퓨터 간에 모듈을 동기화하는 사용자는 모듈 폴더를 고정됨으로 표시하거나 또는 OneDrive 이외의 공급자에 대해 이와 동등한 상태로 표시해야 합니다. 모듈 폴더를 고정됨으로 표시하면 파일이 항상 디스크에 보관됩니다.

이 기능은 PowerShell 7.4-preview.1에 추가되었습니다.

PSNativeCommandArgumentPassing

참고 항목

이 기능은 PowerShell 7.3에서 일반화되었습니다.

이 실험적 기능이 사용하도록 설정된 경우 PowerShell은 네이티브 실행 파일을 호출할 때 문자열을 재구성하는 현재 메커니즘 대신 StartProcessInfo 개체의 ArgumentList 속성을 사용합니다.

주의

새 동작은 현재 동작의 호환성이 손상되는 변경 입니다. 새로운 동작은 네이티브 애플리케이션을 호출할 때 발생하는 다양한 문제를 해결하는 스크립트와 자동화를 손상할 수 있습니다. 지금까지는 따옴표를 이스케이프해야 했으며 네이티브 애플리케이션에 빈 인수를 제공할 수 없었습니다. 필요한 경우 토큰(--%) 또는 Start-Process cmdlet을 사용하여 네이티브 인수 전달을 중단합니다.

이 기능은 이 동작을 제어하는 새 $PSNativeCommandArgumentPassing 기본 설정 변수를 추가합니다. 이 변수를 사용하면 런타임에 동작을 선택할 수 있습니다. 유효한 값은 Legacy, StandardWindows. 기본 동작은 플랫폼별로 다릅니다. Windows 플랫폼에서는 기본 설정이고 Windows 플랫폼이 아닌 플랫폼은 기본값입니다 WindowsStandard.

Legacy 는 역사적인 동작입니다. 모드에서는 Windows 다음 파일의 Windows 호출에서 자동으로 스타일 인수 전달을 사용하는 경우를 제외하고 모드의 동작과 Standard 모드는 Legacy 동일합니다.

  • cmd.exe
  • find.exe
  • cscript.exe
  • wscript.exe
  • sqlcmd.exe - PowerShell 7.3.1에 추가됨
  • .bat로 끝남
  • .cmd로 끝남
  • .js로 끝남
  • .vbs로 끝남
  • .wsf로 끝남

파서가 $PSNativeCommandArgumentPassingLegacyStandard이러한 파일에 대해 검사 않습니다.

기본 동작은 플랫폼별로 다릅니다. Windows 플랫폼에서 기본 설정은 Windows이고 비 Windows 플랫폼은 Standard입니다.

참고 항목

다음 예제에서는 도구를 사용합니다 TestExe.exe . 소스 코드에서 빌드 TestExe 할 수 있습니다. PowerShell 원본 리포지토리에서 TestExe를 참조하세요.

이 변경으로 사용할 수 있는 새 동작:

  • 따옴표가 포함된 리터럴 또는 확장 가능한 문자열은 다음과 같이 유지됩니다.

    PS> $a = 'a" "b'
    PS> TestExe -echoargs $a 'c" "d' e" "f
    Arg 0 is <a" "b>
    Arg 1 is <c" "d>
    Arg 2 is <e f>
    
  • 인수로 빈 문자열은 유지됩니다.

    PS> TestExe -echoargs '' a b ''
    Arg 0 is <>
    Arg 1 is <a>
    Arg 2 is <b>
    Arg 3 is <>
    

새 동작에 대한 자세한 예제는 about_Parsing 참조하세요.

PowerShell 7.3에는 네이티브 명령에 대한 매개 변수 바인딩을 추적하는 기능도 추가되었습니다. 자세한 내용은 Trace-Command를 참조 하세요.

PSNativeCommandErrorActionPreference

참고 항목

이 기능은 PowerShell 7.4에서 기본 스트림이 되었습니다.

일반적으로 네이티브 명령은 성공하면 0, 실패하면 0이 아닌 종료 코드를 호출 애플리케이션에 반환합니다. 그러나 현재 네이티브 명령은 PowerShell 오류 스트림에 관여하지 않습니다. 리디렉션된 stderr 출력은 PowerShell 오류 스트림과 동일하게 해석하지 않습니다. 많은 네이티브 명령이 stderr을 정보 또는 자세한 정보 스트림으로 사용하므로 종료 코드만 중요합니다. 스크립트에서 네이티브 명령을 사용하는 경우 다음 예제처럼 각 호출 후 종료 상태를 확인해야 합니다.

if ($LASTEXITCODE -ne 0) {
    throw "Command failed. See above errors for details"
}

그러나 이 예제는 cmdlet 또는 함수 오류에서 $?가 false일 수 있는 모든 사례를 지원하지 않아 $LASTEXITCODE가 부실 상태로 전환될 수 있습니다.

이 기능은 PowerShell에서 네이티브 명령 오류를 처리하는 방법을 제어하는 $PSNativeCommandUseErrorActionPreference 기본 설정 변수를 구현합니다. 이렇게 하면 네이티브 명령 오류로 인해 PowerShell 오류 스트림에 추가되는 오류 개체가 생성되고 추가 처리 없이 스크립트 실행이 종료될 수 있습니다.

기본적으로 $PSNativeCommandUseErrorActionPreference$false으로 설정되어 있습니다. 기본 설정을 $true로 설정하면 다음과 같은 동작이 수행됩니다.

  • $ErrorActionPreference = 'Stop'인 경우 네이티브 명령이 0이 아닌 종료 코드를 반환하면 스크립트가 중단됩니다.
  • $ErrorActionPreference = 'Continue'(기본값)이면 네이티브 명령 오류에 대한 PowerShell 오류 메시지가 표시되지만 스크립트는 중단되지 않습니다.

PSNativePSPathResolution

참고 항목

이 실험적 기능은 PowerShell 7.3에서 제거되었으며 더 이상 지원되지 않습니다.

FileSystem 공급자를 사용하는 PSDrive 경로가 네이티브 명령에 전달되면 확인된 파일 경로가 네이티브 명령에 전달됩니다. 즉, 지금과 같은 code temp:/test.txt 명령이 예상대로 작동합니다.

또한 Windows에서 ~로 시작하는 경로는 전체 경로로 확인되고 네이티브 명령에 전달됩니다. 두 경우 모두 경로는 관련 운영 체제의 디렉터리 구분 기호로 정규화됩니다.

  • 경로가 PSDrive 또는 ~(Windows)가 아닌 경우 경로 정규화가 발생하지 않습니다.
  • 경로가 작은따옴표로 된 경우 확인되지 않고 리터럴로 처리됩니다.

PSSubsystemPluginModel

이 기능을 사용하면 PowerShell에서 하위 시스템 플러그 인 모델을 사용할 수 있습니다. 이 기능을 사용하면 구성 요소를 System.Management.Automation.dll 자체 어셈블리에 상주하는 개별 하위 시스템으로 구분할 수 있습니다. 이렇게 분리하면 핵심 PowerShell 엔진의 디스크 공간이 줄어들고 이러한 구성 요소가 최소한의 PowerShell 설치를 위한 선택적 기능이 될 수 있습니다.

현재 CommandPredictor 하위 시스템만 지원됩니다. 이 하위 시스템은 PSReadLine 모듈과 함께 사용자 지정 예측 플러그 인을 제공하는 데 사용됩니다. 나중에 작업, CommandCompleter, Remoting 및 기타 구성 요소를 외부의 System.Management.Automation.dll하위 시스템 어셈블리로 구분할 수 있습니다.

실험적 기능에는 새 cmdlet인 Get-PSSubsystem이 포함됩니다. 이 cmdlet은 기능을 사용하도록 설정한 경우에만 사용할 수 있습니다. 이 cmdlet은 시스템에서 사용할 수 있는 하위 시스템에 대한 정보를 반환합니다.

PSNativeWindowsTildeExpansion

이 기능을 사용하도록 설정하면 PowerShell은 네이티브 명령을 호출하기 전에 따옴표 없는 타일(~)을 사용자의 현재 홈 폴더로 확장합니다. 다음 예제에서는 기능의 작동 방식을 보여 줍니다.

기능을 사용하지 않도록 설정하면 타일이 네이티브 명령에 리터럴 문자열로 전달됩니다.

PS> cmd.exe /c echo ~
~

이 기능을 사용하도록 설정하면 PowerShell은 네이티브 명령에 전달되기 전에 타일을 확장합니다.

PS> cmd.exe /c echo ~
C:\Users\username

이 기능은 Windows에만 적용됩니다. Windows가 아닌 플랫폼에서는 타일 확장이 기본적으로 처리됩니다.

이 기능은 PowerShell 7.5-preview.2에 추가되었습니다.