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 만듭니다. 이 프로세스는 호환성 기능이 첫 번째 모듈을 가져올 때 만들어집니다. 마지막 모듈을 제거(사용 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 호환성 기능:

  1. Windows 컴퓨터에서만 로컬로 작동
  2. Windows PowerShell 5.1이 필요합니다.
  3. 라이브 개체가 아닌 직렬화된 cmdlet 매개 변수 및 반환 값에서 작동합니다.
  4. Windows PowerShell 원격 세션으로 가져온 모든 모듈은 동일한 Runspace를 공유합니다.

키워드

about_Windows_PowerShell_Compatibility

참고 항목