MS PowerShell 버전과 확장자 ps1

파워쉘을 가장 처음 접했을 때 확장자에 숫자가 있어서 어떤 의미인지 궁금했는데 오늘 잠시 검색해보고 내용을 정리했다. 먼저 결론을 얘기하면 버전과 상관 없이 .ps1이 파워쉘 스크립트의 확장자다.

파워쉘은 이전까지 Monad Manifesto라는 Windows Command Shell 프로젝트였는데 파워쉘이라는 이름으로 릴리즈 되면서 이전까지 쉘에서 사용하던 .msh 확장자를 .ps1으로 변경했다. .ps는 포스트스크립트(PostScript)의 확장자로 오랜 기간 동안 사용해왔다. 그래서 .ps를 선택할 수 있는 옵션은 아니였던 것으로 보인다. 그리고 버전을 표기하기 위해서 .ps1 이라는 확장자를 선택하게 되었다.

하지만 PowerShell의 2 버전을 내면서 1) 1 버전의 스크립트가 2 버전에서 호환된다, 2) 2 버전이 1 버전을 대체한다는 이유로 .ps1 확장자를 그대로 사용하기로 했다. 대신 각 스크립트에서 요구하는 버전을 선언할 수 있도록 #REQUIRES 문을 제공하게 되었다. 그 이후로는 그냥 .ps1을 아무 고민 없이 사용하게 되었다는 훈훈한 이야기다.

#REQUIRES문을 다음과 같이 추가해서 사용할 버전을 지정할 수 있다.

#REQUIRES -version 5

현재 구동하고 있는 파워쉘보다 높은 버전이라면 다음처럼 오류가 발생한다. (6 버전은 아직 존재하지 않는다. 그냥 큰 숫자를 넣어서 구동한 결과다.)

.\req.ps1 : The script 'req.ps1' cannot be run because it contained a "#requires" statement for Windows PowerShell 6.0. The version of Windows PowerShell that is required by the script 
does not match the currently running version of Windows PowerShell 5.0.10586.122.
At line:1 char:1
+ .\req.ps1
+ ~~~~~~~~~~
    + CategoryInfo          : ResourceUnavailable: (req.ps1:String) [], ScriptRequiresException
    + FullyQualifiedErrorId : ScriptRequiresUnmatchedPSVersion

현재 구동하고 있는 파워쉘의 버전은 $PSVersionTable에서 확인할 수 있다.

PS> $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
5      0      10586  122

Get-Host로 확인할 수 있는 버전은 파워쉘에 접속하는 호스트의 버전을 의미하지 쉘의 버전을 뜻하지 않기 떄문에 주의해야 한다.

만약 상위 호환에 문제가 있는 파워쉘 스크립트를 구동하려면 어떻게 해야 할까? 그런 경우는 PowerShell의 플래그 -Version을 이용해서 구동할 수 있다.

PowerShell -Version 2 .\hello.ps1

실제로 구동 결과를 보면 하위 호환이 지원 되는 가장 마지막 쉘로 구동하는 방식이다. $PSVersionTable을 출력하도록 확인해보면 1, 2 버전은 2 버전으로, 3 버전 이상은 그냥 현재 버전으로 구동하게 된다.

psh 같은 확장자를 선택했으면 좀 멋지지 않았을까 생각이 든다.

더 읽을 거리

김용균

안녕하세요, 김용균입니다. 문제를 해결하기 위해 작고 단단한 코드를 작성하는 일을 합니다. 웹의 자유로운 접근성을 좋아합니다. 프로그래밍 언어, 소프트웨어 아키텍처, 커뮤니티에 관심이 많습니다.

이 글 공유하기

이 글이 유익했다면 주변에도 알려주세요!

페이스북으로 공유하기트위터로 공유하기링크드인으로 공유하기Email 보내기

주제별 목록

같은 주제의 다른 글을 읽어보고 싶다면 아래 링크를 확인하세요.

July 21, 2016

Dell XPS 13 9350 구입기

신형 맥북 에어가 나오면 구입하려고 그랬는데 생각보다 빨리 나오질 않아서 현행 버전을 구입해야 하는지 고민하고 있었다. 그런데 번역 작업에 MS 워드를 사용하기 시작하면서 윈도 환경이 필요했고 기존 노트북이 워낙에 낮은 사양이라서 작업중에 자주 멎어…

July 08, 2016

MS PowerShell에서 텔레그램 메시지 전송하기

얼마 전에 Windows 환경이 필요해 lubuntu 설치해서 사용하던 노트북을 Windows 10으로 전환했다. 이 노트북은 32GB eMMC 내장이라 사실 공간이 엄청 부족한 편이다. Windows 10을 설치하고 나니 5GB만 남아서 Visua…