Tags: PowerShell, Software-Distribution
PowerShellGet enthält die Cmdlets für das Finden, Installieren, Aktualisieren und Entfernen von Modulen, Scripts oder DSC-Ressourcen. Windows PowerShell bringt aber die veraltete Version 1.0.0.1 mit, die man bei Bedarf auf 2.x aktualisieren kann. Microsoft stellte aber mittlerweile bereits den Release Candidate für den PowerShellGet-Nachfolger PSResourceGet vor.
Zu den am häufigsten genutzten Befehlen von PowerShellGet gehört Install-Module, mit dem man Module hinzufügt, die nicht zum Lieferumfang des Systems gehören. Dazu zählen sowohl solche von Microsoft als auch von Drittanbietern, als Repository dient ihnen zumeist die PowerShell Gallery.
Das auch im aktuellen Windows 11 noch vorinstallierte PowerShellGet 1.0.0.1 umfasst zwar weitgehend die gleichen Cmdlets wie die Version 2.x (es fehlt nur Get-CredsFromCredentialProvider), aber die vorhandenen Befehle unterstützen nicht alle Parameter.
So kann man mit Install-Module keine Previews installieren, weil es in der Version 1.x den Parameter AllowPrerelease nicht kennt.
Ein weiterer Unterschied zwischen den Versionen 1.x und 2. besteht darin, dass Install-Module 2.x die Module standardmäßig nur für den aktuellen User hinzufügt (entspricht "-Scope CurrentUser").
Update von PowerShellGet 1.x auf 2.x
Normalerweise würde man ein vorhandenes Modul mit Hilfe von Update-Module aktualisieren. Das klappt aber nur, wenn dieses mit Install-Module installiert wurde, was aber bei PowerShellGet nicht der Fall ist, da es mit dem Betriebssystem ausgeliefert wird.
Stattdessen geht man so vor:
Install-Module -Name PowerShellGet -AllowClobber -Force
Die Parameter AllowClobber und Force unterdrücken Warnungen bezüglich Namenskonflikten und erlauben ein Nebeneinander von mehreren Versionen. Man kann zusätzlich über Parameter wie RequiredVersion oder MinimumVersion steuern, welche Version man haben will. Standardmäßig bekommt man die neueste stabile Variante.
PowerShellGet 1.0.0.1 kommt ohne den NuGet-Provider, der für die PowerShell Gallery benötigt wird. Wenn man ihn noch nicht zwischenzeitlich installiert hat, dann kann man das mit
Install-PackageProvider -Name NuGet -Force
nachholen.
Bei einem Parallelbetrieb von PowerShellGet 1.x und 2.x kann man zwischen den beiden umschalten, indem man erst die aktuell geladene aus der Session entfernt:
Remove-Module -Name PowerShellGet
Anschließend lädt man gezielt eine bestimmte Version:
Import-Module -Name PowerShellGet -RequiredVersion 2.2.5
PSResourceGet installieren
Microsoft entwickelt PowerShellGet nicht weiter, sondern ersetzt es durch das Modul PSResourceGet. Das bedeutet auch, dass sich alle Namen der Cmdlets ändern. Bestehende Scripts müssten angepasst werden, wenn sie mit dem neuen Modul funktionieren sollen. Microsoft möchte den Übergang aber mit einem Kompatibilitätsmodul vereinfachen.
Die Änderungen beschränken sich indes nicht auf die Namen, vielmehr folgt PSResourceGet einem anderen Konzept und verändert die Arbeitsteilung zwischen den Cmdlets. Dies schlägt sich in der Reduktion der Zahl der Cmdlets von 26 auf 16 nieder. Außerdem verwendet Microsoft das Modul PackageManagement nicht mehr und setzt stattdessen ganz auf NuGet.
Während PowerShellGet für verschiedene Ressourcen wie Module oder Scripts eigene Befehle vorsah, gibt das neue Modul diese Unterscheidung auf. So heißt zum Beispiel der Nachfolger für Install-Module entsprechend Install-PSResource.
Derzeit liegt PSResourceGet als Release Candidate vor und wird als solcher bereits mit PowerShell 7.4 Preview 5 ausgeliefert. Die GA-Version soll dann ebenfalls in der finalen Ausführung von PowerShell 7.4 enthalten sein.
Möchte man PSResourceGet unter Windows PowerShell ausprobieren, dann kann man es aktuell mit Hilfe des oben erwähnten Parameters AllowPrerelease installieren:
Install-Module -Name Microsoft.PowerShell.PSResourceGet -AllowPrerelease -Scope AllUsers
Mit der expliziten Festlegung des Scope erzwingt man die Installation für alle User, nachdem PowerShellGet 2.x per Voreinstellung diese auf den aktuellen Benutzer beschränken würde. Dafür benötigt man aber administrative Rechte.
Nach erfolgreicher Installation importiert man das Modul mittels
Import-Module -Name Microsoft.PowerShell.PSResourceGet
Die darin enthaltenen Cmdlets kann man dann so ausgeben:
Import-Module -Name Microsoft.PowerShell.PSResourceGet
Zusammenfassung
Zum Lieferumfang von Windows gehört nach wie vor PowerShellGet 1.0.0.1, dem unter anderem die Fähigkeit fehlt, Prereleases zu installieren. Daher bietet sich das Update auf die Version 2.x (derzeit 2.2.5) an.
Aber auch dieses Release ist mehr oder weniger schon überholt, denn mit PSResourceGet steht ein Nachfolger schon bereit. Dies ist kein einfaches Update, sondern ein völlig neues Modul mit anderen Cmdlets. Dieses liegt derzeit als RC vor und wird künftig mit den neuesten Versionen von PowerShell 7.x ausgeliefert.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- winget erhält PowerShell-Modul und Configuration Management
- Programme (remote) mit PowerShell deinstallieren
- Anleitung: PowerShell 7 unter Windows und Linux installieren
- Software verteilen und Updates installieren mit dem kostenlosen Chocolatey
- Microsoft Azure Stack mit der Azure Public Cloud verknüpfen
Weitere Links