리눅스의 뛰어난 생산성을 윈도우에서도 그대로 누릴 수 있다면 어떨까요? 윈도우와 리눅스의 가장 큰 차이점 중 하나는, 대부분의 리눅스 배포판이 강력한 Bash 셸을 기본으로 탑재하고 있다는 점입니다. 반면 윈도우의 명령 프롬프트는 너무나 빈약하죠. 윈도우에도 막강한 성능의 터미널이 있다면 얼마나 좋을까요?
PowerShell과 함께라면 그 꿈은 현실이 됩니다.
참고: PowerShell은 '윈도우용 Bash'가 아니며, 그런 목적으로 만들어진 것도 아닙니다. 물론 두 도구 모두 생산성을 크게 끌어올려 주는 명령줄 환경이라는 공통점이 있지만, 유사점은 여기까지입니다. PowerShell은 강력한 명령줄 환경을 구축하기 위한 완전히 별개의 접근 방식으로 이해하는 것이 바람직합니다.
PowerShell이란 무엇인가?
PowerShell은 윈도우 명령 프롬프트의 대규모 업그레이드 버전이라고 생각하면 됩니다. 시스템 탐색, 파일 조작, 속성 변경처럼 기존 명령 프롬프트로 처리하던 대부분의 작업을 수행할 수 있을 뿐만 아니라, .NET 프레임워크 전체를 활용할 수 있어 훨씬 더 강력한 기능을 발휘합니다.
PowerShell이 기존 명령 프롬프트보다 나은 이유는 크게 두 가지입니다. 바로 확장성(extensibility)과 스크립팅(scriptability)입니다.
PowerShell은 기본 명령 세트를 제공하지만, cmdlet(커맨드렛)을 직접 만들어 자신만의 명령을 추가할 수도 있습니다. Cmdlet은 C# 언어로 작성된 클래스로, 호출되면 PowerShell 환경 내에서 실행됩니다. C# 기반이기 때문에 cmdlet은 .NET 프레임워크의 모든 기능에 접근할 수 있습니다.
.NET 프레임워크에는 마이크로소프트가 제공하는 방대한 코드 라이브러리가 포함되어 있습니다. 직접 cmdlet을 작성할 때 이 모든 코드를 활용할 수 있죠. 프로세스 정보 조회, 암호화 알고리즘, 데이터베이스 연동, 네트워크 통신까지 — 필요한 기능 대부분이 이미 준비되어 있어 개발자는 적절한 함수를 호출해 조합하기만 하면 됩니다.
마이크로소프트 역시 PowerShell에 대한 지원 의지를 분명히 해왔습니다. 윈도우 10의 패키지 관리 기능도 PowerShell 기반으로 구축되었으며, 현재는 오픈소스 프로젝트인 PowerShell 7이 macOS와 리눅스까지 지원하며 크로스 플랫폼으로 발전하고 있습니다. 따라서 배워두면 언젠가 반드시 도움이 되는 기술이라 할 수 있습니다.
PowerShell이 매력적인 이유
PowerShell에는 고급 기능이 많지만, 상당수는 윈도우 개발자나 서버 관리자에게만 유용할 수 있습니다. 다행히 기본적인 기능 몇 가지는 배우기 쉬우면서도 모든 사용자에게 실질적인 도움을 줍니다.
1. 배우기 쉽지만 강력하다. PowerShell 환경은 몇 시간 정도 문서를 읽는 것만으로도 충분히 시작할 수 있을 만큼 진입 장벽이 낮습니다. 학습 곡선은 존재하지만 비교적 완만하며, 모든 기능을 익히지 않아도 실무에 활용할 수 있습니다.
2. 상세한 프로세스 정보. 단순히 대체 작업 관리자를 쓰는 수준을 넘어, PowerShell은 프로세스 관리 측면에서 다양한 기술을 구사할 수 있습니다. 기본 제공되는 Get-Process와 Stop-Process cmdlet부터 시작해 보세요.
3. 손쉬운 자동화와 스크립팅. 기본 윈도우 환경에서는 작업을 자동화할 방법이 마땅치 않았습니다. PowerShell 이전에는 배치 파일로 원시적인 스크립트만 작성할 수 있었고, 본격적인 자동화에는 Perl이나 AutoHotkey 같은 서드파티 도구가 필요했습니다. 하지만 PowerShell을 사용하면 특정 시간이나 주기에 작업을 실행하도록 예약할 수 있습니다.
예를 들어 ScheduledTasks 모듈을 사용하면, 특정 프로그램이나 프로세스가 트리거(지정 시각, 시스템 이벤트 발생 등)에 따라 실행되도록 설정하고, 보안 제한 같은 작업 컨텍스트도 정의할 수 있습니다.
4. 명령 파이핑과 논리 제어. 리눅스의 Bash에서처럼 PowerShell에서도 명령을 파이프(|)로 연결해 한 명령의 출력을 다른 명령의 입력으로 사용할 수 있습니다. 예를 들어 기본 Get-Process cmdlet은 실행 중인 모든 프로세스 정보를 출력합니다. 일부 프로세스만 확인하고 싶다면 필터 역할을 하는 Where-Object cmdlet과 연결하면 됩니다.
또한 If, Else, For, Switch 같은 조건문을 기본 제공하여 cmdlet 실행 흐름을 제어할 수 있습니다. 예를 들어 'RAM 사용량이 임계치에 가까워지면 불필요한 프로세스를 정리한다'는 식의 조건부 스크립트도 손쉽게 만들 수 있습니다.
5. 원격 및 백그라운드 작업. cmdlet은 백그라운드 프로세스로 실행해 여러 작업을 동시에 비동기 처리할 수 있을 뿐 아니라, 사전에 설정만 되어 있다면 네트워크상의 원격 머신에서도 실행할 수 있습니다. 원격 실행을 지원하는 cmdlet은 대개 -ComputerName 매개변수를 제공하므로, 실행 시 대상 컴퓨터를 지정하면 됩니다.
6. 서드파티 스크립트 활용. 굳이 직접 PowerShell을 확장하지 않아도 됩니다. 여러 온라인 저장소에서 다른 사람들이 공개한 스크립트와 cmdlet을 내려받아 바로 활용할 수 있습니다. 대표적으로 PowerShell Gallery에서 방대한 모듈을 무료로 받을 수 있습니다.
PowerShell 학습 자료 추천
PowerShell을 본격적으로 배워볼 준비가 되셨나요? 초보자에게 자주 추천되는 학습 자료들을 소개합니다.
Don Jones의 PowerShell 튜토리얼(유튜브). 윈도우 7에 기본 탑재되었던 PowerShell 2.0을 다루는 영상 시리즈로, 다소 오래됐지만 스크립팅 경험이 전혀 없는 입문자에게 좋은 출발점이 됩니다. 영상 하나당 몇 분밖에 되지 않지만 총 99편으로 구성되어 있어 알차게 배울 수 있습니다.
Microsoft Learn. 과거 Microsoft Virtual Academy(MVA)가 제공하던 무료 교육 과정은 현재 Microsoft Learn으로 통합되었습니다. PowerShell 입문 과정부터 고급 도구 및 스크립팅 과정까지 체계적인 공식 문서와 학습 경로를 무료로 이용할 수 있습니다.
TechNet 스크립트 센터. 마이크로소프트 웹사이트의 TechNet 섹션에는 PowerShell 가이드와 튜토리얼로 연결되는 유용한 링크가 많습니다. 리포지토리 섹션에서는 다양한 PowerShell 스크립트를 열람하고 다운로드할 수 있는 것도 장점입니다.
Hey, Scripting Guy! 블로그. 'PowerShell의 모든 것'을 다루는 블로그로, 거의 10년에 걸친 방대한 정보를 축적하고 있습니다. 새 글이 매일 게시되며 태그별로 분류되어 있어 찾아보기 쉽습니다. 어디서부터 시작해야 할지 모르겠다면 입문(Getting Started) 태그부터 살펴보세요.
PowerShell, 당신에게 맞을까?
어떻게 생각하시나요? PowerShell이 윈도우에서의 생산성을 높여줄까요? 아니면 당신의 용도에는 과분한 도구일까요? 여러분의 생각을 댓글로 공유해 주세요!