파워셸 시리즈의 세 번째 포스팅입니다. 파워셸을 처음 접하는 분들이 가장 많이 하는 걱정은 "그 수천 개의 명령어를 어떻게 다 외우지?"입니다. 하지만 파워셸의 고수들은 명령어를 외우지 않습니다. 대신 **'명령어를 찾는 방법'**을 알고 있을 뿐입니다.
구글 검색 없이도 파워셸 창 안에서 모든 사용법을 스스로 터득할 수 있게 해주는 마법 같은 두 가지 명령어, Get-Help와 Get-Member의 활용법을 정리했습니다.
새로운 프로그래밍 언어나 도구를 배울 때 가장 큰 장벽은 "암기"입니다. CMD 시절에는 옵션 하나를 알기 위해 인터넷 검색을 하거나 두꺼운 매뉴얼을 뒤져야 했습니다. 하지만 파워셸(PowerShell)의 설계 철학은 다릅니다. 파워셸은 **'발견 가능성(Discoverability)'**을 최우선으로 두고 만들어졌습니다. 즉, 사용자가 모르는 것이 있을 때 외부 도움 없이 콘솔 안에서 답을 찾을 수 있도록 설계되었다는 뜻입니다.
오늘은 파워셸의 양대 산맥이라 불리는 **Get-Help**와 Get-Member 명령어만으로, 낯선 명령어의 사용법을 익히고 데이터를 내 입맛대로 가공하는 방법을 알아보겠습니다. 이 두 가지만 마스터하면 여러분은 더 이상 "초보자"가 아닙니다.
1. 파워셸의 친절한 선생님: Get-Help (도움말)
리눅스에 man 페이지가 있다면 파워셸에는 Get-Help가 있습니다. 단순히 명령어의 설명만 보여주는 것이 아니라, 구체적인 예제와 문법 구조까지 상세히 알려줍니다.
(1) 가장 먼저 해야 할 일: Update-Help
파워셸을 처음 설치했다면 도움말 파일이 비어있거나 구버전일 수 있습니다. 가장 먼저 관리자 권한으로 파워셸을 실행한 뒤 아래 명령어를 입력하여 최신 매뉴얼을 다운로드하세요.
Update-Help -Force
(2) "예제를 보여줘": -Examples 파라미터
초보자가 가장 많이 쓰는 옵션입니다. 복잡한 문법 설명보다 잘 짜인 예제 코드 하나가 훨씬 이해하기 쉽습니다. 만약 Get-Service라는 명령어를 어떻게 쓰는지 궁금하다면 다음과 같이 입력해 보세요.
Get-Help Get-Service -Examples
이렇게 하면 "실행 중인 서비스만 찾는 법", "특정 이름의 서비스를 찾는 법" 등 실무에서 바로 복사해 쓸 수 있는 예제 코드들이 주르륵 출력됩니다.
(3) "인터넷 창으로 보고 싶어": -Online 파라미터
콘솔 창의 텍스트가 읽기 불편하다면 -Online 옵션을 붙여보세요.
Get-Help Get-Service -Online
기본 웹 브라우저가 열리면서 마이크로소프트의 공식 문서(Microsoft Learn) 페이지로 바로 이동합니다. 항상 최신 상태의 문서를 볼 수 있다는 장점이 있습니다.
(4) 숨겨진 꿀기능: -ShowWindow
이 기능을 모르는 분들이 꽤 많습니다. 도움말을 별도의 팝업 창(GUI)으로 띄워주는 기능입니다. 듀얼 모니터를 쓰거나 창을 옆에 띄워두고 작업할 때 매우 유용합니다.
Get-Help Get-Service -ShowWindow
2. 객체의 해부학자: Get-Member (속성과 메서드)
지난 1편에서 **"파워셸은 텍스트가 아니라 객체(Object)를 다룬다"**라고 강조했습니다. 그런데 도대체 그 객체 안에 무엇이 들어있는지 어떻게 알 수 있을까요? 이때 사용하는 것이 바로 Get-Member입니다. (단축키 별칭: gm)
Get-Member는 파이프라인(|)으로 넘어온 데이터 덩어리를 엑스레이처럼 찍어서 **"이 데이터가 가진 정보(Property)"**와 **"이 데이터로 할 수 있는 행동(Method)"**을 보여줍니다.
상황: 파일의 정보를 알고 싶을 때
예를 들어, 윈도우 메모장(notepad.exe) 파일에 대한 정보를 가져왔다고 가정해 봅시다.
$file = Get-Item "C:\Windows\System32\notepad.exe"
이제 $file이라는 변수 안에는 메모장 파일 객체가 들어있습니다. 이 객체 안에 어떤 정보가 숨어있는지 확인하려면 파이프라인으로 넘겨주면 됩니다.
$file | Get-Member
이 명령어를 실행하면 수많은 리스트가 나오는데, 여기서 중요한 건 Property와 Method 두 가지입니다.
(1) Property (속성): 데이터의 정보
MemberType이 Property로 되어 있는 항목들은 그 객체가 가진 **'정보'**입니다.
- Length: 파일 크기
- CreationTime: 생성 날짜
- LastWriteTime: 마지막 수정 날짜
- Extension: 확장자
이 이름을 알았으니, 이제 우리는 이렇게 활용할 수 있습니다.
# 파일 크기만 보고 싶을 때
$file.Length
# 생성 날짜만 보고 싶을 때
$file.CreationTime
(2) Method (메서드): 데이터로 할 수 있는 행동
MemberType이 Method로 되어 있는 항목들은 이 객체로 수행할 수 있는 **'동작'**입니다.
- Delete(): 삭제하기
- CopyTo(): 복사하기
- MoveTo(): 이동하기
이를 활용하면 별도의 명령어(Remove-Item)를 쓰지 않고도 객체 스스로 행동하게 만들 수 있습니다.
# 파일 객체 스스로 자신을 삭제하게 만들기
$file.Delete()
3. 실전 응용: 모르는 명령어 정복하기
자, 이제 Get-Help와 Get-Member를 조합하여 모르는 문제를 해결하는 과정을 시뮬레이션해 보겠습니다.
미션: "현재 컴퓨터의 BIOS 시리얼 번호를 알고 싶다."
- 명령어 찾기: BIOS와 관련된 명령어가 있을 것 같습니다. Get-Command로 검색해 봅니다.
- Get-Command *BIOS* # 결과: Get-CimInstance, Get-WmiObject 등이 검색됨 (혹은 관련 모듈이 있다면 Get-Bios 등) # 보통 윈도우 정보는 'ComputerInfo'에 많으므로 다시 검색해 봅니다. Get-Command *ComputerInfo* # 결과: Get-ComputerInfo 발견!
- 사용법 확인: Get-Help로 예제를 봅니다.
- Get-Help Get-ComputerInfo -Examples # 예제를 보니 그냥 입력하면 모든 정보가 나온다고 합니다.
- 속성 확인: 정보가 너무 많이 쏟아져서 시리얼 번호가 뭔지 모르겠습니다. Get-Member로 속성 이름을 찾아봅니다.
- Get-ComputerInfo | Get-Member # 리스트 중에서 'Serial'이나 'Bios'가 들어간 단어를 찾습니다. # 'BiosSeralNumber'라는 Property를 발견했습니다!
- 최종 해결:
- (Get-ComputerInfo).BiosSerialNumber
마치며
파워셸의 바다는 넓고 깊습니다. 모든 명령어를 머릿속에 넣고 다니는 것은 불가능하며 비효율적입니다. 대신 여러분의 주머니 속에는 **Get-Help (지도)**와 **Get-Member (돋보기)**가 있습니다.
이 두 가지만 능숙하게 다룰 줄 안다면, 앞으로 어떤 새로운 명령어(Azure, AWS, VMware 등)를 만나더라도 두려움 없이 분석하고 활용할 수 있습니다.
다음 포스팅에서는 파워셸의 꽃이라 불리는 **'데이터 가공'**에 대해 알아봅니다. 엑셀 없이 CSV 파일을 읽어들이고, 원하는 데이터만 뽑아서 다시 저장하는 자동화의 기초를 다뤄보겠습니다.