PowerShell은 Windows PC를 완벽하게 제어할 수 있는 강력한 도구이며, 배우기도 어렵지 않습니다. 이제 명령 프롬프트는 내려놓고, Windows PowerShell 명령어로 반복적인 관리 작업을 자동화해 보세요.
PowerShell을 익히면 대부분의 Linux 배포판에서 사용하는 bash 셸 기반의 관리 작업도 훨씬 수월하게 처리할 수 있습니다. PowerShell의 구조와 문법은 리눅스 환경과 매우 유사하기 때문입니다.
PowerShell이란 무엇인가?
Windows PowerShell은 Microsoft가 시스템 관리자를 위해 개발한 명령줄 인터페이스(CLI)이자 스크립팅 언어입니다. 하지만 반드시 관리자나 프로그래머일 필요는 없습니다. 다른 프로그래밍 언어보다 훨씬 단순하고 일상 영어와 비슷하게 구성되어 있어 누구나 쉽게 이해하고 자신의 컴퓨터를 관리하는 데 활용할 수 있습니다.
Windows PowerShell에서 사용되는 명령어를 'cmdlet(커맨드렛)'이라고 부릅니다. cmdlet을 통해 특정 동작 또는 일련의 작업을 실행할 수 있는데, 무선 네트워크에 접속하는 것 같은 간단한 작업부터 특정 반복 업무를 자동화하는 복잡한 작업까지 폭넓게 지원합니다.
PowerShell을 열려면 시작 버튼을 누르고 검색창에 'powershell'을 입력한 뒤 Windows PowerShell을 선택하면 됩니다. 명령줄 인터페이스가 열리면 바로 명령어 입력을 시작할 수 있습니다.
이 글에서는 가장 유용하고 배우기 쉬운 PowerShell 명령어 10가지를 소개합니다.
1. Get-Help
Get-Help cmdlet은 PowerShell 학습의 출발점으로 가장 적합합니다. PowerShell에서 할 수 있는 작업의 전반적인 개요를 보여주며, 특정 cmdlet에 대한 상세 정보가 필요할 때도 유용합니다.
PowerShell 창을 연 후 Get-Help라고 입력하기만 하면 됩니다. 그러면 PowerShell이 무엇인지, 어떤 기능과 구조를 갖추고 있는지 설명해 주는 포괄적인 개요가 표시됩니다. 인터페이스에서 바로 웹의 고급 도움말 파일에 접근할 수 있으며, 필요하다면 해당 파일을 내려받아 나중에 활용할 수도 있습니다.

Get-Help 명령의 활용은 여기서 끝나지 않습니다. 다음을 입력해 보세요.
Get-Help *
그러면 현재 사용할 수 있는 모든 cmdlet 목록이 표시됩니다. 목록이 상당히 방대할 것이므로 전부 외울 필요는 없습니다. 다만 시간을 들여 살펴보면서 자신에게 가능한 모든 옵션을 탐색해 보는 것을 추천합니다.
특정 명령어의 기본 정보를 확인하려면 다음을 입력합니다.
Get-Help <명령어 이름>
대괄호는 입력하지 않고 원하는 명령어 이름만 입력하면 됩니다. 더 자세한 설명이 필요하다면 다음처럼 입력하세요.
Get-Help <명령어 이름> -Full
특정 명령어의 실제 사용 예시가 필요하다면 아래 명령어를 사용합니다.
Get-Help <명령어 이름> -Example
2. Get-Command
특정 명령어 또는 명령어 집합에 대한 정보를 빠르게 조회하고 싶다면 Get-Command cmdlet이 정답입니다. Get-Command에는 다양한 옵션이 있지만, PowerShell 초보자 입장에서는 그중 일부만 알아도 충분합니다. 특히 사용 가능한 명령어를 탐색할 때 유용한 기본 cmdlet들을 소개합니다.
같은 유형의 cmdlet 목록을 조회하려면:
Get-Command -<CommandType>
예를 들어 다음 복합 명령어는 사용 가능한 모든 cmdlet 유형의 명령을 명사(Noun)별 알파벳 순으로 정렬하여 표시하도록 지시합니다.
Get-Command -Type Cmdlet | Sort-Object -Property Noun | Format-Table -GroupBy Noun
이것은 PowerShell로 복잡한 작업을 실행하게 만드는 고급 명령어의 좋은 예입니다. 문법을 한번 이해하고 나면, 컴퓨터에서 여러 작업을 처리할 때 PowerShell이 종종 가장 빠르고 간편한 방법이라는 사실을 깨닫게 될 것입니다.

