Neue Rezepte

Krümelmonster-Cover „Ruf mich vielleicht an“

Krümelmonster-Cover „Ruf mich vielleicht an“


'Sesamstraße' hat aus dem Pop-Hit 'Share It Maybe' gemacht, vielleicht das mit Abstand beste Cover

Wenn Sie noch kein einziges Cover-/Tanzvideo von "Call Me Maybe" gehört haben (klicken Sie hier, und hier, und hier), dann ist dies diejenige, auf die Sie klicken müssen. Sesamstraße nimmt Carly Rae Jepsens viralen Hit auf, schaltet ihn um und lässt das Krümelmonster seine singenden Koteletts zeigen.

Das entzückende Krümelmonster sabbert über eine Schüssel mit Keksen, die immer aus seiner Reichweite zu geraten scheint. Aus einem Liebeslied wird eine Suche nach Keksen, vor allem im Intro: "Du Cookie zeigt/ und mein Hunger wächst/ lass uns Magermilch fließen/ we'll start this snack going baby."

Was den Chor angeht? "Hey, ich habe dich gerade kennengelernt/ und das ist verrückt/ aber du hast Kekse/ also teile sie vielleicht? Stichwort synchronisiertes Tanzen und Klatschen.

Jessica Chou ist Mitherausgeberin bei The Daily Meal. Folge ihr auf Twitter @jesschou.


Erstellen eines PowerShell-Moduls

Vor einiger Zeit hat jemand erwähnt, dass es Spaß machen könnte, den PowerShell-Modul-Schreibprozess zu dokumentieren. Dies wurde schon früher gemacht, aber ich denke, es würde Spaß machen, meinen eigenen Prozess von der ersten Idee bis zur Veröffentlichung auf der offiziellen PowerShellGallery.com-Site zu veröffentlichen.

Ich habe kürzlich das Puzzle Scripting Games vom August auf PowerShell.org besprochen, bei dem es um die Abfrage einer Web-API ging. Es stellt sich heraus, dass dies ein sehr häufiges Bedürfnis ist, und viele der Module, die wir schreiben, abstrahieren diese APIs in praktische PowerShell-Funktionen und -Module.

Wir gehen davon aus, dass Sie wissen, was ein Modul ist, und dass Sie Erfahrung mit dem Schreiben von PowerShell-Funktionen haben. Wenn nicht, verbringen Sie einige Zeit damit, PowerShell zu lernen, bevor Sie hier fortfahren!

Dieser Beitrag behandelt meine typische Formel zum Schreiben eines Moduls am Beispiel der Stack Exchange API. Fühlen Sie sich frei, den PSStackExchange-Code selbst zu durchsuchen.

Warum Module?

Erweiterte Funktionen bringen Sie mit PowerShell weit. Wenn Sie heute keine Funktionen schreiben, sollten Sie Ihren Code in diese wiederverwendbaren Tools kapseln. Aber… sie haben ihre Grenzen. Hier sind einige Gründe, warum Sie Ihre erweiterten Funktionen in einem Modul bündeln könnten:

  • Code-Organisation vereinfachen
  • Zusammengehörige Funktionen gruppieren
  • Status zwischen Funktionen teilen, aber nicht mit dem Benutzer
  • Verwenden Sie „Hilfsfunktionen“, die dem Benutzer nicht zugänglich gemacht werden sollen
  • Auffindbarkeit verbessern: Find-Module MyModule oder Get-Command -Module MyModule
  • Verteilung vereinfachen: Install-Module MyModule

In unserem Beispiel organisieren wir eine Reihe von Stack Exchange-Funktionen in einem Modul.

Das scheint kompliziert!

Dies von Grund auf neu zu tun, kann ein wenig Zeit in Anspruch nehmen. Zum Glück können Sie, sobald Sie ein oder zwei Module schreiben, schnell loslegen, indem Sie es kopieren und ein paar Dateien optimieren. Lassen Sie sich nicht von der Länge dieses Beitrags abschrecken, Ihre eigenen Module zu schreiben, es lohnt sich, ein paar Minuten zu verbringen, um die Grundlagen zu erlernen!

Die Zutaten

Es gibt viele Möglichkeiten, ein Modul zu erstellen, von der Erweiterung einer .psm1-Erweiterung auf eine Datei bis hin zum Kompilieren eines vollwertigen Binärmoduls aus C#. Wir werden hier einen gemeinsamen Mittelweg nehmen und die folgenden Zutaten verwenden:

  • Ein Modul-Manifest. Dies ist eine .psd1-Datei, die Ihr Modul beschreibt. PSStackExchange.psd1
  • Ein Root-Modul. In unserem Fall eine Skriptmodul-.psm1-Datei. Dies ist nur PowerShell-Code, der beim Importieren des Moduls ausgeführt wird. PSStackExchange.psm1
  • Exportierte (öffentliche) Funktionen. Dies sind die erweiterten Funktionen, die ein Endbenutzer von unserem Modul aus ausführen kann. Zum Beispiel Get-SEQuestion.ps1 oder Get-SEObject.ps1
  • Private Funktionen. Dies sind optionale „Hilfsfunktionen“, die wir in unseren exportierten Funktionen verwenden möchten, die der Endbenutzer nicht sehen sollte. Zum Beispiel Add-ObjectDetail.ps1 oder Join-Parts.ps1
  • Formate. Dies sind optionale format.ps1xml-Formate, um Ihre Ausgabe zu verschönern, die oft im Modulmanifest „FormatsToProcess“ angegeben sind. PSStackExchange.Format.ps1xml
  • Liesmich. Wenn Sie GitHub oder ein anderes gängiges Code-Repository verwenden, ist die Readme.md eine praktische Startseite für Ihr Projekt, die mit einfachem Markdown anstelle von HTML geschrieben wurde
  • AppVeyor-Konfiguration. Wenn Sie eine unterstützte Versionskontrolllösung verwenden, ermöglicht AppVeyor eine einfache und kostenlose kontinuierliche Integration und Bereitstellung für Open-Source-Projekte. AppVeyor.yml

Wir haben unsere Zutaten, schauen wir uns ein Rezept für ein Modul an!

Das Rezept

Wir werden dies in ein paar schnellen Schritten tun:

  • Erstellen Sie ein GitHub-Repository
  • Erstellen Sie das Modul und das Gerüst drumherum
  • Schließen Sie AppVeyor an und veröffentlichen Sie das Modul

Dies kann beim ersten Durchlaufen einige Minuten dauern, aber Sie können dieses Gerüst für jedes Modul, das Sie schreiben, ausleihen und optimieren. Tatsächlich können Sie PowerShell-Hilfsmodule und -Tools finden oder schreiben, die diesen Prozess vereinfachen.

Nach dem Rezept

Es gibt keine wirkliche Reihenfolge, je nachdem, was Sie tun oder nicht integrieren, haben Sie nicht das Gefühl, dass Sie dies buchstabengetreu befolgen müssen.

Erstellen Sie ein GitHub-Repository.

Dies sollte ziemlich einfach sein. Wenn Sie GitHub noch nicht verwendet haben, kann Folgendes hilfreich sein:

  • Erstellen Sie ein Konto auf GitHub, laden Sie GitHub für Windows herunter
  • Erstellen Sie ein neues Repository (wir nennen es PSStackExchange und wählen Sie die MIT-Lizenz)
  • Klonen Sie PSStackExchange mit GitHub für Windows

Kommen wir zum wichtigsten Teil, dem Modul selbst.

Erstellen Sie das Modul und das Gerüst drumherum

