PowerShell Gallery
Haben Sie schon gesehen, wie einfach Sie mit "Install-Module" ein Zusatzmodul für PowerShell installieren können? Wenn der Computer ins Internet kommt, dann haben Sie in wenigen Sekunden eine neue Funktion nachgerüstet.
Module finden
Natürlich müssen Sie den Namen dazu finden. Aber auch hier hilft ihnen "Find-Module" weiter, welches auch Wildcards unterstützt. Wer hier mal Anfang Feb 2019 ein "Find-Module *" gestartet hat, bekam über 3600 Module von über 1000 Autoren. Davon waren 282 Module von Microsoft. Hierbei war nur die PSGallery die Quelle. Es ist durchaus möglich auch andere Quellen mit anzugeben.
Achtung
Die Autoren sind nicht verifiziert und theoretisch kann jede ein Modul
bereitstellen, welches Sie dann eventuell als Administrator sogar starten. Das
ist ein großer Vertrauensvorschuss, den ich so nicht einfach gewähren würde.
Allerdings sind alle Module ja "Sourcecode" und könnten von ihnen überprüft
werden. Das werden aber die wenigsten tun. Also Vorsicht beim Einsatz selbst
wenn der Code signiert ist.
Genau genommen ist das aber auch nicht viel anders als die verschiedenen Paketmanager unter Unix oder das "Install-Windowsfeature" für Windows. Die Modularisierung nimmt einfach zu und erlaubt auch schnelle Updates.
Parallel dazu gibt es auch noch "Find-Script", um einzelne Skripte zu finden.
PS C:\> get-command *-script CommandType Name Version Source ----------- ---- ------- ------ Function Find-Script 1.0.0.1 PowerShellGet Function Install-Script 1.0.0.1 PowerShellGet Function Publish-Script 1.0.0.1 PowerShellGet Function Save-Script 1.0.0.1 PowerShellGet Function Uninstall-Script 1.0.0.1 PowerShellGet Function Update-Script 1.0.0.1 PowerShellGet PS C:\> get-command *-module CommandType Name Version Source ----------- ---- ------- ------ Function Find-Module 1.0.0.1 PowerShellGet Function Install-Module 1.0.0.1 PowerShellGet Function Publish-Module 1.0.0.1 PowerShellGet Function Save-Module 1.0.0.1 PowerShellGet Function Uninstall-Module 1.0.0.1 PowerShellGet Function Update-Module 1.0.0.1 PowerShellGet Cmdlet Get-Module 3.0.0.0 Microsoft.PowerShell.Core Cmdlet Import-Module 3.0.0.0 Microsoft.PowerShell.Core Cmdlet New-Module 3.0.0.0 Microsoft.PowerShell.Core Cmdlet Remove-Module 3.0.0.0 Microsoft.PowerShell.Core
Skripte und Module sind eine sehr gute Plattform um Code gemeinsam zu nutzen und zu veröffentlichen. Ein Skript ist eigentlich nur eine einzelne Datei während ein Modul mehrere Dateien zusammenfasst.
- Find-Module
https://docs.microsoft.com/en-us/powershell/module/powershellget/Find-Module - Find-Script
https://docs.microsoft.com/en-us/powershell/module/powershellget/Find-Script - Getting Started with the PowerShell Gallery
https://docs.microsoft.com/en-us/powershell/gallery/getting-started
Installation und Update
Wenn Sie das passende Skript oder Modul gefunden haben, dann müssen Sie es natürlich erst herunterladen und installieren. Das geht sehr einfach mit Install-Module und Install-Script.
- Install-Module
https://docs.microsoft.com/en-us/powershell/module/powershellget/Install-Module - Install-Script
https://docs.microsoft.com/en-us/powershell/module/powershellget/Install-Script - Update-Module
https://docs.microsoft.com/en-us/powershell/module/powershellget/update-module?view=powershell-6 - Update-Script
https://docs.microsoft.com/en-us/powershell/module/powershellget/update-script?view=powershell-6
Wenn Sie die Installation als Administrator durchführen, dann landen die Dateien in folgenden Ordnern
$env:ProgramFiles\WindowsPowerShell\Modules $env:ProgramFiles\WindowsPowerShell\Scripts
Aber auch als Benutzer können Sie sehr einfach Module und Skripte mit dem Parameter "-Scope CurrentUser" in ihre eigene Umgebung importieren und nutzen.
$env:USERPROFILE\Documents\WindowsPowerShell\Modules $env:USERPROFILE\Documents\WindowsPowerShell\Scripts
In den Verzeichnissen wird sogar eine Versionierung mit geführt, so dass Sie auch eine ältere Version nutzen können. Die PoweShell 5 lädt per Default alle Module automatisch nach, so dass Command-Completion möglich ist.
- Installing a Module from the PowerShell Gallery
https://mcpmag.com/articles/2018/10/11/installing-module-from-powershell-gallery.aspx
Das eigene Modul bereitstellen
Wer sagt denn, dass Module nur für Administratoren und Benutzer sind. genau genommen könnten Sie eine komplette Skriptverteilung über Module machen. Sie könnten sogar eine Aufgabe in mehrere Module aufteilen, damit unterschiedliche Teams ihr Modul entwickeln. Allerdings haben wir zwei Hausforderungen:
- Der Modulname muss eindeutig sein
- Commandlets sollten eindeutig sein
Das ist natürlich nicht schön, wenn jemand anderes einen eingängigen Modulnamen schon verwendet oder sogar auf die Verwechslung hofft. Noch ungeschickter ist die Benennung von Commandlets, damit es einen Konflikt gibt. Das schafft leider nicht mal Microsoft immer zuverlässig. So sind die Namen der Exchange Online und Exchange On-Premises Commandlets teilweise identisch. In einer Session muss man dann immer den Modulname mit angeben, damit das richtige Commandlet angesprochen wird.
Daher sollten Sie schon überlegen, ihre Commandlets mit eine Präfix zu versehen. Microsoft macht das schon an einigen Stellen
*-AD* für Active Directory *-CS* für Skype for Business *-CSOnline* für Skype for Business Online *-CSteams* für Skype for Business *-AzureAD * für Azure AD *-ADSync* für AzureAD-Connect und einige andere
Die größten Ausreißer sind die Exchange-Commandlets, welche gar kein Prefix haben. Dass ein "Get-User" und "Get-Group" zur Exchange PowerShell gehören, ist immer wieder verwirrend.
Vielleicht fangen Sie erst einmal mit einem Skript an und arbeiten sich dann langsam in Module ein. Microsoft hat die entsprechenden Prozesse recht gut dokumentiert und sogar eine Verbindung mit GitHub ist möglich, damit Sie dort per Versionierung den Code weiter entwickeln und dann auf GitHub publizieren.
- Creating and publishing an item
https://docs.microsoft.com/en-us/powershell/gallery/how-to/publishing-packages/publishing-a-package - PowerShellGallery Publishing Guidelines and Best Practices
https://docs.microsoft.com/en-us/powershell/gallery/concepts/publishing-guidelines - How To Submit Your First Module to the PowerShell Gallery
https://mcpmag.com/articles/2017/03/16/submit-module-to-the-powershell-gallery.aspx - Modul für PowerShell Gallery erstellen
https://mycloudrevolution.com/2016/06/02/modul-fuer-powershell-gallery-erstellen/
Weitere Links
- PowerShell Module
- PowerShell Modular
- PowerShell Klassen
- Find-Module
https://docs.microsoft.com/en-us/powershell/module/powershellget/Find-Module - Find-Script
https://docs.microsoft.com/en-us/powershell/module/powershellget/Find-Script - Getting Started with the PowerShell Gallery
https://docs.microsoft.com/en-us/powershell/gallery/getting-started - Install-Module
https://docs.microsoft.com/en-us/powershell/module/powershellget/Install-Module - Install-Script
https://docs.microsoft.com/en-us/powershell/module/powershellget/Install-Script - Update-Module
https://docs.microsoft.com/en-us/powershell/module/powershellget/update-module?view=powershell-6 - Update-Script
https://docs.microsoft.com/en-us/powershell/module/powershellget/update-script?view=powershell-6 - Creating and publishing an item
https://docs.microsoft.com/en-us/powershell/gallery/how-to/publishing-packages/publishing-a-package - PowerShellGallery Publishing Guidelines and Best Practices
https://docs.microsoft.com/en-us/powershell/gallery/concepts/publishing-guidelines - How To Submit Your First Module to the PowerShell Gallery
https://mcpmag.com/articles/2017/03/16/submit-module-to-the-powershell-gallery.aspx