PowerShell Reference
PowerShell 스크립팅 레퍼런스
PowerShell Reference 소개
PowerShell 레퍼런스는 PowerShell 스크립팅과 시스템 관리의 모든 핵심 측면을 다루는 포괄적이고 검색 가능한 가이드입니다. 기본문법(변수, 배열, 해시테이블, 조건문, 반복문, 비교/논리 연산자), cmdlet(Get-Process, Get-Service, Get-ChildItem, Get-Content, Select-Object, Where-Object), 변수(환경 변수, 타입 캐스팅, $_, $null, $PSVersionTable 등 특수 변수), 파이프라인(|, ForEach-Object, Sort-Object, Measure-Object, Group-Object, Export-Csv), 함수(함수 정의, param() 블록, CmdletBinding, begin/process/end), 모듈, 원격, 객체 등 8개 카테고리로 구성됩니다.
Windows 시스템 관리자, DevOps 엔지니어, 클라우드 엔지니어들이 Windows 관리 작업 자동화, Az 모듈을 통한 Azure 인프라 관리, CI/CD 파이프라인 구축, API나 로그 파일의 구조화 데이터 처리에 이 레퍼런스를 활용합니다. PowerShell의 객체 기반 파이프라인 — cmdlet이 텍스트가 아닌 .NET 객체를 전달하는 방식 — 은 문자열 파싱 없이도 강력한 데이터 변환을 가능하게 합니다.
이 레퍼런스는 Windows PowerShell 5.1과 PowerShell 7+(크로스플랫폼)를 모두 다룹니다. 각 항목에는 전체 구문과 매개변수 예제, CPU 사용량으로 프로세스 필터링, 서비스 상태를 CSV로 내보내기, 여러 원격 서버에서 명령 실행, API 소비를 위해 데이터를 JSON으로 직렬화하는 등 실제 상황에서의 코드 스니펫이 포함됩니다.
주요 기능
- 기본 문법: 변수 할당, @() 배열, @{} 해시테이블, if/elseif/else, switch, for/foreach/while
- 비교 연산자: -eq, -ne, -gt, -lt, -ge, -le; 논리 연산자: -and, -or, -not
- 핵심 cmdlet: Get-Process, Get-Service, Get-ChildItem, Get-Content, Set-Content, Select-Object, Where-Object
- 파이프라인 연산자: |, ForEach-Object, Sort-Object, Measure-Object, Group-Object, Export-Csv/Import-Csv
- 함수 작성: param() 블록, [CmdletBinding()], Mandatory 매개변수, begin/process/end 파이프라인 지원
- 모듈 관리: Get-Module, Import-Module, PSGallery에서 Install-Module, New-ModuleManifest
- PowerShell Remoting: Enter-PSSession, Invoke-Command(멀티 서버), New-PSSession, Copy-Item -ToSession
- 객체 조작: [PSCustomObject], Get-Member, Format-Table, ConvertTo-Json/ConvertFrom-Json, Add-Member
자주 묻는 질문
PowerShell이란 무엇이고 명령 프롬프트(cmd)와 어떻게 다른가요?
PowerShell은 .NET 위에 구축된 객체 지향 셸 및 스크립팅 언어입니다. 텍스트를 전달하는 cmd와 달리 PowerShell은 파이프라인을 통해 구조화된 .NET 객체를 전달하여 문자열 파싱 없이 강력한 데이터 조작이 가능합니다. PowerShell 7+는 크로스플랫폼(Windows, Linux, macOS)이며 Windows PowerShell 5.1은 Windows 전용입니다.
PowerShell에서 $_ 변수는 무엇인가요?
$_($PSItem이라고도 씀)는 파이프라인의 현재 객체를 나타냅니다. Where-Object, ForEach-Object 등의 cmdlet에 전달되는 스크립트 블록에서 사용됩니다. 예: `Get-Process | Where-Object { $_.CPU -gt 100 }`은 CPU 속성이 100을 초과하는 프로세스를 필터링합니다.
PowerShell 파이프라인에서 객체를 필터링하는 방법은?
Where-Object에 스크립트 블록을 사용합니다: `Get-Service | Where-Object { $_.Status -eq "Running" }`. PowerShell 3.0 이상에서는 간소화된 구문도 사용 가능합니다: `Get-Service | Where-Object Status -eq "Running"`. 대용량 데이터셋에서는 성능을 위해 파이프라인 초반에 -Filter 같은 cmdlet 전용 매개변수로 필터링하세요.
PowerShell에서 커스텀 객체를 생성하는 방법은?
[PSCustomObject]와 해시테이블 리터럴을 사용합니다: `$obj = [PSCustomObject]@{ Name = "Server01"; IP = "192.168.1.1"; Status = "Online" }`. 이후에 Add-Member로 속성을 추가할 수 있습니다: `$obj | Add-Member -MemberType NoteProperty -Name "Region" -Value "KR"`. `$obj | Format-Table`로 테이블 형태로 표시합니다.
여러 원격 서버에서 PowerShell 명령을 실행하는 방법은?
Invoke-Command에 -ComputerName을 사용합니다: `Invoke-Command -ComputerName Server01, Server02 -ScriptBlock { Get-Service | Where-Object { $_.Status -eq "Running" } }`. 동일 서버에서 반복 작업 시에는 New-PSSession으로 영구 세션을 생성하고 -Session으로 재사용하면 매번 새 연결을 만드는 오버헤드를 줄일 수 있습니다.
PSGallery에서 PowerShell 모듈을 설치하는 방법은?
`Install-Module -Name 모듈명 -Scope CurrentUser -Force`를 실행합니다. 주요 모듈로는 Az(Azure), AWS.Tools.*(AWS), SqlServer, ImportExcel이 있습니다. `Find-Module -Name "Az*"`로 모듈을 검색하세요. 필요시 실행 정책을 설정합니다: `Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser`.
PowerShell에서 파일을 읽고 쓰는 방법은?
Get-Content로 읽습니다: `Get-Content -Path "file.txt"` 또는 마지막 50줄은 `Get-Content -Path "app.log" -Tail 50`. 쓰기는 Set-Content(덮어쓰기) 또는 Add-Content(추가)를 사용합니다. 구조화 데이터는 CSV에 Import-Csv/Export-Csv를, JSON에 ConvertFrom-Json/ConvertTo-Json을 사용하세요.
[CmdletBinding()]과 일반 함수의 차이는?
[CmdletBinding()]은 함수를 "고급 함수"로 변환하여 -Verbose, -Debug, -ErrorAction, -WhatIf 같은 공통 매개변수를 지원하게 합니다. 또한 [Parameter(Mandatory=$true)], [ValidateSet()], [ValidateRange()] 같은 매개변수 유효성 검사 특성을 사용할 수 있게 합니다. 재사용이나 모듈 배포를 위한 함수에는 이 특성을 사용하세요.