이번 글 에서는 PowerShell Script로 JSON 파일을 PowerShell Object로 변환하여 수정하는 방법을 알아봅니다.
주의: PowerShell Script를 Window에서 실행 시 , 실행 정책을 설정해야 됩니다. 저자는 RemoteSigned(인터넷에서 다운로드한 모든 스크립트 및 구성 파일에 대해 신뢰 할 수 있는 게시자가 서명해야 한다)를 추천 합니다.
설정 방법은 아래 글을 참고하세요.
https://johnny-developer-story.tistory.com/16
1. JSON 파일 읽어오기
$jsonContent = Get-Content -Path XXX.json -Raw | ConvertFrom-Json
- $jsonContent: PowerShell은 변수를 선언할 때, 앞에 `$` 키워드를 붙여서 선언합니다.
- Get-Content -Path: 지정된 경로(XXX.json)에서 파일의 내용을 가져오는 명령입니다.
- -Raw: 파일의 내용을 한 번에 문자열로 읽어옵니다. 여러 줄로 된 파일을 배열이 아니라 하나의 긴 문자열로 취급합니다.
- ConvertFrom-Json: JSON 형식의 텍스트를 PowerShell 오브젝트로 변환합니다. 결과적으로 $jsonContent는 XXX.json 파일의 내용을 파싱한 PowerShell 객체가 됩니다.
2. JSON 객체 접근하기
$propertiesToRemove = $jsonContent.scripts | Get-Member -MemberType NoteProperty | Where-Object { $_.Name -ne "start" }
- $jsonContent.scripts: JSON 파일의 파싱한 PowerShell 객체의 scripts 속성에 접근합니다.
- Get-Member -MemberType NoteProperty: scripts 객체의 프로퍼티 중에서 속성(NoteProperty)만 가져옵니다.
- Where-Object { $_.Name -ne "start" }: start라는 이름이 아닌 프로퍼티만 필터링합니다. 즉, start 외의 모든 스크립트 프로퍼티가 $propertiesToRemove 변수에 저장됩니다.
3. JSON 객체 수정하기
foreach ($property in $propertiesToRemove) { $jsonContent.scripts.PSObject.Properties.Remove($property.Name) }
- foreach: $propertiesToRemove 목록에 있는 각 프로퍼티에 대해 반복합니다.
- $jsonContent.scripts.PSObject.Properties.Remove($property.Name): 해당 프로퍼티를 scripts 객체에서 제거합니다. 여기서 PSObject.Properties.Remove 메서드를 사용해 JSON 객체에서 지정한 프로퍼티를 삭제합니다.
4. JSON 파일로 변환하기
$jsonContent | ConvertTo-Json -Compress | Set-Content -Path XXX.json -Encoding UTF8
- $jsonContent | ConvertTo-Json -Compress: 수정된 $jsonContent 객체를 다시 JSON 형식의 문자열로 변환합니다. -Compress 옵션은 JSON을 압축하여 들여쓰기 없는 형식으로 만듭니다.
- Set-Content -Path XXX.json -Encoding UTF8: 변경된 내용을 UTF-8 인코딩으로 지정된 파일 경로에 다시 저장합니다. 기존의 XXX.json 파일이 업데이트됩니다.
5. 요약
전체 스크립트는 다음과 같습니다. `.ps1` 확장자로 저장해서 해당 디렉토리로 이동 후 `./<스크립트>.ps1` 또는 전체경로를 입력하면 해당 PowerShell Script가 실행 됩니다.
$jsonContent = Get-Content -Path XXX.json -Raw | ConvertFrom-Json
$propertiesToRemove = $jsonContent.scripts | Get-Member -MemberType NoteProperty | Where-Object { $_.Name -ne "start" }
foreach ($property in $propertiesToRemove) {
$jsonContent.scripts.PSObject.Properties.Remove($property.Name)
}
$jsonContent | ConvertTo-Json -Compress | Set-Content -Path XXX.json -Encoding UTF8
이 스크립트는 XXX.json 파일의 scripts 섹션에서 start를 제외한 모든 항목을 제거한 후, 그 결과를 다시 JSON 형식으로 변환하여 파일에 덮어씁니다.
'PowerShell' 카테고리의 다른 글
[PowerShell] 파워쉘 스크립트의 장,단점 (0) | 2024.10.29 |
---|---|
PowerShell Update-Help Error: 404 오류 해결하는 방법 (0) | 2024.08.26 |
VSCode 터미널에서 PSSecurityException 오류 해결 방법 (0) | 2024.07.04 |