PowerShell의 구조와 구성 요소
PowerShell은 Microsoft에서 개발한 명령줄 셸(CLI)과 스크립팅 언어로, Windows 운영 체제뿐만 아니라 Linux와 macOS에서도 사용할 수 있는 강력한 자동화 도구입니다. 기본적으로 PowerShell은 .NET Framework 및 .NET Core를 기반으로 하며, 객체 지향적인 접근 방식을 사용하여 시스템 관리와 자동화를 보다 직관적으로 수행할 수 있도록 설계되었습니다.
1. PowerShell의 기본 개념
PowerShell은 기존의 Windows 명령 프롬프트(CMD)와 Unix 셸(Bash)과 같은 역할을 수행하지만, 보다 발전된 기능을 제공합니다. 기존의 명령어 기반 셸이 텍스트 문자열을 처리하는 반면, PowerShell은 객체(Object) 를 기반으로 데이터를 처리한다는 점에서 차별화됩니다.
• 객체(Object) 기반
PowerShell의 모든 출력은 단순한 텍스트가 아니라 .NET 객체입니다. 이를 통해 데이터를 보다 구조적으로 다룰 수 있으며, 필터링, 정렬 및 변환 작업이 더욱 용이합니다.
• 명령어(Command) 구조
PowerShell의 명령어는 “Cmdlet(커맨드렛)“이라는 작은 단위의 스크립트로 구성됩니다. 모든 Cmdlet은 Verb-Noun 형식으로 이루어져 있으며, 일관된 명명 규칙을 따릅니다. 예를 들면 Get-Process, Stop-Service, New-Item 등이 있습니다.
2. PowerShell의 주요 구성 요소
PowerShell의 구조를 이해하기 위해서는 크게 다음과 같은 핵심 요소들을 살펴볼 필요가 있습니다.
1) PowerShell 엔진 (PowerShell Engine)
PowerShell 엔진은 스크립트 실행, 파이프라인 처리, 객체 조작 등의 핵심 기능을 담당하는 부분입니다. 주요 기능은 다음과 같습니다.
• 명령어 해석(Parsing)
사용자가 입력한 명령어를 분석하여 실행할 준비를 합니다.
• 실행 엔진(Execution Engine)
Cmdlet이나 스크립트를 실행하고 결과를 반환합니다.
• 호스트 인터페이스(Host Interface)
사용자가 PowerShell을 실행하는 인터페이스(예: PowerShell 콘솔, Windows Terminal, ISE, VS Code 등)와 상호작용합니다.
2) Cmdlet (커맨드렛)
Cmdlet은 PowerShell에서 실행할 수 있는 기본 명령어 단위입니다. 각 Cmdlet은 특정 작업을 수행하며, .NET 클래스 라이브러리에서 직접 구현됩니다.
예를 들면 다음과 같습니다.
Get-Process # 현재 실행 중인 프로세스를 가져옴
Stop-Service -Name "Spooler" # 특정 서비스를 중지
New-Item -Path "C:\Temp\test.txt" -ItemType File # 새 파일 생성
Cmdlet의 주요 특징은 다음과 같습니다.
• .NET 객체를 입력으로 받고, 결과를 .NET 객체로 반환
• 단독 실행 또는 다른 명령과 파이프라인으로 결합 가능
• Verb-Noun 형식으로 일관된 네이밍 규칙 사용
3) 모듈 (Module)
PowerShell은 확장 가능하도록 설계되었으며, 사용자는 특정 기능을 추가하기 위해 모듈(Module) 을 사용할 수 있습니다.
모듈은 여러 개의 Cmdlet, 함수, 변수, 에일리어스 등을 포함하는 패키지입니다.
• 모듈 로드하기
Import-Module -Name ActiveDirectory
위 명령어는 Active Directory 관리를 위한 Cmdlet을 불러옵니다.
• 사용 가능한 모듈 확인
Get-Module -ListAvailable
4) 스크립트 (Script)와 함수 (Function)
PowerShell에서는 여러 개의 명령어를 조합하여 스크립트(.ps1 파일) 를 만들 수 있습니다.
또한, 특정 작업을 재사용할 수 있도록 함수(Function)를 정의할 수도 있습니다.
• 스크립트 예제 (test.ps1)
Write-Host "PowerShell 스크립트 실행 중..."
$processes = Get-Process
$processes | Where-Object { $_.CPU -gt 100 } | Sort-Object CPU -Descending
• 함수 예제
function Get-HighCpuProcesses {
param ([int]$Threshold = 100)
Get-Process | Where-Object { $_.CPU -gt $Threshold }
}
Get-HighCpuProcesses -Threshold 200
5) 파이프라인 (Pipeline)
PowerShell의 강력한 기능 중 하나는 파이프라인(|) 을 이용한 데이터 처리입니다.
파이프라인을 사용하면 명령어의 출력을 다음 명령어의 입력으로 전달할 수 있습니다.
예제:
Get-Process | Where-Object { $_.CPU -gt 100 } | Sort-Object CPU -Descending
이 명령어는 실행 중인 프로세스를 가져와 CPU 사용량이 100을 초과하는 것만 필터링한 후, CPU 사용량 기준으로 내림차순 정렬하는 과정입니다.
6) 변수와 데이터 유형
PowerShell에서는 변수를 $ 기호를 사용하여 선언하며, 다양한 데이터 유형을 지원합니다.
• 변수 선언 및 사용
$name = "PowerShell"
$version = 7.2
Write-Host "사용 중인 버전: $name $version”
• 배열 및 해시 테이블
$array = @(1, 2, 3, 4, 5)
$hash = @{ "Name"="Admin"; "Role"="IT Manager" }
7) 에러 핸들링 (Error Handling)
PowerShell은 예외(Exception) 처리를 지원하며, try, catch, finally 블록을 사용할 수 있습니다.
예제:
try {
Get-Item "C:\없는파일.txt"
} catch {
Write-Host "오류 발생: $_"
}
3. PowerShell 실행 환경
PowerShell은 다양한 환경에서 실행할 수 있으며, 다음과 같은 옵션을 제공합니다.
1. PowerShell 콘솔 (Windows PowerShell, PowerShell Core)
• 기본적인 CLI 환경에서 실행 가능
2. PowerShell ISE (Integrated Scripting Environment)
• GUI 기반으로 스크립트 작성 및 디버깅 가능 (Windows에서만 지원)
3. VS Code (Visual Studio Code)
• PowerShell 확장을 추가하여 스크립트 작성 및 디버깅 가능
4. Windows Terminal
• 여러 탭을 지원하는 최신 터미널 환경에서 실행 가능
4. PowerShell의 주요 특징 요약
• 객체(Object) 기반 셸
명령어 출력을 텍스트가 아닌 객체로 처리하여 효율적이고 강력한 데이터 조작 가능
• Cmdlet 사용
Verb-Noun 형식의 일관된 명령어 구조 제공
• 파이프라인 지원
여러 명령어를 조합하여 강력한 데이터 처리 가능
• 스크립트 및 자동화 기능
반복 작업을 자동화하는 스크립트 작성 가능
• 모듈과 확장성
필요한 기능을 모듈을 통해 확장 가능
결론
PowerShell은 단순한 명령어 기반 셸을 넘어 강력한 스크립팅 언어로 발전하였으며, Windows뿐만 아니라 Linux와 macOS에서도 사용할 수 있는 범용 자동화 도구입니다. 특히 서버 관리, 네트워크 설정, 애플리케이션 배포 및 클라우드(Azure, AWS) 환경 관리에서도 널리 활용됩니다.
PowerShell의 구조를 이해하고 활용하면 다양한 IT 업무를 보다 효율적으로 수행할 수 있으며, 자동화를 통해 생산성을 극대화할 수 있습니다.
'MS Script 이야기' 카테고리의 다른 글
PowerShell 이야기 (0) | 2025.04.01 |
---|