Skip to the main content.

Quellcodeverwaltung für PowerShell-Module und -Scripte

Inhaltsverzeichnis

Post Featured Image

PowerShell-Scripte sind aus der heutigen Administration von Betriebssystemen und Applikationen nicht mehr wegzudenken. Die klassische Verwaltung mithilfe einer MMC tritt immer mehr in den Hintergrund. Als Ersatz für die rein grafische Verwaltung einer lokalen oder hybriden Infrastruktur stellt uns Microsoft das browserbasierte Windows Admin Center zur Verfügung.

Die Automation und der vereinfachte Betrieb Ihrer IT-Plattform erfordern PowerShell-Scripte, die individuell auf Ihre Anforderungen angepasst sind. Die Entwicklung eines Scripts endet nicht mit der ersten funktionsfähigen Version. Vielmehr entwickelt sich ein Script mit neuen Anforderungen immer weiter. Und dies, idealerweise, in einem Team aus mehreren Administratoren.

Genau hier hilft Ihnen eine Quellcodeverwaltung für Ihre PowerShell-Scripte.

Warum benötige ich eine Quellcodeverwaltung?

Wenn Sie mit der Nutzung von PowerShell-Scripten für Ihre IT-Umgebung beginnen, starten Sie in meisten Fällen mit einem Script, das Sie über eine Suchanfrage in einer Suchmaschine gefunden haben. Sie speichern die Datei in einem, mehr oder weniger, beliebigen Dateiverzeichnis auf Ihrem lokalen Computer ab. Wenn Sie Änderungen an diesem Script durchführen, überschreiben Sie immer die vorherige Datei oder erstellen immer neue Kopien der Originaldatei mit angepassten Dateinamen. Diese Vorgehensweise ist sehr fehleranfällig und für die Arbeit in einem Team aus mehreren Administratoren ungeeignet.

Eine Quellcodeverwaltung für Ihre PowerShell-Scripte bietet folgende Vorteile:

  • Jedes Script unterliegt einer Versionierung mit der Option einer Wiederherstellung einer Vorversion (Rollback)
  • Verzweigen (Fork) von einer aktuellen Version, um eine neue Version ohne Beeinträchtigung der aktuellen Version zu entwickeln
  • Bereitstellung von PowerShell-Scripten aus externen Quellen, die für die lokale Umgebung angepasst und erweitert wurden
  • Auditprotokollierung der Änderungen mit der Information, wer eine Änderung vorgenommen hat

Aufbau einer Quellcodeverwaltung

Die Möglichkeiten zur Implementierung einer Quellcodeverwaltung sind vielfältig. Vielleicht existiert im Unternehmen bereits eine zentrale Quellcodeverwaltung, die von einer Entwicklungsabteilung verwendet wird. In diesem Fall ist der einfachste Weg, dass Sie in dieser Quellcodeverwaltung einen eigenen Bereich, das sog. Repository, erhalten. Achten Sie darauf, dass Sie die Ordner- und Berechtigungsstruktur in einem zentralen Repository eigenständig verwalten können.

Quellcode-Verwaltungssysteme

Wenn Sie noch keine Quellcodeverwaltung im Unternehmen im Einsatz haben, stehen Ihnen unterschiedliche Lösungen zur Verfügung. Zu diesen Lösungen gehören u. a. Team Foundation Server, CVS, Subversion oder Git, um nur einige wenige zu nennen. Die erste Frage, die Sie sich aber stellen müssen ist, ob Sie die Quellcodeverwaltung auf eigenen Servern in der internen IT-Infrastruktur aufbauen möchten oder ob Sie die Nutzung einer Cloud-basierten Lösung vorziehen.

Persönlich nutze ich GitHub als einheitliche Quellcodeverwaltung für meine unterschiedlichen Projekte. Zu diesen Projekten gehören nicht nur PowerShell-, sondern auch C#- und Web-Projekte. GitHub ist eine webbasierte Quellcodeverwaltung und bietet neben einem kostenlosen Plan für Einzelnutzer auch mehrere kostenpflichtige Pläne für die professionelle Nutzung von Entwicklerteams. Für die Nutzung im Unternehmenskontext empfehle ich auf jeden Fall einen kostenpflichtigen Plan für Teams. Der Vorteil eines solchen Plans liegt darin, dass die Eigentümerschaft und die Verwaltung einem generischen Firmenkonto zugeordnet ist und nicht einer einzelnen Person.

