Ⅰ. PowerShell과 cmdlet 이란?
ⅰ. PowerShell
: 사용자가 입력한 명령을 해석하고 실행하며, 결과를 파이프라인으로 다음 명령에 전달하는 런타임/환경을 제공합니다. 또한 스크립트(.ps1)로 여러 명령을 묶어 자동화 작업을 만들 수 있습니다. Windows를 넘어 Linux·macOS까지 지원하는 크로스 플랫폼 자동화 셸이자 스크립팅 언어입니다.
ⅱ. cmdlet
: PowerShell 파이프라인 의미 체계에 참여하는 단일 명령으로, 보통 .NET 객체를 반환해 다음 명령으로 넘길 수 있게 설계되어 있습니다. Microsoft 문서에서도 cmdlet을 “PowerShell environment에서 사용되는 lightweight command”로 설명합니다. “동사-명사” 형식의 단일 작업 명령으로, 파일·서비스·프로세스·레지스트리·네트워크 등 다양한 리소스를 개체 단위로 제어가 가능합니다.
Ⅱ. Windows PowerShell 5.1 vs PowerShell 7.x 비교
| 구분 | Windows PowerShell 5.1 (powershell.exe) |
PowerShell 7.x (pwsh.exe) |
| 버전 | 윈도우 운영체제에 기본으로 포함된 버전 | 사용자가 직접 설치해서 쓰는 버전 |
| 기술 기반 | 윈도우 전용 기술인 .NET Framework 위에서 동작 (윈도우에서만 작동) | 최신 기술인 .NET (Modern) 위에서 동작 (윈도우, 맥, 리눅스 모두 작동) |
Ⅲ. cmdlet의 목적과 역할
ⅰ. cmdlet 목적
기본적으로 ‘동사-명사(Verb-Noun)’ 규칙을 따릅니다. 그래서 처음 보는 명령도 “이게 조회인지(Get), 변경인지(Set), 생성인지(New)”처럼 역할을 쉽게 짐작할 수 있습니다. PowerShell은 파일 시스템뿐 아니라 레지스트리(HKLM:, HKCU:) 같은 데이터 저장소도 ‘드라이브’처럼 다루게 해주는 Provider/Drive 개념을 제공합니다. 이 덕분에 서로 성격이 다른 리소스도 비슷한 방식(경로 기반 탐색/조작)으로 관리할 수 있습니다. 예를 들어 “가져오기/조회”는 보통 Get-으로 시작하고, 뒤의 명사로 대상이 구분됩니다(예: Get-Process, Get-Service). 즉, 규칙을 한 번 익히면 새로운 cmdlet도 빠르게 적응할 수 있습니다.
ⅱ. cmdlet 역할
1) 객체(Object) 전달(텍스트가 아니라 ‘데이터’를 넘김)
전통적인 CLI는 결과를 텍스트로 출력하는 경우가 많아, 특정 값만 뽑으려면 자르기/정규식 같은 파싱 작업이 필요합니다.
반면 PowerShell cmdlet은 결과를 .NET 객체로 전달하는 것을 전제로 하며, 파이프라인에서도 객체가 그대로 흘러갑니다.
그래서 {Name, Id, StartTime …}처럼 “속성을 가진 데이터 묶음”에서 필요한 속성만 선택하면 끝나고, 텍스트 가공에 덜 의존하므로 자동화가 더 안정적입니다.
2) 파이프라인(|) 조립을 위한 부품
PowerShell 파이프라인은 앞 cmdlet의 결과(객체)를 뒤 cmdlet이 하나씩 받아 처리하는 구조입니다. 이 방식 덕분에 “조회 → 필터 → 정렬 → 선택” 같은 흐름을 조립하듯 연결할 수 있고, 각 cmdlet은 자기 역할에만 집중하는 ‘레고 블록’처럼 쓰입니다.
3) 안전한 시스템 제어(실수 방지 장치)
PowerShell은 변경 작업에서 -WhatIf(실행 대신 수행 예정 작업 표시), -Confirm(실행 전 확인) 같은 안전장치를 제공할 수 있는데, 이는 ShouldProcess 패턴에 기반합니다. 함수/스크립트를 만드는 입장에서는 [CmdletBinding(SupportsShouldProcess)]를 선언해 사용자 정의 명령에도 동일한 안전장치를 붙일 수 있습니다
Ⅳ. cmdlet 설치 확인
사실 이미 수백 개의 cmdlet이 기본으로 깔려 있습니다. 설치 없이 바로 아래 명령어를 쳐보세요.
ⅰ. Get-Command : 내 컴퓨터에서 지금 바로 쓸 수 있는 모든 cmdlet 목록 보기
ⅱ. Get-Command -Module Microsoft.PowerShell.Management : 파일/폴더 관리용 기본 cmdlet들만 보기
Ⅴ. cmdlet 카테고리
ⅰ. 파일·폴더
1) Get-Item, Get-ChildItem, Copy-Item, Move-Item, Remove-Item 등으로 파일 시스템 드라이브(C:, D: 등)를 다룹니다.
2) 운영 작업 예: 로그 디렉터리 정리, 구성 파일 백업/배포, 디렉터리 구조 스캔 등 반복 작업을 스크립트로 고정화합니다.
ⅱ. 프로세스·서비스
1) 프로세스
Get-Process, Stop-Process 등으로 로컬/원격 프로세스 상태를 조회·종료할 수 있으며, ComputerName 매개변수로 여러 서버를 동시에 제어할 수 있습니다.
2) 서비스
Get-Service, Start-Service, Stop-Service, Restart-Service 등으로 서비스 상태 점검과 재시작 절차를 스크립트에 녹여둘 수 있습니다.
ⅲ. 레지스트리·구성
1) HKLM, HKCU 와 같은 레지스트리 드라이브를 제공하고, 파일처럼 경로 기반으로 키·값을 조작할 수 있습니다.
2) 운영 시에는 변경 전/후 상태를 Export-…/Get-ItemProperty 등으로 남겨 두어 롤백 근거를 확보하는 것이 좋습니다.
ⅳ. 네트워크·환경
1) 네트워크: Test-Connection, Test-NetConnection, Get-NetAdapter 등으로 기본 진단·구성을 자동화할 수 있습니다.
2) 환경·시스템 정보: Get-ChildItem Env:, Get-ComputerInfo 등으로 환경 변수와 시스템 정보를 수집해 인벤토리·헬스체크 스크립트를 만들 수 있습니다.
Ⅵ. cmdlet 기본 사용 패턴
ⅰ. 명령 찾기: Get-Command로 이름/동사/모듈 기준으로 cmdlet을 검색해, “무엇이 있는지”부터 파악합니다.
ⅱ. 파이프라인: Get-… | Where-Object … | Select-Object … 패턴으로 조회 → 필터 → 투영을 구성하는 것이 PowerShell 스크립트의 핵심입니다.
ⅲ. 도움말: Get-Help 명령과 Get-Help 명령 -Examples로 사용법과 실전 예제를 바로 확인하고, 필요하면 업데이트된 도움말을 내려받아 활용합니다.
Ⅶ. 안전한 변경 작업 템플릿
ⅰ. -WhatIf
: 실제로 실행하지 않고 무엇을 할지 시뮬레이션”하는 옵션입니다.
ⅱ. -Confirm
: 실행 전마다 사용자 확인 프롬프트를 띄워줍니다.
※ 파일 삭제, 레지스트리 수정, 서비스 중지처럼 리스크가 큰 작업에서는 명령 -WhatIf로 영향 범위를 먼저 검증하고, -Confirm 또는 실제 실행 순서로 진행하는 패턴이 안전합니다.
※ CmdletBinding(SupportsShouldProcess=$true)를 선언하면 사용자 정의 함수에서도 -WhatIf/-Confirm을 지원하게 만들 수 있고, 운영자는 이를 표준 패턴으로 요구할 수 있습니다.
Ⅷ. 운영 환경에서의 주의사항
ⅰ. 버전·호환성: 5.1 전용 cmdlet이나 오래된 API를 쓰는 모듈은 7.x에서 제거되거나 동작이 바뀐 경우가 있으므로, 이관 전 Import-Module -UseWindowsPowerShell 등 호환 옵션과 변경 목록을 확인해야 합니다.
ⅱ. 모듈 출처 관리: PowerShell은 모듈로 기능이 확장되므로, 운영망에서는 공식/사내 검증 모듈만 사용하고 버전·배포 경로·서명을 관리하는 정책이 필요합니다.
ⅲ. 텍스트가 아닌 개체: 출력이 개체라는 점을 전제로, 문자열 파싱 대신 속성 기반 처리(Get-Member → Select-Object 등)를 사용하는 것이 유지보수성과 안정성 측면에서 유리합니다.
'시스템(Windows)' 카테고리의 다른 글
| wevtutil(Windows Event Utility)에 대해 알아보겠습니다. (0) | 2026.02.27 |
|---|---|
| 이벤트 뷰어(Event Viewer)에 대해 알아보겠습니다. (0) | 2026.02.26 |
| SFC(System File Checker) 에 대해 알아보겠습니다. (1) | 2025.08.06 |
| explorer.exe(Windows 탐색기)에 대해 알아보겠습니다. (1) | 2025.08.05 |
| 텔넷(Telnet)에 대해 알아보겠습니다. (1) | 2025.06.04 |