PowerShell Script(.ps1) 파일이 메모장 대신 파워쉘에서 열리게 하는 방법

Welcome file

파워셸 스크립트 파일

파워셸 스크립트 파일 1 은 마이크로소프트가 개발한 CLI 셸 및 스크립트 언어 인터프리터입니다. 이전에도 윈도우에는 명령 프롬프트2가 존재했지만, 셸로서의 기능은 다른 셸3에 비해 터무니없이 빈약했습니다.

때문에 저는 한 때 Ruby 인터프리터4를 PATH에 잡아놓고 셸 대신 사용했던 적이 있는데, 이것 역시 bash 등에 비하면 매우 불편했죠.

그러던 중 어느샌가 윈도우에 파워셸이 포함되었고, Windows 10 1703 이후에는 아예 기본 CLI 셸로 자리잡게 되었습니다.

파워셸은 .NET Framework 또는 .NET Core, .NET 5 기반 DLL을 로드해 자유자재로 사용할 수 있으며 변수 선언 및 For, ForEach, If 등의 프로그래밍적 요소 역시 스크립트 언어 답게 완벽하게 구비하고 있으며, 무엇보다 Microsoft에서 개발한 것 답게 명령 프롬프트 사용 방법과 별반 차이가 없기에 기존 명령 프롬프트 사용자 역시 손쉽게 넘어올 수 있습니다.5

Windows PowerShell과 PowerShell Core

이러한 파워셸도 종류가 나뉘게 되었는데, 2016년 8월 18일에 오픈소스로 공개되기 전의 5 버전과 공개된 후의 PowerShell 6 버전, 그리고 다양한 플랫폼을 지원하게 된 7 버전입니다.6

이 포스트에서 설명하는 방법은 현재 Windows 10의 기본 셸인 PowerShell 6 버전을 대상으로 하지만, 5 버전이든 7 버전이든 2020. 01. 24. 현재 파일 경로만 올바르게 변경한다면 모두 적용 가능한 방법입니다.

파워셸 연결 프로그램

윈도우의 기본 셸로 탑재된 상황임에도 불구하고 .ps1 파일은 기본적으로 탐색기에서 더블클릭할 경우 메모장으로 열리게 되어있습니다. 파워셸에서 .ps1 파일을 실행하면 스크립트로 실행되나, 처음부터 셸을 통해 폴더로 접근하는 상황은 흔치 않죠. 물론 탐색기의 파일 메뉴를 통해 해당 폴더에서 파워셸이 열리게 할 수도 있지만 이 역시 중간 단계가 두 개 추가되게 됩니다.

심지어, 이러한 파워셸 스크립트를 PATH에 등록해 놓고 시작 - 실행에서 바로 실행하려 하면 스크립트는 실행되지 않고 메모장이 열리게 됩니다. 저는 더블클릭, 또는 시작 - 실행 - PATH에 등록된 스크립트명으로 바로 스크립트가 열리는 상황을 원했습니다.

뭐가 문제일까?

문제를 해결하려면 문제의 증상을 알고 원인을 파악해야겠죠. 증상은 .ps1 파일을 더블클릭하면 메모장으로 열린다입니다. 그렇다면 이 증상의 원인은 뭘까요?

근본을 파 봅시다. 탐색기에서 특정 확장자의 파일을 더블클릭했을 때 탐색기는 해당 확장자가 어떤 프로그램으로 연결된다는 정보를 어디선가 얻어와 해당 프로그램을 통해 파일을 열게 될 것입니다. 그렇다면 그 정보를 조작하면 되겠죠.

그렇다면 원인은? 해당 정보가 .ps1 파일을 열 때 메모장으로 열라고 되어있기 때문이겠군요.

연결 프로그램 변경

그럼 해당 정보는? 레지스트리에 있습니다.

레지스트리 편집기를 열고, HKCR 키를 열어보면 다음과 같이 수많은 키가 보입니다.

[이미지1]

잘 보면 키의 이름이 대부분 확장자명처럼 보일 겁니다. 맞습니다. 탐색기는 여기에서 확장자에 대한 정보를 읽어오게 되기 때문이죠.

우리가 지금 봐야하는 확장자는 .ps1입니다. 찾아봅시다.

[이미지2]

기본값을 보니 Microsoft.PowerShell.1이라고 돼있네요. 다시 HKCR에서 찾아봅시다.

[이미지3]

하위 키에 Shell\Open\Command가 있네요. 딱 봐도 저 키의 값을 참조해서 탐색기가 파일을 열어줄 것만 같은 키 이름입니다.

[이미지4]

찾았죠? 메모장 프로그램에 %1(대상 파일 경로) 인자를 넘겨 실행하도록 되어있습니다. 그럼 이제 이걸 바꾸면 되겠네요!

[이미지5]

"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -noLogo -ExecutionPolicy unrestricted -file "%1"

물론 다른 프로그램으로 열게 할 수도 있지만 이 포스트의 목적은 파워셸 스크립트 파일이 파워셸에서 열리게 하는 것이므로 위와 같이 입력하겠습니다. 만약 파워셸 코어를 사용하신다면 해당 경로를 입력하시면 되고, 다른 버전의 파워셸 역시 해당 경로를 입력하시면 됩니다.

문제 해결!

이 포스트에서 알려드린 일련의 방법 - HKCR 하위 키의 변경으로 확장자에 연결된 프로그램 변경은 당연히 다른 확장자와 다른 프로그램에 대해서도 똑같이 적용할 수 있습니다. 다만, 대부분의 경우에는 파일 컨텍스트 메뉴의 연결 프로그램 메뉴를 통해 변경하는 것이 더 효율적입니다. 혹은, Windows 설정에서 변경해도 됩니다.


  1. PowerShell Script file, .ps1 ↩︎

  2. Command Prompt, CMD, .bat; .cmd; … ↩︎

  3. bash, zsh, … ↩︎

  4. irb ↩︎

  5. 예: ls 명령어와 dir 명령어 모두 지원. 정확히는 Get-ChildItem 명령에 Alias 되어있음. ↩︎

  6. https://en.wikipedia.org/wiki/PowerShell#PowerShell_Core_6 ↩︎

댓글

  1. 아직도 블로그 활동을 하시는줄 몰랐네요
    게리모드에서 자주보이는 혼살의 좀비서바이벌의 그 혼살님이시네요 저도 2014년도부터 게리모드를 5년동안이나 즐겼었습니다. 그 데스런으로 유명한 하늘님의 다크RP서버에서 자주 놀고 서버개발자짓도 했었죠

    저도 직업을 개발자로 하다보니 어쩌다가 이런 블로그를 찾게 되네요 반갑습니다 ㅎ

    답글삭제

댓글 쓰기

이 블로그의 인기 게시물

C# 남아도는 메모리에도 불구하고 OutOfMemoryException이 발생한다면?

USB를 뒤는 괜찮은데 앞에 꽂으면 인식이 힘들다?

MySQL 데이터 타입과 Java 데이터 타입 비교/매칭