Tipp: Erfahren Sie wie ScriptRunner Ihnen hilft, Scripte im Team zu entwickeln und zentral zu organisieren.

Quellcodeverwaltung strukturieren

Als Teil der Verwaltung erstellen Sie einen oder mehrere Speicherorte für die Ablage von PowerShell-Scripten. Diese Speicherorte werden als Repository bezeichnet. Für jedes erstellte Repository können Sie festlegen, wer Zugriff auf das Repository hat und ob es sich um ein öffentliches oder ein privates Repository handelt. Wenn Sie die Quellcodeverwaltung nur für den internen Gebrauch im Unternehmen nutzen möchten, so erstellen Sie private Repositories.

Ob Sie nun ein Repository je Administrationsteam oder für jedes einzelne Script ein separates Repository erstellen, hängt ganz von Ihren Bedürfnissen ab. Da Sie für jedes einzelne Repository die Berechtigungen konfigurieren müssen, ist diese Variante mit einem erhöhten Aufwand verbunden, bietet aber eine granulare Kontrolle. Für jedes einzelne Repository wird im lokalen Dateisystem Ihres Arbeitsplatzrechners bzw. Servers ein separates Zielverzeichnis benötigt.

Erstellen Sie zuerst ein Verzeichnis, unterhalb dessen Sie die notwendigen Repositories herunterladen. Dieser Prozess wird als Check-out bezeichnet. Abbildung 1 zeigt eine Ordnerstruktur für die Teams Active Directory, Exchange, Office 365 und SharePoint.

Repositories, Folder, Screenshot

Abbildung 1: Beispielhafte Darstellung eines Script-Repositorys im lokalen Dateisystem, gruppiert für Administrationsteams

Zur besseren Übersicht sind die einzelnen Scripte in Ordner gegliedert. Hierdurch haben Sie die Möglichkeit, Konfigurationsdateien und weitere Informationen im Kontext eines Scriptes zu speichern. Jeder Administrator kann nun die für seine tägliche Arbeit notwendigen Scripte herunterladen, bei Bedarf aktualisieren und wieder hochladen. Das Hochladen von Änderungen, hierzu gehören auch neue Verzeichnisse und Dateien, bezeichnet man als Check-in oder Commit.

Im Gegensatz zu einer Gruppierung nach administrativen Teams sieht eine lokale Verzeichnisstruktur für einzelne Repositories je Script wie folgt aus (Abbildung 2):

Repositories, Screenhot, Folder

Abbildung 2: Beispielhafte Darstellung eines Script-Repositorys im lokalen Dateisystem, gruppiert nach Scripten

Sie erkennen den Unterschied schnell. Wenn Sie eine große Anzahl an PowerShell-Scripten haben, wird dieser Ansatz schnell unübersichtlich.

Ich verwende beide Varianten. Meine öffentlichen PowerShell-Scripte sind jeweils in einem eigenen Repository gespeichert. Dies ermöglicht mir die Kontrolle jedes einzelnen Releases eines Scriptes. Gleichzeitig habe ich einige wenige private Repositories, in denen ich thematisch geordnet Scripte für den täglichen Gebrauch sammle und pflege.

Im lokalen Dateisystem stellt sich diese Mischung wie in Abbildung 3 sichtbar dar:

Repositories, Screenshot,

Abbildung 3: Beispielhafte Darstellung eines Script-Repositorys im lokalen Dateisystem, gruppiert nach Scripten und Administrationsteams

Die grün umrandeten Verzeichnisse sind ausgecheckte Repositories von einzelnen PowerShell-Scripten. Das orange umrandete Verzeichnis ist ein Repository, dass eine ganze Sammlung von Scripten zur Einrichtung und Verwaltung eines Microsoft Azure Labs enthält.

Readme-Dateien

Natürlich pflegen Sie die Hilfeinformationen eines PowerShell-Scriptes innerhalb eines Scriptes. Sie stellen sogar Anwendungsbeispiele bereit, die mit dem Cmdlet Get-Help abgefragt werden können. Diese Informationen sind beim direkten Arbeiten innerhalb einer PowerShell-Session praktisch und erforderlich.