이름으로 특정 명령어를 찾으려면 다음처럼 입력합니다.
Get-Command -Name <명령어 이름>
찾으려는 명령어의 정확한 이름을 모르지만 이름의 일부를 알고 있다면:
Get-Command -Name <명령어 이름> -UseFuzzyMatching
이 cmdlet은 <name> 항목에 입력한 내용과 유사한 명령어를 찾아줍니다. 철자를 자주 틀리는 편이라 일일이 수정하기 번거롭다면 이 cmdlet이 큰 도움이 됩니다.
3. Get-Content
파일의 내용을 확인하고 싶을 때는 Get-Content cmdlet을 사용합니다. 컴퓨터가 파일을 찾을 수 있도록 해당 파일의 정확한 경로를 지정해야 합니다.

위 예시에서는 이 목적으로 만든 테스트 텍스트 파일의 내용을 확인했습니다. 명령 자체는 매우 단순하지만, 그 기능을 이해하면 다른 명령어들과 조합하여 Windows PowerShell로 정말 강력한 작업을 수행할 수 있습니다.
4. Get-Process
Get-Process cmdlet은 현재 컴퓨터에서 실행 중인 프로세스에 대한 정보를 제공합니다. 메모리 사용량, CPU 사용률, 프로세스 ID 등 다양한 속성을 확인할 수 있습니다.
cmdlet 뒤에 프로세스 이름을 붙이면 특정 프로세스의 정보만 볼 수 있습니다. 예를 들어 Discord 애플리케이션 프로세스의 정보를 원한다면 Get-Process Discord라고 입력하면 됩니다.

문법에서 'Get' 접두사를 다른 단어로 바꾸면 PowerShell을 통해 프로세스를 시작하거나 중지할 수도 있습니다. 프로세스를 시작하려면:
Start-Process <프로세스 이름 또는 ID>
프로세스를 중지하려면:
Stop-Process <프로세스 이름 또는 ID>
5. Get-Service
시스템 관리자라면 Get-Service cmdlet이 특히 유용하다는 것을 알게 될 것입니다. 이 간단한 cmdlet은 현재 시스템에서 실행 중인 모든 서비스를 표시하고 이를 제어할 수 있게 해 줍니다. 즉, 컴퓨터가 정상적으로 작동하도록 백그라운드에서 돌아가고 있는 모든 프로그램을 한눈에 파악할 수 있습니다.

이제 서비스 이름으로 서비스를 제어할 수 있습니다. 멈춘 서비스를 되살리려면 Restart-Service <서비스 이름>, 완전히 중지하려면 Stop-Service <서비스 이름>, 다시 시작하려면 Start-Service 명령을 사용합니다.
6. Get-Item
특정 파일을 찾아야 할 때 운영체제의 통합 검색창보다 PowerShell을 이용하는 편이 더 빠를 수 있습니다. 특히 파일 위치를 이미 알고 있다면 더욱 편리합니다. 다음과 같이 명령어를 사용하면 됩니다.
Get-Item C:
이렇게 하면 'C:' 드라이브에 있는 파일 목록이 표시됩니다. 더 구체적으로 사용자 프로필 하위의 모든 디렉터리를 검색하거나 '문서' 또는 '다운로드' 폴더까지 들어가서 검색할 수도 있습니다. 이 경우에는:
Get-Item C:\users\<사용자 이름>\*

시스템 디렉터리 같은 컨테이너 안의 하위 항목을 가져오려면 Get-ChildItem cmdlet을 사용합니다. 이 명령은 해당 컨테이너 내부의 모든 파일과 디렉터리를 표시합니다. Get-Item cmdlet과 마찬가지로 컨테이너 경로를 지정해야 합니다.
항목을 삭제하려면 'Get' 접두사를 'Remove'로 바꾸면 됩니다. 파일과 폴더부터 레지스트리 키, 함수까지 거의 모든 것을 삭제할 수 있습니다. Remove-Item <경로\이름>을 입력하세요. 이 cmdlet을 확장하여 숨김 및 '읽기 전용' 파일만 삭제하거나, 특정 폴더와 하위 폴더의 항목만 삭제하는 것도 가능합니다.
7. ConvertTo-Html
이 명령어는 .NET 개체를 웹 브라우저에서 표시할 수 있는 HTML 파일로 변환해 줍니다. 출력(output) 계열의 cmdlet이므로 다른 cmdlet과 함께 사용하기에 매우 적합합니다. 다른 cmdlet 끝에 추가하고 특정 파일 경로를 지정하기만 하면 됩니다.
예를 들어 로컬 컴퓨터의 현재 실행 중인 모든 프로세스에 대해 이름, 경로, 회사 정보를 담은 HTML 파일을 생성하려면 다음을 입력합니다.
Get-Process | ConvertTo-Html -Property Name, Path, Company -Title "Process Information" | Out-File filename.htm

