소개
PowerShell Yaml는 PowerShell 스크립트 간의 데이터 교환 형식인 YAML과 PowerShell 객체를 직렬화 및 역직렬화하는 PowerShell 모듈입니다. Cloudbase에서 개발한 이 모듈은 .NET의 YamlDotNet을 기반으로 하며, YAML 데이터를 PowerShell의 Hashtable이나 배열로 변하거나 그 반대의 작업을 수행할 수 있게 합니다. PowerShell 버전 4와 5에서 테스트되었으며, Windows 외에도 Nano Server 및 Linux 환경에서도 작동하는 것으로 확인되었습니다.
상세정보
YAML과 PowerShell 객체 변환
ConvertTo-Yaml 및 ConvertFrom-Yaml cmdlet을 사용하여 PowerShell의 Hashtable, 배열, 문자열 등 다양한 객체를 YAML 문자열로 변환하거나 YAML 문자열을 PowerShell 객체로 변환할 수 있습니다.
JSON 호환 출력
-JsonCompatible 매개 변수를 사용하면 YAML 데이터를 JSON 형식과 호환되는 방식으로 직렬화할 수 있어, YAML 데이터를 JSON으로 변환하는 데 활용할 수 있습니다.
여러 YAML 문서 처리
하나의 YAML 문자열에 여러 문서(— 구분자로 분리된)가 포함된 경우, -AllDocuments 매개 변수를 사용하여 모든 문서를 한 번에 읽어들일 수 있습니다.
Merge 키 지원
-UseMergingParser 매개 변수를 지정하면 YAML의 Merge 키(<<: *alias)를 지원하여, 여러 YAML 노드의 값을 하나의 객체로 병합할 수 있습니다.
유형 태그 지원
YAML 코어 스키마에서 지정한 태그(!!str, !!timestamp 등)를 지원합니다. 값을 명시적으로 태그로 지정하면 PowerShell에서 의도하지 않은 형식 변환(예: 문자열이 숫자로 변환되는 경우)을 방지할 수 있습니다.
출력 형식 제어
ConvertTo-Yaml cmdlet의 -Options 매개 변수를 사용하여 YAML 출력 형식을 제어할 수 있습니다. UseFlowStyle, UseSequenceFlowStyle, WithIndentedSequences 등 다양한 옵션을 제공하여 필요에 따라 YAML의 구조적 형식을 조정할 수 있습니다.
PowerShell 객체를 YAML로 변환 (ConvertTo-Yaml)
다음은 Hashtable을 YAML 문자열로 변환하는 예제입니다.
$yaml = ConvertTo-Yaml @{“hello”=”world”; “anArray”=@(1,2,3)}
위 명령은 다음과 같은 YAML 문자열을 생성합니다.
anArray:
– 1
– 2
– 3
hello: world
YAML을 PowerShell 객체로 변환 (ConvertFrom-Yaml)
YAML 문자열을 PowerShell Hashtable로 변환하려면 다음 명령을 사용합니다.
$obj = ConvertFrom-Yaml $yaml
변환된 객체는 Hashtable 타입이 됩니다.
JSON 호환 YAML 생성
다음 명령은 YAML 데이터를 JSON 형식으로 출력합니다.
ConvertFrom-Yaml $yaml | ConvertTo-Yaml -JsonCompatible
결과: {“anArray”: [1, 2, 3], “hello”: “world”}
이런 경우에 유용합니다
PowerShell 스크립트에서 Kubernetes, Docker Compose 등 YAML 기반 설정 파일을 읽어서 PowerShell 객체로 다루거나, PowerShell에서 생성한 설정 데이터를 YAML 파일로 저장할 때 이 모듈을 사용할 수 있습니다. 또한, YAML 파일을 JSON 형식으로 변환하는 파이프라인 작업에도 유용합니다.
지원 환경·시스템 요구사항
공식 문서에 따르면 PowerShell 버전 4 및 5에서 테스트되었습니다. Windows 외에도 Nano Server와 Linux 환경에서 지원되며, Mac에서도 작동할 것으로 추정됩니다.
최신 버전·업데이트
제공된 증거에 따르면 현재 버전은 0.4.12입니다.
제한 사항·확인 사항
- Merge 키 사용 시, 동일한 키를 덮어쓰는 중복 키가 있으면 예외가 발생합니다.
- 기본적으로 모듈에는 YamlDotNet 어셈블리가 포함되어 있지만, 시스템에 이미 해당 어셈블리가 설치되어 있는 경우 lib 폴더를 제거할 수 있습니다.
시스템 요구사항
별도의 시스템 요구사항이 등록되지 않았습니다.