Für die Durchsicht eines webbasierten Repositorys und der Suche nach einem passenden Cmdlet sind Readme-Dateien von größerem Nutzen. Erstellen Sie pro Repository eine Readme-Datei, die den Inhalt des Repositorys und seinen Zweck beschreibt. Ebenso sollten Sie hier die Ansprechpartner bzw. die Verantwortlichen mit Kontaktdaten aufführen. Erstellen Sie ebenso zu jedem Script eine Readme-Datei, die den Zweck des Scripts beschreibt und Anwendungsbeispiele bietet. Solche Readme-Dateien sind im Markdown-Format zu erstellen.

Clients für die Quellcodeverwaltung

Für das Check-out, das Commit und andere Zugriffsaktionen auf ein Repository benötigen Sie einen passenden Client. Je nach verwendeter Quellcodeverwaltung und lokalem Betriebssystem stehen unterschiedliche Softwarelösungen zur Verfügung. Ebenso gibt es Script-Editoren, die bereits über eine eingebaute Quellcodeverwaltung verfügen. Ob Sie nun lieber mit der Kommandozeilenversion von Git, mit der Dateiexplorer-Erweiterung Tortoise oder aber mit der Git-Erweiterung für Visual Studio Code arbeiten möchten, müssen Sie selbst entscheiden. Jeder Ihrer Administratoren wird persönlichen Präferenzen für die tägliche Arbeit haben. Und das ist auch gut so.

Achten Sie vielmehr darauf, dass die verwendeten Werkzeuge immer in der aktuellen Version eingesetzt werden und vollständig kompatibel zur Quellcodeverwaltung sind.

PowerShell-Scripte im produktiven Betrieb

Verwenden Sie Ihre PowerShell-Scripte nie im direkten Speicherpfad eines verbundenen Repository. PowerShell-Scripte erstellen manchmal scriptbezogene Protokolldateien, die im gleichen Dateipfad gespeichert werden. Diese Daten sind, aus Sicherheitsgründen, nicht für die Speicherung in einer Quellcodeverwaltung geeignet.

Um PowerShell-Scripte produktiv auszuführen, empfehle ich Ihnen eine separate Verzeichnisstruktur aufzubauen, die nicht Bestandteil eines Repository ist. Verwenden Sie als Verzeichnisnamen auf der obersten Ebene einen Namen, aus dem klar hervorgeht, dass es sich um produktive Scripte handelt (siehe Abbildung 4).

Scriptverzeichnis, Scripts, Folder, Screenshot

Abbildung 4: Beispielhafte Darstellung eines Script-Repositorys im lokalen Dateisystem zur Speicherung produktiver PowerShell-Scripte

Idealerweise behalten Sie auch die Verzeichnisstruktur des Repository bei. Dies hilft ihnen und Ihren Teamkollegen, sich zurechtzufinden und Fehler zu vermeiden.

Alternativ können Sie innerhalb eines Repositories auch mit geschützten Ordnern (Protected Branches) arbeiten. Hierbei erstellen Sie für eine funktionsfähige Version eines Scripts eine Kopie-Zweig (Branch), der gegen Löschung und unberechtigtes Überschreiben geschützt ist. Sobald eine neue Version des Scriptes produktiv verwendet werden kann, muss für einen Protected Branch eine Anfrage zum Zusammenführen des Quellcodes (Merge-Request) erfolgen. Das Zusammenführen müssen Sie explizit freigeben. So können Sie sicherstellen, dass nur erfolgreich getesteter Quellcode zum Einsatz kommt.

 

Abschließende Worte

Noch ein Wort zur Sicherheit. Unabhängig davon, ob Sie nun GitHub oder aber eine andere webbasierte Lösung zur Quellcodeverwaltung nutzen möchten, achten Sie immer auf die richtige Konfiguration des Zugriffs auf die Repositories. Eine sichere Quellcodeverwaltung bietet Ihnen die Möglichkeit, eine Multifaktor-Authentifizierung zu aktivieren. Nutzen Sie diese Möglichkeit, um den Quellcode Ihrer Scripte vor unberechtigtem Zugriff zu schützen.

Nutzen Sie gerne meine öffentlichen PowerShell-Scripte als Vorlage oder werfen Sie einen Blick in die über 1000 gebrauchsfertigen Scripte aus den ScriptRunner ActionPacks.

Ich wünsche Ihnen viel Spaß mit PowerShell und freue mich über Ihre Rückmeldungen.

Weiterführende Links

Zusammenhängende Posts

Über den Autor: