PowerShell

[PowerShell] PowerShell 스크립트로 JSON 파일 수정하기

JohnnyDeveloper 2024. 10. 29. 13:27
이번 글 에서는 PowerShell Script로 JSON 파일을 PowerShell Object로 변환하여 수정하는 방법을 알아봅니다.

 

주의: PowerShell Script를 Window에서 실행 시 , 실행 정책을 설정해야 됩니다. 저자는 RemoteSigned(인터넷에서 다운로드한 모든 스크립트 및 구성 파일에 대해 신뢰 할 수 있는 게시자가 서명해야 한다)를 추천 합니다.

설정 방법은 아래 글을 참고하세요.

https://johnny-developer-story.tistory.com/16

 

VSCode 터미널에서 PSSecurityException 오류 해결 방법

Windows에서 VSCode 터미널에서 발생하는 PSSecurityException 오류를 해결하는 방법을 설명합니다. PowerShell 실행 정책을 이해하고 변경하는 방법도 포함되어 있습니다.VSCode 터미널에서 PSSecurityException 오

johnny-developer-story.tistory.com

 

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 형식으로 변환하여 파일에 덮어씁니다.