이진 모듈은 cmdlet 클래스를 포함하는 모든 어셈블리(.dll
)일 수 있습니다. 기본적으로 어셈블리의 모든 cmdlet은 이진 모듈을 가져올 때 가져옵니다. 그러나 루트 모듈이 어셈블리인 모듈 매니페스트를 만들어 가져오는 cmdlet을 제한할 수 있습니다. 예를 들어 매니페스트의 CmdletsToExport 키를 사용하여 필요한 cmdlet만 내보낼 수 있습니다. 또한 이진 모듈에는 단일 cmdlet에서 수행할 수 없는 추가 파일, 디렉터리 구조 및 기타 유용한 관리 정보가 포함될 수 있습니다.
다음 절차에서는 PowerShell 이진 모듈을 만들고 설치하는 방법을 설명합니다.
PowerShell 이진 모듈을 만들고 설치하는 방법
필요한 기능을 사용하여 이진 PowerShell 솔루션(예: C#으로 작성된 cmdlet)을 만들고 제대로 실행되는지 확인합니다.
코드 관점에서 이진 모듈의 핵심은 cmdlet 어셈블리입니다. 실제로 PowerShell은 개발자의 추가 작업 없이 단일 cmdlet 어셈블리를 로드 및 언로드를 위한 모듈로 처리합니다. cmdlet 작성에 대한 자세한 내용은 Windows PowerShell Cmdlet작성을 참조하세요.
필요한 경우 솔루션의 나머지 부분(추가 cmdlet, XML 파일 등)을 만들고 모듈 매니페스트를 사용하여 설명합니다.
모듈 매니페스트는 솔루션에서 cmdlet 어셈블리를 설명하는 것 외에도 모듈을 내보내고 가져오는 방법, 노출될 cmdlet 및 모듈로 이동하는 추가 파일을 설명할 수 있습니다. 그러나 앞에서 설명한 대로 PowerShell은 추가 작업 없이 이진 cmdlet을 모듈처럼 처리할 수 있습니다. 따라서 모듈 매니페스트는 주로 여러 파일을 단일 패키지로 결합하거나 지정된 어셈블리에 대한 게시를 명시적으로 제어하는 데 유용합니다. 자세한 내용은 PowerShell 모듈 매니페스트작성하는 방법을 참조하세요.
다음 코드는 모듈로 사용할 수 있는 동일한 파일에 세 개의 cmdlet을 포함하는 간소화된 C# 예제입니다.
using System.Management.Automation; // Windows PowerShell namespace. namespace ModuleCmdlets { [Cmdlet(VerbsDiagnostic.Test,"BinaryModuleCmdlet1")] public class TestBinaryModuleCmdlet1Command : Cmdlet { protected override void BeginProcessing() { WriteObject("BinaryModuleCmdlet1 exported by the ModuleCmdlets module."); } } [Cmdlet(VerbsDiagnostic.Test, "BinaryModuleCmdlet2")] public class TestBinaryModuleCmdlet2Command : Cmdlet { protected override void BeginProcessing() { WriteObject("BinaryModuleCmdlet2 exported by the ModuleCmdlets module."); } } [Cmdlet(VerbsDiagnostic.Test, "BinaryModuleCmdlet3")] public class TestBinaryModuleCmdlet3Command : Cmdlet { protected override void BeginProcessing() { WriteObject("BinaryModuleCmdlet3 exported by the ModuleCmdlets module."); } } }
솔루션을 패키지하고 PowerShell 모듈 경로의 어딘가에 패키지를 저장합니다.
전역 환경 변수는
$env:PSModulePath
PowerShell에서 모듈을 찾는 데 사용하는 기본 경로를 설명합니다. 예를 들어 시스템에 모듈을 저장하는 일반적인 경로는%SystemRoot%\Users\<user>\Documents\WindowsPowerShell\Modules\<moduleName>
. 기본 경로를 사용하지 않는 경우 설치하는 동안 모듈의 위치를 명시적으로 지정해야 합니다. 솔루션에 대한 여러 어셈블리와 파일을 저장할 폴더가 필요할 수 있으므로 모듈을 저장할 폴더를 만들어야 합니다.기술적으로 모듈을 어디에도
$env:PSModulePath
설치할 필요가 없습니다. 이는 PowerShell에서 모듈을 찾는 기본 위치일 뿐입니다. 그러나 모듈을 다른 곳에 저장할 만한 충분한 이유가 없다면 이 작업을 수행하는 것이 가장 좋은 사례로 간주됩니다. 자세한 내용은 PowerShell 모듈 설치 및 about_PSModulePath 참조하세요.Import-Module 호출하여 모듈을 PowerShell로 가져옵니다.
Import-Module을 호출하면 모듈이 활성 메모리로 로드됩니다. PowerShell 3.0 이상을 사용하는 경우 코드에서 모듈에서 명령을 호출하면 이 명령도 가져옵니다. 자세한 내용은 PowerShell 모듈 가져오기를 참조하세요.
모듈 초기화 및 정리 코드
모듈이 검색 작업 또는 초기화와 같은 가져오기 또는 제거 시 작업을 수행해야 하는 경우 및 IModuleAssemblyInitializer
인터페이스를 구현할 IModuleAssemblyCleanup
수 있습니다.
비고
이 패턴은 반드시 필요한 경우가 아니면 권장되지 않습니다. PowerShell 성능을 유지하려면 가져오기가 아니라 명령이 호출되는 지점에서 작업을 지연 로드해야 합니다.
스냅인 어셈블리를 모듈로 가져오기
스냅인 어셈블리에 있는 Cmdlet 및 공급자는 이진 모듈로 로드할 수 있습니다. 스냅인 어셈블리가 이진 모듈로 로드되면 스냅인의 cmdlet 및 공급자를 사용자가 사용할 수 있지만 어셈블리의 스냅인 클래스는 무시되고 스냅인은 등록되지 않습니다. 따라서 Windows PowerShell에서 제공하는 스냅인 cmdlet은 세션에 cmdlet 및 공급자를 사용할 수 있더라도 스냅인을 검색할 수 없습니다.
또한 스냅인에서 참조하는 모든 서식 또는 형식 파일을 이진 모듈의 일부로 가져올 수 없습니다. 서식을 가져오고 파일을 입력하려면 모듈 매니페스트를 만들어야 합니다. PowerShell 모듈 매니페스트 작성하는 방법을.
또한 참조하십시오
PowerShell