파워셸(PowerShell)
목차
파워셸은 MS 윈도우의 스크립트 언어이자 CLI(Command Line Interface)입니다. 그냥 스크립트 언어가 아니라 윈도우 시스템에 직접 접근할 수 있는 시스템 스크립트 언어입니다. 관리자 권한을 얻으면 윈도우 시스템 전체를 컨트롤 할 수 있습니다.
리눅스에는 배시셸(bash shell)이 있어서 많은 일을 편하게 할 수 있습니다. 리눅스의 수많은 커뮤니티가 점점 더 편리한 환경을 만들어 가고 있습니다. 리눅스를 사용한다는 것은 직간접적으로 셸을 사용하는 것과 같은데요. 처음에는 좀 어렵지만 시간이 지날수록 굉장히 합리적이고 편리한 인터페이스라는 것을 알게됩니다.
그런데 윈도우 쪽에는 딱히 배시셸 같은 존재는 없습니다. MS-DOS의 형태를 떠올리게 하는 명령프롬프트는 지금와서 쓰는 사람도 많지 않고 이것을 사용하는 사람도 어떤 개선의 여지가 있어서 사용하는게 아니라 그냥 쓰는 것이라고 봐야죠. 다른 옵션이 마땅히 없으니까… 지난 수십년간 리눅스는 오픈소스 커뮤티티의 힘으로 엄청난 진보를 했지만 MS사의 명령프롬프트는 윈도우 시리즈가 11이 되도록 별다른 소식이 없습니다. (명령프롬프트는 MS-DOS를 계승한건지 껍데기 에뮬레이터인지 알수 없는 듯하다) 이걸로 할 수 있는게 많지는 않으니까요.
어떻게 보면 명령프롬프트는 과거 DOS 시절 수준의 조작을 하는 사람들을 위한 과거 호환성일 수도 있습니다. 윈도우의 버전업 때 마다 지원을 끓을 수 있었는데 굳이 비효율적인 셸을 놔둔 것이라 이것 때문에 윈도우에 대한 반감으로 리눅스로 가버린 경우도 있습니다. 애플의 MacOS는 아예 유닉스 시스템으로 많은 사용자들이 MacOS로 가서 윈도우로 돌아오지 않는 이유 중에는 유닉스의 셸이 윈도우보다 편리하고 확장성이 뛰어난 부분이 있을거라 봅니다.
* MS 윈도우 OS를 운영하기 위한 진짜 셸은 명령프롬프트가 아니라 파워셸입니다. 그러니까 윈도우가 사용자들에게 뭐랄까… 친절하지는 않은 것 이지요. 오픈소스 시대흐름에 완벽히 들어맞는 것도 아니고, 뭐 그렇습니다. 파워셸 가이드를 쓰는데 비판부터 하니까 이것도 이상한데요.
상황이 이렇기 때문에 윈도우를 더 제대로 사용하고자 한다면 파워셸을 배워야한다 – 는 것을 강조하려는 의도로 이해해주시면 고맙겠습니다. 그리고 파워셸은 리눅스에 비해 쉽거나, 어려울 수 있는데(?) 명령프롬프트와 리눅스의 배시셸을 사용해봤다면 더 헷갈릴 수 있으니까… 조금 인내심이 필요할 수 있습니다.
파워셸(PowerShell) 시작하기
이 포스팅에서는 윈도우 운영체제의 파워셸을 시작하겠습니다. 현재 필자의 OS는 윈도우11 HOME 22H2 입니다.
윈도우 검색에서 powershell 을 검색하면 Windows PowerShell 을 시작할 수 있습니다. 필자는 윈도우 Terminal 을 추천합니다. 탭을 여러개 띄울 수 있고 폰트 등 프로필 설정이 세분화 되있습니다.
PowerShell ISE (integrated scripting environment)
파워셸 ISE는 통합 스크립팅 환경입니다. 스크립트를 작성할 수 있고 다른 통합개발환경(IDE) 처럼 문법 강조나 명령어 설명, 테스트 등을 할 수 있는 개발도구입니다. 파워셸에서 다음 명령어로 시작할 수 있습니다.
powershell_ise.exe
파워셸 스크립트 실행정책
파워셸 파일을 실행하려면 실행 정책을 변경해야 합니다. 정책에 따라 스크립트의 실행이 안될 수 있으니까 풀어줘야하는데 우선 다음 명령어로 확인합니다.
Get-ExecutionPolicy
스크립트를 실행하기 위해서는 RemoteSigned 가 나와야 합니다. 파워셸을 관리자 권한으로 실행하여 다음의 명령어를 입력합니다. 관리자 권한으로 실행하지 않으면 변경이 안됩니다.
Set-ExecutionPolicy RemoteSigned
스크립트 실행 정책 네가지는 다음과 같습니다.
- Restricted : 모든 스크립트 사용금지
- AllSigned: 신뢰할만한 개발자에 의해 서명된 스크립트만 실행가능
- RemoteSigned: 자신의 스크립트를 실행하거나 신뢰할만한 개발자에 의해 서명된 스크립트만 실행가능
- Unrestricted: 제한없이 스크립트 실행가능
파워셸 버전체크
파워셸 버전체크는 다음과 같습니다. 현재는 7.x 버전까지 나왔는데 6버전 이후는 NET CORE로 넘어가서 오픈소스 크로스플랫폼으로 바뀝니다. 윈도우의 파워셸은 5.1 버전이고 이 포스트 시리즈에서는 윈도우용 파워셸을 다룰 겁니다. 나중에 NET CORE 쪽 버전을 다룰지는 아직 계획은 없습니다. MacOS나 리눅스에서 파워셸을 쓰는 것이 흔한 것은 아닌 것 같아 보입니다.
$PSVersionTable
파워셸 Hello World
새로운 스크립트 언어를 시작했으니 Hello World를 한번 해줘야겠지요? 이번엔 PowerShell ISE에서 이를 입력한 후 실행해봅니다. ps1 파일에 저장해야 하고 디버그에서 실행(F5)을 하면 콘솔창에 결과를 볼 수 있습니다.
Write-Host 'Hello World-1' 'Hello PowerShell-2' | Write-Host Write-Output 'Hello World-3' 'Hello PowerShell-4' | Write-Output $greeting = 'Hello PowerShell again' $greeting | Write-Output Get-Variable greeting
결과는 다음과 같이 나오지만 지금은 그 내용에 신경쓰지 않아도 됩니다. 스크립트가 동작을 하고 있다 – 는 정도로 우리가 알면 충분합니다.
요약
파워셸에 대해 간단히 알아보고 스크립트 실행 정책에 대해 알아보고 가장 첫번째 스크립트인 Hello World 를 실행해봤습니다.