Windows PowerShell 5.1에서 PowerShell 7로 마이그레이션

클라우드, 온-프레미스 및 하이브리드 환경에 맞게 설계된 PowerShell 7은 다수의 고급 기능과 새로운 기능을 갖추고 있습니다.

  • Windows PowerShell과 함께 설치 및 실행
  • 기존 Windows PowerShell 모듈과의 호환성 향상
  • 삼항 연산자 및 같은 새로운 언어 기능 ForEach-Object -Parallel
  • 성능 향상
  • SSH 기반 원격 기능
  • 플랫폼 간 상호 운용성
  • Docker 컨테이너 지원

PowerShell 7은 Windows PowerShell과 함께 작동하여 배포 전에 버전을 쉽게 테스트하고 비교할 수 있습니다. 간편하고 빠르고 안전하게 마이그레이션할 수 있습니다.

PowerShell 7은 다음 Windows 운영 체제에서 지원됩니다.

  • Windows 10 및 11
  • Windows Server 2016, 2019 및 2022

PowerShell 7은 macOS와 몇 가지 Linux 배포에서도 실행됩니다. 지원되는 운영 체제 목록 및 지원 수명 주기에 대한 자세한 내용은 PowerShell 지원 수명 주기를 참조하세요.

PowerShell 7 설치

유연성과 IT, DevOps 엔지니어 및 개발자의 요구를 지원하기 위해 PowerShell 7을 설치하는 데 사용할 수 있는 몇 가지 옵션이 있습니다. 대부분의 경우 설치 옵션을 다음 방법으로 줄일 수 있습니다.

참고 항목

MSI 패키지는 Microsoft Configuration Manager와 같은 관리 제품으로 배포 및 업데이트할 수 있습니다. GitHub 릴리스 페이지에서 패키지를 다운로드합니다.

MSI 패키지를 배포하려면 관리 권한이 필요합니다. ZIP 패키지는 모든 사용자가 배포할 수 있습니다. ZIP 패키지는 전체 설치로 커밋하기 전에 PowerShell 7을 가장 쉽게 테스트 설치해볼 수 있는 방법입니다.

Windows 스토어 또는 winget을 통해 PowerShell 7을 설치할 수도 있습니다. 이 두 메서드에 대한 자세한 정보는 Windows에 PowerShell 설치의 자세한 지침을 참조하세요.

Windows PowerShell 5.1과 함께 PowerShell 7 사용

PowerShell 7은 Windows PowerShell 5.1과 공존하도록 설계되었습니다. 다음 기능은 PowerShell에 대한 투자가 보호되고 PowerShell 7로의 마이그레이션이 간단하도록 합니다.

  • 별도의 설치 경로 및 실행 파일 이름
  • 별도의 PSModulePath
  • 각 버전에 대한 개별 프로필
  • 향상된 모듈 호환성
  • 새 원격 엔드포인트
  • 그룹 정책 지원
  • 이벤트 로그 분리

.NET 버전의 차이점

PowerShell 7.2는 .NET 6.0을 기반으로 합니다. Windows PowerShell 5.1은 .NET Framework 4.x를 기반으로 합니다. .NET 버전 간의 차이는 특히 .NET 메서드를 직접 호출하는 경우 스크립트의 동작에 영향을 줄 수 있습니다. 자세한 내용은 Windows PowerShell 5.1과 PowerShell 7.x 간의 차이점입니다.

별도의 설치 경로 및 실행 파일 이름

PowerShell 7은 새 디렉터리에 설치되어 Windows PowerShell 5.1에서 병렬 실행을 사용하도록 설정합니다.

버전별 위치 설치:

  • Windows PowerShell 5.1: $env:WINDIR\System32\WindowsPowerShell\v1.0
  • PowerShell 6.x: $env:ProgramFiles\PowerShell\6
  • PowerShell 7: $env:ProgramFiles\PowerShell\7

새 위치가 PATH에 추가되어 Windows PowerShell 5.1 및 PowerShell 7을 모두 실행할 수 있습니다. PowerShell 6.x에서 PowerShell 7로 마이그레이션하는 경우 PowerShell 6이 제거되고 PATH가 대체됩니다.

