Windows PowerShell: Packen und Verteilen von benutzerdefinierten Windows PowerShell-Tools

Erreichen Sie, einige interessante Dinge mit Punkt sourcing, aber das kann auch bestimmte Einschränkungen führen, wenn Sie nicht vorsichtig sind.

Don Jones

Punkt-sourcing ist eine praktische, aber es kann schwierig sein, Befehle später entfernen, wenn Sie nicht werden benötigt oder später feststellen, dass Sie in Konflikt mit etwas anderes sind. Nachdem wir wandten uns einen Befehl in einer Tool parametrisierte, wiederverwendbare eigenständige letzten Monat ich zwei Einschränkungen wir Adresse müssen gefunden.

Wir das Tool als Windows PowerShell erweiterte Funktion, die manchmal auch ein "Skript-Cmdlet" bezeichnet wird aufgebaut Das erste Problem ist, dass das Skript selbst etwas schwierig zu verwenden. Das Skript enthält eine Funktion, die einfach das Skript ausgeführt wird nichts geschehen wird nicht stellen kann. Entweder haben Sie das Skript ändern und Hinzufügen der Befehle zum Ausführen der Funktion benötigt, oder Sie über Punkt-Quelle das Skript in die Shell die Funktion als globalen Befehl verfügbar zu machen.

Das zweite Problem ist, dass das Skript zwei Funktionen enthalten. Die erste Datei, Get-OSInfo, ist die gewünschten Personen verwenden. Die zweite OSInfoWorker, ist das eigentliche. Allerdings ist nicht die Datei, die Sie direkt ausführen soll. Punkt-sourcing verwenden, besteht keine Möglichkeit OSInfoWorker ausblenden (oder privat, Programmierers). Machen das Skript in ein Skriptmodul werden beide Probleme zu beheben.

Sinn der Module

Windows PowerShell unterstützt drei Grundtypen von Modulen: Binary, Skripts und Module manifest. Eine binäre Modul besteht aus einer DLL erstellt in Visual Studio, die die Shell-Cmdlets, Anbietern und andere Elemente hinzufügt. Ein Skriptmodul ist genau das: ein einzelnes Skript, das die Shell eine oder mehrere Funktionen hinzufügen kann. Ein manifest Modul kann mehrere Komponenten, z. B. binäre Erweiterungen, Skripts tatsächlich usw. enthalten. Skriptmodule sind am einfachsten zu erstellen, also, was wir verwenden.

Es gibt drei Anforderungen für ein Skriptmodul:

  1. Es muss ein gültiges Windows PowerShell-Skript, hauptsächlich bestehend aus Funktionen, die der Shell hinzugefügt werden.
  2. Es muss ein .psm1-Dateinamenerweiterung, anstatt ps1 verfügen.
  3. Es muss in einem bestimmten Ordner auf Ihrem Computer befinden

Die letzte Anforderung ist tatsächlich mehr einen Vorschlag aus Gründen der Bequemlichkeit. Bei der Installation definiert Windows PowerShell eine neue systemweite Umgebungsvariable namens PSModulePath. Dies funktioniert viel wie das System-Path-Umgebungsvariable. Es enthält die Ordner, die die Shell automatisch sucht Module nach Namen suchen.

Es gibt zwei Modulpfade standardmäßig definiert. Eine ist unter System32-Ordner-Hierarchie. Dieser ist für die Module von Microsoft bereitgestellten vorgesehen. Die andere befindet sich im Ordner Dokumente und für eigene Module gedacht ist. Wir verwenden diese. Sie können, natürlich ändern oder hinzufügen zu PSModulePath – vielleicht einen zentralen Pfad, der Ihr Team zum Speichern der freigegebenen Module verwendet definieren.

Wir verwenden Pfad ist \[My] Documents\WindowsPowerShell\Modules. Unter Windows XP wird es als eigene benannt. In Windows Vista und höher ist es einfach Dokumente. Ordner "WindowsPowerShell" ist nicht standardmäßig vorhanden. Sie haben, zu erstellen. Müssen Sie auch erstellen, da der Unterordner "Module" auch in der Standardeinstellung existiert nicht.

Die Alternative Einführung Ihres Moduls Speicherorten PSModulePath ist einfach einen vollständigen Pfad und Dateinamen angeben, wenn Sie ein Modul zu laden. Auffindbar umständlicher für häufig werden Module verwendet, damit ich häufig mit den Pfaden, die in PSModulePath definierten stick.

Einen Modul

Ich werde drei Befehle an das Ende des letzten Monats Skript hinzufügen (Sie können das überarbeitete Skript herunterladen hier):

New-Alias goi Get-OSInfo
Export-ModuleMember -function Get-OSInfo
Export-ModuleMember -alias goi

Der erste Befehl definiert einen Alias "indische". Dies ist für meine Get OSInfo-Funktion. Die zweite der beiden Befehle sind nur wirksam bei Verwendung innerhalb eines Moduls Skript.

In der Standardeinstellung beim Laden eines Moduls in der Shell wird jede Funktion in diesem Modul zur Verfügung gestellt. Wenn Sie die Export-ModuleMember verwenden, jedoch nur die Funktionen – und Aliase –, werden explizit benannt werden zur Verfügung gestellt.

Meine Alias "indische" als auch die Funktion Get OSInfo sollte jeder Benutzer mit diesem Modul sichtbar sein. Die Funktion, die ich angegeben haben, die osinfoworker, werden ausgeblendet. Weiterhin können eine beliebige Funktion Aufruf von OSInfoWorker in das Modul selbst, aber es nicht direkt zugegriffen werden, wie eine private Funktion.

Mit diesen Befehlen hinzugefügt wird muss dem Skript einen Namen geben und in der richtigen Stelle. Angenommen, der dieses Modul "MyModule gesucht." nennen werden sollen Das bedeutet, dass Sie die Skriptdatei muss in \[My] Documents\WindowsPowerShell\Modules\MyModule\MyModule.psm1.

Das Skript muss in einem Unterordner von Modulen. Der Unterordner und die Skriptdatei selbst müssen den Namen des Moduls durchführen. Anschließend kann Import-Module MyModule gesucht, laden Sie das Modul ausgeführt werden.

Dies ist eine einfache und effektive Möglichkeit, Skripts für andere Benutzer verteilen. Ich können auch so viele Funktionen und Aliase wie ich in diese einzelne Datei verwenden möchten. Solange der richtigen Stelle befindet (oder jemand bereit ist, geben Sie den vollständigen Pfad), ist es leicht für andere Benutzer das Modul laden und verwenden diese Funktionen.

Don Jones

Don Jones ist einer der Gründer von konzentriertem Technologie und Antworten Fragen zu Windows PowerShell und andere Technologien zur ConcentratedTech.com. Er ist auch ein Autor für Nexus.Realtimepublishers.com, wodurch viele seiner Bücher als kostenlose elektronische Editionen über seine Website verfügbar sind.

Holen Sie mehr

Download Beispielcode , die mit Artikel dieses Monats geht.

Zeit läuft Jones' live, exklusive, praktische dreitägigen Workshop Teil TechMentor Vorträge halte Frühjahr 2011 zu registrieren. Besuchen Sie TechMentorEvents.comfür Details.

Verwandter Inhalt