다음을 통해 공유


PowerShell 모듈 작성 고려 사항

이 문서에는 최상의 성능을 위해 모듈을 작성하는 방법과 관련된 몇 가지 지침이 포함되어 있습니다.

모듈 매니페스트 작성

다음 지침을 사용하지 않는 모듈 매니페스트는 모듈이 세션에서 사용되지 않더라도 일반적인 PowerShell 성능에 눈에 띄는 영향을 미칠 수 있습니다.

명령 자동 검색은 각 모듈을 분석하여 모듈이 내보내는 명령을 결정하고 이 분석은 비용이 많이 들 수 있습니다. 모듈 분석 결과는 사용자별로 캐시되지만, 컨테이너를 사용하는 일반적인 시나리오인 첫 번째 실행에서는 캐시를 사용할 수 없습니다. 모듈을 분석하는 동안 내보낸 명령을 매니페스트에서 완전히 확인할 수 있는 경우 모듈에 대한 비용이 더 많이 드는 분석을 방지할 수 있습니다.

지침

  • 모듈 매니페스트에서 AliasesToExport, CmdletsToExportFunctionsToExport 항목에 와일드카드를 사용하지 마세요.

  • 모듈이 특정 형식의 명령을 내보내지 않는 경우 @()지정하여 매니페스트에서 명시적으로 지정합니다. 누락되거나 $null 항목은 와일드카드 *지정하는 것과 같습니다.

가능한 경우 다음을 피해야 합니다.

@{
    FunctionsToExport = '*'

    # Also avoid omitting an entry, it's equivalent to using a wildcard
    # CmdletsToExport = '*'
    # AliasesToExport = '*'
}

대신 다음을 사용합니다.

@{
    FunctionsToExport = 'Format-Hex', 'Format-Octal'
    CmdletsToExport = @()  # Specify an empty array, not $null
    AliasesToExport = @()  # Also ensure all three entries are present
}

CDXML을 피하다

모듈을 구현하는 방법을 결정할 때 다음 세 가지 기본 선택 사항이 있습니다.

  • 바이너리(주로 C#)
  • 스크립트(PowerShell)
  • CDXML(CIM을 래핑하는 XML 파일)

모듈 로드 속도가 중요하다면, CDXML은 이진 모듈보다 약 10배 정도 느리게 로드됩니다.

이진 모듈은 미리 컴파일되고 컴퓨터당 한 번씩 NGen을 사용하여 JIT 컴파일을 수행할 수 있기 때문에 가장 빠르게 로드됩니다.

PowerShell에서 스크립트를 컴파일하고 실행하기 전에 구문 분석해야 하므로 스크립트 모듈은 일반적으로 이진 모듈보다 조금 더 느리게 로드됩니다.

CDXML 모듈은 일반적으로 스크립트 모듈보다 훨씬 느립니다. 먼저 XML 파일을 구문 분석한 다음 구문 분석하고 컴파일하는 PowerShell 스크립트를 꽤 많이 생성해야 하기 때문입니다.