Windows PowerShell에서 PowerShell 실행 파일의 이름은 powershell.exe입니다. 버전 6 이상에서 실행 파일의 이름은 pwsh.exe입니다. 이름을 새로 지정하면 두 버전의 병렬 실행을 지원하기 쉬워집니다.

별도의 PSModulePath

기본적으로 Windows PowerShell 및 PowerShell 7은 다른 위치에 모듈을 저장합니다. PowerShell 7은 $Env:PSModulePath 환경 변수로 이 위치들을 결합합니다. 이름으로 모듈을 가져올 때 PowerShell은 지정한 위치를 $Env:PSModulePath검사. 이를 통해 PowerShell 7은 코어 모듈과 데스크톱 모듈을 모두 로드할 수 있습니다.

설치 범위 Windows PowerShell 5.1 PowerShell 7.0
PowerShell 모듈 $env:WINDIR\system32\WindowsPowerShell\v1.0\Modules $env:ProgramFiles\PowerShell\7\Modules
사용자가 설치됨
AllUsers 범위
$env:ProgramFiles\WindowsPowerShell\Modules $env:ProgramFiles\PowerShell\Modules
사용자가 설치됨
CurrentUser 범위
$HOME\Documents\WindowsPowerShell\Modules $HOME\Documents\PowerShell\Modules

다음 예에서는 각 버전별로 $Env:PSModulePath의 기본값을 보여 줍니다.

  • Windows PowerShell 5.1의 경우:

    $Env:PSModulePath -split (';')
    
    C:\Users\<user>\Documents\WindowsPowerShell\Modules
    C:\Program Files\WindowsPowerShell\Modules
    C:\WINDOWS\System32\WindowsPowerShell\v1.0\Modules
    
  • PowerShell 7의 경우:

    $Env:PSModulePath -split (';')
    
    C:\Users\<user>\Documents\PowerShell\Modules
    C:\Program Files\PowerShell\Modules
    C:\Program Files\PowerShell\7\Modules
    C:\Program Files\WindowsPowerShell\Modules
    C:\WINDOWS\System32\WindowsPowerShell\v1.0\Modules
    

PowerShell 7에는 모듈의 자동 로드를 제공하는 Windows PowerShell 경로 및 PowerShell 7 경로가 포함되어 있습니다.

참고 항목

PSModulePath 환경 변수 또는 설치된 사용자 지정 모듈 또는 애플리케이션을 변경한 경우 추가 경로가 있을 수 있습니다.

자세한 내용은 about_PSModulePath 참조하세요.

모듈에 대한 자세한 내용은 about_Modules 참조하세요.

개별 프로필

PowerShell 프로필은 PowerShell이 시작될 때 실행되는 스크립트입니다. 이 스크립트는 명령, 별칭, 함수, 변수, 모듈 및 PowerShell 드라이브를 추가하여 환경을 사용자 지정합니다. 프로필 스크립트를 사용하면 수동으로 다시 만들지 않고도 모든 세션에서 이러한 사용자 지정을 사용할 수 있습니다.

PowerShell 7에서 프로필 위치의 경로가 변경되었습니다.

  • Windows PowerShell 5.1에서 프로필의 위치는 $HOME\Documents\WindowsPowerShell.
  • PowerShell 7에서 프로필의 위치는 $HOME\Documents\PowerShell.

프로필 파일 이름도 변경되었습니다.

$PROFILE | Select-Object *Host* | Format-List
 AllUsersAllHosts       : C:\Program Files\PowerShell\7\profile.ps1
 AllUsersCurrentHost    : C:\Program Files\PowerShell\7\Microsoft.PowerShell_profile.ps1
 CurrentUserAllHosts    : C:\Users\<user>\Documents\PowerShell\profile.ps1
 CurrentUserCurrentHost : C:\Users\<user>\Documents\PowerShell\Microsoft.PowerShell_profile.ps1

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

Windows PowerShell 5.1 모듈과의 PowerShell 7 호환성

Azure PowerShell, Active Directory 등 Windows PowerShell 5.1에서 사용하는 대부분의 모듈은 이미 PowerShell 7과 함께 작동합니다. Microsoft Graph, Office 365 등 더 많은 모듈에 대한 네이티브 PowerShell 7 지원을 추가하기 위해 다른 팀과 계속 협력하고 있습니다. 지원되는 모듈의 현재 목록은 PowerShell 7 모듈 호환성을 참조하세요.