filename.htm은 원하는 파일 이름으로 자유롭게 변경할 수 있습니다.
생성된 파일을 열려면 Invoke-Item cmdlet에 <파일 이름.htm>을 함께 사용합니다. 결과물은 아래 이미지와 비슷하게 나타납니다.

8. Set-ExecutionPolicy
로컬 PowerShell 스크립트를 실행하려면 PowerShell 자체의 실행 정책(execution policy)을 변경해야 합니다. Windows 컴퓨터에서는 실행 정책이 기본적으로 'Restricted(제한됨)'로 설정되어 있으므로, RemoteSigned 또는 Unrestricted로 변경해야 합니다. 반면 Linux나 Mac 같은 비 Windows 환경에서는 일반적으로 Unrestricted로 설정되어 있으며 변경할 수 없습니다.
PowerShell 실행 정책에 대해 더 알고 싶다면 다음을 입력하세요.
help Set-ExecutionPolicy
PowerShell은 컴퓨터의 실행 정책 관련 도움말 파일을 표시하거나, 파일이 없으면 알려줍니다. 또한 온라인에서 관련 내용을 읽어볼 수 있는 링크도 함께 제공합니다.

실행 정책을 RemoteSigned로 설정하려면:
Set-ExecutionPolicy RemoteSigned
Unrestricted로 설정하려면:
Set-ExecutionPolicy Unrestricted
현재 실행 정책 설정을 확인하려면:
Get-ExecutionPolicy

실행 정책은 PowerShell 보안 전략의 일부이기 때문에 변경 시 확인 메시지가 표시됩니다. 진행할 것을 확실히 결정했다면 Y를 입력하세요.
9. Select-Object
이 명령어는 개체와 개체 집합, 고유한 개체, 배열 내 특정 위치의 개체를 선택하는 데 사용됩니다. 선택하려는 개체를 지정하기 위해 속성(properties), 숫자 값, 특정 입력 개체 등 다양한 매개변수를 활용할 수 있습니다.
속성 특성으로 개체를 선택하려면 이름(name), ID, CPU 같은 특성을 지정해야 합니다. 여러 특성을 묶어서 지정할 수도 있는데, 이 경우 명령어 입력 시 쉼표로 구분해야 합니다. Select-Object cmdlet의 실제 동작을 확인하려면 다음을 입력해 보세요.
Get-Process | Select-Object -Property ProcessName, Id, CPU
그러면 아래 화면처럼 현재 실행 중인 모든 프로세스와 해당 속성들이 나열됩니다.

-ExpandProperty 명령을 사용하면 특정 속성에 대한 세부 정보를 얻을 수 있습니다. ProcessName 속성 유형의 Modules 속성에 대한 세부 정보를 원한다면:
Get-Process Chrome | Select-Object -Property ProcessName -ExpandProperty Modules | Format-List
명령어 끝의 'Format-List' 출력은 결과를 보기 좋게 정렬된 형식으로 만들어 주는 역할을 합니다.
10. Export-CSV
PowerShell 명령어의 결과가 때로는 앞서 Get-Command cmdlet에서 봤듯이 긴 목록 형태로 나타납니다. 방대한 목록과 많은 정보는 읽기 어려우므로 좀 더 체계적으로 정리하고 싶어질 것입니다. 이럴 때 모든 데이터를 CSV 파일로 내보내면 됩니다. PowerShell에서 Export-CSV 함수를 사용하면 바로 처리할 수 있습니다.
예를 들어 Get-Command cmdlet이 현재 PowerShell에서 사용 가능한 모든 cmdlet의 긴 목록을 반환한다는 것을 앞에서 확인했습니다. Get-Command와 Export-CSV를 조합하면 이름, 원본(Source), 버전 같은 값을 쉼표로 구분한 상세 목록을 만들 수 있고, Excel 같은 앱에서 바로 인식할 수 있습니다.
이렇게 하려면 PowerShell 명령 프롬프트에 다음 명령을 입력합니다. 참고로 저장 경로는 원하는 대로 지정할 수 있고, 파일 이름도 임의로 정할 수 있습니다.
Get-Command | Select Name, Source, Version | export-csv D:\AllCommands.csv
이제 목록을 Excel에서 열어보면 아래 이미지와 비슷한 결과를 확인할 수 있습니다.
