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…
PSSerializeJSONLongEnumAsNumber True PSEngine Serialize enums based on long or ulong as an nume…
PSSubsystemPluginModel True PSEngine A plugin model for registering and un-registering…
Enable-ExperimentalFeature 및 Disable-ExperimentalFeature cmdlet을 사용하여 기능을 사용하거나 사용하지 않도록 설정합니다. 이 변경 내용이 적용되려면 새 PowerShell 세션을 시작해야 합니다. 다음 명령을 실행하여 기능을 사용하도록 설정합니다 PSCommandNotFoundSuggestion
.
Enable-ExperimentalFeature PSCommandNotFoundSuggestion
WARNING: Enabling and disabling experimental features do not take effect until next start
of PowerShell.
실험적 기능이 일반화되면 기능이 이제 PowerShell 엔진 또는 모듈의 일부이므로 더 이상 실험적 기능으로 사용할 수 없습니다. 예를 들어 이 PSAnsiRenderingFileInfo
기능은 PowerShell 7.3에서 주류가 되었습니다. 기능의 기능을 자동으로 가져옵니다.
참고 항목
일부 기능에는 기능에서 원하는 결과를 가져오도록 설정해야 하는 기본 설정 변수와 같은 구성 요구 사항이 있습니다.
실험적 기능이 중단되면 PowerShell에서 해당 기능을 더 이상 사용할 수 없습니다. 예를 들어 이 PSNativePSPathResolution
기능은 PowerShell 7.3에서 중단되었습니다.
사용 가능한 기능
이 문서에서는 사용 가능한 실험적 기능과 이 기능을 사용하는 방법을 설명합니다.
범례
- 이 아이콘은 PowerShell 버전에서 실험적 기능을 사용할 수 있음을 나타냅니다.
- 아이콘은 실험적 기능이 주류가 된 PowerShell 버전을 나타냅니다.
- 아이콘은 실험적 기능이 제거된 PowerShell 버전을 나타냅니다.
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
참고 항목
이 기능은 PowerShell 7.5-preview.5에서 주류가 되었습니다.
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
참고 항목
이 기능은 PowerShell 7.5-preview.5에서 주류가 되었습니다.
이 기능은 에 대한 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
참고 항목
이 기능은 PowerShell 7.5-preview.5에서 주류가 되었습니다.
이 기능을 사용하도록 설정하면 사용자의 PSModulePath에 OneDrive와 같은 클라우드 공급자의 폴더가 포함된 경우 PowerShell은 더 이상 해당 폴더 내에 포함된 모든 파일의 다운로드를 트리거하지 않습니다. 다운로드되지 않은 것으로 표시된 모든 파일은 건너뜁니다. 클라우드 공급자를 사용하여 컴퓨터 간에 모듈을 동기화하는 사용자는 모듈 폴더를 고정됨으로 표시하거나 또는 OneDrive 이외의 공급자에 대해 이와 동등한 상태로 표시해야 합니다. 모듈 폴더를 고정됨으로 표시하면 파일이 항상 디스크에 보관됩니다.
이 기능은 PowerShell 7.4-preview.1에 추가되었습니다.
PSNativeCommandArgumentPassing
참고 항목
이 기능은 PowerShell 7.3에서 일반화되었습니다.
이 실험적 기능이 사용하도록 설정된 경우 PowerShell은 네이티브 실행 파일을 호출할 때 문자열을 재구성하는 현재 메커니즘 대신 StartProcessInfo
개체의 ArgumentList
속성을 사용합니다.
주의
새 동작은 현재 동작의 호환성이 손상되는 변경 입니다. 새로운 동작은 네이티브 애플리케이션을 호출할 때 발생하는 다양한 문제를 해결하는 스크립트와 자동화를 손상할 수 있습니다. 지금까지는 따옴표를 이스케이프해야 했으며 네이티브 애플리케이션에 빈 인수를 제공할 수 없었습니다.
필요한 경우 토큰(--%
) 또는 Start-Process
cmdlet을 사용하여 네이티브 인수 전달을 중단합니다.
이 기능은 이 동작을 제어하는 새 $PSNativeCommandArgumentPassing
기본 설정 변수를 추가합니다. 이 변수를 사용하면 런타임에 동작을 선택할 수 있습니다. 유효한 값은 Legacy
, Standard
및 Windows
. 기본 동작은 플랫폼별로 다릅니다. Windows 플랫폼에서는 기본 설정이고 Windows 플랫폼이 아닌 플랫폼은 기본값입니다 Windows
Standard
.
Legacy
는 역사적인 동작입니다. 모드에서는 Windows
다음 파일의 Windows
호출에서 자동으로 스타일 인수 전달을 사용하는 경우를 제외하고 모드의 동작과 Standard
모드는 Legacy
동일합니다.
cmd.exe
find.exe
cscript.exe
wscript.exe
sqlcmd.exe
- PowerShell 7.3.1에 추가됨.bat
로 끝남.cmd
로 끝남.js
로 끝남.vbs
로 끝남.wsf
로 끝남
둘 $PSNativeCommandArgumentPassing
중 하나 Legacy
또는 Standard
로 설정된 경우 파서는 이러한 파일을 확인하지 않습니다.
기본 동작은 플랫폼별로 다릅니다. 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)가 아닌 경우 경로 정규화가 발생하지 않습니다. - 경로가 작은따옴표로 된 경우 확인되지 않고 리터럴로 처리됩니다.
PSRedirectToVariable
참고 항목
이 실험적 기능은 PowerShell 7.5-preview.4에 추가되었습니다.
이 기능을 사용하도록 설정하면 변수 드라이브로 리디렉션할 수 있는 지원이 추가됩니다. 이 기능을 사용하면 구문을 사용하여 variable:name
데이터를 변수로 리디렉션할 수 있습니다. PowerShell은 리디렉션의 대상을 검사하고 호출하는 변수 공급자를 사용하는 경우 대신 Out-File
호출 Set-Variable
합니다.
다음 예제에서는 명령의 출력을 변수로 리디렉션하는 방법을 보여줍니다.
. {
"Output 1"
Write-Warning "Warning, Warning!"
"Output 2"
} 3> variable:warnings
$warnings
Output 1
Output 2
WARNING: Warning, Warning!
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에 추가되었습니다.
PSSerializeJSONLongEnumAsNumber
이 기능을 사용하면 cmdlet ConvertTo-Json 이 열거형 값을 열거형 값의 문자열 표현이 아닌 숫자 값으로 Int64/long
직렬화할 UInt64/ulong
수 있습니다. 이렇게 하면 cmdlet이 열거형을 숫자 값으로 serialize하는 다른 열거형 기본 형식과 열거형 serialization 동작이 정렬됩니다. EnumsAsStrings 매개 변수를 사용하여 문자열 표현으로 serialize합니다.
예시:
# PSSerializeJSONLongEnumAsNumber disabled
@{
Key = [System.Management.Automation.Tracing.PowerShellTraceKeywords]::Cmdlets
} | ConvertTo-Json
# { "Key": "Cmdlets" }
# PSSerializeJSONLongEnumAsNumber enabled
@{
Key = [System.Management.Automation.Tracing.PowerShellTraceKeywords]::Cmdlets
} | ConvertTo-Json
# { "Key": 32 }
# -EnumsAsStrings to revert back to the old behaviour
@{
Key = [System.Management.Automation.Tracing.PowerShellTraceKeywords]::Cmdlets
} | ConvertTo-Json -EnumsAsStrings
# { "Key": "Cmdlets" }
PowerShell