참고 항목

Windows에서는 호환되지 않는 모듈을 사용하는 사용자를 위해 Import-Module PowerShell 7로 쉽게 전환할 수 있도록 UseWindowsPowerShell 스위치도 추가했습니다. 이 기능에 대한 자세한 내용은 about_Windows_PowerShell_Compatibility 참조하세요.

PowerShell 원격

PowerShell 원격을 사용하면 하나 이상의 원격 컴퓨터에서 PowerShell 명령을 실행할 수 있습니다. 영구 연결을 설정하고, 대화형 세션을 시작하고, 원격 컴퓨터에서 스크립트를 실행할 수 있습니다.

WS-Management 원격

Windows PowerShell 5.1 이하에서는 WSMAN(WS-Management) 프로토콜을 사용하여 연결 협상 및 데이터 전송을 수행합니다. WinRM(Windows 원격 관리)은 WSMAN 프로토콜을 사용합니다. WinRM을 사용하도록 설정한 경우 PowerShell 7은 원격 연결에 명명 Microsoft.PowerShell 된 기존 Windows PowerShell 5.1 엔드포인트를 사용합니다. 자체 엔드포인트를 포함하도록 PowerShell 7을 업데이트하려면 Enable-PSRemoting cmdlet을 실행하세요. 특정 엔드포인트에 연결하는 방법에 대한 자세한 내용은 PowerShell의 WS-Management Remoting을 참조 하세요.

Windows PowerShell 원격을 사용하려면 원격 관리를 위해 원격 컴퓨터를 구성해야 합니다. 자세한 내용과 지침은 원격 요구 사항 정보를 참조하세요.

원격 기능을 이용한 작업에 대한 자세한 내용은 원격 기능에 대한 정보를 참조하세요.

SSH 기반 원격 기능

WinRM과 같은 Windows 네이티브 구성 요소를 사용할 수 없는 다른 운영 체제를 지원하기 위해 PowerShell 6.x에 SSH 기반 원격이 추가되었습니다. SSH 원격 기능은 대상 컴퓨터에 SSH 하위 시스템으로 PowerShell 호스트 프로세스를 만듭니다. Windows 또는 Linux에서 SSH 기반 원격을 설정하는 방법에 대한 자세한 내용 및 예제는 다음을 참조 하세요. SSH를 통해 PowerShell 원격을 참조하세요.

참고 항목

PowerShell 갤러리(PSGallery)에는 SSH 기반 원격을 자동으로 구성하는 모듈 및 cmdlet이 포함되어 있습니다. Microsoft.PowerShell.RemotingTools PSGallery에서 모듈을 설치하고 cmdlet을 Enable-SSH 실행합니다.

New-PSSession, Enter-PSSessionInvoke-Command cmdlet에는 SSH 연결을 지원하는 새 매개 변수 집합이 있습니다.

[-HostName <string>]  [-UserName <string>]  [-KeyFilePath <string>]

원격 세션을 만들려면 HostName 매개 변수를 사용하여 대상 컴퓨터를 지정하고 사용자 이름에 UserName제공합니다. cmdlet을 대화형으로 실행하면 암호를 묻는 메시지가 나타납니다.

Enter-PSSession -HostName <Computer> -UserName <Username>

또는 HostName 매개 변수를 사용하는 경우 사용자 이름 정보 뒤에 at 기호(@) 뒤에 컴퓨터 이름을 입력합니다.

Enter-PSSession -HostName <Username>@<Computer>

KeyFilePath 매개 변수가 있는 프라이빗 키 파일을 사용하여 SSH 키 인증을 설정할 수 있습니다. 자세한 내용은 OpenSSH 키 관리를 참조 하세요.

지원되는 그룹 정책

