Wie man PowerShell-Module wie ein Profi importiert

PowerShell ist eine phänomenale robuste Skriptsprache. Aber um ihr Potenzial freizusetzen, müssen Sie wissen, wie Sie die richtigen Module importieren können.

In diesem Tutorial lernen Sie alles, was Sie wissen müssen, um PowerShell-Module wie ein Profi zu importieren. Mit einem tiefen Verständnis für Cmdlets, Parameter und Module können Sie schneller, effizienter und effektiver Skripte erstellen als je zuvor.

Lesen Sie weiter, um Ihre PowerShell-Fähigkeiten zu optimieren und Ihr Skripting auf ein neues Level zu bringen!

Voraussetzungen

In diesem Tutorial wird eine praktische Demonstration durchgeführt. Um mitzumachen, stellen Sie sicher, dass Sie ein System mit PowerShell installiert haben. Dieses Tutorial verwendet Windows 10 und PowerShell 5.1 als Beispiel, aber die gleichen Befehle sollten mit den meisten Versionen von Windows und PowerShell funktionieren.

Importieren eines einzelnen Moduls

PowerShell-Module enthalten vorgefertigten Code, den Sie in Ihren PowerShell-Skripten verwenden können, um Zeit und Aufwand zu sparen. Wenn Sie PowerShell-Module importieren, nutzen Sie vorgefertigten Code anstelle von Grund auf zu beginnen.

Aber wie importiert man PowerShell-Module? Das Import-Module-Cmdlet ist die Hauptmethode zum Importieren von Modulen in PowerShell. Das Importieren eines einzelnen Moduls ist eine der grundlegendsten Verwendungen des Import-Module-Cmdlets, das Sie in diesem Tutorial als Erstes kennenlernen werden.

Öffnen Sie PowerShell als Administrator und führen Sie den folgenden Import-Module-Befehl aus, um nach dem Modul PSDiagnostics zu suchen und es in den Arbeitsspeicher zu laden. Wenn erfolgreich, wird das Modul importiert, aber der Befehl liefert keine Ausgabe.

Import-Module PSDiagnostics

Das Importieren von Modulen aus Online-Repositories über das Install-Module-Cmdlet wird immer empfohlen, wenn möglich. Dieses Cmdlet kümmert sich um Abhängigkeiten und Versionsverwaltung für Sie.

Sobald Sie das Modul importiert haben, können Sie eine der Cmdlets oder Funktionen des Moduls verwenden, um Probleme zu diagnostizieren und zu beheben. Das Cmdlet Enable-PSTrace ist nur ein Beispiel für die von dem PSDiagnostics-Modul bereitgestellten Cmdlets, mit denen Sie die diagnostische Verfolgung in PowerShell aktivieren können.

Führen Sie nun den folgenden Enable-PSTrace-Befehl aus, um die diagnostische Verfolgung durchzuführen und die Ergebnisse in der angegebenen -TraceFilePath (C:\\MyTrace.log) zu speichern. Dieser Befehl gibt keine Ausgabe auf der Konsole aus, da die Ergebnisse stattdessen in eine Datei geschrieben werden.

Enable-PSTrace -TraceLevel 1 -TraceFilePath C:\MyTrace.log

Einige Module erfordern möglicherweise zusätzliche Konfigurationen oder Einrichtungen, bevor Sie sie verwenden können. Lesen Sie unbedingt die mit dem Modul bereitgestellte Dokumentation, um Voraussetzungen oder Anforderungen zu verstehen.

Mehrere Module auf einmal importieren

Das Importieren eines einzelnen Moduls funktioniert gut. Aber wenn Sie oft mehrere Module auf einmal importieren müssen, ist dies auch mit dem Import-Module-Cmdlet möglich.

Das Importieren mehrerer Module ist eine großartige Möglichkeit, Zeit und Aufwand in PowerShell zu sparen. Aber wie genau? Sie geben die Modulnamen durch Kommas getrennt an.

Führen Sie den folgenden Befehl aus, um nach mehreren Modulen (Dism, PowerShellGet, PSReadline) zu suchen und sie in den Arbeitsspeicher zu laden. Wie beim Importieren eines einzelnen Moduls liefert dieser Befehl keine Ausgabe.

Import-Module Dism, PowerShellGet, PSReadline

Anzeigen von Modulimportdetails

Wie bereits erwähnt, liefert ein erfolgreicher Modulimport keine Ausgabe. Aber zugegeben, man wäre skeptisch, ob das Modul tatsächlich importiert wurde oder nicht.