So organisiere ich normalerweise meine Module. Wir verwenden PSStackExchange als Beispiel, ersetzen Sie dies durch Ihr eigenes Modul!

    • en-US (oder Gebietsschemas Ihrer Wahl)
      • about_PSStackExchange.help.txt
      • Join-Parts.ps1
      • Get-SEData.ps1
      • Get-SEObject.ps1
      • Search-SEQuestion.ps1
      • Some.Library.dll
      • SomeDependency.exe

      Wenn wir unser Projekt zu GitHub oder einem ähnlichen Code-Repository hinzufügen, fügen wir etwas mehr Gerüst hinzu:

        • PSStackExchange (Modulordner oben beschrieben)
        • Tests
          • PSStackExchange.Tests.ps1
          • Appveyor.Pester.ps1

          Ich habe den folgenden Code durchlaufen lassen, um loszulegen. Normalerweise kopiere ich einfach das Gerüst aus einem anderen Modul, erstelle eine neue GUID in der psd1 und optimiere andere modulspezifische Referenzen.

          In unserem Fall haben wir einige erweiterte Funktionen von Stack Exchange, die hoffentlich einigen Best Practices folgen, einige private Hilfsfunktionen, die der Benutzer nicht sehen soll, und einige andere Dateien, die Tests und Benutzerfreundlichkeit abdecken.

          In PSStackExchange.psm1 laden wir unsere öffentlichen und privaten Funktionen. Wenn ein Modul in Arbeit ist, exportiere ich normalerweise $Public.Basename, um harte Codierungsfunktionen zum Exportieren in psd1 zu vermeiden. Sobald ein Modul freigegeben ist, versuche ich, die öffentlichen Funktionen zu psd1 hinzuzufügen.

          Wenn Sie ein Modul schreiben, sollten Sie erwägen, Pester-Tests dafür zu schreiben. Es ist ziemlich beruhigend, eine Reihe von Tests zu haben, die nach jeder Änderung, die Sie vornehmen, automatisch ausgeführt werden, anstatt davon auszugehen, dass der von Ihnen geschriebene Code korrekt ist, oder zu versuchen, Ihren Code nach jeder Änderung manuell zu testen. Versuch es einmal! Wir fügen einige oberflächliche Tests in PSStackExchange.Tests.ps1 ein.

          Schließlich fügen wir einige Usability-Funktionen hinzu. Wir fügen ein about_PSStackExchange-Hilfethema hinzu, dekorieren unsere Ausgabe mit der Datei PSStackExchange.Format.ps1xml und fügen einige Hinweise zur Installation und Verwendung des Moduls in der README.md hinzu.

          Wir können loslegen! Schauen wir uns an, wie wir dieses Modul veröffentlichen können, damit andere es verwenden und verbessern können.

          Schließen Sie AppVeyor an und veröffentlichen Sie das Modul

          Der Inhalt unseres Moduls ist bereit zur Veröffentlichung. Bevor wir dies veröffentlichen, werden wir die kontinuierliche Integration mit einigen praktischen automatisierten Tests über AppVeyor ermöglichen.

          Zuerst richten wir unser Projekt in AppVeyor ein, indem wir appveyor.yml zum Repository hinzufügen und das GitHub-Projekt zu unserem AppVeyor-Konto hinzufügen. Wir abstrahieren die Aufrufe von Pester in AppVeyor.Pester.ps1, wobei wir einige Ideen von hier verwenden.

          Als Nächstes übertragen wir die Änderungen, die wir auf unserem Computer vorgenommen haben, auf GitHub. Unser Code ist jetzt veröffentlicht und AppVeyor beginnt mit der Ausführung eines Builds.

          Schließlich möchten wir unser Modul in der PowerShell-Galerie veröffentlichen, um Endbenutzern mit PowerShell 5 eine einfache Möglichkeit zu geben, Ihr Modul zu finden und zu installieren. Wir könnten dies anschließen, um es automatisch in AppVeyor auszuführen, aber das ist ein Thema für später.

          • Melden Sie sich mit Ihrem Microsoft-Konto bei PowerShellGallery.com an
          • Holen Sie sich Ihren API-Schlüssel (finden Sie ihn hier)
          • Veröffentlichen Sie Ihr Modul!

          Unser Modul ist jetzt in der PowerShell-Galerie live!

          Wie ich Module schreibe, zusammengefasst

          Wütend! Das war ein langer Beitrag. Glücklicherweise können die meisten dieser Dinge in jedem Modul, das Sie schreiben, wiederverwendet werden. Sehen wir uns die Schritte an:

          • Erstellen Sie ein GitHub-Repository
          • Erstellen Sie das Modul und das Gerüst drumherum
          • Schließen Sie AppVeyor an und veröffentlichen Sie das Modul

          Der erste und letzte Schritt dauern jeweils ein bis zwei Minuten. Das Modul und das Gerüst drumherum können kopiert und optimiert werden, was nur wenige Minuten dauern sollte. Die meiste Zeit werden Sie damit verbringen, die erweiterten Funktionen für das Modul zu schreiben.

          PSStackExchange

          Das Modul ist veröffentlicht und einsatzbereit! Ich bin auf einem anderen Computer mit PowerShell 5 und kann mit ein paar Codezeilen loslegen:

          Hier einige Ausgaben der Beispiele:

          Einpacken

          Das ist alles! Wenn Sie noch keine Module schreiben, sollten Sie dies auf jeden Fall in Betracht ziehen. Auf der Suche nach weiterführender Lektüre? Hier sind ein paar Referenzen, die nützlich sein könnten:

            - Dies ist vom PowerShell Summit 2014, dank Kirk Freiheit - Shameless Plug. Enthält eine Reihe von Referenzen. - Dies gibt einen schönen Überblick über die Vision und Ziele von PowerShell. Wenn Sie Module für den öffentlichen Gebrauch schreiben, sollten Sie dies lesen, um zu vermeiden, dass etwas so Schreckliches wie das PVS-Snapin „PowerShell“ von Citrix veröffentlicht wird.

          Randnotiz für Anbieter

          Das Schreiben von PSStackExchange hat mich daran erinnert, wie wichtig es für Anbieter von Unternehmensprodukten ist, PowerShell-Module bereitzustellen, die die API ihres Produkts umschließen. Trotz einer netten API und einer anständigen Dokumentation war das Schreiben eines funktionsarmen PowerShell-Moduls dafür genauso mühsam wie das Umschließen der Infoblox-API.

          Anbieter: Wenn Ihre Konkurrenz ein PowerShell-Modul bereitstellt und Sie dies nicht tun, besteht eine gute Chance, dass ich auf das Produkt Ihrer Konkurrenz dränge. Dies ist ein großer Mehrwert, wenn Sie es richtig machen und die PowerShell-Konventionen befolgen.

          BEARBEITEN Juli 2016: Aktualisierte Links zu PSStackExchange, um auf einen bestimmten Zeitpunkt zu verweisen. Die aktuelle Version dieses Projekts enthält möglicherweise Aktualisierungen, um Dinge wie PSDeploy zu veranschaulichen.

          Teilen auf

          Erstellen eines PowerShell-Moduls wurde am 06.09.2015 veröffentlicht und zuletzt am 24.07.2016 geändert.


          Erstellen eines PowerShell-Moduls

          Vor einiger Zeit hat jemand erwähnt, dass es Spaß machen könnte, den PowerShell-Modul-Schreibprozess zu dokumentieren. Dies wurde schon früher gemacht, aber ich denke, es würde Spaß machen, meinen eigenen Prozess von der ersten Idee bis zur Veröffentlichung auf der offiziellen PowerShellGallery.com-Site zu veröffentlichen.

          Ich habe vor kurzem das Puzzle Scripting Games vom August auf PowerShell.org besprochen, bei dem es um die Abfrage einer Web-API ging. Es stellt sich heraus, dass dies ein sehr häufiges Bedürfnis ist, und viele der Module, die wir schreiben, abstrahieren diese APIs in praktische PowerShell-Funktionen und -Module.

          Wir gehen davon aus, dass Sie wissen, was ein Modul ist, und dass Sie Erfahrung mit dem Schreiben von PowerShell-Funktionen haben. Wenn nicht, verbringen Sie einige Zeit damit, PowerShell zu lernen, bevor Sie hier fortfahren!

          Dieser Beitrag behandelt meine typische Formel zum Schreiben eines Moduls am Beispiel der Stack Exchange API. Fühlen Sie sich frei, den PSStackExchange-Code selbst zu durchsuchen.

          Warum Module?

          Erweiterte Funktionen bringen Sie mit PowerShell weit. Wenn Sie heute keine Funktionen schreiben, sollten Sie Ihren Code in diese wiederverwendbaren Tools kapseln. Aber… sie haben ihre Grenzen. Hier sind einige Gründe, warum Sie Ihre erweiterten Funktionen in einem Modul bündeln könnten:

          • Code-Organisation vereinfachen
          • Zusammengehörige Funktionen gruppieren
          • Status zwischen Funktionen teilen, aber nicht mit dem Benutzer
          • Verwenden Sie „Hilfsfunktionen“, die dem Benutzer nicht zugänglich gemacht werden sollen
          • Auffindbarkeit verbessern: Find-Module MyModule oder Get-Command -Module MyModule
          • Verteilung vereinfachen: Install-Module MyModule

          In unserem Beispiel organisieren wir eine Reihe von Stack Exchange-Funktionen in einem Modul.

          Das scheint kompliziert!

          Dies von Grund auf neu zu tun, kann ein wenig Zeit in Anspruch nehmen. Glücklicherweise können Sie, sobald Sie ein oder zwei Module schreiben, schnell loslegen, indem Sie es kopieren und ein paar Dateien optimieren. Lassen Sie sich nicht von der Länge dieses Beitrags abschrecken, Ihre eigenen Module zu schreiben, es lohnt sich, ein paar Minuten damit zu verbringen, die Grundlagen zu erlernen!

          Die Zutaten

          Es gibt viele Möglichkeiten, ein Modul zu erstellen, von der Erweiterung einer .psm1-Erweiterung auf eine Datei bis hin zum Kompilieren eines vollwertigen Binärmoduls aus C#. Wir werden hier einen gemeinsamen Mittelweg nehmen und die folgenden Zutaten verwenden:

          • Ein Modul-Manifest. Dies ist eine .psd1-Datei, die Ihr Modul beschreibt. PSStackExchange.psd1
          • Ein Root-Modul. In unserem Fall eine Skriptmodul-.psm1-Datei. Dies ist nur PowerShell-Code, der beim Importieren des Moduls ausgeführt wird. PSStackExchange.psm1
          • Exportierte (öffentliche) Funktionen. Dies sind die erweiterten Funktionen, die ein Endbenutzer von unserem Modul aus ausführen kann. Zum Beispiel Get-SEQuestion.ps1 oder Get-SEObject.ps1
          • Private Funktionen. Dies sind optionale „Hilfsfunktionen“, die wir in unseren exportierten Funktionen verwenden möchten, die der Endbenutzer nicht sehen sollte. Zum Beispiel Add-ObjectDetail.ps1 oder Join-Parts.ps1
          • Formate. Dies sind optionale format.ps1xml-Formate, um Ihre Ausgabe zu verschönern, die oft im Modulmanifest „FormatsToProcess“ angegeben sind. PSStackExchange.Format.ps1xml
          • Liesmich. Wenn Sie GitHub oder ein anderes gängiges Code-Repository verwenden, ist die Readme.md eine praktische Startseite für Ihr Projekt, die mit einfachem Markdown anstelle von HTML geschrieben wurde
          • AppVeyor-Konfiguration. Wenn Sie eine unterstützte Versionskontrolllösung verwenden, ermöglicht AppVeyor eine einfache und kostenlose kontinuierliche Integration und Bereitstellung für Open-Source-Projekte. AppVeyor.yml

          Wir haben unsere Zutaten, schauen wir uns ein Rezept für ein Modul an!

          Das Rezept

          Wir werden dies in ein paar schnellen Schritten tun:

          • Erstellen Sie ein GitHub-Repository
          • Erstellen Sie das Modul und das Gerüst drumherum
          • Schließen Sie AppVeyor an und veröffentlichen Sie das Modul

          Dies kann beim ersten Durchlaufen einige Minuten dauern, aber Sie können dieses Gerüst für jedes Modul, das Sie schreiben, ausleihen und optimieren. Tatsächlich können Sie PowerShell-Hilfsmodule und -Tools finden oder schreiben, die diesen Prozess vereinfachen.

          Nach dem Rezept

          Es gibt keine wirkliche Reihenfolge, je nachdem, was Sie tun oder nicht integrieren, haben Sie nicht das Gefühl, dass Sie dies buchstabengetreu befolgen müssen.

          Erstellen Sie ein GitHub-Repository.

          Dies sollte ziemlich einfach sein. Wenn Sie GitHub noch nicht verwendet haben, kann Folgendes hilfreich sein:

          • Erstellen Sie ein Konto auf GitHub, laden Sie GitHub für Windows herunter
          • Erstellen Sie ein neues Repository (wir nennen es PSStackExchange und wählen Sie die MIT-Lizenz)
          • Klonen Sie PSStackExchange mit GitHub für Windows

          Kommen wir zum wichtigsten Teil, dem Modul selbst.

          Erstellen Sie das Modul und das Gerüst drumherum

          So organisiere ich normalerweise meine Module. Wir verwenden PSStackExchange als Beispiel, ersetzen Sie dies durch Ihr eigenes Modul!

            • en-US (oder Gebietsschemas Ihrer Wahl)
              • about_PSStackExchange.help.txt
              • Join-Parts.ps1
              • Get-SEData.ps1
              • Get-SEObject.ps1
              • Search-SEQuestion.ps1
              • Some.Library.dll
              • SomeDependency.exe

              Wenn wir unser Projekt zu GitHub oder einem ähnlichen Code-Repository hinzufügen, fügen wir etwas mehr Gerüste hinzu:

                • PSStackExchange (oben beschriebener Modulordner)
                • Tests
                  • PSStackExchange.Tests.ps1
                  • Appveyor.Pester.ps1

                  Ich habe den folgenden Code durchlaufen lassen, um loszulegen. Normalerweise kopiere ich einfach das Gerüst aus einem anderen Modul, erstelle eine neue GUID in der psd1 und optimiere andere modulspezifische Referenzen.

                  In unserem Fall haben wir einige erweiterte Funktionen von Stack Exchange, die hoffentlich einigen Best Practices folgen, einige private Hilfsfunktionen, die der Benutzer nicht sehen soll, und einige andere Dateien, die Tests und Benutzerfreundlichkeit abdecken.

                  In PSStackExchange.psm1 laden wir unsere öffentlichen und privaten Funktionen. Wenn ein Modul in Arbeit ist, exportiere ich normalerweise $Public.Basename, um harte Codierungsfunktionen zum Exportieren in psd1 zu vermeiden. Sobald ein Modul freigegeben ist, versuche ich, die öffentlichen Funktionen zu psd1 hinzuzufügen.

                  Wenn Sie ein Modul schreiben, sollten Sie erwägen, Pester-Tests dafür zu schreiben. Es ist ziemlich beruhigend, eine Reihe von Tests zu haben, die nach jeder Änderung, die Sie vornehmen, automatisch ausgeführt werden, anstatt davon auszugehen, dass der von Ihnen geschriebene Code korrekt ist, oder zu versuchen, Ihren Code nach jeder Änderung manuell zu testen. Versuch es einmal! Wir fügen einige oberflächliche Tests in PSStackExchange.Tests.ps1 ein.

                  Schließlich fügen wir einige Usability-Funktionen hinzu. Wir fügen ein about_PSStackExchange-Hilfethema hinzu, dekorieren unsere Ausgabe mit der Datei PSStackExchange.Format.ps1xml und fügen einige Hinweise zur Installation und Verwendung des Moduls in der README.md hinzu.

                  Wir können loslegen! Schauen wir uns an, wie wir dieses Modul veröffentlichen können, damit andere es verwenden und verbessern können.

                  Schließen Sie AppVeyor an und veröffentlichen Sie das Modul

                  Der Inhalt unseres Moduls ist bereit zur Veröffentlichung. Bevor wir dies veröffentlichen, werden wir die kontinuierliche Integration mit einigen praktischen automatisierten Tests über AppVeyor ermöglichen.

                  Zuerst richten wir unser Projekt in AppVeyor ein, indem wir appveyor.yml zum Repository hinzufügen und das GitHub-Projekt zu unserem AppVeyor-Konto hinzufügen. Wir abstrahieren die Aufrufe von Pester in AppVeyor.Pester.ps1, wobei wir einige Ideen von hier verwenden.

                  Als Nächstes übertragen wir die Änderungen, die wir auf unserem Computer vorgenommen haben, auf GitHub. Unser Code ist jetzt veröffentlicht und AppVeyor beginnt mit der Ausführung eines Builds.

                  Schließlich möchten wir unser Modul in der PowerShell-Galerie veröffentlichen, um Endbenutzern mit PowerShell 5 eine einfache Möglichkeit zu geben, Ihr Modul zu finden und zu installieren. Wir könnten dies anschließen, um es automatisch in AppVeyor auszuführen, aber das ist ein Thema für später.

                  • Melden Sie sich mit Ihrem Microsoft-Konto bei PowerShellGallery.com an
                  • Holen Sie sich Ihren API-Schlüssel (finden Sie ihn hier)
                  • Veröffentlichen Sie Ihr Modul!

                  Unser Modul ist jetzt live in der PowerShell-Galerie!

                  Wie ich Module schreibe, zusammengefasst

                  Wütend! Das war ein langer Beitrag. Glücklicherweise können die meisten dieser Dinge in jedem Modul, das Sie schreiben, wiederverwendet werden. Sehen wir uns die Schritte an:

                  • Erstellen Sie ein GitHub-Repository
                  • Erstellen Sie das Modul und das Gerüst drumherum
                  • Schließen Sie AppVeyor an und veröffentlichen Sie das Modul

                  Der erste und letzte Schritt dauern jeweils ein bis zwei Minuten. Das Modul und das Gerüst drumherum können kopiert und optimiert werden, was nur wenige Minuten dauern sollte. Die meiste Zeit werden Sie damit verbringen, die erweiterten Funktionen für das Modul zu schreiben.

                  PSStackExchange

                  Das Modul ist veröffentlicht und einsatzbereit! Ich bin auf einem anderen Computer mit PowerShell 5 und kann mit ein paar Codezeilen loslegen:

                  Hier einige Ausgaben der Beispiele:

                  Einpacken

                  Das ist alles! Wenn Sie noch keine Module schreiben, sollten Sie dies auf jeden Fall in Betracht ziehen. Auf der Suche nach weiterführender Lektüre? Hier sind ein paar Referenzen, die nützlich sein könnten:

                    - Dies ist vom PowerShell Summit 2014, dank Kirk Freiheit - Shameless Plug. Enthält eine Reihe von Referenzen. - Dies gibt einen schönen Überblick über die Vision und Ziele von PowerShell. Wenn Sie Module für den öffentlichen Gebrauch schreiben, sollten Sie dies lesen, um zu vermeiden, dass etwas so Schreckliches wie das PVS-Snapin „PowerShell“ von Citrix veröffentlicht wird.

                  Randnotiz für Anbieter

                  Das Schreiben von PSStackExchange hat mich daran erinnert, wie wichtig es für Anbieter von Unternehmensprodukten ist, PowerShell-Module bereitzustellen, die die API ihres Produkts umschließen. Trotz einer netten API und einer anständigen Dokumentation war das Schreiben eines funktionsarmen PowerShell-Moduls dafür genauso mühsam wie das Umschließen der Infoblox-API.

                  Anbieter: Wenn Ihre Konkurrenz ein PowerShell-Modul bereitstellt und Sie dies nicht tun, besteht eine gute Chance, dass ich auf das Produkt Ihrer Konkurrenz dränge. Dies ist ein großer Mehrwert, wenn Sie es richtig machen und die PowerShell-Konventionen befolgen.

                  BEARBEITEN Juli 2016: Aktualisierte Links zu PSStackExchange, um auf einen bestimmten Zeitpunkt zu verweisen. Die aktuelle Version dieses Projekts enthält möglicherweise Aktualisierungen, um Dinge wie PSDeploy zu veranschaulichen.

                  Teilen auf

                  Erstellen eines PowerShell-Moduls wurde am 06.09.2015 veröffentlicht und zuletzt am 24.07.2016 geändert.


                  Erstellen eines PowerShell-Moduls

                  Vor einiger Zeit hat jemand erwähnt, dass es Spaß machen könnte, den PowerShell-Modul-Schreibprozess zu dokumentieren. Dies wurde schon früher gemacht, aber ich denke, es würde Spaß machen, meinen eigenen Prozess von der ersten Idee bis zur Veröffentlichung auf der offiziellen PowerShellGallery.com-Site zu veröffentlichen.

                  Ich habe vor kurzem das Puzzle Scripting Games vom August auf PowerShell.org besprochen, bei dem es um die Abfrage einer Web-API ging. Es stellt sich heraus, dass dies ein sehr häufiges Bedürfnis ist, und viele der Module, die wir schreiben, abstrahieren diese APIs in praktische PowerShell-Funktionen und -Module.

                  Wir gehen davon aus, dass Sie wissen, was ein Modul ist, und dass Sie Erfahrung mit dem Schreiben von PowerShell-Funktionen haben. Wenn nicht, verbringen Sie einige Zeit damit, PowerShell zu lernen, bevor Sie hier fortfahren!

                  Dieser Beitrag behandelt meine typische Formel zum Schreiben eines Moduls am Beispiel der Stack Exchange API. Fühlen Sie sich frei, den PSStackExchange-Code selbst zu durchsuchen.

                  Warum Module?

                  Erweiterte Funktionen bringen Sie mit PowerShell weit. Wenn Sie heute keine Funktionen schreiben, sollten Sie Ihren Code in diese wiederverwendbaren Tools kapseln. Aber… sie haben ihre Grenzen. Hier sind einige Gründe, warum Sie Ihre erweiterten Funktionen in einem Modul bündeln könnten:

                  • Code-Organisation vereinfachen
                  • Zusammengehörige Funktionen gruppieren
                  • Status zwischen Funktionen teilen, aber nicht mit dem Benutzer
                  • Verwenden Sie „Hilfsfunktionen“, die dem Benutzer nicht zugänglich gemacht werden sollen
                  • Auffindbarkeit verbessern: Find-Module MyModule oder Get-Command -Module MyModule
                  • Verteilung vereinfachen: Install-Module MyModule

                  In unserem Beispiel organisieren wir eine Reihe von Stack Exchange-Funktionen in einem Modul.

                  Das scheint kompliziert!

                  Dies von Grund auf neu zu tun, kann ein wenig Zeit in Anspruch nehmen. Glücklicherweise können Sie, sobald Sie ein oder zwei Module schreiben, schnell loslegen, indem Sie es kopieren und ein paar Dateien optimieren. Lassen Sie sich nicht von der Länge dieses Beitrags abschrecken, Ihre eigenen Module zu schreiben, es lohnt sich, ein paar Minuten damit zu verbringen, die Grundlagen zu erlernen!

                  Die Zutaten

                  Es gibt viele Möglichkeiten, ein Modul zu erstellen, von der Erweiterung einer .psm1-Erweiterung auf eine Datei bis hin zum Kompilieren eines vollwertigen Binärmoduls aus C#. Wir werden hier einen gemeinsamen Mittelweg nehmen und die folgenden Zutaten verwenden:

                  • Ein Modul-Manifest. Dies ist eine .psd1-Datei, die Ihr Modul beschreibt. PSStackExchange.psd1
                  • Ein Root-Modul. In unserem Fall eine Skriptmodul-.psm1-Datei. Dies ist nur PowerShell-Code, der beim Importieren des Moduls ausgeführt wird. PSStackExchange.psm1
                  • Exportierte (öffentliche) Funktionen. Dies sind die erweiterten Funktionen, die ein Endbenutzer von unserem Modul aus ausführen kann. Zum Beispiel Get-SEQuestion.ps1 oder Get-SEObject.ps1
                  • Private Funktionen. Dies sind optionale „Hilfsfunktionen“, die wir in unseren exportierten Funktionen verwenden möchten, die der Endbenutzer nicht sehen sollte. Zum Beispiel Add-ObjectDetail.ps1 oder Join-Parts.ps1
                  • Formate. Dies sind optionale format.ps1xml-Formate, um Ihre Ausgabe zu verschönern, die oft im Modulmanifest „FormatsToProcess“ angegeben sind. PSStackExchange.Format.ps1xml
                  • Liesmich. Wenn Sie GitHub oder ein anderes gängiges Code-Repository verwenden, ist die Readme.md eine praktische Startseite für Ihr Projekt, die mit einfachem Markdown anstelle von HTML geschrieben wurde
                  • AppVeyor-Konfiguration. Wenn Sie eine unterstützte Versionskontrolllösung verwenden, ermöglicht AppVeyor eine einfache und kostenlose kontinuierliche Integration und Bereitstellung für Open-Source-Projekte. AppVeyor.yml

                  Wir haben unsere Zutaten, schauen wir uns ein Rezept für ein Modul an!

                  Das Rezept

                  Wir werden dies in ein paar schnellen Schritten tun:

                  • Erstellen Sie ein GitHub-Repository
                  • Erstellen Sie das Modul und das Gerüst drumherum
                  • Schließen Sie AppVeyor an und veröffentlichen Sie das Modul

                  Dies kann beim ersten Durchlaufen einige Minuten dauern, aber Sie können dieses Gerüst für jedes Modul, das Sie schreiben, ausleihen und optimieren. Tatsächlich können Sie PowerShell-Hilfsmodule und -Tools finden oder schreiben, die diesen Prozess vereinfachen.

                  Nach dem Rezept

                  Es gibt keine wirkliche Reihenfolge, je nachdem, was Sie tun oder nicht integrieren, haben Sie nicht das Gefühl, dass Sie dies buchstabengetreu befolgen müssen.

                  Erstellen Sie ein GitHub-Repository.

                  Dies sollte ziemlich einfach sein. Wenn Sie GitHub noch nicht verwendet haben, kann Folgendes hilfreich sein:

                  • Erstellen Sie ein Konto auf GitHub, laden Sie GitHub für Windows herunter
                  • Erstellen Sie ein neues Repository (wir nennen es PSStackExchange und wählen Sie die MIT-Lizenz)
                  • Klonen Sie PSStackExchange mit GitHub für Windows

                  Kommen wir zum wichtigsten Teil, dem Modul selbst.

                  Erstellen Sie das Modul und das Gerüst drumherum

                  So organisiere ich normalerweise meine Module. Wir verwenden PSStackExchange als Beispiel, ersetzen Sie dies durch Ihr eigenes Modul!

                    • en-US (oder Gebietsschemas Ihrer Wahl)
                      • about_PSStackExchange.help.txt
                      • Join-Parts.ps1
                      • Get-SEData.ps1
                      • Get-SEObject.ps1
                      • Search-SEQuestion.ps1
                      • Some.Library.dll
                      • SomeDependency.exe

                      Wenn wir unser Projekt zu GitHub oder einem ähnlichen Code-Repository hinzufügen, fügen wir etwas mehr Gerüste hinzu:

                        • PSStackExchange (oben beschriebener Modulordner)
                        • Tests
                          • PSStackExchange.Tests.ps1
                          • Appveyor.Pester.ps1

                          Ich habe den folgenden Code durchlaufen lassen, um loszulegen. Normalerweise kopiere ich einfach das Gerüst aus einem anderen Modul, erstelle eine neue GUID in der psd1 und optimiere andere modulspezifische Referenzen.

                          In unserem Fall haben wir einige erweiterte Funktionen von Stack Exchange, die hoffentlich einigen Best Practices folgen, einige private Hilfsfunktionen, die der Benutzer nicht sehen soll, und einige andere Dateien, die Tests und Benutzerfreundlichkeit abdecken.

                          In PSStackExchange.psm1 laden wir unsere öffentlichen und privaten Funktionen. Wenn ein Modul in Arbeit ist, exportiere ich normalerweise $Public.Basename, um harte Codierungsfunktionen zum Exportieren in psd1 zu vermeiden. Sobald ein Modul freigegeben ist, versuche ich, die öffentlichen Funktionen zu psd1 hinzuzufügen.

                          Wenn Sie ein Modul schreiben, sollten Sie erwägen, Pester-Tests dafür zu schreiben. Es ist ziemlich beruhigend, eine Reihe von Tests zu haben, die nach jeder Änderung, die Sie vornehmen, automatisch ausgeführt werden, anstatt davon auszugehen, dass der von Ihnen geschriebene Code korrekt ist, oder zu versuchen, Ihren Code nach jeder Änderung manuell zu testen. Versuch es einmal! Wir fügen einige oberflächliche Tests in PSStackExchange.Tests.ps1 ein.

                          Schließlich fügen wir einige Usability-Funktionen hinzu. Wir fügen ein about_PSStackExchange-Hilfethema hinzu, dekorieren unsere Ausgabe mit der Datei PSStackExchange.Format.ps1xml und fügen einige Hinweise zur Installation und Verwendung des Moduls in der README.md hinzu.

                          Wir können loslegen! Schauen wir uns an, wie wir dieses Modul veröffentlichen können, damit andere es verwenden und verbessern können.

                          Schließen Sie AppVeyor an und veröffentlichen Sie das Modul

                          Der Inhalt unseres Moduls ist bereit zur Veröffentlichung. Bevor wir dies veröffentlichen, werden wir die kontinuierliche Integration mit einigen praktischen automatisierten Tests über AppVeyor ermöglichen.

                          Zuerst richten wir unser Projekt in AppVeyor ein, indem wir appveyor.yml zum Repository hinzufügen und das GitHub-Projekt zu unserem AppVeyor-Konto hinzufügen. Wir abstrahieren die Aufrufe von Pester in AppVeyor.Pester.ps1, wobei wir einige Ideen von hier verwenden.

                          Als Nächstes übertragen wir die Änderungen, die wir auf unserem Computer vorgenommen haben, auf GitHub. Unser Code ist jetzt veröffentlicht und AppVeyor beginnt mit der Ausführung eines Builds.

                          Schließlich möchten wir unser Modul in der PowerShell-Galerie veröffentlichen, um Endbenutzern mit PowerShell 5 eine einfache Möglichkeit zu geben, Ihr Modul zu finden und zu installieren. Wir könnten dies anschließen, um es automatisch in AppVeyor auszuführen, aber das ist ein Thema für später.

                          • Melden Sie sich mit Ihrem Microsoft-Konto bei PowerShellGallery.com an
                          • Holen Sie sich Ihren API-Schlüssel (finden Sie ihn hier)
                          • Veröffentlichen Sie Ihr Modul!

                          Unser Modul ist jetzt live in der PowerShell-Galerie!

                          Wie ich Module schreibe, zusammengefasst

                          Wütend! Das war ein langer Beitrag. Glücklicherweise können die meisten dieser Dinge in jedem Modul, das Sie schreiben, wiederverwendet werden. Sehen wir uns die Schritte an:

                          • Erstellen Sie ein GitHub-Repository
                          • Erstellen Sie das Modul und das Gerüst drumherum
                          • Schließen Sie AppVeyor an und veröffentlichen Sie das Modul

                          Der erste und letzte Schritt dauern jeweils ein bis zwei Minuten. Das Modul und das Gerüst drumherum können kopiert und optimiert werden, was nur wenige Minuten dauern sollte. Die meiste Zeit werden Sie damit verbringen, die erweiterten Funktionen für das Modul zu schreiben.

                          PSStackExchange

                          Das Modul ist veröffentlicht und einsatzbereit! Ich bin auf einem anderen Computer mit PowerShell 5 und kann mit ein paar Codezeilen loslegen:

                          Hier einige Ausgaben der Beispiele:

                          Einpacken

                          Das ist alles! Wenn Sie noch keine Module schreiben, sollten Sie dies auf jeden Fall in Betracht ziehen. Auf der Suche nach weiterführender Lektüre? Hier sind ein paar Referenzen, die nützlich sein könnten:

                            - Dies ist vom PowerShell Summit 2014, dank Kirk Freiheit - Shameless Plug. Enthält eine Reihe von Referenzen. - Dies gibt einen schönen Überblick über die Vision und Ziele von PowerShell. Wenn Sie Module für den öffentlichen Gebrauch schreiben, sollten Sie dies lesen, um zu vermeiden, dass etwas so Schreckliches wie das PVS-Snapin „PowerShell“ von Citrix veröffentlicht wird.

                          Randnotiz für Anbieter

                          Das Schreiben von PSStackExchange hat mich daran erinnert, wie wichtig es für Anbieter von Unternehmensprodukten ist, PowerShell-Module bereitzustellen, die die API ihres Produkts umschließen. Trotz einer netten API und einer anständigen Dokumentation war das Schreiben eines funktionsarmen PowerShell-Moduls dafür genauso mühsam wie das Umschließen der Infoblox-API.

                          Anbieter: Wenn Ihre Konkurrenz ein PowerShell-Modul bereitstellt und Sie dies nicht tun, besteht eine gute Chance, dass ich auf das Produkt Ihrer Konkurrenz dränge. Dies ist ein großer Mehrwert, wenn Sie es richtig machen und die PowerShell-Konventionen befolgen.

                          BEARBEITEN Juli 2016: Aktualisierte Links zu PSStackExchange, um auf einen bestimmten Zeitpunkt zu verweisen. Die aktuelle Version dieses Projekts enthält möglicherweise Aktualisierungen, um Dinge wie PSDeploy zu veranschaulichen.

                          Teilen auf

                          Erstellen eines PowerShell-Moduls wurde am 06.09.2015 veröffentlicht und zuletzt am 24.07.2016 geändert.


                          Erstellen eines PowerShell-Moduls

                          Vor einiger Zeit hat jemand erwähnt, dass es Spaß machen könnte, den PowerShell-Modul-Schreibprozess zu dokumentieren. Dies wurde schon früher gemacht, aber ich denke, es würde Spaß machen, meinen eigenen Prozess von der ersten Idee bis zur Veröffentlichung auf der offiziellen PowerShellGallery.com-Site zu veröffentlichen.

                          Ich habe vor kurzem das Puzzle Scripting Games vom August auf PowerShell.org besprochen, bei dem es um die Abfrage einer Web-API ging. Es stellt sich heraus, dass dies ein sehr häufiges Bedürfnis ist, und viele der Module, die wir schreiben, abstrahieren diese APIs in praktische PowerShell-Funktionen und -Module.

                          Wir gehen davon aus, dass Sie wissen, was ein Modul ist, und dass Sie Erfahrung mit dem Schreiben von PowerShell-Funktionen haben. Wenn nicht, verbringen Sie einige Zeit damit, PowerShell zu lernen, bevor Sie hier fortfahren!

                          Dieser Beitrag behandelt meine typische Formel zum Schreiben eines Moduls am Beispiel der Stack Exchange API. Fühlen Sie sich frei, den PSStackExchange-Code selbst zu durchsuchen.

                          Warum Module?

                          Erweiterte Funktionen bringen Sie mit PowerShell weit. Wenn Sie heute keine Funktionen schreiben, sollten Sie Ihren Code in diese wiederverwendbaren Tools kapseln. Aber… sie haben ihre Grenzen. Hier sind einige Gründe, warum Sie Ihre erweiterten Funktionen in einem Modul bündeln könnten:

                          • Code-Organisation vereinfachen
                          • Zusammengehörige Funktionen gruppieren
                          • Status zwischen Funktionen teilen, aber nicht mit dem Benutzer
                          • Verwenden Sie „Hilfsfunktionen“, die dem Benutzer nicht zugänglich gemacht werden sollen
                          • Auffindbarkeit verbessern: Find-Module MyModule oder Get-Command -Module MyModule
                          • Verteilung vereinfachen: Install-Module MyModule

                          In unserem Beispiel organisieren wir eine Reihe von Stack Exchange-Funktionen in einem Modul.

                          Das scheint kompliziert!

                          Dies von Grund auf neu zu tun, kann ein wenig Zeit in Anspruch nehmen. Glücklicherweise können Sie, sobald Sie ein oder zwei Module schreiben, schnell loslegen, indem Sie es kopieren und ein paar Dateien optimieren. Lassen Sie sich nicht von der Länge dieses Beitrags abschrecken, Ihre eigenen Module zu schreiben, es lohnt sich, ein paar Minuten damit zu verbringen, die Grundlagen zu erlernen!

                          Die Zutaten

                          Es gibt viele Möglichkeiten, ein Modul zu erstellen, von der Erweiterung einer .psm1-Erweiterung auf eine Datei bis hin zum Kompilieren eines vollwertigen Binärmoduls aus C#. Wir werden hier einen gemeinsamen Mittelweg nehmen und die folgenden Zutaten verwenden:

                          • Ein Modul-Manifest. Dies ist eine .psd1-Datei, die Ihr Modul beschreibt. PSStackExchange.psd1
                          • Ein Root-Modul. In unserem Fall eine Skriptmodul-.psm1-Datei. Dies ist nur PowerShell-Code, der beim Importieren des Moduls ausgeführt wird. PSStackExchange.psm1
                          • Exportierte (öffentliche) Funktionen. Dies sind die erweiterten Funktionen, die ein Endbenutzer von unserem Modul aus ausführen kann. Zum Beispiel Get-SEQuestion.ps1 oder Get-SEObject.ps1
                          • Private Funktionen. Dies sind optionale „Hilfsfunktionen“, die wir in unseren exportierten Funktionen verwenden möchten, die der Endbenutzer nicht sehen sollte. Zum Beispiel Add-ObjectDetail.ps1 oder Join-Parts.ps1
                          • Formate. Dies sind optionale format.ps1xml-Formate, um Ihre Ausgabe zu verschönern, die oft im Modulmanifest „FormatsToProcess“ angegeben sind. PSStackExchange.Format.ps1xml
                          • Liesmich. Wenn Sie GitHub oder ein anderes gängiges Code-Repository verwenden, ist die Readme.md eine praktische Startseite für Ihr Projekt, die mit einfachem Markdown anstelle von HTML geschrieben wurde
                          • AppVeyor-Konfiguration. Wenn Sie eine unterstützte Versionskontrolllösung verwenden, ermöglicht AppVeyor eine einfache und kostenlose kontinuierliche Integration und Bereitstellung für Open-Source-Projekte. AppVeyor.yml

                          Wir haben unsere Zutaten, schauen wir uns ein Rezept für ein Modul an!

                          Das Rezept

                          Wir werden dies in ein paar schnellen Schritten tun:

                          • Erstellen Sie ein GitHub-Repository
                          • Erstellen Sie das Modul und das Gerüst drumherum
                          • Schließen Sie AppVeyor an und veröffentlichen Sie das Modul

                          Dies kann beim ersten Durchlaufen einige Minuten dauern, aber Sie können dieses Gerüst für jedes Modul, das Sie schreiben, ausleihen und optimieren. Tatsächlich können Sie PowerShell-Hilfsmodule und -Tools finden oder schreiben, die diesen Prozess vereinfachen.

                          Nach dem Rezept

                          Es gibt keine wirkliche Reihenfolge, je nachdem, was Sie tun oder nicht integrieren, haben Sie nicht das Gefühl, dass Sie dies buchstabengetreu befolgen müssen.

                          Erstellen Sie ein GitHub-Repository.

                          Dies sollte ziemlich einfach sein. Wenn Sie GitHub noch nicht verwendet haben, kann Folgendes hilfreich sein:

                          • Erstellen Sie ein Konto auf GitHub, laden Sie GitHub für Windows herunter
                          • Erstellen Sie ein neues Repository (wir nennen es PSStackExchange und wählen Sie die MIT-Lizenz)
                          • Klonen Sie PSStackExchange mit GitHub für Windows

                          Kommen wir zum wichtigsten Teil, dem Modul selbst.

                          Erstellen Sie das Modul und das Gerüst drumherum

                          So organisiere ich normalerweise meine Module. Wir verwenden PSStackExchange als Beispiel, ersetzen Sie dies durch Ihr eigenes Modul!

                            • en-US (oder Gebietsschemas Ihrer Wahl)
                              • about_PSStackExchange.help.txt
                              • Join-Parts.ps1
                              • Get-SEData.ps1
                              • Get-SEObject.ps1
                              • Search-SEQuestion.ps1
                              • Some.Library.dll
                              • SomeDependency.exe

                              Wenn wir unser Projekt zu GitHub oder einem ähnlichen Code-Repository hinzufügen, fügen wir etwas mehr Gerüste hinzu:

                                • PSStackExchange (oben beschriebener Modulordner)
                                • Tests
                                  • PSStackExchange.Tests.ps1
                                  • Appveyor.Pester.ps1

                                  Ich habe den folgenden Code durchlaufen lassen, um loszulegen. Normalerweise kopiere ich einfach das Gerüst aus einem anderen Modul, erstelle eine neue GUID in der psd1 und optimiere andere modulspezifische Referenzen.

                                  In unserem Fall haben wir einige erweiterte Funktionen von Stack Exchange, die hoffentlich einigen Best Practices folgen, einige private Hilfsfunktionen, die der Benutzer nicht sehen soll, und einige andere Dateien, die Tests und Benutzerfreundlichkeit abdecken.

                                  In PSStackExchange.psm1 laden wir unsere öffentlichen und privaten Funktionen. Wenn ein Modul in Arbeit ist, exportiere ich normalerweise $Public.Basename, um harte Codierungsfunktionen zum Exportieren in psd1 zu vermeiden. Sobald ein Modul freigegeben ist, versuche ich, die öffentlichen Funktionen zu psd1 hinzuzufügen.

                                  Wenn Sie ein Modul schreiben, sollten Sie erwägen, Pester-Tests dafür zu schreiben. Es ist ziemlich beruhigend, eine Reihe von Tests zu haben, die nach jeder Änderung, die Sie vornehmen, automatisch ausgeführt werden, anstatt davon auszugehen, dass der von Ihnen geschriebene Code korrekt ist, oder zu versuchen, Ihren Code nach jeder Änderung manuell zu testen. Versuch es einmal! Wir fügen einige oberflächliche Tests in PSStackExchange.Tests.ps1 ein.

                                  Schließlich fügen wir einige Usability-Funktionen hinzu. Wir fügen ein about_PSStackExchange-Hilfethema hinzu, dekorieren unsere Ausgabe mit der Datei PSStackExchange.Format.ps1xml und fügen einige Hinweise zur Installation und Verwendung des Moduls in der README.md hinzu.

                                  Wir können loslegen! Schauen wir uns an, wie wir dieses Modul veröffentlichen können, damit andere es verwenden und verbessern können.

                                  Schließen Sie AppVeyor an und veröffentlichen Sie das Modul

                                  Der Inhalt unseres Moduls ist bereit zur Veröffentlichung. Bevor wir dies veröffentlichen, werden wir die kontinuierliche Integration mit einigen praktischen automatisierten Tests über AppVeyor ermöglichen.

                                  Zuerst richten wir unser Projekt in AppVeyor ein, indem wir appveyor.yml zum Repository hinzufügen und das GitHub-Projekt zu unserem AppVeyor-Konto hinzufügen. Wir abstrahieren die Aufrufe von Pester in AppVeyor.Pester.ps1, wobei wir einige Ideen von hier verwenden.

                                  Als Nächstes übertragen wir die Änderungen, die wir auf unserem Computer vorgenommen haben, auf GitHub. Unser Code ist jetzt veröffentlicht und AppVeyor beginnt mit der Ausführung eines Builds.

                                  Schließlich möchten wir unser Modul in der PowerShell-Galerie veröffentlichen, um Endbenutzern mit PowerShell 5 eine einfache Möglichkeit zu geben, Ihr Modul zu finden und zu installieren. Wir könnten dies anschließen, um es automatisch in AppVeyor auszuführen, aber das ist ein Thema für später.

                                  • Melden Sie sich mit Ihrem Microsoft-Konto bei PowerShellGallery.com an
                                  • Holen Sie sich Ihren API-Schlüssel (finden Sie ihn hier)
                                  • Veröffentlichen Sie Ihr Modul!

                                  Unser Modul ist jetzt live in der PowerShell-Galerie!

                                  Wie ich Module schreibe, zusammengefasst

                                  Wütend! Das war ein langer Beitrag. Glücklicherweise können die meisten dieser Dinge in jedem Modul, das Sie schreiben, wiederverwendet werden. Sehen wir uns die Schritte an:

                                  • Erstellen Sie ein GitHub-Repository
                                  • Erstellen Sie das Modul und das Gerüst drumherum
                                  • Schließen Sie AppVeyor an und veröffentlichen Sie das Modul

                                  Der erste und letzte Schritt dauern jeweils ein bis zwei Minuten. Das Modul und das Gerüst drumherum können kopiert und optimiert werden, was nur wenige Minuten dauern sollte. Die meiste Zeit werden Sie damit verbringen, die erweiterten Funktionen für das Modul zu schreiben.

                                  PSStackExchange

                                  Das Modul ist veröffentlicht und einsatzbereit! Ich bin auf einem anderen Computer mit PowerShell 5 und kann mit ein paar Codezeilen loslegen:

                                  Hier einige Ausgaben der Beispiele:

                                  Einpacken

                                  Das ist alles! Wenn Sie noch keine Module schreiben, sollten Sie dies auf jeden Fall in Betracht ziehen. Auf der Suche nach weiterführender Lektüre? Hier sind ein paar Referenzen, die nützlich sein könnten:

                                    - Dies ist vom PowerShell Summit 2014, dank Kirk Freiheit - Shameless Plug. Enthält eine Reihe von Referenzen. - Dies gibt einen schönen Überblick über die Vision und Ziele von PowerShell. Wenn Sie Module für den öffentlichen Gebrauch schreiben, sollten Sie dies lesen, um zu vermeiden, dass etwas so Schreckliches wie das PVS-Snapin „PowerShell“ von Citrix veröffentlicht wird.

                                  Randnotiz für Anbieter

                                  Das Schreiben von PSStackExchange hat mich daran erinnert, wie wichtig es für Anbieter von Unternehmensprodukten ist, PowerShell-Module bereitzustellen, die die API ihres Produkts umschließen. Trotz einer netten API und einer anständigen Dokumentation war das Schreiben eines funktionsarmen PowerShell-Moduls dafür genauso mühsam wie das Umschließen der Infoblox-API.

                                  Anbieter: Wenn Ihre Konkurrenz ein PowerShell-Modul bereitstellt und Sie dies nicht tun, besteht eine gute Chance, dass ich auf das Produkt Ihrer Konkurrenz dränge. Dies ist ein großer Mehrwert, wenn Sie es richtig machen und die PowerShell-Konventionen befolgen.

                                  BEARBEITEN Juli 2016: Aktualisierte Links zu PSStackExchange, um auf einen bestimmten Zeitpunkt zu verweisen. Die aktuelle Version dieses Projekts enthält möglicherweise Aktualisierungen, um Dinge wie PSDeploy zu veranschaulichen.

                                  Teilen auf

                                  Erstellen eines PowerShell-Moduls wurde am 06.09.2015 veröffentlicht und zuletzt am 24.07.2016 geändert.


                                  Erstellen eines PowerShell-Moduls

                                  Vor einiger Zeit hat jemand erwähnt, dass es Spaß machen könnte, den PowerShell-Modul-Schreibprozess zu dokumentieren. Dies wurde schon früher gemacht, aber ich denke, es würde Spaß machen, meinen eigenen Prozess von der ersten Idee bis zur Veröffentlichung auf der offiziellen PowerShellGallery.com-Site zu veröffentlichen.

                                  Ich habe vor kurzem das Puzzle Scripting Games vom August auf PowerShell.org besprochen, bei dem es um die Abfrage einer Web-API ging. Es stellt sich heraus, dass dies ein sehr häufiges Bedürfnis ist, und viele der Module, die wir schreiben, abstrahieren diese APIs in praktische PowerShell-Funktionen und -Module.

                                  Wir gehen davon aus, dass Sie wissen, was ein Modul ist, und dass Sie Erfahrung mit dem Schreiben von PowerShell-Funktionen haben. Wenn nicht, verbringen Sie einige Zeit damit, PowerShell zu lernen, bevor Sie hier fortfahren!

                                  Dieser Beitrag behandelt meine typische Formel zum Schreiben eines Moduls am Beispiel der Stack Exchange API. Fühlen Sie sich frei, den PSStackExchange-Code selbst zu durchsuchen.

                                  Warum Module?

                                  Erweiterte Funktionen bringen Sie mit PowerShell weit. Wenn Sie heute keine Funktionen schreiben, sollten Sie Ihren Code in diese wiederverwendbaren Tools kapseln. Aber… sie haben ihre Grenzen. Hier sind einige Gründe, warum Sie Ihre erweiterten Funktionen in einem Modul bündeln könnten:

                                  • Code-Organisation vereinfachen
                                  • Zusammengehörige Funktionen gruppieren
                                  • Status zwischen Funktionen teilen, aber nicht mit dem Benutzer
                                  • Verwenden Sie „Hilfsfunktionen“, die dem Benutzer nicht zugänglich gemacht werden sollen
                                  • Auffindbarkeit verbessern: Find-Module MyModule oder Get-Command -Module MyModule
                                  • Verteilung vereinfachen: Install-Module MyModule

                                  In unserem Beispiel organisieren wir eine Reihe von Stack Exchange-Funktionen in einem Modul.

                                  Das scheint kompliziert!

                                  Dies von Grund auf neu zu tun, kann ein wenig Zeit in Anspruch nehmen. Glücklicherweise können Sie, sobald Sie ein oder zwei Module schreiben, schnell loslegen, indem Sie es kopieren und ein paar Dateien optimieren. Lassen Sie sich nicht von der Länge dieses Beitrags abschrecken, Ihre eigenen Module zu schreiben, es lohnt sich, ein paar Minuten damit zu verbringen, die Grundlagen zu erlernen!

                                  Die Zutaten

                                  Es gibt viele Möglichkeiten, ein Modul zu erstellen, von der Erweiterung einer .psm1-Erweiterung auf eine Datei bis hin zum Kompilieren eines vollwertigen Binärmoduls aus C#. Wir werden hier einen gemeinsamen Mittelweg nehmen und die folgenden Zutaten verwenden:

                                  • Ein Modul-Manifest. Dies ist eine .psd1-Datei, die Ihr Modul beschreibt. PSStackExchange.psd1
                                  • Ein Root-Modul. In unserem Fall eine Skriptmodul-.psm1-Datei. Dies ist nur PowerShell-Code, der beim Importieren des Moduls ausgeführt wird. PSStackExchange.psm1
                                  • Exportierte (öffentliche) Funktionen. Dies sind die erweiterten Funktionen, die ein Endbenutzer von unserem Modul aus ausführen kann. Zum Beispiel Get-SEQuestion.ps1 oder Get-SEObject.ps1
                                  • Private Funktionen. Dies sind optionale „Hilfsfunktionen“, die wir in unseren exportierten Funktionen verwenden möchten, die der Endbenutzer nicht sehen sollte. Zum Beispiel Add-ObjectDetail.ps1 oder Join-Parts.ps1
                                  • Formate. Dies sind optionale format.ps1xml-Formate, um Ihre Ausgabe zu verschönern, die oft im Modulmanifest „FormatsToProcess“ angegeben sind. PSStackExchange.Format.ps1xml
                                  • Liesmich. Wenn Sie GitHub oder ein anderes gängiges Code-Repository verwenden, ist die Readme.md eine praktische Startseite für Ihr Projekt, die mit einfachem Markdown anstelle von HTML geschrieben wurde
                                  • AppVeyor-Konfiguration. Wenn Sie eine unterstützte Versionskontrolllösung verwenden, ermöglicht AppVeyor eine einfache und kostenlose kontinuierliche Integration und Bereitstellung für Open-Source-Projekte. AppVeyor.yml

                                  Wir haben unsere Zutaten, schauen wir uns ein Rezept für ein Modul an!

                                  Das Rezept

                                  Wir werden dies in ein paar schnellen Schritten tun:

                                  • Erstellen Sie ein GitHub-Repository
                                  • Erstellen Sie das Modul und das Gerüst drumherum
                                  • Schließen Sie AppVeyor an und veröffentlichen Sie das Modul

                                  Dies kann beim ersten Durchlaufen einige Minuten dauern, aber Sie können dieses Gerüst für jedes Modul, das Sie schreiben, ausleihen und optimieren. Tatsächlich können Sie PowerShell-Hilfsmodule und -Tools finden oder schreiben, die diesen Prozess vereinfachen.

                                  Nach dem Rezept

                                  Es gibt keine wirkliche Reihenfolge, je nachdem, was Sie tun oder nicht integrieren, haben Sie nicht das Gefühl, dass Sie dies buchstabengetreu befolgen müssen.

                                  Erstellen Sie ein GitHub-Repository.

                                  Dies sollte ziemlich einfach sein. Wenn Sie GitHub noch nicht verwendet haben, kann Folgendes hilfreich sein:

                                  • Erstellen Sie ein Konto auf GitHub, laden Sie GitHub für Windows herunter
                                  • Erstellen Sie ein neues Repository (wir nennen es PSStackExchange und wählen Sie die MIT-Lizenz)
                                  • Klonen Sie PSStackExchange mit GitHub für Windows

                                  Kommen wir zum wichtigsten Teil, dem Modul selbst.

                                  Erstellen Sie das Modul und das Gerüst drumherum

                                  So organisiere ich normalerweise meine Module. Wir verwenden PSStackExchange als Beispiel, ersetzen Sie dies durch Ihr eigenes Modul!

                                    • en-US (oder Gebietsschemas Ihrer Wahl)
                                      • about_PSStackExchange.help.txt
                                      • Join-Parts.ps1
                                      • Get-SEData.ps1
                                      • Get-SEObject.ps1
                                      • Search-SEQuestion.ps1
                                      • Some.Library.dll
                                      • SomeDependency.exe

                                      Wenn wir unser Projekt zu GitHub oder einem ähnlichen Code-Repository hinzufügen, fügen wir etwas mehr Gerüste hinzu:

                                        • PSStackExchange (oben beschriebener Modulordner)
                                        • Tests
                                          • PSStackExchange.Tests.ps1
                                          • Appveyor.Pester.ps1

                                          Ich habe den folgenden Code durchlaufen lassen, um loszulegen. Normalerweise kopiere ich einfach das Gerüst aus einem anderen Modul, erstelle eine neue GUID in der psd1 und optimiere andere modulspezifische Referenzen.

                                          In unserem Fall haben wir einige erweiterte Funktionen von Stack Exchange, die hoffentlich einigen Best Practices folgen, einige private Hilfsfunktionen, die der Benutzer nicht sehen soll, und einige andere Dateien, die Tests und Benutzerfreundlichkeit abdecken.

                                          In PSStackExchange.psm1 laden wir unsere öffentlichen und privaten Funktionen. Wenn ein Modul in Arbeit ist, exportiere ich normalerweise $Public.Basename, um harte Codierungsfunktionen zum Exportieren in psd1 zu vermeiden. Sobald ein Modul freigegeben ist, versuche ich, die öffentlichen Funktionen zu psd1 hinzuzufügen.

                                          Wenn Sie ein Modul schreiben, sollten Sie erwägen, Pester-Tests dafür zu schreiben. Es ist ziemlich beruhigend, eine Reihe von Tests zu haben, die nach jeder Änderung, die Sie vornehmen, automatisch ausgeführt werden, anstatt davon auszugehen, dass der von Ihnen geschriebene Code korrekt ist, oder zu versuchen, Ihren Code nach jeder Änderung manuell zu testen. Versuch es einmal! Wir fügen einige oberflächliche Tests in PSStackExchange.Tests.ps1 ein.

                                          Schließlich fügen wir einige Usability-Funktionen hinzu. Wir fügen ein about_PSStackExchange-Hilfethema hinzu, dekorieren unsere Ausgabe mit der Datei PSStackExchange.Format.ps1xml und fügen einige Hinweise zur Installation und Verwendung des Moduls in der README.md hinzu.

                                          Wir können loslegen! Schauen wir uns an, wie wir dieses Modul veröffentlichen können, damit andere es verwenden und verbessern können.

                                          Schließen Sie AppVeyor an und veröffentlichen Sie das Modul

                                          Der Inhalt unseres Moduls ist bereit zur Veröffentlichung. Bevor wir dies veröffentlichen, werden wir die kontinuierliche Integration mit einigen praktischen automatisierten Tests über AppVeyor ermöglichen.

                                          Zuerst richten wir unser Projekt in AppVeyor ein, indem wir appveyor.yml zum Repository hinzufügen und das GitHub-Projekt zu unserem AppVeyor-Konto hinzufügen. Wir abstrahieren die Aufrufe von Pester in AppVeyor.Pester.ps1, wobei wir einige Ideen von hier verwenden.

                                          Als Nächstes übertragen wir die Änderungen, die wir auf unserem Computer vorgenommen haben, auf GitHub. Unser Code ist jetzt veröffentlicht und AppVeyor beginnt mit der Ausführung eines Builds.

                                          Schließlich möchten wir unser Modul in der PowerShell-Galerie veröffentlichen, um Endbenutzern mit PowerShell 5 eine einfache Möglichkeit zu geben, Ihr Modul zu finden und zu installieren. Wir könnten dies anschließen, um es automatisch in AppVeyor auszuführen, aber das ist ein Thema für später.

                                          • Melden Sie sich mit Ihrem Microsoft-Konto bei PowerShellGallery.com an
                                          • Holen Sie sich Ihren API-Schlüssel (finden Sie ihn hier)
                                          • Veröffentlichen Sie Ihr Modul!

                                          Unser Modul ist jetzt live in der PowerShell-Galerie!

                                          Wie ich Module schreibe, zusammengefasst

                                          Wütend! Das war ein langer Beitrag. Glücklicherweise können die meisten dieser Dinge in jedem Modul, das Sie schreiben, wiederverwendet werden. Sehen wir uns die Schritte an:

                                          • Erstellen Sie ein GitHub-Repository
                                          • Erstellen Sie das Modul und das Gerüst drumherum
                                          • Schließen Sie AppVeyor an und veröffentlichen Sie das Modul

                                          Der erste und letzte Schritt dauern jeweils ein bis zwei Minuten. Das Modul und das Gerüst drumherum können kopiert und optimiert werden, was nur wenige Minuten dauern sollte. Die meiste Zeit werden Sie damit verbringen, die erweiterten Funktionen für das Modul zu schreiben.

                                          PSStackExchange

                                          Das Modul ist veröffentlicht und einsatzbereit! Ich bin auf einem anderen Computer mit PowerShell 5 und kann mit ein paar Codezeilen loslegen:

                                          Hier einige Ausgaben der Beispiele:

                                          Einpacken

                                          Das ist alles! Wenn Sie noch keine Module schreiben, sollten Sie dies auf jeden Fall in Betracht ziehen. Auf der Suche nach weiterführender Lektüre? Hier sind ein paar Referenzen, die nützlich sein könnten:

                                            - Dies ist vom PowerShell Summit 2014, dank Kirk Freiheit - Shameless Plug. Enthält eine Reihe von Referenzen. - Dies gibt einen schönen Überblick über die Vision und Ziele von PowerShell. Wenn Sie Module für den öffentlichen Gebrauch schreiben, sollten Sie dies lesen, um zu vermeiden, dass etwas so Schreckliches wie das PVS-Snapin „PowerShell“ von Citrix veröffentlicht wird.

                                          Randnotiz für Anbieter

                                          Das Schreiben von PSStackExchange hat mich daran erinnert, wie wichtig es für Anbieter von Unternehmensprodukten ist, PowerShell-Module bereitzustellen, die die API ihres Produkts umschließen. Trotz einer netten API und einer anständigen Dokumentation war das Schreiben eines funktionsarmen PowerShell-Moduls dafür genauso mühsam wie das Umschließen der Infoblox-API.

                                          Anbieter: Wenn Ihre Konkurrenz ein PowerShell-Modul bereitstellt und Sie dies nicht tun, besteht eine gute Chance, dass ich auf das Produkt Ihrer Konkurrenz dränge. Dies ist ein großer Mehrwert, wenn Sie es richtig machen und die PowerShell-Konventionen befolgen.

                                          BEARBEITEN Juli 2016: Aktualisierte Links zu PSStackExchange, um auf einen bestimmten Zeitpunkt zu verweisen. Die aktuelle Version dieses Projekts enthält möglicherweise Aktualisierungen, um Dinge wie PSDeploy zu veranschaulichen.

                                          Teilen auf

                                          Erstellen eines PowerShell-Moduls wurde am 06.09.2015 veröffentlicht und zuletzt am 24.07.2016 geändert.


                                          Erstellen eines PowerShell-Moduls

                                          Vor einiger Zeit hat jemand erwähnt, dass es Spaß machen könnte, den PowerShell-Modul-Schreibprozess zu dokumentieren. Dies wurde schon früher gemacht, aber ich denke, es würde Spaß machen, meinen eigenen Prozess von der ersten Idee bis zur Veröffentlichung auf der offiziellen PowerShellGallery.com-Site zu veröffentlichen.

                                          Ich habe vor kurzem das Puzzle Scripting Games vom August auf PowerShell.org besprochen, bei dem es um die Abfrage einer Web-API ging. Es stellt sich heraus, dass dies ein sehr häufiges Bedürfnis ist, und viele der Module, die wir schreiben, abstrahieren diese APIs in praktische PowerShell-Funktionen und -Module.

                                          Wir gehen davon aus, dass Sie wissen, was ein Modul ist, und dass Sie Erfahrung mit dem Schreiben von PowerShell-Funktionen haben. Wenn nicht, verbringen Sie einige Zeit damit, PowerShell zu lernen, bevor Sie hier fortfahren!

                                          Dieser Beitrag behandelt meine typische Formel zum Schreiben eines Moduls am Beispiel der Stack Exchange API. Fühlen Sie sich frei, den PSStackExchange-Code selbst zu durchsuchen.

                                          Warum Module?

                                          Erweiterte Funktionen bringen Sie mit PowerShell weit. Wenn Sie heute keine Funktionen schreiben, sollten Sie Ihren Code in diese wiederverwendbaren Tools kapseln. Aber… sie haben ihre Grenzen. Hier sind einige Gründe, warum Sie Ihre erweiterten Funktionen in einem Modul bündeln könnten:

                                          • Code-Organisation vereinfachen
                                          • Zusammengehörige Funktionen gruppieren
                                          • Status zwischen Funktionen teilen, aber nicht mit dem Benutzer
                                          • Verwenden Sie „Hilfsfunktionen“, die dem Benutzer nicht zugänglich gemacht werden sollen
                                          • Auffindbarkeit verbessern: Find-Module MyModule oder Get-Command -Module MyModule
                                          • Verteilung vereinfachen: Install-Module MyModule

                                          In unserem Beispiel organisieren wir eine Reihe von Stack Exchange-Funktionen in einem Modul.

                                          Das scheint kompliziert!

                                          Dies von Grund auf neu zu tun, kann ein wenig Zeit in Anspruch nehmen. Glücklicherweise können Sie, sobald Sie ein oder zwei Module schreiben, schnell loslegen, indem Sie es kopieren und ein paar Dateien optimieren. Lassen Sie sich nicht von der Länge dieses Beitrags abschrecken, Ihre eigenen Module zu schreiben, es lohnt sich, ein paar Minuten damit zu verbringen, die Grundlagen zu erlernen!

                                          Die Zutaten

                                          Es gibt viele Möglichkeiten, ein Modul zu erstellen, von der Erweiterung einer .psm1-Erweiterung auf eine Datei bis hin zum Kompilieren eines vollwertigen Binärmoduls aus C#. Wir werden hier einen gemeinsamen Mittelweg nehmen und die folgenden Zutaten verwenden:

                                          • Ein Modul-Manifest. Dies ist eine .psd1-Datei, die Ihr Modul beschreibt. PSStackExchange.psd1
                                          • Ein Root-Modul. In unserem Fall eine Skriptmodul-.psm1-Datei. Dies ist nur PowerShell-Code, der beim Importieren des Moduls ausgeführt wird. PSStackExchange.psm1
                                          • Exportierte (öffentliche) Funktionen. Dies sind die erweiterten Funktionen, die ein Endbenutzer von unserem Modul aus ausführen kann. Zum Beispiel Get-SEQuestion.ps1 oder Get-SEObject.ps1
                                          • Private Funktionen. Dies sind optionale „Hilfsfunktionen“, die wir in unseren exportierten Funktionen verwenden möchten, die der Endbenutzer nicht sehen sollte. Zum Beispiel Add-ObjectDetail.ps1 oder Join-Parts.ps1
                                          • Formate. Dies sind optionale format.ps1xml-Formate, um Ihre Ausgabe zu verschönern, die oft im Modulmanifest „FormatsToProcess“ angegeben sind. PSStackExchange.Format.ps1xml
                                          • Liesmich. Wenn Sie GitHub oder ein anderes gängiges Code-Repository verwenden, ist die Readme.md eine praktische Startseite für Ihr Projekt, die mit einfachem Markdown anstelle von HTML geschrieben wurde
                                          • AppVeyor-Konfiguration. Wenn Sie eine unterstützte Versionskontrolllösung verwenden, ermöglicht AppVeyor eine einfache und kostenlose kontinuierliche Integration und Bereitstellung für Open-Source-Projekte. AppVeyor.yml

                                          Wir haben unsere Zutaten, schauen wir uns ein Rezept für ein Modul an!

                                          Das Rezept

                                          Wir werden dies in ein paar schnellen Schritten tun:

                                          • Erstellen Sie ein GitHub-Repository
                                          • Erstellen Sie das Modul und das Gerüst drumherum
                                          • Schließen Sie AppVeyor an und veröffentlichen Sie das Modul

                                          Dies kann beim ersten Durchlaufen einige Minuten dauern, aber Sie können dieses Gerüst für jedes Modul, das Sie schreiben, ausleihen und optimieren. Tatsächlich können Sie PowerShell-Hilfsmodule und -Tools finden oder schreiben, die diesen Prozess vereinfachen.

                                          Nach dem Rezept

                                          Es gibt keine wirkliche Reihenfolge, je nachdem, was Sie tun oder nicht integrieren, haben Sie nicht das Gefühl, dass Sie dies buchstabengetreu befolgen müssen.

                                          Erstellen Sie ein GitHub-Repository.

                                          Dies sollte ziemlich einfach sein. Wenn Sie GitHub noch nicht verwendet haben, kann Folgendes hilfreich sein:

                                          • Erstellen Sie ein Konto auf GitHub, laden Sie GitHub für Windows herunter
                                          • Erstellen Sie ein neues Repository (wir nennen es PSStackExchange und wählen Sie die MIT-Lizenz)
                                          • Klonen Sie PSStackExchange mit GitHub für Windows

                                          Kommen wir zum wichtigsten Teil, dem Modul selbst.

                                          Erstellen Sie das Modul und das Gerüst drumherum

                                          So organisiere ich normalerweise meine Module. Wir verwenden PSStackExchange als Beispiel, ersetzen Sie dies durch Ihr eigenes Modul!

                                            • en-US (oder Gebietsschemas Ihrer Wahl)
                                              • about_PSStackExchange.help.txt
                                              • Join-Parts.ps1
                                              • Get-SEData.ps1
                                              • Get-SEObject.ps1
                                              • Search-SEQuestion.ps1
                                              • Some.Library.dll
                                              • SomeDependency.exe

                                              Wenn wir unser Projekt zu GitHub oder einem ähnlichen Code-Repository hinzufügen, fügen wir etwas mehr Gerüste hinzu:

                                                • PSStackExchange (oben beschriebener Modulordner)
                                                • Tests
                                                  • PSStackExchange.Tests.ps1
                                                  • Appveyor.Pester.ps1

                                                  Ich habe den folgenden Code durchlaufen lassen, um loszulegen. Normalerweise kopiere ich einfach das Gerüst aus einem anderen Modul, erstelle eine neue GUID in der psd1 und optimiere andere modulspezifische Referenzen.

                                                  In unserem Fall haben wir einige erweiterte Funktionen von Stack Exchange, die hoffentlich einigen Best Practices folgen, einige private Hilfsfunktionen, die der Benutzer nicht sehen soll, und einige andere Dateien, die Tests und Benutzerfreundlichkeit abdecken.

                                                  In PSStackExchange.psm1 laden wir unsere öffentlichen und privaten Funktionen. Wenn ein Modul in Arbeit ist, exportiere ich normalerweise $Public.Basename, um harte Codierungsfunktionen zum Exportieren in psd1 zu vermeiden. Sobald ein Modul freigegeben ist, versuche ich, die öffentlichen Funktionen zu psd1 hinzuzufügen.

                                                  Wenn Sie ein Modul schreiben, sollten Sie erwägen, Pester-Tests dafür zu schreiben. Es ist ziemlich beruhigend, eine Reihe von Tests zu haben, die nach jeder Änderung, die Sie vornehmen, automatisch ausgeführt werden, anstatt davon auszugehen, dass der von Ihnen geschriebene Code korrekt ist, oder zu versuchen, Ihren Code nach jeder Änderung manuell zu testen. Versuch es einmal! Wir fügen einige oberflächliche Tests in PSStackExchange.Tests.ps1 ein.

                                                  Schließlich fügen wir einige Usability-Funktionen hinzu. Wir fügen ein about_PSStackExchange-Hilfethema hinzu, dekorieren unsere Ausgabe mit der Datei PSStackExchange.Format.ps1xml und fügen einige Hinweise zur Installation und Verwendung des Moduls in der README.md hinzu.

                                                  Wir können loslegen! Schauen wir uns an, wie wir dieses Modul veröffentlichen können, damit andere es verwenden und verbessern können.

                                                  Schließen Sie AppVeyor an und veröffentlichen Sie das Modul

                                                  Der Inhalt unseres Moduls ist bereit zur Veröffentlichung. Bevor wir dies veröffentlichen, werden wir die kontinuierliche Integration mit einigen praktischen automatisierten Tests über AppVeyor ermöglichen.

                                                  Zuerst richten wir unser Projekt in AppVeyor ein, indem wir appveyor.yml zum Repository hinzufügen und das GitHub-Projekt zu unserem AppVeyor-Konto hinzufügen. Wir abstrahieren die Aufrufe von Pester in AppVeyor.Pester.ps1, wobei wir einige Ideen von hier verwenden.

                                                  Als Nächstes übertragen wir die Änderungen, die wir auf unserem Computer vorgenommen haben, auf GitHub. Unser Code ist jetzt veröffentlicht und AppVeyor beginnt mit der Ausführung eines Builds.

                                                  Schließlich möchten wir unser Modul in der PowerShell-Galerie veröffentlichen, um Endbenutzern mit PowerShell 5 eine einfache Möglichkeit zu geben, Ihr Modul zu finden und zu installieren.Wir könnten dies anschließen, um es automatisch in AppVeyor auszuführen, aber das ist ein Thema für später.

                                                  • Melden Sie sich mit Ihrem Microsoft-Konto bei PowerShellGallery.com an
                                                  • Holen Sie sich Ihren API-Schlüssel (finden Sie ihn hier)
                                                  • Veröffentlichen Sie Ihr Modul!

                                                  Unser Modul ist jetzt live in der PowerShell-Galerie!

                                                  Wie ich Module schreibe, zusammengefasst

                                                  Wütend! Das war ein langer Beitrag. Glücklicherweise können die meisten dieser Dinge in jedem Modul, das Sie schreiben, wiederverwendet werden. Sehen wir uns die Schritte an:

                                                  • Erstellen Sie ein GitHub-Repository
                                                  • Erstellen Sie das Modul und das Gerüst drumherum
                                                  • Schließen Sie AppVeyor an und veröffentlichen Sie das Modul

                                                  Der erste und letzte Schritt dauern jeweils ein bis zwei Minuten. Das Modul und das Gerüst drumherum können kopiert und optimiert werden, was nur wenige Minuten dauern sollte. Die meiste Zeit werden Sie damit verbringen, die erweiterten Funktionen für das Modul zu schreiben.

                                                  PSStackExchange

                                                  Das Modul ist veröffentlicht und einsatzbereit! Ich bin auf einem anderen Computer mit PowerShell 5 und kann mit ein paar Codezeilen loslegen:

                                                  Hier einige Ausgaben der Beispiele:

                                                  Einpacken

                                                  Das ist alles! Wenn Sie noch keine Module schreiben, sollten Sie dies auf jeden Fall in Betracht ziehen. Auf der Suche nach weiterführender Lektüre? Hier sind ein paar Referenzen, die nützlich sein könnten:

                                                    - Dies ist vom PowerShell Summit 2014, dank Kirk Freiheit - Shameless Plug. Enthält eine Reihe von Referenzen. - Dies gibt einen schönen Überblick über die Vision und Ziele von PowerShell. Wenn Sie Module für den öffentlichen Gebrauch schreiben, sollten Sie dies lesen, um zu vermeiden, dass etwas so Schreckliches wie das PVS-Snapin „PowerShell“ von Citrix veröffentlicht wird.

                                                  Randnotiz für Anbieter

                                                  Das Schreiben von PSStackExchange hat mich daran erinnert, wie wichtig es für Anbieter von Unternehmensprodukten ist, PowerShell-Module bereitzustellen, die die API ihres Produkts umschließen. Trotz einer netten API und einer anständigen Dokumentation war das Schreiben eines funktionsarmen PowerShell-Moduls dafür genauso mühsam wie das Umschließen der Infoblox-API.

                                                  Anbieter: Wenn Ihre Konkurrenz ein PowerShell-Modul bereitstellt und Sie dies nicht tun, besteht eine gute Chance, dass ich auf das Produkt Ihrer Konkurrenz dränge. Dies ist ein großer Mehrwert, wenn Sie es richtig machen und die PowerShell-Konventionen befolgen.

                                                  BEARBEITEN Juli 2016: Aktualisierte Links zu PSStackExchange, um auf einen bestimmten Zeitpunkt zu verweisen. Die aktuelle Version dieses Projekts enthält möglicherweise Aktualisierungen, um Dinge wie PSDeploy zu veranschaulichen.

                                                  Teilen auf

                                                  Erstellen eines PowerShell-Moduls wurde am 06.09.2015 veröffentlicht und zuletzt am 24.07.2016 geändert.


                                                  Erstellen eines PowerShell-Moduls

                                                  Vor einiger Zeit hat jemand erwähnt, dass es Spaß machen könnte, den PowerShell-Modul-Schreibprozess zu dokumentieren. Dies wurde schon früher gemacht, aber ich denke, es würde Spaß machen, meinen eigenen Prozess von der ersten Idee bis zur Veröffentlichung auf der offiziellen PowerShellGallery.com-Site zu veröffentlichen.

                                                  Ich habe vor kurzem das Puzzle Scripting Games vom August auf PowerShell.org besprochen, bei dem es um die Abfrage einer Web-API ging. Es stellt sich heraus, dass dies ein sehr häufiges Bedürfnis ist, und viele der Module, die wir schreiben, abstrahieren diese APIs in praktische PowerShell-Funktionen und -Module.

                                                  Wir gehen davon aus, dass Sie wissen, was ein Modul ist, und dass Sie Erfahrung mit dem Schreiben von PowerShell-Funktionen haben. Wenn nicht, verbringen Sie einige Zeit damit, PowerShell zu lernen, bevor Sie hier fortfahren!

                                                  Dieser Beitrag behandelt meine typische Formel zum Schreiben eines Moduls am Beispiel der Stack Exchange API. Fühlen Sie sich frei, den PSStackExchange-Code selbst zu durchsuchen.

                                                  Warum Module?

                                                  Erweiterte Funktionen bringen Sie mit PowerShell weit. Wenn Sie heute keine Funktionen schreiben, sollten Sie Ihren Code in diese wiederverwendbaren Tools kapseln. Aber… sie haben ihre Grenzen. Hier sind einige Gründe, warum Sie Ihre erweiterten Funktionen in einem Modul bündeln könnten:

                                                  • Code-Organisation vereinfachen
                                                  • Zusammengehörige Funktionen gruppieren
                                                  • Status zwischen Funktionen teilen, aber nicht mit dem Benutzer
                                                  • Verwenden Sie „Hilfsfunktionen“, die dem Benutzer nicht zugänglich gemacht werden sollen
                                                  • Auffindbarkeit verbessern: Find-Module MyModule oder Get-Command -Module MyModule
                                                  • Verteilung vereinfachen: Install-Module MyModule

                                                  In unserem Beispiel organisieren wir eine Reihe von Stack Exchange-Funktionen in einem Modul.

                                                  Das scheint kompliziert!

                                                  Dies von Grund auf neu zu tun, kann ein wenig Zeit in Anspruch nehmen. Glücklicherweise können Sie, sobald Sie ein oder zwei Module schreiben, schnell loslegen, indem Sie es kopieren und ein paar Dateien optimieren. Lassen Sie sich nicht von der Länge dieses Beitrags abschrecken, Ihre eigenen Module zu schreiben, es lohnt sich, ein paar Minuten damit zu verbringen, die Grundlagen zu erlernen!

                                                  Die Zutaten

                                                  Es gibt viele Möglichkeiten, ein Modul zu erstellen, von der Erweiterung einer .psm1-Erweiterung auf eine Datei bis hin zum Kompilieren eines vollwertigen Binärmoduls aus C#. Wir werden hier einen gemeinsamen Mittelweg nehmen und die folgenden Zutaten verwenden:

                                                  • Ein Modul-Manifest. Dies ist eine .psd1-Datei, die Ihr Modul beschreibt. PSStackExchange.psd1
                                                  • Ein Root-Modul. In unserem Fall eine Skriptmodul-.psm1-Datei. Dies ist nur PowerShell-Code, der beim Importieren des Moduls ausgeführt wird. PSStackExchange.psm1
                                                  • Exportierte (öffentliche) Funktionen. Dies sind die erweiterten Funktionen, die ein Endbenutzer von unserem Modul aus ausführen kann. Zum Beispiel Get-SEQuestion.ps1 oder Get-SEObject.ps1
                                                  • Private Funktionen. Dies sind optionale „Hilfsfunktionen“, die wir in unseren exportierten Funktionen verwenden möchten, die der Endbenutzer nicht sehen sollte. Zum Beispiel Add-ObjectDetail.ps1 oder Join-Parts.ps1
                                                  • Formate. Dies sind optionale format.ps1xml-Formate, um Ihre Ausgabe zu verschönern, die oft im Modulmanifest „FormatsToProcess“ angegeben sind. PSStackExchange.Format.ps1xml
                                                  • Liesmich. Wenn Sie GitHub oder ein anderes gängiges Code-Repository verwenden, ist die Readme.md eine praktische Startseite für Ihr Projekt, die mit einfachem Markdown anstelle von HTML geschrieben wurde
                                                  • AppVeyor-Konfiguration. Wenn Sie eine unterstützte Versionskontrolllösung verwenden, ermöglicht AppVeyor eine einfache und kostenlose kontinuierliche Integration und Bereitstellung für Open-Source-Projekte. AppVeyor.yml

                                                  Wir haben unsere Zutaten, schauen wir uns ein Rezept für ein Modul an!

                                                  Das Rezept

                                                  Wir werden dies in ein paar schnellen Schritten tun:

                                                  • Erstellen Sie ein GitHub-Repository
                                                  • Erstellen Sie das Modul und das Gerüst drumherum
                                                  • Schließen Sie AppVeyor an und veröffentlichen Sie das Modul

                                                  Dies kann beim ersten Durchlaufen einige Minuten dauern, aber Sie können dieses Gerüst für jedes Modul, das Sie schreiben, ausleihen und optimieren. Tatsächlich können Sie PowerShell-Hilfsmodule und -Tools finden oder schreiben, die diesen Prozess vereinfachen.

                                                  Nach dem Rezept

                                                  Es gibt keine wirkliche Reihenfolge, je nachdem, was Sie tun oder nicht integrieren, haben Sie nicht das Gefühl, dass Sie dies buchstabengetreu befolgen müssen.

                                                  Erstellen Sie ein GitHub-Repository.

                                                  Dies sollte ziemlich einfach sein. Wenn Sie GitHub noch nicht verwendet haben, kann Folgendes hilfreich sein:

                                                  • Erstellen Sie ein Konto auf GitHub, laden Sie GitHub für Windows herunter
                                                  • Erstellen Sie ein neues Repository (wir nennen es PSStackExchange und wählen Sie die MIT-Lizenz)
                                                  • Klonen Sie PSStackExchange mit GitHub für Windows

                                                  Kommen wir zum wichtigsten Teil, dem Modul selbst.

                                                  Erstellen Sie das Modul und das Gerüst drumherum

                                                  So organisiere ich normalerweise meine Module. Wir verwenden PSStackExchange als Beispiel, ersetzen Sie dies durch Ihr eigenes Modul!

                                                    • en-US (oder Gebietsschemas Ihrer Wahl)
                                                      • about_PSStackExchange.help.txt
                                                      • Join-Parts.ps1
                                                      • Get-SEData.ps1
                                                      • Get-SEObject.ps1
                                                      • Search-SEQuestion.ps1
                                                      • Some.Library.dll
                                                      • SomeDependency.exe

                                                      Wenn wir unser Projekt zu GitHub oder einem ähnlichen Code-Repository hinzufügen, fügen wir etwas mehr Gerüste hinzu:

                                                        • PSStackExchange (oben beschriebener Modulordner)
                                                        • Tests
                                                          • PSStackExchange.Tests.ps1
                                                          • Appveyor.Pester.ps1

                                                          Ich habe den folgenden Code durchlaufen lassen, um loszulegen. Normalerweise kopiere ich einfach das Gerüst aus einem anderen Modul, erstelle eine neue GUID in der psd1 und optimiere andere modulspezifische Referenzen.

                                                          In unserem Fall haben wir einige erweiterte Funktionen von Stack Exchange, die hoffentlich einigen Best Practices folgen, einige private Hilfsfunktionen, die der Benutzer nicht sehen soll, und einige andere Dateien, die Tests und Benutzerfreundlichkeit abdecken.

                                                          In PSStackExchange.psm1 laden wir unsere öffentlichen und privaten Funktionen. Wenn ein Modul in Arbeit ist, exportiere ich normalerweise $Public.Basename, um harte Codierungsfunktionen zum Exportieren in psd1 zu vermeiden. Sobald ein Modul freigegeben ist, versuche ich, die öffentlichen Funktionen zu psd1 hinzuzufügen.

                                                          Wenn Sie ein Modul schreiben, sollten Sie erwägen, Pester-Tests dafür zu schreiben. Es ist ziemlich beruhigend, eine Reihe von Tests zu haben, die nach jeder Änderung, die Sie vornehmen, automatisch ausgeführt werden, anstatt davon auszugehen, dass der von Ihnen geschriebene Code korrekt ist, oder zu versuchen, Ihren Code nach jeder Änderung manuell zu testen. Versuch es einmal! Wir fügen einige oberflächliche Tests in PSStackExchange.Tests.ps1 ein.

                                                          Schließlich fügen wir einige Usability-Funktionen hinzu. Wir fügen ein about_PSStackExchange-Hilfethema hinzu, dekorieren unsere Ausgabe mit der Datei PSStackExchange.Format.ps1xml und fügen einige Hinweise zur Installation und Verwendung des Moduls in der README.md hinzu.

                                                          Wir können loslegen! Schauen wir uns an, wie wir dieses Modul veröffentlichen können, damit andere es verwenden und verbessern können.

                                                          Schließen Sie AppVeyor an und veröffentlichen Sie das Modul

                                                          Der Inhalt unseres Moduls ist bereit zur Veröffentlichung. Bevor wir dies veröffentlichen, werden wir die kontinuierliche Integration mit einigen praktischen automatisierten Tests über AppVeyor ermöglichen.

                                                          Zuerst richten wir unser Projekt in AppVeyor ein, indem wir appveyor.yml zum Repository hinzufügen und das GitHub-Projekt zu unserem AppVeyor-Konto hinzufügen. Wir abstrahieren die Aufrufe von Pester in AppVeyor.Pester.ps1, wobei wir einige Ideen von hier verwenden.

                                                          Als Nächstes übertragen wir die Änderungen, die wir auf unserem Computer vorgenommen haben, auf GitHub. Unser Code ist jetzt veröffentlicht und AppVeyor beginnt mit der Ausführung eines Builds.

                                                          Schließlich möchten wir unser Modul in der PowerShell-Galerie veröffentlichen, um Endbenutzern mit PowerShell 5 eine einfache Möglichkeit zu geben, Ihr Modul zu finden und zu installieren. Wir könnten dies anschließen, um es automatisch in AppVeyor auszuführen, aber das ist ein Thema für später.

                                                          • Melden Sie sich mit Ihrem Microsoft-Konto bei PowerShellGallery.com an
                                                          • Holen Sie sich Ihren API-Schlüssel (finden Sie ihn hier)
                                                          • Veröffentlichen Sie Ihr Modul!

                                                          Unser Modul ist jetzt live in der PowerShell-Galerie!

                                                          Wie ich Module schreibe, zusammengefasst

                                                          Wütend! Das war ein langer Beitrag. Glücklicherweise können die meisten dieser Dinge in jedem Modul, das Sie schreiben, wiederverwendet werden. Sehen wir uns die Schritte an:

                                                          • Erstellen Sie ein GitHub-Repository
                                                          • Erstellen Sie das Modul und das Gerüst drumherum
                                                          • Schließen Sie AppVeyor an und veröffentlichen Sie das Modul

                                                          Der erste und letzte Schritt dauern jeweils ein bis zwei Minuten. Das Modul und das Gerüst drumherum können kopiert und optimiert werden, was nur wenige Minuten dauern sollte. Die meiste Zeit werden Sie damit verbringen, die erweiterten Funktionen für das Modul zu schreiben.

                                                          PSStackExchange

                                                          Das Modul ist veröffentlicht und einsatzbereit! Ich bin auf einem anderen Computer mit PowerShell 5 und kann mit ein paar Codezeilen loslegen:

                                                          Hier einige Ausgaben der Beispiele:

                                                          Einpacken

                                                          Das ist alles! Wenn Sie noch keine Module schreiben, sollten Sie dies auf jeden Fall in Betracht ziehen. Auf der Suche nach weiterführender Lektüre? Hier sind ein paar Referenzen, die nützlich sein könnten:

                                                            - Dies ist vom PowerShell Summit 2014, dank Kirk Freiheit - Shameless Plug. Enthält eine Reihe von Referenzen. - Dies gibt einen schönen Überblick über die Vision und Ziele von PowerShell. Wenn Sie Module für den öffentlichen Gebrauch schreiben, sollten Sie dies lesen, um zu vermeiden, dass etwas so Schreckliches wie das PVS-Snapin „PowerShell“ von Citrix veröffentlicht wird.

                                                          Randnotiz für Anbieter

                                                          Das Schreiben von PSStackExchange hat mich daran erinnert, wie wichtig es für Anbieter von Unternehmensprodukten ist, PowerShell-Module bereitzustellen, die die API ihres Produkts umschließen. Trotz einer netten API und einer anständigen Dokumentation war das Schreiben eines funktionsarmen PowerShell-Moduls dafür genauso mühsam wie das Umschließen der Infoblox-API.

                                                          Anbieter: Wenn Ihre Konkurrenz ein PowerShell-Modul bereitstellt und Sie dies nicht tun, besteht eine gute Chance, dass ich auf das Produkt Ihrer Konkurrenz dränge. Dies ist ein großer Mehrwert, wenn Sie es richtig machen und die PowerShell-Konventionen befolgen.

                                                          BEARBEITEN Juli 2016: Aktualisierte Links zu PSStackExchange, um auf einen bestimmten Zeitpunkt zu verweisen. Die aktuelle Version dieses Projekts enthält möglicherweise Aktualisierungen, um Dinge wie PSDeploy zu veranschaulichen.

                                                          Teilen auf

                                                          Erstellen eines PowerShell-Moduls wurde am 06.09.2015 veröffentlicht und zuletzt am 24.07.2016 geändert.


                                                          Erstellen eines PowerShell-Moduls

                                                          Vor einiger Zeit hat jemand erwähnt, dass es Spaß machen könnte, den PowerShell-Modul-Schreibprozess zu dokumentieren. Dies wurde schon früher gemacht, aber ich denke, es würde Spaß machen, meinen eigenen Prozess von der ersten Idee bis zur Veröffentlichung auf der offiziellen PowerShellGallery.com-Site zu veröffentlichen.

                                                          Ich habe vor kurzem das Puzzle Scripting Games vom August auf PowerShell.org besprochen, bei dem es um die Abfrage einer Web-API ging. Es stellt sich heraus, dass dies ein sehr häufiges Bedürfnis ist, und viele der Module, die wir schreiben, abstrahieren diese APIs in praktische PowerShell-Funktionen und -Module.

                                                          Wir gehen davon aus, dass Sie wissen, was ein Modul ist, und dass Sie Erfahrung mit dem Schreiben von PowerShell-Funktionen haben. Wenn nicht, verbringen Sie einige Zeit damit, PowerShell zu lernen, bevor Sie hier fortfahren!

                                                          Dieser Beitrag behandelt meine typische Formel zum Schreiben eines Moduls am Beispiel der Stack Exchange API. Fühlen Sie sich frei, den PSStackExchange-Code selbst zu durchsuchen.

                                                          Warum Module?

                                                          Erweiterte Funktionen bringen Sie mit PowerShell weit. Wenn Sie heute keine Funktionen schreiben, sollten Sie Ihren Code in diese wiederverwendbaren Tools kapseln. Aber… sie haben ihre Grenzen. Hier sind einige Gründe, warum Sie Ihre erweiterten Funktionen in einem Modul bündeln könnten:

                                                          • Code-Organisation vereinfachen
                                                          • Zusammengehörige Funktionen gruppieren
                                                          • Status zwischen Funktionen teilen, aber nicht mit dem Benutzer
                                                          • Verwenden Sie „Hilfsfunktionen“, die dem Benutzer nicht zugänglich gemacht werden sollen
                                                          • Auffindbarkeit verbessern: Find-Module MyModule oder Get-Command -Module MyModule
                                                          • Verteilung vereinfachen: Install-Module MyModule

                                                          In unserem Beispiel organisieren wir eine Reihe von Stack Exchange-Funktionen in einem Modul.

                                                          Das scheint kompliziert!

                                                          Dies von Grund auf neu zu tun, kann ein wenig Zeit in Anspruch nehmen. Glücklicherweise können Sie, sobald Sie ein oder zwei Module schreiben, schnell loslegen, indem Sie es kopieren und ein paar Dateien optimieren. Lassen Sie sich nicht von der Länge dieses Beitrags abschrecken, Ihre eigenen Module zu schreiben, es lohnt sich, ein paar Minuten damit zu verbringen, die Grundlagen zu erlernen!

                                                          Die Zutaten

                                                          Es gibt viele Möglichkeiten, ein Modul zu erstellen, von der Erweiterung einer .psm1-Erweiterung auf eine Datei bis hin zum Kompilieren eines vollwertigen Binärmoduls aus C#. Wir werden hier einen gemeinsamen Mittelweg nehmen und die folgenden Zutaten verwenden:

                                                          • Ein Modul-Manifest. Dies ist eine .psd1-Datei, die Ihr Modul beschreibt. PSStackExchange.psd1
                                                          • Ein Root-Modul. In unserem Fall eine Skriptmodul-.psm1-Datei. Dies ist nur PowerShell-Code, der beim Importieren des Moduls ausgeführt wird. PSStackExchange.psm1
                                                          • Exportierte (öffentliche) Funktionen. Dies sind die erweiterten Funktionen, die ein Endbenutzer von unserem Modul aus ausführen kann. Zum Beispiel Get-SEQuestion.ps1 oder Get-SEObject.ps1
                                                          • Private Funktionen. Dies sind optionale „Hilfsfunktionen“, die wir in unseren exportierten Funktionen verwenden möchten, die der Endbenutzer nicht sehen sollte. Zum Beispiel Add-ObjectDetail.ps1 oder Join-Parts.ps1
                                                          • Formate. Dies sind optionale format.ps1xml-Formate, um Ihre Ausgabe zu verschönern, die oft im Modulmanifest „FormatsToProcess“ angegeben sind. PSStackExchange.Format.ps1xml
                                                          • Liesmich. Wenn Sie GitHub oder ein anderes gängiges Code-Repository verwenden, ist die Readme.md eine praktische Startseite für Ihr Projekt, die mit einfachem Markdown anstelle von HTML geschrieben wurde
                                                          • AppVeyor-Konfiguration. Wenn Sie eine unterstützte Versionskontrolllösung verwenden, ermöglicht AppVeyor eine einfache und kostenlose kontinuierliche Integration und Bereitstellung für Open-Source-Projekte. AppVeyor.yml

                                                          Wir haben unsere Zutaten, schauen wir uns ein Rezept für ein Modul an!

                                                          Das Rezept

                                                          Wir werden dies in ein paar schnellen Schritten tun:

                                                          • Erstellen Sie ein GitHub-Repository
                                                          • Erstellen Sie das Modul und das Gerüst drumherum
                                                          • Schließen Sie AppVeyor an und veröffentlichen Sie das Modul

                                                          Dies kann beim ersten Durchlaufen einige Minuten dauern, aber Sie können dieses Gerüst für jedes Modul, das Sie schreiben, ausleihen und optimieren. Tatsächlich können Sie PowerShell-Hilfsmodule und -Tools finden oder schreiben, die diesen Prozess vereinfachen.

                                                          Nach dem Rezept

                                                          Es gibt keine wirkliche Reihenfolge, je nachdem, was Sie tun oder nicht integrieren, haben Sie nicht das Gefühl, dass Sie dies buchstabengetreu befolgen müssen.

                                                          Erstellen Sie ein GitHub-Repository.

                                                          Dies sollte ziemlich einfach sein. Wenn Sie GitHub noch nicht verwendet haben, kann Folgendes hilfreich sein:

                                                          • Erstellen Sie ein Konto auf GitHub, laden Sie GitHub für Windows herunter
                                                          • Erstellen Sie ein neues Repository (wir nennen es PSStackExchange und wählen Sie die MIT-Lizenz)
                                                          • Klonen Sie PSStackExchange mit GitHub für Windows

                                                          Kommen wir zum wichtigsten Teil, dem Modul selbst.

                                                          Erstellen Sie das Modul und das Gerüst drumherum

                                                          So organisiere ich normalerweise meine Module. Wir verwenden PSStackExchange als Beispiel, ersetzen Sie dies durch Ihr eigenes Modul!

                                                            • en-US (oder Gebietsschemas Ihrer Wahl)
                                                              • about_PSStackExchange.help.txt
                                                              • Join-Parts.ps1
                                                              • Get-SEData.ps1
                                                              • Get-SEObject.ps1
                                                              • Search-SEQuestion.ps1
                                                              • Some.Library.dll
                                                              • SomeDependency.exe

                                                              Wenn wir unser Projekt zu GitHub oder einem ähnlichen Code-Repository hinzufügen, fügen wir etwas mehr Gerüste hinzu:

                                                                • PSStackExchange (oben beschriebener Modulordner)
                                                                • Tests
                                                                  • PSStackExchange.Tests.ps1
                                                                  • Appveyor.Pester.ps1

                                                                  Ich habe den folgenden Code durchlaufen lassen, um loszulegen. Normalerweise kopiere ich einfach das Gerüst aus einem anderen Modul, erstelle eine neue GUID in der psd1 und optimiere andere modulspezifische Referenzen.

                                                                  In unserem Fall haben wir einige erweiterte Funktionen von Stack Exchange, die hoffentlich einigen Best Practices folgen, einige private Hilfsfunktionen, die der Benutzer nicht sehen soll, und einige andere Dateien, die Tests und Benutzerfreundlichkeit abdecken.

                                                                  In PSStackExchange.psm1 laden wir unsere öffentlichen und privaten Funktionen. Wenn ein Modul in Arbeit ist, exportiere ich normalerweise $Public.Basename, um harte Codierungsfunktionen zum Exportieren in psd1 zu vermeiden. Sobald ein Modul freigegeben ist, versuche ich, die öffentlichen Funktionen zu psd1 hinzuzufügen.

                                                                  Wenn Sie ein Modul schreiben, sollten Sie erwägen, Pester-Tests dafür zu schreiben. Es ist ziemlich beruhigend, eine Reihe von Tests zu haben, die nach jeder Änderung, die Sie vornehmen, automatisch ausgeführt werden, anstatt davon auszugehen, dass der von Ihnen geschriebene Code korrekt ist, oder zu versuchen, Ihren Code nach jeder Änderung manuell zu testen. Versuch es einmal! Wir fügen einige oberflächliche Tests in PSStackExchange.Tests.ps1 ein.

                                                                  Schließlich fügen wir einige Usability-Funktionen hinzu. Wir fügen ein about_PSStackExchange-Hilfethema hinzu, dekorieren unsere Ausgabe mit der Datei PSStackExchange.Format.ps1xml und fügen einige Hinweise zur Installation und Verwendung des Moduls in der README.md hinzu.

                                                                  Wir können loslegen! Schauen wir uns an, wie wir dieses Modul veröffentlichen können, damit andere es verwenden und verbessern können.

                                                                  Schließen Sie AppVeyor an und veröffentlichen Sie das Modul

                                                                  Der Inhalt unseres Moduls ist bereit zur Veröffentlichung. Bevor wir dies veröffentlichen, werden wir die kontinuierliche Integration mit einigen praktischen automatisierten Tests über AppVeyor ermöglichen.

                                                                  Zuerst richten wir unser Projekt in AppVeyor ein, indem wir appveyor.yml zum Repository hinzufügen und das GitHub-Projekt zu unserem AppVeyor-Konto hinzufügen.Wir abstrahieren die Aufrufe von Pester in AppVeyor.Pester.ps1, wobei wir einige Ideen von hier verwenden.

                                                                  Als Nächstes übertragen wir die Änderungen, die wir auf unserem Computer vorgenommen haben, auf GitHub. Unser Code ist jetzt veröffentlicht und AppVeyor beginnt mit der Ausführung eines Builds.

                                                                  Schließlich möchten wir unser Modul in der PowerShell-Galerie veröffentlichen, um Endbenutzern mit PowerShell 5 eine einfache Möglichkeit zu geben, Ihr Modul zu finden und zu installieren. Wir könnten dies anschließen, um es automatisch in AppVeyor auszuführen, aber das ist ein Thema für später.

                                                                  • Melden Sie sich mit Ihrem Microsoft-Konto bei PowerShellGallery.com an
                                                                  • Holen Sie sich Ihren API-Schlüssel (finden Sie ihn hier)
                                                                  • Veröffentlichen Sie Ihr Modul!

                                                                  Unser Modul ist jetzt live in der PowerShell-Galerie!

                                                                  Wie ich Module schreibe, zusammengefasst

                                                                  Wütend! Das war ein langer Beitrag. Glücklicherweise können die meisten dieser Dinge in jedem Modul, das Sie schreiben, wiederverwendet werden. Sehen wir uns die Schritte an:

                                                                  • Erstellen Sie ein GitHub-Repository
                                                                  • Erstellen Sie das Modul und das Gerüst drumherum
                                                                  • Schließen Sie AppVeyor an und veröffentlichen Sie das Modul

                                                                  Der erste und letzte Schritt dauern jeweils ein bis zwei Minuten. Das Modul und das Gerüst drumherum können kopiert und optimiert werden, was nur wenige Minuten dauern sollte. Die meiste Zeit werden Sie damit verbringen, die erweiterten Funktionen für das Modul zu schreiben.

                                                                  PSStackExchange

                                                                  Das Modul ist veröffentlicht und einsatzbereit! Ich bin auf einem anderen Computer mit PowerShell 5 und kann mit ein paar Codezeilen loslegen:

                                                                  Hier einige Ausgaben der Beispiele:

                                                                  Einpacken

                                                                  Das ist alles! Wenn Sie noch keine Module schreiben, sollten Sie dies auf jeden Fall in Betracht ziehen. Auf der Suche nach weiterführender Lektüre? Hier sind ein paar Referenzen, die nützlich sein könnten:

                                                                    - Dies ist vom PowerShell Summit 2014, dank Kirk Freiheit - Shameless Plug. Enthält eine Reihe von Referenzen. - Dies gibt einen schönen Überblick über die Vision und Ziele von PowerShell. Wenn Sie Module für den öffentlichen Gebrauch schreiben, sollten Sie dies lesen, um zu vermeiden, dass etwas so Schreckliches wie das PVS-Snapin „PowerShell“ von Citrix veröffentlicht wird.

                                                                  Randnotiz für Anbieter

                                                                  Das Schreiben von PSStackExchange hat mich daran erinnert, wie wichtig es für Anbieter von Unternehmensprodukten ist, PowerShell-Module bereitzustellen, die die API ihres Produkts umschließen. Trotz einer netten API und einer anständigen Dokumentation war das Schreiben eines funktionsarmen PowerShell-Moduls dafür genauso mühsam wie das Umschließen der Infoblox-API.

                                                                  Anbieter: Wenn Ihre Konkurrenz ein PowerShell-Modul bereitstellt und Sie dies nicht tun, besteht eine gute Chance, dass ich auf das Produkt Ihrer Konkurrenz dränge. Dies ist ein großer Mehrwert, wenn Sie es richtig machen und die PowerShell-Konventionen befolgen.

                                                                  BEARBEITEN Juli 2016: Aktualisierte Links zu PSStackExchange, um auf einen bestimmten Zeitpunkt zu verweisen. Die aktuelle Version dieses Projekts enthält möglicherweise Aktualisierungen, um Dinge wie PSDeploy zu veranschaulichen.

                                                                  Teilen auf

                                                                  Erstellen eines PowerShell-Moduls wurde am 06.09.2015 veröffentlicht und zuletzt am 24.07.2016 geändert.


                                                                  Erstellen eines PowerShell-Moduls

                                                                  Vor einiger Zeit hat jemand erwähnt, dass es Spaß machen könnte, den PowerShell-Modul-Schreibprozess zu dokumentieren. Dies wurde schon früher gemacht, aber ich denke, es würde Spaß machen, meinen eigenen Prozess von der ersten Idee bis zur Veröffentlichung auf der offiziellen PowerShellGallery.com-Site zu veröffentlichen.

                                                                  Ich habe vor kurzem das Puzzle Scripting Games vom August auf PowerShell.org besprochen, bei dem es um die Abfrage einer Web-API ging. Es stellt sich heraus, dass dies ein sehr häufiges Bedürfnis ist, und viele der Module, die wir schreiben, abstrahieren diese APIs in praktische PowerShell-Funktionen und -Module.

                                                                  Wir gehen davon aus, dass Sie wissen, was ein Modul ist, und dass Sie Erfahrung mit dem Schreiben von PowerShell-Funktionen haben. Wenn nicht, verbringen Sie einige Zeit damit, PowerShell zu lernen, bevor Sie hier fortfahren!

                                                                  Dieser Beitrag behandelt meine typische Formel zum Schreiben eines Moduls am Beispiel der Stack Exchange API. Fühlen Sie sich frei, den PSStackExchange-Code selbst zu durchsuchen.

                                                                  Warum Module?

                                                                  Erweiterte Funktionen bringen Sie mit PowerShell weit. Wenn Sie heute keine Funktionen schreiben, sollten Sie Ihren Code in diese wiederverwendbaren Tools kapseln. Aber… sie haben ihre Grenzen. Hier sind einige Gründe, warum Sie Ihre erweiterten Funktionen in einem Modul bündeln könnten:

                                                                  • Code-Organisation vereinfachen
                                                                  • Zusammengehörige Funktionen gruppieren
                                                                  • Status zwischen Funktionen teilen, aber nicht mit dem Benutzer
                                                                  • Verwenden Sie „Hilfsfunktionen“, die dem Benutzer nicht zugänglich gemacht werden sollen
                                                                  • Auffindbarkeit verbessern: Find-Module MyModule oder Get-Command -Module MyModule
                                                                  • Verteilung vereinfachen: Install-Module MyModule

                                                                  In unserem Beispiel organisieren wir eine Reihe von Stack Exchange-Funktionen in einem Modul.

                                                                  Das scheint kompliziert!

                                                                  Dies von Grund auf neu zu tun, kann ein wenig Zeit in Anspruch nehmen. Glücklicherweise können Sie, sobald Sie ein oder zwei Module schreiben, schnell loslegen, indem Sie es kopieren und ein paar Dateien optimieren. Lassen Sie sich nicht von der Länge dieses Beitrags abschrecken, Ihre eigenen Module zu schreiben, es lohnt sich, ein paar Minuten damit zu verbringen, die Grundlagen zu erlernen!

                                                                  Die Zutaten

                                                                  Es gibt viele Möglichkeiten, ein Modul zu erstellen, von der Erweiterung einer .psm1-Erweiterung auf eine Datei bis hin zum Kompilieren eines vollwertigen Binärmoduls aus C#. Wir werden hier einen gemeinsamen Mittelweg nehmen und die folgenden Zutaten verwenden:

                                                                  • Ein Modul-Manifest. Dies ist eine .psd1-Datei, die Ihr Modul beschreibt. PSStackExchange.psd1
                                                                  • Ein Root-Modul. In unserem Fall eine Skriptmodul-.psm1-Datei. Dies ist nur PowerShell-Code, der beim Importieren des Moduls ausgeführt wird. PSStackExchange.psm1
                                                                  • Exportierte (öffentliche) Funktionen. Dies sind die erweiterten Funktionen, die ein Endbenutzer von unserem Modul aus ausführen kann. Zum Beispiel Get-SEQuestion.ps1 oder Get-SEObject.ps1
                                                                  • Private Funktionen. Dies sind optionale „Hilfsfunktionen“, die wir in unseren exportierten Funktionen verwenden möchten, die der Endbenutzer nicht sehen sollte. Zum Beispiel Add-ObjectDetail.ps1 oder Join-Parts.ps1
                                                                  • Formate. Dies sind optionale format.ps1xml-Formate, um Ihre Ausgabe zu verschönern, die oft im Modulmanifest „FormatsToProcess“ angegeben sind. PSStackExchange.Format.ps1xml
                                                                  • Liesmich. Wenn Sie GitHub oder ein anderes gängiges Code-Repository verwenden, ist die Readme.md eine praktische Startseite für Ihr Projekt, die mit einfachem Markdown anstelle von HTML geschrieben wurde
                                                                  • AppVeyor-Konfiguration. Wenn Sie eine unterstützte Versionskontrolllösung verwenden, ermöglicht AppVeyor eine einfache und kostenlose kontinuierliche Integration und Bereitstellung für Open-Source-Projekte. AppVeyor.yml

                                                                  Wir haben unsere Zutaten, schauen wir uns ein Rezept für ein Modul an!

                                                                  Das Rezept

                                                                  Wir werden dies in ein paar schnellen Schritten tun:

                                                                  • Erstellen Sie ein GitHub-Repository
                                                                  • Erstellen Sie das Modul und das Gerüst drumherum
                                                                  • Schließen Sie AppVeyor an und veröffentlichen Sie das Modul

                                                                  Dies kann beim ersten Durchlaufen einige Minuten dauern, aber Sie können dieses Gerüst für jedes Modul, das Sie schreiben, ausleihen und optimieren. Tatsächlich können Sie PowerShell-Hilfsmodule und -Tools finden oder schreiben, die diesen Prozess vereinfachen.

                                                                  Nach dem Rezept

                                                                  Es gibt keine wirkliche Reihenfolge, je nachdem, was Sie tun oder nicht integrieren, haben Sie nicht das Gefühl, dass Sie dies buchstabengetreu befolgen müssen.

                                                                  Erstellen Sie ein GitHub-Repository.

                                                                  Dies sollte ziemlich einfach sein. Wenn Sie GitHub noch nicht verwendet haben, kann Folgendes hilfreich sein:

                                                                  • Erstellen Sie ein Konto auf GitHub, laden Sie GitHub für Windows herunter
                                                                  • Erstellen Sie ein neues Repository (wir nennen es PSStackExchange und wählen Sie die MIT-Lizenz)
                                                                  • Klonen Sie PSStackExchange mit GitHub für Windows

                                                                  Kommen wir zum wichtigsten Teil, dem Modul selbst.

                                                                  Erstellen Sie das Modul und das Gerüst drumherum

                                                                  So organisiere ich normalerweise meine Module. Wir verwenden PSStackExchange als Beispiel, ersetzen Sie dies durch Ihr eigenes Modul!

                                                                    • en-US (oder Gebietsschemas Ihrer Wahl)
                                                                      • about_PSStackExchange.help.txt
                                                                      • Join-Parts.ps1
                                                                      • Get-SEData.ps1
                                                                      • Get-SEObject.ps1
                                                                      • Search-SEQuestion.ps1
                                                                      • Some.Library.dll
                                                                      • SomeDependency.exe

                                                                      Wenn wir unser Projekt zu GitHub oder einem ähnlichen Code-Repository hinzufügen, fügen wir etwas mehr Gerüste hinzu:

                                                                        • PSStackExchange (oben beschriebener Modulordner)
                                                                        • Tests
                                                                          • PSStackExchange.Tests.ps1
                                                                          • Appveyor.Pester.ps1

                                                                          Ich habe den folgenden Code durchlaufen lassen, um loszulegen. Normalerweise kopiere ich einfach das Gerüst aus einem anderen Modul, erstelle eine neue GUID in der psd1 und optimiere andere modulspezifische Referenzen.

                                                                          In unserem Fall haben wir einige erweiterte Funktionen von Stack Exchange, die hoffentlich einigen Best Practices folgen, einige private Hilfsfunktionen, die der Benutzer nicht sehen soll, und einige andere Dateien, die Tests und Benutzerfreundlichkeit abdecken.

                                                                          In PSStackExchange.psm1 laden wir unsere öffentlichen und privaten Funktionen. Wenn ein Modul in Arbeit ist, exportiere ich normalerweise $Public.Basename, um harte Codierungsfunktionen zum Exportieren in psd1 zu vermeiden. Sobald ein Modul freigegeben ist, versuche ich, die öffentlichen Funktionen zu psd1 hinzuzufügen.

                                                                          Wenn Sie ein Modul schreiben, sollten Sie erwägen, Pester-Tests dafür zu schreiben. Es ist ziemlich beruhigend, eine Reihe von Tests zu haben, die nach jeder Änderung, die Sie vornehmen, automatisch ausgeführt werden, anstatt davon auszugehen, dass der von Ihnen geschriebene Code korrekt ist, oder zu versuchen, Ihren Code nach jeder Änderung manuell zu testen. Versuch es einmal! Wir fügen einige oberflächliche Tests in PSStackExchange.Tests.ps1 ein.

                                                                          Schließlich fügen wir einige Usability-Funktionen hinzu. Wir fügen ein about_PSStackExchange-Hilfethema hinzu, dekorieren unsere Ausgabe mit der Datei PSStackExchange.Format.ps1xml und fügen einige Hinweise zur Installation und Verwendung des Moduls in der README.md hinzu.

                                                                          Wir können loslegen! Schauen wir uns an, wie wir dieses Modul veröffentlichen können, damit andere es verwenden und verbessern können.

                                                                          Schließen Sie AppVeyor an und veröffentlichen Sie das Modul

                                                                          Der Inhalt unseres Moduls ist bereit zur Veröffentlichung. Bevor wir dies veröffentlichen, werden wir die kontinuierliche Integration mit einigen praktischen automatisierten Tests über AppVeyor ermöglichen.

                                                                          Zuerst richten wir unser Projekt in AppVeyor ein, indem wir appveyor.yml zum Repository hinzufügen und das GitHub-Projekt zu unserem AppVeyor-Konto hinzufügen. Wir abstrahieren die Aufrufe von Pester in AppVeyor.Pester.ps1, wobei wir einige Ideen von hier verwenden.

                                                                          Als Nächstes übertragen wir die Änderungen, die wir auf unserem Computer vorgenommen haben, auf GitHub. Unser Code ist jetzt veröffentlicht und AppVeyor beginnt mit der Ausführung eines Builds.

                                                                          Schließlich möchten wir unser Modul in der PowerShell-Galerie veröffentlichen, um Endbenutzern mit PowerShell 5 eine einfache Möglichkeit zu geben, Ihr Modul zu finden und zu installieren. Wir könnten dies anschließen, um es automatisch in AppVeyor auszuführen, aber das ist ein Thema für später.

                                                                          • Melden Sie sich mit Ihrem Microsoft-Konto bei PowerShellGallery.com an
                                                                          • Holen Sie sich Ihren API-Schlüssel (finden Sie ihn hier)
                                                                          • Veröffentlichen Sie Ihr Modul!

                                                                          Unser Modul ist jetzt live in der PowerShell-Galerie!

                                                                          Wie ich Module schreibe, zusammengefasst

                                                                          Wütend! Das war ein langer Beitrag. Glücklicherweise können die meisten dieser Dinge in jedem Modul, das Sie schreiben, wiederverwendet werden. Sehen wir uns die Schritte an:

                                                                          • Erstellen Sie ein GitHub-Repository
                                                                          • Erstellen Sie das Modul und das Gerüst drumherum
                                                                          • Schließen Sie AppVeyor an und veröffentlichen Sie das Modul

                                                                          Der erste und letzte Schritt dauern jeweils ein bis zwei Minuten. Das Modul und das Gerüst drumherum können kopiert und optimiert werden, was nur wenige Minuten dauern sollte. Die meiste Zeit werden Sie damit verbringen, die erweiterten Funktionen für das Modul zu schreiben.

                                                                          PSStackExchange

                                                                          Das Modul ist veröffentlicht und einsatzbereit! Ich bin auf einem anderen Computer mit PowerShell 5 und kann mit ein paar Codezeilen loslegen:

                                                                          Hier einige Ausgaben der Beispiele:

                                                                          Einpacken

                                                                          Das ist alles! Wenn Sie noch keine Module schreiben, sollten Sie dies auf jeden Fall in Betracht ziehen. Auf der Suche nach weiterführender Lektüre? Hier sind ein paar Referenzen, die nützlich sein könnten:

                                                                            - Dies ist vom PowerShell Summit 2014, dank Kirk Freiheit - Shameless Plug. Enthält eine Reihe von Referenzen. - Dies gibt einen schönen Überblick über die Vision und Ziele von PowerShell. Wenn Sie Module für den öffentlichen Gebrauch schreiben, sollten Sie dies lesen, um zu vermeiden, dass etwas so Schreckliches wie das PVS-Snapin „PowerShell“ von Citrix veröffentlicht wird.

                                                                          Randnotiz für Anbieter

                                                                          Das Schreiben von PSStackExchange hat mich daran erinnert, wie wichtig es für Anbieter von Unternehmensprodukten ist, PowerShell-Module bereitzustellen, die die API ihres Produkts umschließen. Trotz einer netten API und einer anständigen Dokumentation war das Schreiben eines funktionsarmen PowerShell-Moduls dafür genauso mühsam wie das Umschließen der Infoblox-API.

                                                                          Anbieter: Wenn Ihre Konkurrenz ein PowerShell-Modul bereitstellt und Sie dies nicht tun, besteht eine gute Chance, dass ich auf das Produkt Ihrer Konkurrenz dränge. Dies ist ein großer Mehrwert, wenn Sie es richtig machen und die PowerShell-Konventionen befolgen.

                                                                          BEARBEITEN Juli 2016: Aktualisierte Links zu PSStackExchange, um auf einen bestimmten Zeitpunkt zu verweisen. Die aktuelle Version dieses Projekts enthält möglicherweise Aktualisierungen, um Dinge wie PSDeploy zu veranschaulichen.

                                                                          Teilen auf

                                                                          Erstellen eines PowerShell-Moduls wurde am 06.09.2015 veröffentlicht und zuletzt am 24.07.2016 geändert.


                                                                          Erstellen eines PowerShell-Moduls

                                                                          Vor einiger Zeit hat jemand erwähnt, dass es Spaß machen könnte, den PowerShell-Modul-Schreibprozess zu dokumentieren. Dies wurde schon früher gemacht, aber ich denke, es würde Spaß machen, meinen eigenen Prozess von der ersten Idee bis zur Veröffentlichung auf der offiziellen PowerShellGallery.com-Site zu veröffentlichen.

                                                                          Ich habe vor kurzem das Puzzle Scripting Games vom August auf PowerShell.org besprochen, bei dem es um die Abfrage einer Web-API ging. Es stellt sich heraus, dass dies ein sehr häufiges Bedürfnis ist, und viele der Module, die wir schreiben, abstrahieren diese APIs in praktische PowerShell-Funktionen und -Module.

                                                                          Wir gehen davon aus, dass Sie wissen, was ein Modul ist, und dass Sie Erfahrung mit dem Schreiben von PowerShell-Funktionen haben. Wenn nicht, verbringen Sie einige Zeit damit, PowerShell zu lernen, bevor Sie hier fortfahren!

                                                                          Dieser Beitrag behandelt meine typische Formel zum Schreiben eines Moduls am Beispiel der Stack Exchange API. Fühlen Sie sich frei, den PSStackExchange-Code selbst zu durchsuchen.

                                                                          Warum Module?

                                                                          Erweiterte Funktionen bringen Sie mit PowerShell weit. Wenn Sie heute keine Funktionen schreiben, sollten Sie Ihren Code in diese wiederverwendbaren Tools kapseln. Aber… sie haben ihre Grenzen. Hier sind einige Gründe, warum Sie Ihre erweiterten Funktionen in einem Modul bündeln könnten:

                                                                          • Code-Organisation vereinfachen
                                                                          • Zusammengehörige Funktionen gruppieren
                                                                          • Status zwischen Funktionen teilen, aber nicht mit dem Benutzer
                                                                          • Verwenden Sie „Hilfsfunktionen“, die dem Benutzer nicht zugänglich gemacht werden sollen
                                                                          • Auffindbarkeit verbessern: Find-Module MyModule oder Get-Command -Module MyModule
                                                                          • Verteilung vereinfachen: Install-Module MyModule

                                                                          In unserem Beispiel organisieren wir eine Reihe von Stack Exchange-Funktionen in einem Modul.

                                                                          Das scheint kompliziert!

                                                                          Dies von Grund auf neu zu tun, kann ein wenig Zeit in Anspruch nehmen. Glücklicherweise können Sie, sobald Sie ein oder zwei Module schreiben, schnell loslegen, indem Sie es kopieren und ein paar Dateien optimieren. Lassen Sie sich nicht von der Länge dieses Beitrags abschrecken, Ihre eigenen Module zu schreiben, es lohnt sich, ein paar Minuten damit zu verbringen, die Grundlagen zu erlernen!

                                                                          Die Zutaten

                                                                          Es gibt viele Möglichkeiten, ein Modul zu erstellen, von der Erweiterung einer .psm1-Erweiterung auf eine Datei bis hin zum Kompilieren eines vollwertigen Binärmoduls aus C#. Wir werden hier einen gemeinsamen Mittelweg nehmen und die folgenden Zutaten verwenden:

                                                                          • Ein Modul-Manifest. Dies ist eine .psd1-Datei, die Ihr Modul beschreibt. PSStackExchange.psd1
                                                                          • Ein Root-Modul. In unserem Fall eine Skriptmodul-.psm1-Datei. Dies ist nur PowerShell-Code, der beim Importieren des Moduls ausgeführt wird. PSStackExchange.psm1
                                                                          • Exportierte (öffentliche) Funktionen. Dies sind die erweiterten Funktionen, die ein Endbenutzer von unserem Modul aus ausführen kann. Zum Beispiel Get-SEQuestion.ps1 oder Get-SEObject.ps1
                                                                          • Private Funktionen. Dies sind optionale „Hilfsfunktionen“, die wir in unseren exportierten Funktionen verwenden möchten, die der Endbenutzer nicht sehen sollte. Zum Beispiel Add-ObjectDetail.ps1 oder Join-Parts.ps1
                                                                          • Formate. Dies sind optionale format.ps1xml-Formate, um Ihre Ausgabe zu verschönern, die oft im Modulmanifest „FormatsToProcess“ angegeben sind. PSStackExchange.Format.ps1xml
                                                                          • Liesmich. Wenn Sie GitHub oder ein anderes gängiges Code-Repository verwenden, ist die Readme.md eine praktische Startseite für Ihr Projekt, die mit einfachem Markdown anstelle von HTML geschrieben wurde
                                                                          • AppVeyor-Konfiguration. Wenn Sie eine unterstützte Versionskontrolllösung verwenden, ermöglicht AppVeyor eine einfache und kostenlose kontinuierliche Integration und Bereitstellung für Open-Source-Projekte. AppVeyor.yml

                                                                          Wir haben unsere Zutaten, schauen wir uns ein Rezept für ein Modul an!

                                                                          Das Rezept

                                                                          Wir werden dies in ein paar schnellen Schritten tun:

                                                                          • Erstellen Sie ein GitHub-Repository
                                                                          • Erstellen Sie das Modul und das Gerüst drumherum
                                                                          • Schließen Sie AppVeyor an und veröffentlichen Sie das Modul

                                                                          Dies kann beim ersten Durchlaufen einige Minuten dauern, aber Sie können dieses Gerüst für jedes Modul, das Sie schreiben, ausleihen und optimieren. Tatsächlich können Sie PowerShell-Hilfsmodule und -Tools finden oder schreiben, die diesen Prozess vereinfachen.

                                                                          Nach dem Rezept

                                                                          Es gibt keine wirkliche Reihenfolge, je nachdem, was Sie tun oder nicht integrieren, haben Sie nicht das Gefühl, dass Sie dies buchstabengetreu befolgen müssen.

                                                                          Erstellen Sie ein GitHub-Repository.

                                                                          Dies sollte ziemlich einfach sein. Wenn Sie GitHub noch nicht verwendet haben, kann Folgendes hilfreich sein:

                                                                          • Erstellen Sie ein Konto auf GitHub, laden Sie GitHub für Windows herunter
                                                                          • Erstellen Sie ein neues Repository (wir nennen es PSStackExchange und wählen Sie die MIT-Lizenz)
                                                                          • Klonen Sie PSStackExchange mit GitHub für Windows

                                                                          Kommen wir zum wichtigsten Teil, dem Modul selbst.

                                                                          Erstellen Sie das Modul und das Gerüst drumherum

                                                                          So organisiere ich normalerweise meine Module. Wir verwenden PSStackExchange als Beispiel, ersetzen Sie dies durch Ihr eigenes Modul!

                                                                            • en-US (oder Gebietsschemas Ihrer Wahl)
                                                                              • about_PSStackExchange.help.txt
                                                                              • Join-Parts.ps1
                                                                              • Get-SEData.ps1
                                                                              • Get-SEObject.ps1
                                                                              • Search-SEQuestion.ps1
                                                                              • Some.Library.dll
                                                                              • SomeDependency.exe

                                                                              Wenn wir unser Projekt zu GitHub oder einem ähnlichen Code-Repository hinzufügen, fügen wir etwas mehr Gerüste hinzu:

                                                                                • PSStackExchange (oben beschriebener Modulordner)
                                                                                • Tests
                                                                                  • PSStackExchange.Tests.ps1
                                                                                  • Appveyor.Pester.ps1

                                                                                  Ich habe den folgenden Code durchlaufen lassen, um loszulegen. Normalerweise kopiere ich einfach das Gerüst aus einem anderen Modul, erstelle eine neue GUID in der psd1 und optimiere andere modulspezifische Referenzen.

                                                                                  In unserem Fall haben wir einige erweiterte Funktionen von Stack Exchange, die hoffentlich einigen Best Practices folgen, einige private Hilfsfunktionen, die der Benutzer nicht sehen soll, und einige andere Dateien, die Tests und Benutzerfreundlichkeit abdecken.

                                                                                  In PSStackExchange.psm1 laden wir unsere öffentlichen und privaten Funktionen. Wenn ein Modul in Arbeit ist, exportiere ich normalerweise $Public.Basename, um harte Codierungsfunktionen zum Exportieren in psd1 zu vermeiden. Sobald ein Modul freigegeben ist, versuche ich, die öffentlichen Funktionen zu psd1 hinzuzufügen.

                                                                                  Wenn Sie ein Modul schreiben, sollten Sie erwägen, Pester-Tests dafür zu schreiben. Es ist ziemlich beruhigend, eine Reihe von Tests zu haben, die nach jeder Änderung, die Sie vornehmen, automatisch ausgeführt werden, anstatt davon auszugehen, dass der von Ihnen geschriebene Code korrekt ist, oder zu versuchen, Ihren Code nach jeder Änderung manuell zu testen. Versuch es einmal! Wir fügen einige oberflächliche Tests in PSStackExchange.Tests.ps1 ein.

                                                                                  Schließlich fügen wir einige Usability-Funktionen hinzu. Wir fügen ein about_PSStackExchange-Hilfethema hinzu, dekorieren unsere Ausgabe mit der Datei PSStackExchange.Format.ps1xml und fügen einige Hinweise zur Installation und Verwendung des Moduls in der README.md hinzu.

                                                                                  Wir können loslegen! Schauen wir uns an, wie wir dieses Modul veröffentlichen können, damit andere es verwenden und verbessern können.

                                                                                  Schließen Sie AppVeyor an und veröffentlichen Sie das Modul

                                                                                  Der Inhalt unseres Moduls ist bereit zur Veröffentlichung. Bevor wir dies veröffentlichen, werden wir die kontinuierliche Integration mit einigen praktischen automatisierten Tests über AppVeyor ermöglichen.

                                                                                  Zuerst richten wir unser Projekt in AppVeyor ein, indem wir appveyor.yml zum Repository hinzufügen und das GitHub-Projekt zu unserem AppVeyor-Konto hinzufügen. Wir abstrahieren die Aufrufe von Pester in AppVeyor.Pester.ps1, wobei wir einige Ideen von hier verwenden.

                                                                                  Als Nächstes übertragen wir die Änderungen, die wir auf unserem Computer vorgenommen haben, auf GitHub. Unser Code ist jetzt veröffentlicht und AppVeyor beginnt mit der Ausführung eines Builds.

                                                                                  Schließlich möchten wir unser Modul in der PowerShell-Galerie veröffentlichen, um Endbenutzern mit PowerShell 5 eine einfache Möglichkeit zu geben, Ihr Modul zu finden und zu installieren. Wir könnten dies anschließen, um es automatisch in AppVeyor auszuführen, aber das ist ein Thema für später.

                                                                                  • Melden Sie sich mit Ihrem Microsoft-Konto bei PowerShellGallery.com an
                                                                                  • Holen Sie sich Ihren API-Schlüssel (finden Sie ihn hier)
                                                                                  • Veröffentlichen Sie Ihr Modul!

                                                                                  Unser Modul ist jetzt live in der PowerShell-Galerie!

                                                                                  Wie ich Module schreibe, zusammengefasst

                                                                                  Wütend! Das war ein langer Beitrag. Glücklicherweise können die meisten dieser Dinge in jedem Modul, das Sie schreiben, wiederverwendet werden. Sehen wir uns die Schritte an:

                                                                                  • Erstellen Sie ein GitHub-Repository
                                                                                  • Erstellen Sie das Modul und das Gerüst drumherum
                                                                                  • Schließen Sie AppVeyor an und veröffentlichen Sie das Modul

                                                                                  Der erste und letzte Schritt dauern jeweils ein bis zwei Minuten. Das Modul und das Gerüst drumherum können kopiert und optimiert werden, was nur wenige Minuten dauern sollte. Die meiste Zeit werden Sie damit verbringen, die erweiterten Funktionen für das Modul zu schreiben.

                                                                                  PSStackExchange

                                                                                  Das Modul ist veröffentlicht und einsatzbereit! Ich bin auf einem anderen Computer mit PowerShell 5 und kann mit ein paar Codezeilen loslegen:

                                                                                  Hier einige Ausgaben der Beispiele:

                                                                                  Einpacken

                                                                                  Das ist alles! Wenn Sie noch keine Module schreiben, sollten Sie dies auf jeden Fall in Betracht ziehen. Auf der Suche nach weiterführender Lektüre? Hier sind ein paar Referenzen, die nützlich sein könnten:

                                                                                    - Dies ist vom PowerShell Summit 2014, dank Kirk Freiheit - Shameless Plug. Enthält eine Reihe von Referenzen. - Dies gibt einen schönen Überblick über die Vision und Ziele von PowerShell. Wenn Sie Module für den öffentlichen Gebrauch schreiben, sollten Sie dies lesen, um zu vermeiden, dass etwas so Schreckliches wie das PVS-Snapin „PowerShell“ von Citrix veröffentlicht wird.

                                                                                  Randnotiz für Anbieter

                                                                                  Das Schreiben von PSStackExchange hat mich daran erinnert, wie wichtig es für Anbieter von Unternehmensprodukten ist, PowerShell-Module bereitzustellen, die die API ihres Produkts umschließen. Trotz einer netten API und einer anständigen Dokumentation war das Schreiben eines funktionsarmen PowerShell-Moduls dafür genauso mühsam wie das Umschließen der Infoblox-API.

                                                                                  Anbieter: Wenn Ihre Konkurrenz ein PowerShell-Modul bereitstellt und Sie dies nicht tun, besteht eine gute Chance, dass ich auf das Produkt Ihrer Konkurrenz dränge. Dies ist ein großer Mehrwert, wenn Sie es richtig machen und die PowerShell-Konventionen befolgen.

                                                                                  BEARBEITEN Juli 2016: Aktualisierte Links zu PSStackExchange, um auf einen bestimmten Zeitpunkt zu verweisen. Die aktuelle Version dieses Projekts enthält möglicherweise Aktualisierungen, um Dinge wie PSDeploy zu veranschaulichen.

                                                                                  Teilen auf

                                                                                  Erstellen eines PowerShell-Moduls wurde am 06.09.2015 veröffentlicht und zuletzt am 24.07.2016 geändert.


                                                                                  Schau das Video: Rammstein VS Cookie Monster