PowerShell에는 엔터프라이즈 환경의 서버에 대한 일관된 옵션 값을 정의하는 데 도움이 되는 그룹 정책 설정이 포함되어 있습니다. 이러한 설정은 다음과 같습니다.

  • 콘솔 세션 구성: PowerShell이 실행되는 구성 엔드포인트를 설정합니다.
  • 모듈 로깅 켜기: 모듈의 LogPipelineExecutionDetails 속성을 설정합니다.
  • PowerShell 스크립트 블록 로깅 켜기: 모든 PowerShell 스크립트에 대한 자세한 로깅을 사용하도록 설정합니다.
  • 스크립트 실행 켜기: PowerShell 실행 정책을 설정합니다.
  • PowerShell 기록 켜기: PowerShell 명령의 입력 및 출력을 텍스트 기반 대본으로 캡처할 수 있습니다.
  • Update-Help의 기본 원본 경로 설정: 업데이트 가능한 도움말의 원본을 인터넷이 아닌 디렉터리로 설정합니다.

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

PowerShell 7에는 그룹 정책 템플릿 및 설치 스크립트가 포함되어 있습니다 $PSHOME.

그룹 정책 도구는 관리 템플릿 파일(.admx, .adml)을 사용하여 사용자 인터페이스에서 정책 설정을 채웁니다. 이를 통해 관리자는 레지스트리 기반 정책 설정을 관리할 수 있습니다. InstallPSCorePolicyDefinitions.ps1 스크립트를 통해 로컬 컴퓨터에 PowerShell 관리 템플릿이 설치됩니다.

Get-ChildItem -Path $PSHOME -Filter *Core*Policy*
    Directory: C:\Program Files\PowerShell\7

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           2/27/2020 12:38 AM          15861 InstallPSCorePolicyDefinitions.ps1
-a---           2/27/2020 12:28 AM           9675 PowerShellCoreExecutionPolicy.adml
-a---           2/27/2020 12:28 AM           6201 PowerShellCoreExecutionPolicy.admx

별도의 이벤트 로그

Windows PowerShell 및 PowerShell 7 로그 이벤트는 이벤트 로그를 구분합니다. 다음 명령을 사용하여 PowerShell 로그 목록을 가져옵니다.

Get-WinEvent -ListLog *PowerShell*

자세한 내용은 about_Logging_Windows 참조하세요.

Visual Studio Code를 사용하여 향상된 편집 환경

PowerShell 확장을 사용하는 VSCode(Visual Studio Code)는 PowerShell 7에서 지원되는 스크립팅 환경입니다. Windows PowerShell ISE(통합 스크립팅 환경)는 Windows PowerShell만 지원합니다.

업데이트된 PowerShell 확장에는 다음이 포함됩니다.

  • 새 ISE 호환 모드
  • 구문 강조 표시, 여러 줄 편집 및 뒤로 검색을 포함한 통합 콘솔의 PSReadLine
  • 안정성 및 성능 향상
  • 새 CodeLens 통합
  • 향상된 경로 자동 완성 기능

Visual Studio로 더 쉽게 전환하려면 명령 팔레트에서 제공하는 ISE 모드 사용 함수를 사용하세요. 이 함수를 통해 VSCode가 ISE 스타일 레이아웃으로 전환됩니다. ISE 스타일 레이아웃은 친숙한 사용자 환경에서 PowerShell의 모든 새로운 기능과 기능을 제공합니다.

새 ISE 레이아웃으로 전환하려면 Ctrl+Shift+P를 눌러 명령 팔레트 PowerShell열고 PowerShell: ISE 모드를 사용하도록 설정합니다.

레이아웃을 원래 레이아웃으로 설정하려면 명령 팔레트를 열고 PowerShell: ISE 모드 사용 안 함(기본값으로 복원)을 선택합니다.

VSCode 레이아웃을 ISE로 사용자 지정하는 방법에 대한 자세한 내용은 Visual Studio Code에서 ISE 환경을 복제하는 방법을 참조 하세요.

참고 항목

ISE를 새로운 기능으로 업데이트할 계획이 없습니다. 최신 버전의 Windows 10 또는 Windows Server 2019 이상에서 ISE는 이제 사용자가 제거할 수 없는 기능입니다. ISE를 영구적으로 제거할 계획은 없습니다. PowerShell 팀과 파트너는 Visual Studio Code용 PowerShell 확장에서 스크립팅 환경을 개선하는 데 중점을 두고 있습니다.

다음 단계

효과적으로 마이그레이션하는 지식으로 무장, 지금 PowerShell 7 을 설치!