Sdílet prostřednictvím


Jak napsat binární modul PowerShellu

Binární modul může být libovolné sestavení (.dll), které obsahuje třídy rutin. Ve výchozím nastavení se při importu binárního modulu importují všechny rutiny v sestavení. Můžete ale omezit rutiny importované vytvořením manifestu modulu, jehož kořenovým modulem je sestavení. (Například klíč RutinyToExport manifestu lze použít k exportu pouze těch rutin, které jsou potřeba.) Kromě toho může binární modul obsahovat další soubory, adresářovou strukturu a další užitečné informace o správě, které jedna rutina nemůže.

Následující postup popisuje, jak vytvořit a nainstalovat binární modul PowerShellu.

Vytvoření a instalace binárního modulu PowerShellu

  1. Vytvořte binární řešení PowerShellu (například rutinu napsanou v jazyce C#) s potřebnými možnostmi a ujistěte se, že běží správně.

    Jádrem binárního modulu je z pohledu kódu sestavení rutiny. PowerShell ve skutečnosti považuje jedno sestavení rutiny za modul pro načítání a uvolňování, bez dalšího úsilí na straně vývojáře. Další informace o psaní rutiny najdete v tématu Zápis rutiny prostředí Windows PowerShell.

  2. V případě potřeby vytvořte zbytek řešení: (další rutiny, soubory XML atd.) a popište je pomocí manifestu modulu.

    Kromě popisu sestavení rutin ve vašem řešení může manifest modulu popsat, jak chcete modul exportovat a importovat, jaké rutiny budou vystaveny a jaké další soubory se do modulu dostanou. Jak už jsme uvedli dříve, PowerShell může zacházet s binární rutinou jako s modulem bez dalšího úsilí. Manifest modulu je proto užitečný hlavně pro kombinování více souborů do jednoho balíčku nebo pro explicitní řízení publikování pro dané sestavení. Další informace najdete v tématu Jak napsat manifest modulu PowerShellu.

    Následující kód je zjednodušený příklad jazyka C#, který obsahuje tři rutiny ve stejném souboru, který lze použít jako modul.

    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.");
          }
      }
    
    }
    
  3. Zabalte řešení a uložte balíček do umístění v cestě modulu PowerShellu.

    Globální $env:PSModulePath proměnná prostředí popisuje výchozí cesty, které PowerShell používá k vyhledání vašeho modulu. Například běžná cesta k uložení modulu do systému by byla %SystemRoot%\Users\<user>\Documents\WindowsPowerShell\Modules\<moduleName>. Pokud nepoužíváte výchozí cesty, musíte explicitně uvést umístění modulu během instalace. Nezapomeňte vytvořit složku pro uložení modulu, protože možná budete potřebovat, aby složka ukládala více sestavení a souborů pro vaše řešení.

    Technicky vzato nemusíte modul instalovat nikam $env:PSModulePath – to jsou jednoduše výchozí umístění, ve kterých bude PowerShell váš modul hledat. Je to však považováno za osvědčený postup, pokud nemáte dobrý důvod k uložení modulu někam jinam. Další informace najdete v tématu Instalace modulu PowerShell a about_PSModulePath.

  4. Importujte modul do PowerShellu pomocí volání Import-Module .

    Volání do modulu Import-Module načte modul do aktivní paměti. Pokud používáte PowerShell 3.0 a novější, vyvolání příkazu z modulu v kódu ho také naimportuje. Další informace najdete v tématu Import modulu PowerShellu.

Inicializace a vyčištění kódu modulu

Pokud modul potřebuje něco udělat při importu nebo odebrání, jako je úloha zjišťování nebo inicializace, můžete implementovat rozhraní IModuleAssemblyInitializer a IModuleAssemblyCleanup rozhraní.

Poznámka:

Tento model se nedoporučuje, pokud to není nezbytně nutné. Pokud chcete zachovat výkon PowerShellu, měli byste líně načíst věci v okamžiku, kdy se příkazy volají, a ne při importu.

Import sestavení modulu snap-in jako modulů

Rutiny a zprostředkovatelé, kteří existují v sestaveních snap-in, je možné načíst jako binární moduly. Když jsou sestavení modulu snap-in načtena jako binární moduly, jsou rutiny a zprostředkovatelé v modulu snap-in k dispozici uživateli, ale třída modulu snap-in v sestavení se ignoruje a modul snap-in není zaregistrovaný. V důsledku toho rutiny modulu snap-in poskytované prostředím Windows PowerShell nemůžou modul snap-in rozpoznat, i když jsou pro relaci k dispozici rutiny a poskytovatelé.

Kromě toho se v rámci binárního modulu nedají importovat žádné formátování nebo typy souborů, na které odkazuje modul snap-in. Pokud chcete importovat formátování a typy souborů, musíte vytvořit manifest modulu. Viz Jak napsat manifest modulu PowerShell.

Viz také