about_Windows_PowerShell_Compatibility
간단한 설명
PowerShell 7의 Windows PowerShell 호환성 기능에 대해 설명합니다.
자세한 설명
모듈 매니페스트가 모듈이 PowerShell Core와 호환된다는 것을 나타내지 않는 한 폴더의 %windir%\system32\WindowsPowerShell\v1.0\Modules
모듈은 Windows PowerShell 호환성 기능에 의해 백그라운드 Windows PowerShell 5.1 프로세스에 로드됩니다.
호환성 기능 사용
Windows PowerShell 호환성 기능을 사용하여 첫 번째 모듈을 가져오는 경우 PowerShell은 백그라운드 Windows PowerShell 5.1 프로세스에서 실행되는 원격 WinPSCompatSession
세션을 만듭니다. PowerShell은 호환성 기능이 첫 번째 모듈을 가져올 때 이 프로세스를 만듭니다. 마지막 모듈을 제거(사용 Remove-Module
)하거나 PowerShell 프로세스가 종료될 때 프로세스가 닫힙니다.
세션에 WinPSCompatSession
로드된 모듈은 암시적 원격을 통해 사용되며 현재 PowerShell 세션에 반영됩니다. PowerShell 작업에 사용되는 것과 동일한 전송 방법입니다.
모듈을 세션으로 WinPSCompatSession
가져오면 암시적 원격은 사용자의 $env:Temp
디렉터리에 프록시 모듈을 생성하고 이 프록시 모듈을 현재 PowerShell 세션으로 가져옵니다. 프록시 모듈을 사용하면 PowerShell에서 Windows PowerShell 호환성 기능을 사용하여 모듈이 로드되었음을 검색할 수 있습니다.
세션이 만들어지면 역직렬화된 개체에서 제대로 작동하지 않는 작업에 사용할 수 있습니다. 전체 파이프라인은 Windows PowerShell에서 실행되며 최종 결과만 반환됩니다. 예시:
$s = Get-PSSession -Name WinPSCompatSession
Invoke-Command -Session $s -ScriptBlock {
"Running in Windows PowerShell version $($PSVersionTable.PSVersion)"
}
호환성 기능은 다음 두 가지 방법으로 호출할 수 있습니다.
UseWindowsPowerShell 매개 변수를 사용하여 모듈을 가져와 명시적으로
Import-Module -Name ScheduledTasks -UseWindowsPowerShell
명령 검색을 통해 모듈 이름, 경로 또는 자동 로드를 통해 Windows PowerShell 모듈을 암시적으로 가져옵니다.
Import-Module -Name ServerManager Get-AppLockerPolicy -Local
아직 로드되지 않은 경우 실행할
Get-AppLockerPolicy
때 AppLocker 모듈이 자동으로 로드됩니다.
Windows PowerShell 호환성은 PowerShell 구성 파일의 설정에 WindowsPowerShellCompatibilityModuleDenyList
나열된 모듈의 로드를 차단합니다.
이 설정의 기본값은 다음과 같습니다.
"WindowsPowerShellCompatibilityModuleDenyList": [
"PSScheduledJob","BestPractices","UpdateServices"
]
암시적 모듈 로드 관리
Windows PowerShell 호환성 기능의 암시적 가져오기 동작을 사용하지 않도록 설정하려면 PowerShell 구성 파일에서 설정을 사용합니다 DisableImplicitWinCompat
. 이 설정을 파일에 추가할 powershell.config.json
수 있습니다. 자세한 내용은 about_PowerShell_Config 참조하세요.
이 예제에서는 Windows PowerShell 호환성의 암시적 모듈 로드 기능을 사용하지 않도록 설정하는 구성 파일을 만드는 방법을 보여 줍니다.
$ConfigPath = "$PSHOME\DisableWinCompat.powershell.config.json"
$ConfigJSON = ConvertTo-Json -InputObject @{
"DisableImplicitWinCompat" = $true
"Microsoft.PowerShell:ExecutionPolicy" = "RemoteSigned"
}
$ConfigJSON | Out-File -Force $ConfigPath
pwsh -settingsFile $ConfigPath
모듈 호환성에 대한 최신 정보는 PowerShell 7 모듈 호환성 목록을 참조하세요.
cmdlet 복제 관리
Windows PowerShell 호환성 기능은 암시적 원격을 사용하여 호환 모드에서 모듈을 로드합니다. 그 결과 모듈에서 내보낸 명령이 현재 PowerShell 7 세션에서 동일한 이름의 명령보다 우선합니다. PowerShell 7.0.0 릴리스에는 PowerShell과 함께 제공되는 핵심 모듈이 포함되었습니다.
PowerShell 7.1에서는 다음 핵심 PowerShell 모듈이 복제되지 않도록 동작이 변경되었습니다.
- Microsoft.PowerShell.ConsoleHost
- Microsoft.PowerShell.Diagnostics
- Microsoft.PowerShell.Host
- Microsoft.PowerShell.Management
- Microsoft.PowerShell.Security
- Microsoft.PowerShell.Utility
- Microsoft.WSMan.Management
또한 PowerShell 7.1에서는 호환 모드를 통해 더 많은 모듈을 복제에서 제외하는 기능도 추가되었습니다.
PowerShell 구성 파일에 설정을 추가할 WindowsPowerShellCompatibilityNoClobberModuleList
수 있습니다. 이 설정의 값은 모듈 이름의 쉼표로 구분된 목록입니다. 이 설정의 기본값은 다음과 같습니다.
"WindowsPowerShellCompatibilityNoClobberModuleList": [ ]
제한 사항
Windows PowerShell 호환성 기능:
- Windows 컴퓨터에서만 로컬로 작동
- Windows PowerShell 5.1 필요
- 라이브 개체가 아닌 직렬화된 cmdlet 매개 변수 및 반환 값에서 작동합니다.
- Windows PowerShell 원격 세션으로 가져온 모든 모듈에 대한 단일 Runspace 공유
임시 파일
Windows PowerShell 호환성 기능은 암시적 원격을 사용하여 PowerShell 7에서 Windows PowerShell 5.1 모듈을 사용할 수 있도록 합니다. 암시적 원격은 디렉터리에 임시 파일을 $env:Temp
만듭니다. 프록시된 각 모듈은 다음 명명 규칙을 사용하여 별도의 폴더에 저장됩니다.
remoteIpMoProxy_<ModuleName>_<ModuleVersion>_localhost_<SessionGuid>
.
세션에서 마지막 프록시 모듈을 제거하거나 세션을 닫으면 PowerShell에서 임시 파일을 제거합니다.
참고 항목
PowerShell