PowerShell hashtable duplicate keys 대소문자 중복 에러 해결

2 min read · 438 words

PowerShell hashtable duplicate keys 에러로 인해 텍스트 일괄 치환 작업이 막힌 분들을 위한 글입니다. 대소문자를 구분하지 않는 PowerShell 해시 테이블의 한계를 우회하여 작업을 즉시 해결하는 방법을 소개합니다. (운영 기록 기준)

문제 상황

내가 시도했던 작업은 PowerShell을 사용해 문서 내의 특정 한국어 hex color string을 일괄적으로 치환(replace)하는 것이었다. 대소문자가 혼용된 hex color 값을 매핑하기 위해 다음과 같이 해시 테이블을 정의했다.

$replacements = @{'#1e2a45'='#f6f7f8'; '#1E2A45'='#f6f7f8'}

하지만 이 코드를 실행하자마자 해시 테이블 정의 단계에서 에러가 발생하며 스크립트가 멈췄다.

PowerShell hashtable duplicate keys 에러 증상

실행 시 화면에 출력된 정확한 에러 메시지는 다음과 같다.

Duplicate keys '#1E2A45' are not allowed in hash literals

정확한 원인은 추가 확인이 필요하지만, 현재 확인된 원인은 다음과 같습니다. PowerShell은 기본적으로 해시 테이블의 키를 대소문자 구분 없이(case-insensitive) 비교합니다. 이 때문에 #1e2a45#1E2A45를 서로 다른 키가 아닌 동일한 키의 중복 정의로 인식하여 예외를 발생시켰습니다.

환경

  • OS: Windows
  • 도구 버전: Windows PowerShell 5.1
  • 자동화 stack: hashtable literal (@{})

시도했지만 실패한 방법

내가 처음 시도한 우회책은 리터럴 표기법(@{}) 대신 .NET 객체를 직접 생성하는 New-Object System.Collections.Hashtable 방식을 사용하는 것이었다. 하지만 이 역시 내부적으로 동일한 대소문자 구분 없는 비교 메커니즘을 사용했기에 동일한 에러가 발생하며 실패했다.

대소문자 구분 좀 해달라고 빌었지만, PowerShell은 끝까지 내 말을 듣지 않고 에러만 뿜어냈다. 역시 고집 센 도구는 억지로 설득하는 게 아니다.

최종 해결

결국 PowerShell을 고집하는 대신, 텍스트 처리에 더 유연한 Python으로 우회하여 문제를 해결했다. Python의 re 모듈을 사용해 대소문자 구분 없이 매칭하는 re.compile(re.escape(old), re.I) 방식을 적용했다. 이를 통해 대소문자가 다른 동일 hex color 값들을 한 번에 안전하게 치환할 수 있었다.

사용한 코드

# 치환할 대상 리스트 (운영 기록 기준)
swaps = [
 ('#1e2a45', '#f6f7f8'),
 ('#1E2A45', '#f6f7f8')
]

# 대소문자 구분 없이 치환 수행
for old, new in swaps:
 pat = re.compile(re.escape(old), re.I)
 content = pat.sub(new, content)

검증 결과

내가 작성한 Python 스크립트를 실행하여 총 131개의 hex swap 대상을 대소문자 구분 없이 단 1회 실행만으로 완벽하게 치환 완료했다. 중복 키 에러 없이 깔끔하게 작업이 끝난 것을 검증했다.

현재 상태

fixed (해결 완료)

같은 문제 겪는 분들에게

PowerShell hashtable duplicate keys 에러로 고통받고 있다면, 굳이 PowerShell 내부에서 복잡한 .NET Dictionary 선언을 하며 힘 빼지 마라. 텍스트 치환 작업이라면 Python의 re.I 옵션을 사용하는 것이 정신 건강과 생산성 측면에서 훨씬 빠르고 확실한 길이다.

Category Coverage Notice

This article follows our label-specific editorial criteria. Details:

ToolSignal Pro Editorial

ToolSignal Pro는 AI·IT·소프트웨어 트렌드를 다루는 종합 IT 인사이트 매거진입니다.

이전 글 다음 글