PowerShell 모듈 작성 고려 사항
이 문서에는 최상의 성능을 위해 모듈을 작성하는 방법과 관련된 몇 가지 지침이 포함되어 있습니다.
모듈 매니페스트 작성
다음 지침을 사용하지 않는 모듈 매니페스트는 모듈이 세션에서 사용되지 않은 경우에도 일반적인 PowerShell 성능에 상당한 영향을 줄 수 있습니다.
명령 자동 검색은 각 모듈을 분석하여 모듈에서 내보내는 명령을 확인하는데, 이 과정에는 비용이 많이 들 수 있습니다. 모듈 분석 결과는 사용자별로 캐시되지만, 컨테이너를 사용하는 일반적인 시나리오인 첫 번째 실행에서는 캐시를 사용할 수 없습니다. 모듈을 분석하는 동안 내보낸 명령을 매니페스트에서 완전히 확인할 수 있는 경우 모듈에 대한 비용이 더 많이 드는 분석을 방지할 수 있습니다.
가이드라인
모듈 매니페스트에서
AliasesToExport
,CmdletsToExport
,FunctionsToExport
항목에 와일드카드를 사용하지 않습니다.모듈이 특정 형식의 명령을 내보내지 않으면
@()
를 지정하여 매니페스트에 이 사실을 명시적으로 지정합니다. 누락되거나$null
항목은 wild카드*
지정하는 것과 같습니다.
가능한 경우 다음을 피해야 합니다.
@{
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은 이진 모듈보다 약 크기가 느린 순서입니다.
이진 모듈은 미리 컴파일되고 NGen을 사용하여 머신당 한 번씩 JIT 컴파일을 수행할 수 있기 때문에 가장 빠르게 로드됩니다.
PowerShell에서 스크립트를 컴파일하고 실행하기 전에 구문 분석해야 하므로 스크립트 모듈은 일반적으로 이진 모듈보다 조금 더 느리게 로드됩니다.
CDXML 모듈은 먼저 XML 파일을 구문 분석한 다음, 구문 분석 및 컴파일되는 PowerShell 스크립트를 생성해야 하기 때문에 일반적으로 스크립트 모듈보다 훨씬 더 느립니다.
PowerShell