개발/PowerShell
PowerShell. ps1 스크립트 파라미터 작성 간단 가이드
워로디스
2026. 11. 5. 22:47
1. 기본 규칙
- 필수 파라미터: 앞쪽에 선언하고 위치 기반 전달 허용
- 선택 파라미터: 뒤쪽에 선언하고 이름 기반 전달 권장
- 타입 명시:
[string],[int],[bool],[switch]등 - 필수 여부:
[Parameter(Mandatory)]사용 - 기본값: 선택 파라미터에 적절한 기본값 지정
- Boolean 처리:
[switch]:-Force처럼 옵션 존재 여부로 제어[bool]:$true,$false값을 직접 전달
- 입력 검증: 단순 검증은
ValidateSet,ValidateRange등 활용
2. 권장 템플릿
[CmdletBinding(PositionalBinding = $false)]
param(
[Parameter(Mandatory, Position = 0)]
[string]$Source,
[Parameter(Mandatory, Position = 1)]
[string]$Destination,
[ValidateSet('Copy', 'Move')]
[string]$Mode = 'Copy',
[switch]$Force
)
PositionalBinding = $false: 암묵적인 위치 기반 매핑 비활성화Position = 0, 1: 해당 파라미터만 위치 기반 전달 허용Mandatory: 필수 입력 지정ValidateSet: 허용 가능한 값 제한[switch]: 지정하면$true, 생략하면$false
3. 실행 예시
# 위치 기반 전달
.\task.ps1 'C:\A' 'C:\B'
# 선택 옵션 추가
.\task.ps1 'C:\A' 'C:\B' -Mode Move -Force
# 이름 기반 전달
.\task.ps1 -Source 'C:\A' -Destination 'C:\B'
# 혼합 전달
.\task.ps1 'C:\A' -Destination 'C:\B' -Force
# Switch 값 명시
.\task.ps1 'C:\A' 'C:\B' -Force:$false
4. [switch]와 [bool] 사용 기준
| 구분 | [switch] |
[bool] |
|---|---|---|
| 값 | $true, $false |
$true, $false |
| 생략 시 | $false |
선언된 기본값 |
| 이름 기반 | 권장 | 가능 |
| 위치 기반 | 가능하지만 비권장 | 권장 |
| 대표 용도 | 실행 옵션 | 명시적인 Boolean 입력 |
위치 기반 Boolean 예시
[CmdletBinding(PositionalBinding = $false)]
param(
[Parameter(Position = 0)]
[bool]$Enabled = $false
)
.\task.ps1 $true
.\task.ps1 $false
[switch]도 Position을 지정하면 위치 기반으로 받을 수 있지만, 혼란을 줄 수 있으므로 권장하지 않습니다.
Microsoft Learn
5. 비권장 사항
| 비권장 | 이유 |
|---|---|
| 선택 파라미터의 불필요한 위치 바인딩 | 인자 순서 관리 복잡 |
| 파라미터 이름 축약 | 가독성 및 유지보수성 저하 |
Mandatory = $false |
기본값이므로 불필요 |
[switch]$Force = $false |
기본값이 이미 $false |
불필요한 ParameterSet |
선언부 복잡성 증가 |
$args 직접 사용 |
입력 인터페이스 불명확 |
| 복잡한 검증 속성 | 본문에서 검증하는 편이 명확 |
6. 주의사항
- 필수 파라미터 누락 시 대화형 입력을 요청할 수 있으므로 무인 자동화에서 주의
- 위치 기반 파라미터의 선언 순서와
Position은 기존 호출과의 호환성을 위해 유지 [switch]는 기본적으로 이름 기반 옵션으로 사용- 위치 기반으로 참/거짓 값을 받아야 한다면
[bool]사용 - 선택 파라미터는 가급적 이름 기반으로 전달해 변경에 유연하게 설계
핵심 원칙: 필수 인자는 위치 기반으로 간편하게, 선택 옵션은 이름 기반으로 명확하게, Boolean은 전달 방식에 따라 [switch]와 [bool]을 구분한다.
반응형