Der Parameter -Verbose ist eine nützliche Option, die Sie mit vielen PowerShell-Cmdlets und Funktionen verwenden können, einschließlich des Cmdlets Import-Module. Dieser Parameter bewirkt, dass PowerShell detaillierte Informationen über den Befehl während der Ausführung anzeigt. Dadurch erhalten Sie wertvolles Feedback, das Sie zur Fehlerbehebung und zum Debuggen verwenden können.

Führen Sie den folgenden Befehl aus, um das Modul SmbShare zu importieren, und fügen Sie den Parameter -Verbose hinzu, um die Details des Modulimports auszudrucken.

Import-Module SmbShare -Verbose

Wie unten zu sehen ist, liefert der Parameter -Verbose detaillierte Informationen über die geladene Moduldatei und die importierten Funktionen. Diese Informationen können helfen, das Innenleben des Moduls zu verstehen.

In diesem Fall bietet das Modul SmbShare Cmdlets zur Verwaltung von SMB-Freigaben auf Windows-Maschinen. Diese Cmdlets umfassen unter anderem New-SmbShare (Erstellung neuer Freigaben) und Remove-SmbShare (Entfernung bestehender Freigaben).

Displaying module import details

Erneutes Importieren eines Moduls in dieselbe Sitzung

Ob Ihr Modul Probleme verursacht oder Sie nur sicherstellen möchten, dass Sie die aktuellste Version Ihres Moduls verwenden, das erneute Importieren eines PowerShell-Moduls ist ratsam. Wie? Durch Anfügen des Parameters -Force zum Befehl Import-Module.

Dieser -Force-Parameter ermöglicht es Ihnen, die Cmdlets und Funktionen des Moduls weiterhin zu verwenden, ohne Ihre PowerShell-Sitzung schließen und erneut öffnen zu müssen.

Ein häufiges Anwendungsszenario für das erneute Importieren eines Moduls besteht darin, wenn Sie ein Modul entwickeln und Änderungen daran vornehmen. Sie können das Modul in Ihre aktuelle Sitzung importieren, um diese Änderungen vor der endgültigen Festlegung zu testen.

Führen Sie den folgenden Befehl aus, um PowerShell mit dem Parameter -Force dazu zu zwingen, das Modul SmbShare aus seinem ursprünglichen Speicherort zu entfernen und erneut zu importieren.

Der Parameter -Prefix ermöglicht es Ihnen, einen Präfix für die aus dem Modul importierten Cmdlets und Funktionen anzugeben. In diesem Fall werden alle importierten Cmdlets und Funktionen mit New vorangestellt. Dieser Parameter kann nützlich sein, um Konflikte mit vorhandenen Cmdlets oder Funktionen in Ihrer Sitzung zu vermeiden.

Zum Beispiel wird das Cmdlet Get-SmbShare im ursprünglichen Modul zu Get-NewSmbShare im erneut importierten Modul.

Import-Module SmbShare -Force -Prefix New

Führen Sie nun den Get-Command-Befehl unten aus, um eine Liste aller Cmdlets und Funktionen abzurufen, die vom ausgewählten SmbShare-Modul (Select-Object nach Name) bereitgestellt werden.

Get-Command -Module SmbShare | Select-Object Name

Unten sehen Sie, dass den Cmdlets des SmbShare-Moduls jetzt das Präfix New hinzugefügt wurde. Diese Ausgabe bestätigt, dass das Modul erfolgreich neu importiert wurde.

Verifying the SmbShare module has been reimported

Verwendung von NuGet-Paketen zum manuellen Importieren von PowerShell-Modulen

Bisher haben Sie Module erfolgreich aus der PowerShell-Galerie importiert. Aber was ist, wenn das von Ihnen gesuchte Modul dort nicht vorhanden ist?

Sie können PowerShell-Module manuell aus einem NuGet-Paket installieren und importieren. Im PowerShell-Kontext ist ein NuGet-Paket eine Sammlung von Dateien, die ein PowerShell-Modul sowie alle abhängigen Module oder Bibliotheken enthält, die für das Modul erforderlich sind.

Um ein Modul aus einem NuGet-Paket zu importieren, müssen Sie das NuGet-Paket manuell herunterladen, extrahieren und installieren. Gehen Sie dazu wie folgt vor:

1. Gehen Sie zur Azure-PowerShell-Galerie-Seite des Az.Automation-Moduls.

2. Klicken Sie dann auf den Tab Manual DownloadDownload the raw nupkg file, um das Paket herunterzuladen. In diesem Tutorial wird das Az.Automation 1.9.1-Modul aus der Azure PowerShell-Galerie als Beispiel verwendet. Die gleichen Schritte gelten jedoch auch für andere NuGet-Pakete.

