Was ist ein PowerShell-Modul?
Ein PowerShell-Modul ist ein wiederverwendbares Paket, das einige PowerShell-Funktionen enthält. Alles in PowerShell (Funktionen, Variablen, DSC-Ressourcen usw.) kann in Modulen verpackt werden. Typischerweise sind Module Ordner, die bestimmte Dateitypen enthalten, die auf einem bestimmten Pfad gespeichert sind. Es gibt einige verschiedene Arten von PowerShell-Modulen.
Was ist ein PowerShell-Skript?
Ein PowerShell-Skript ist eine Reihe von Befehlen, die in einer .ps1-Datei gespeichert werden, um Wiederverwendung und Teilen zu ermöglichen. PowerShell-Workflows sind ebenfalls PowerShell-Skripte, die eine Reihe von Aufgaben umreißen und die Sequenzierung dieser Aufgaben bereitstellen. Für weitere Informationen besuchen Sie bitte "Getting Start with PowerShell Workflow".
Worin unterscheiden sich PowerShell-Skripte von PowerShell-Modulen?
Module eignen sich im Allgemeinen besser zum Teilen, aber wir ermöglichen das Teilen von Skripten, um es Ihnen zu erleichtern, Workflows und Skripte zur Community beizutragen. Weitere Informationen finden Sie in den folgenden Blogs:
Wie kann ich in der PowerShell-Katalog veröffentlichen?
Sie müssen ein Konto in der PowerShell-Katalog registrieren, bevor Sie Pakete in der Gallery veröffentlichen können. Dies liegt daran, dass Veröffentlichungspakete einen NuGetApiKey erfordern, der bei der Registrierung bereitgestellt wird. Zur Registrierung verwenden Sie Ihr persönliches, berufliches oder Schulkonto, um sich in der PowerShell-Katalog anzumelden. Ein einmaliges Registrierungsverfahren ist erforderlich, wenn Sie sich zum ersten Mal anmelden. Anschließend ist Ihr NuGetApiKey auf Ihrer Profilseite verfügbar.
Sobald Sie sich in der Galerie registriert haben, verwenden Sie die Publish-Module - oder Publish-Script-Kommandos , um Ihr Paket in der Galerie zu veröffentlichen. Für weitere Details zur Ausführung dieser Cmdlets besuchen Sie den Reiter Publish oder lesen Sie die Publish-Module- und Publish-Script-Dokumentation .
Du musst dich nicht registrieren oder in der Galerie anmelden, um Pakete zu installieren oder zu speichern.
Ich habe "Anfrage nicht bearbeitet" erhalten. als ich versucht habe, ein Paket in der PowerShell-Katalog zu veröffentlichen. Was bedeutet das?
Die vollständige Fehlermeldung lautet: "Anfrage nicht bearbeitet." 'Der angegebene API-Schlüssel ist ungültig oder hat keine Berechtigung, auf das angegebene Paket zuzugreifen.' Der entfernte Server gab einen Fehler zurück: (403) Verboten."
Dieser Fehler kann aus den folgenden Gründe auftreten:
- Der angegebene API-Schlüssel ist ungültig. Stellen Sie sicher, dass Sie den gültigen API-Schlüssel aus Ihrem Konto angegeben haben. Um Ihren API-Schlüssel zu erhalten, sehen Sie sich Ihre Profilseite an.
- Der angegebene Paketname gehört nicht dir. Wenn Sie bestätigt haben, dass Ihr API-Schlüssel korrekt ist, könnte es bereits ein Paket mit demselben Namen wie das vorhandene existieren. Das Paket könnte vom Besitzer entfernt worden sein, in welchem Fall es in keiner Suchsuche erscheint. Um festzustellen, ob bereits ein Paket mit demselben Namen existiert, öffnen Sie einen Browser und navigieren Sie zur Detailseite des Pakets:
https://www.powershellgallery.com/packages/<packageName>. Zum Beispiel führt die direkte Navigation zuhttps://www.powershellgallery.com/packages/pesterder Detailsseite des Pester-Moduls, egal ob es nicht gelistet ist oder nicht. Wenn ein Paket mit einem widersprüchlichen Namen bereits existiert und nicht gelistet ist, können Sie:- Wählen Sie einen anderen Namen für Ihr Paket.
- Kontaktieren Sie die Eigentümer des bestehenden Pakets.
Warum kann ich mich nicht mit meinem persönlichen Konto anmelden, aber ich konnte mich gestern anmelden?
Bitte beachten Sie, dass Ihr Galeriekonto keine Änderungen an Ihrem primären E-Mail-Alias berücksichtigt. Weitere Informationen finden Sie unter Microsoft Email Aliases.
Warum sehe ich nicht alle Galeriepakete, wenn ich alle Kategorie-Kontrollkästchen im Paket-Tab auswähle?
Wenn Sie ein Kategorie-Kontrollkästchen auswählen, sagen Sie: "Ich möchte alle Pakete in dieser Kategorie sehen." Nur die Pakete in den ausgewählten Kategorien werden angezeigt. Ähnlich sagt man, wenn man alle Kategorie-Kontrollkästchen auswählt: "Ich möchte alle Pakete in jeder Kategorie sehen." Einige Pakete in der Galerie gehören jedoch zu keiner der aufgeführten Kategorien, daher erscheinen sie nicht in den Ergebnissen. Um alle Pakete in der Galerie zu sehen, deaktivieren Sie alle Kategorien oder wählen Sie erneut den Reiter Pakete aus.
Was sind die Voraussetzungen, um ein Modul in der PowerShell-Katalog zu veröffentlichen?
Jede Art von PowerShell-Modul (Skriptmodule, Binärmodule oder Manifestmodule) kann in der Galerie veröffentlicht werden. Um ein Modul zu veröffentlichen, muss PowerShellGet einige Dinge darüber wissen – die Version, Beschreibung, den Autor und die Lizenzierung. Diese Informationen werden im Rahmen des Veröffentlichungsprozesses aus der Module-Manifest-Datei (.psd1) oder aus dem Wert des LicenseUri-Parameters des Publish-Module-Cmdlets ausgelesen. Alle Module, die in der Galerie veröffentlicht werden, müssen Modulmanifeste enthalten. Jedes Modul, das folgende Informationen in seinem Manifest enthält, kann in der Galerie veröffentlicht werden:
- Version
- Beschreibung
- Autor
- Eine URI zu den Lizenzbedingungen des Moduls, entweder als Teil des PrivateData-Abschnitts des Manifests oder im LicenseUri-Parameter des Publish-Module-Cmdlets .
Wie erstelle ich ein korrekt formatiertes Modulmanifest?
Der einfachste Weg, ein Modulmanifest zu erstellen, ist das Ausführen des Cmdlets New-ModuleManifest . In PowerShell 5.0 oder neueren generiert New-ModuleManifest ein korrekt formatiertes Modulmanifest mit leeren Feldern für nützliche Metadaten wie ProjectUri, LicenseUri und Tags. Füllen Sie einfach die Lücken aus oder verwenden Sie das generierte Manifest als Beispiel für die korrekte Formatierung.
Um zu überprüfen, dass alle erforderlichen Metadatenfelder korrekt ausgefüllt wurden, verwenden Sie das Cmdlet Test-ModuleManifest .
Um die Module Manifest-Dateifelder zu aktualisieren, verwenden Sie das Update-ModuleManifest-CMDLET .
Was sind die Voraussetzungen, um ein Skript in der Galerie zu veröffentlichen?
Jede Art von PowerShell-Skript (Skripte oder Workflows) kann in der Galerie veröffentlicht werden. Um ein Skript zu veröffentlichen, muss PowerShellGet einige Dinge darüber wissen – Version, Beschreibung, Autor und wie es lizenziert ist. Diese Informationen werden im Rahmen des Veröffentlichungsprozesses aus dem PSScriptInfo-Bereich der Skriptdatei oder aus dem Wert des LicenseUri-Parameters des Publish-Script-Cmdlets ausgelesen. Alle in der Galerie veröffentlichten Skripte müssen Metadateninformationen enthalten. Jedes Skript, das folgende Informationen im PSScriptInfo-Bereich enthält, kann in der Galerie veröffentlicht werden:
- Version
- Beschreibung
- Autor
- Eine URI zu den Lizenzbedingungen des Skripts, entweder als Teil des PSScriptInfo-Abschnitts des Skripts oder im LicenseUri-Parameter des Publish-Script-Cmdlets .
Wie suche ich?
Gib in das Textfeld ein, was du suchst. Wenn du zum Beispiel Module finden möchtest, die mit Azure SQL zu tun haben, gib einfach "azure sql" ein. Unsere Suchmaschine sucht nach diesen Schlüsselwörtern in allen veröffentlichten Paketen, einschließlich Titeln, Beschreibungen und Metadaten. Dann werden auf Basis eines gewichteten Qualitätswerts die nächstgelegenen Übereinstimmungen angezeigt. Sie können auch nach bestimmten Feldern mit der Syntax field:"value" in der Suchanfrage für die folgenden Felder suchen:
- Stichwörter
- Funktionen
- Cmdlets
- DscRessourcen
- PowerShellVersion
Wenn du zum Beispiel nach PowerShellVersion:"2.0" suchst, werden nur Ergebnisse angezeigt, die mit PowerShellVersion 2.0 kompatibel sind (basierend auf ihrem Modul-/Skriptmanifest).
Wie erstelle ich eine korrekt formatierte Skriptdatei?
Der einfachste Weg, eine korrekt formatierte Skriptdatei zu erstellen, ist das Ausführen des Cmdlets New-ScriptFileInfo . In PowerShell 5.0 generiert New-ScriptFileInfo eine korrekt formatierte Skriptdatei mit leeren Feldern für nützliche Metadaten wie ProjectUri, LicenseUri und Tags. Füllen Sie einfach die Lücken aus oder verwenden Sie die generierte Skriptdatei als Beispiel für korrekte Formatierung.
Um zu überprüfen, dass alle erforderlichen Metadatenfelder korrekt ausgefüllt wurden, verwenden Sie das Cmdlet Test-ScriptFileInfo .
Um die Metadatenfelder des Skripts zu aktualisieren, verwenden Sie das cmdlet Update-ScriptFileInfo .
Welche anderen Arten von PowerShell-Modulen gibt es?
Der Begriff PowerShell-Modul bezieht sich auch auf die Dateien, die tatsächliche Funktionalität implementieren. Skriptmoduldateien (.psm1) enthalten PowerShell-Code. Binärmoduldateien (.dll) enthalten kompilierten Code.
Hier ist eine Möglichkeit, darüber nachzudenken: Der Ordner, der das Modul kapselt, ist der Modulordner. Der Modulordner kann ein Modulmanifest (.psd1) enthalten, das den Inhalt des Ordners beschreibt. Die Dateien, die tatsächlich arbeiten, sind die Skriptmoduldateien (.psm1) und die binären Moduldateien (.dll). DSC-Ressourcen befinden sich in einem bestimmten Unterordner und werden als Skriptmoduldateien oder binäre Moduldateien implementiert.
Alle Module in der Galerie enthalten Modulmanifeste, und die meisten dieser Module enthalten Skriptmoduldateien oder binäre Moduldateien. Der Begriff Modul kann aufgrund dieser unterschiedlichen Bedeutungen verwirrend sein. Sofern nicht ausdrücklich anders angegeben, beziehen sich alle Verwendungen des Wortmoduls auf dieser Seite auf den Modulordner mit diesen Dateien.
Wie hängt PackageManagement mit PowerShellGet zusammen? (Antwort auf hoher Ebene)
PackageManagement ist eine gängige Schnittstelle zur Zusammenarbeit mit jedem Paketmanager. Schließlich solltest du, egal ob du mit PowerShell-Modulen, MSIs, Ruby-Gems, NuGet-Paketen oder Perl-Modulen zu tun hast, in der Lage sein, die Befehle von PackageManagement (Find-Package und Install-Package) zu verwenden, um sie zu finden und zu installieren. PackageManagement erreicht dies, indem es für jeden Paketmanager einen Paketanbieter hat, der sich in PackageManagement einbindet. Die Anbieter übernehmen die gesamte eigentliche Arbeit; Sie holen Inhalte aus Repositories und installieren die Inhalte lokal. Oft umgeben Paketanbieter einfach die bestehenden Paketmanager-Tools für einen bestimmten Pakettyp.
PowerShellGet ist der Paketmanager für PowerShell-Pakete. Es gibt einen PSModule-Paketanbieter, der PowerShellGet-Funktionalität über PackageManagement bereitstellt. Deshalb kannst du entweder Install-Module ausführen oder Install-Package -Provider PSModule ein Modul aus der PowerShell-Katalog installieren.
Bestimmte PowerShellGet-Funktionalitäten, einschließlich Update-Module und Publish-Module, können nicht über PackageManagement-Befehle abgerufen werden.
Zusammenfassend konzentriert sich PowerShellGet ausschließlich darauf, ein Premium-Paketmanagement-Erlebnis für PowerShell-Inhalte zu bieten. PackageManagement konzentriert sich darauf, alle Paketmanagement-Erfahrungen durch einen allgemeinen Satz von Tools bereitzustellen. Falls Sie diese Antwort als unbefriedigend empfinden, gibt es am Ende dieses Dokuments eine lange Antwort im Abschnitt Wie hängt Paketmanagement eigentlich mit PowerShellGet zusammen.
Für weitere Informationen besuchen Sie bitte die Projektseite PackageManagement.
Wie steht NuGet im Zusammenhang mit PowerShellGet?
Die PowerShell-Katalog ist eine modifizierte Version der NuGet Gallery. PowerShellGet verwendet den NuGet-Provider, um mit NuGet-basierten Repositories wie der PowerShell-Katalog zu arbeiten.
Du kannst PowerShellGet gegen jedes gültige NuGet-Repository oder jede Dateifreigabe verwenden. Du musst das Repository einfach hinzufügen, indem du das Register-PSRepositoriy-Kommando ausführst.
Heißt das, ich kann NuGet.exe nutzen, um mit der Galerie zu arbeiten?
Ja.
Wie hängt PackageManagement eigentlich mit PowerShellGet zusammen? (Technische Details)
Unter der Haube nutzt PowerShellGet stark die PackageManagement-Infrastruktur.
Auf der PowerShell-CMDLET-Ebene ist Install-Module tatsächlich ein dünner Wrapper um Install-Package -Provider PSModule.
Auf der Ebene des PackageManagement-Paketanbieters ruft der PSModule-Paketanbieter tatsächlich andere PackageManagement-Paketanbieter auf. Wenn Sie beispielsweise mit NuGet-basierten Galerien arbeiten (wie der PowerShell-Katalog), verwendet der PSModule-Paketanbieter den NuGet Package Provider, um mit dem Repository zu arbeiten.
Abbildung 1: PowerShellGet-Architektur
Was ist erforderlich, um PowerShellGet auszuführen?
Im Allgemeinen empfehlen wir, die neueste Version des PowerShellGet-Moduls zu wählen (beachten Sie, dass .NET 4.5 benötigt wird).
Das PowerShellGet-Modul benötigt PowerShell 3.0 oder neuer.
Daher benötigt PowerShellGet eines der folgenden Betriebssysteme:
- Windows 10
- Windows 8.1 Pro
- Windows 8.1 Enterprise
- Windows 7 SP1
- Windows Server 2016
- Windows Server 2012 R2
- Windows Server 2008 R2 SP1
PowerShellGet benötigt außerdem .NET Framework 4.5 oder höher. Weitere Informationen finden Sie unter Installieren von .NET Framework für Entwickler.
Ist es möglich, Namen für Pakete zu reservieren, die in Zukunft veröffentlicht werden?
Es ist nicht möglich, Paketnamen zu squaten. Wenn Sie das Gefühl haben, dass ein bestehendes Paket den Namen angenommen hat, der besser zu Ihrem Paket passt, versuchen Sie, den Besitzer des Pakets zu kontaktieren. Wenn du innerhalb weniger Wochen keine Antwort bekommst, kannst du den Support kontaktieren, und das PowerShell-Katalog-Team wird sich darum kümmern.
Wie beanspruche ich das Eigentum an Paketen?
Schau dir Managing Package Owners auf PowerShellGallery.com für Details an.
Wie gehe ich mit einem Paketinhaber um, der gegen meine Paketlizenz verstößt?
Wir ermutigen die PowerShell-Community, gemeinsam Streitigkeiten zwischen Paketbesitzern und den Besitzern anderer Pakete zu lösen. Wir haben einen Streitbeilegungsprozess entwickelt, den wir Sie bitten zu befolgen, bevor PowerShellGallery.com Administratoren eingreifen.