cmdlet은 Windows PowerShell 환경에서 사용되는 경량 명령입니다. Windows PowerShell 런타임은 명령줄에서 제공되는 자동화 스크립트의 컨텍스트 안에서 이러한 cmdlet을 호출하며, Windows PowerShell API를 통해 프로그래밍 방식으로도 호출할 수 있습니다. 이번 글에서는 Windows 10에서 서명된 PowerShell cmdlet이 서명되지 않은 cmdlet보다 느리게 실행되는 문제의 원인을 살펴보고, 이를 해결하는 방법까지 함께 안내합니다.
cmdlet은 하나의 동작을 수행한 뒤 일반적으로 파이프라인의 다음 명령으로 Microsoft .NET Framework 개체를 반환합니다. cmdlet을 작성하려면 두 가지 특수 cmdlet 기본 클래스 중 하나에서 파생되는 클래스를 구현해야 하며, 파생 클래스는 다음 요건을 충족해야 합니다.
- 파생 클래스를 cmdlet으로 식별하는 특성(attribute)을 선언할 것
- 공용 속성을 cmdlet 매개 변수로 식별하는 특성이 적용된 public 속성을 정의할 것
- 레코드를 처리하기 위해 하나 이상의 입력 처리 메서드를 재정의할 것
서명된 PowerShell cmdlet이 느리게 실행되는 원인
실제 환경에서 서명된(signed) Windows PowerShell cmdlet이 서명되지 않은(unsigned) cmdlet보다 눈에 띄게 느리게 실행되는 경우가 있습니다. cmdlet을 실행할 때마다 몇 초씩 지연이 발생한다면 아래의 원인을 의심해 볼 수 있습니다.
이 문제는 컴퓨터가 인증서 신뢰 목록(Certificate Trust List, CTL) 확인을 위해 다음 주소에 접속하지 못할 때 발생합니다.
https://ctldl.windowsupdate.com/msdownload/update/v3/static/trustedr/en/disallowedcertstl.cab
https://ctldl.windowsupdate.com/msdownload/update/v3/static/trustedr/en/authrootstl.cab
서명된 cmdlet이 실행되면 PowerShell은 코드 서명 인증서의 유효성을 검증하는 과정을 거치며, 이 과정에서 위 주소의 CTL에 접근합니다. 네트워크에 문제가 있는 경우(예: 잘못된 프록시 설정, 방화벽에 의한 차단 등) 해당 서버에 연결하지 못하고 타임아웃이 발생할 때까지 대기하게 되는데, 이 대기 시간만큼 cmdlet 실행이 지연됩니다. 반면 서명되지 않은 cmdlet은 인증서 검증 단계 자체가 없기 때문에 상대적으로 빠르게 실행됩니다.
그룹 정책을 통해 해결하는 방법
이 문제를 우회하려면 로컬 그룹 정책 편집기에서 Microsoft 루트 인증서 자동 업데이트 기능을 비활성화하면 됩니다. 아래 단계를 따르세요.

- Windows 키 + R을 눌러 실행 대화 상자를 연 뒤 gpedit.msc를 입력하고 Enter 키를 눌러 로컬 그룹 정책 편집기를 실행합니다.
- 다음 경로로 이동합니다.
컴퓨터 구성 > Windows 설정 > 보안 설정 > 공개 키 정책
- 오른쪽 세부 정보 창에서 인증서 경로 유효성 검사 설정을 두 번 클릭합니다.
- 네트워크 검색 탭을 선택합니다.
- 이 정책 설정 정의 확인란을 선택합니다.
- Microsoft 루트 인증서 프로그램에서 자동으로 인증서 업데이트(권장) 확인란의 선택을 해제합니다.
- 적용 > 확인을 클릭합니다.
설정이 완료되면 로컬 그룹 정책 편집기를 닫습니다. 변경 사항을 즉시 적용하려면 관리자 권한 명령 프롬프트에서 gpupdate /force 명령을 실행하거나 시스템을 다시 시작하면 됩니다.
참고: 이 설정을 변경하면 Microsoft 루트 인증서 프로그램을 통한 자동 인증서 업데이트가 중단됩니다. 따라서 조직의 보안 정책에 미치는 영향을 검토한 후 적용하는 것이 좋습니다.