Downloading the raw NuGet package (nupkg) file

3. Führen Sie nach dem Herunterladen den folgenden Unblock-File-Befehl aus. Dieser Befehl liefert keine Ausgabe, entsperrt jedoch die heruntergeladene .nupkg-Datei. Stellen Sie sicher, dass Sie den Dateipfad mit demjenigen ändern, in dem Sie das Paket heruntergeladen haben.

Das Entsperren des Pakets ist notwendig. Warum? PowerShell erlaubt möglicherweise nicht die Ausführung von aus dem Internet heruntergeladenen Dateien als Sicherheitsmaßnahme, um die Ausführung potenziell schädlicher Skripte zu verhindern

Unblock-File -Path C:\PSModules\az.automation.1.9.1.nupkg

4. Entpacke nun die heruntergeladene .nupkg Datei in einen Ordner auf deinem lokalen Computer. Du benötigst möglicherweise ein Komprimierungs-/Entkomprimierungstool wie 7-Zip oder WinRAR, um das Paket zu entpacken. Ein NuGet-Paket ist ein ZIP-Archiv, das eine Sammlung von Dateien enthält, die ein Modul bilden.

5. Lösche den folgenden Inhalt aus dem extrahierten Ordner.

Der extrahierte Inhalt eines NuGet-Pakets enthält Metadaten und Dateien, die für eine manuelle Modulinstallation nicht benötigt werden.

Name Type
_rels Folder
Package Folder
[Content_Types].xml XML File
Az.Automation.nuspec XML Manifest File
Deleting unnecessary contents from the extracted NuGet package folder

6. Benenne deinen extrahierten Ordner mit einem aussagekräftigeren Namen wie az.automation um mögliche Fehler zu vermeiden. Beachte, dass alle Buchstaben klein geschrieben sein sollten und keine Sonderzeichen im Namen verwendet werden sollten.

7. Führe anschließend den Befehl $env:PSModulePath aus, um die Pfade deiner aktuellen Shell-Module zu finden. Dieser Befehl gibt eine Liste aller Standardmodulpfade auf deinem System zurück. PowerShell sucht in diesen Pfaden automatisch nach Modulen, wenn der Modulname in einem Skript oder Befehl angegeben ist.

$env:PSModulePath

Notiere dir die Pfade, da du sie im nächsten Schritt benötigen wirst.

Finding out where your modules’ paths are located

8. Kopieren Sie den neu benannten Ordner (az.automation) in einen der Verzeichnisse, die Sie in Schritt sieben notiert haben. Dadurch wird der Geltungsbereich des Moduls (spezifisch oder alle Benutzer) definiert.

Path Function
C:\Users\admin\Documents\WindowsPowerShell\Modules Makes the module available for the specific user account (admin). This tutorial uses this location as an example.
C:\Program Files\WindowsPowerShell\Modules Makes the module available for all user accounts on your local machine.

9. Führen Sie nun den folgenden Befehl aus, um das Modul (az.automation) in Ihre PowerShell-Sitzung zu installieren und zu importieren. Stellen Sie sicher, dass Sie az.automation durch den tatsächlichen Namen Ihres Moduls ersetzen.

Import-Module -Name az.automation -Verbose
Installing and importing a module from a NuGet package

10. Führen Sie abschließend den folgenden Get-Module Befehl aus, um zu überprüfen, ob das Modul (az.automation) erfolgreich importiert wurde.

Get-Module -Name az.automation
Verifying the module has been imported successfully

Möglicherweise möchten Sie sich nicht auf die automatische Erkennung verlassen. In diesem Fall geben Sie den genauen Dateispeicherort (C:\az.automation) beim Importieren des Moduls an.

Import-Module -Name C:\az.automation -Verbose
Specifying the exact file location when importing a module

Schlussfolgerung

Mit verbundenen Funktionen oder gruppiertem Code sind PowerShell-Module echte Game Changer. In diesem Tutorial haben Sie verschiedene Möglichkeiten gelernt, wie Sie PowerShell-Module in Ihre Sitzungen importieren können, einschließlich des manuellen Imports von Modulen aus einem NuGet-Paket. Sie haben auch verschiedene Parameter kennengelernt, die den Importprozess steuern.

Durch das Beherrschen dieser Techniken können Sie Module problemlos importieren und verwenden, um Ihre Automatisierungsskripte zu optimieren. Aber das Lernen muss nicht hier aufhören. Warum erweitern Sie Ihre Fähigkeiten im PowerShell-Modulmanagement nicht, indem Sie lernen, Modulmitglieder zu exportieren?

Source:
https://adamtheautomator.com/import-powershell-modules/