MAIN MENU
Devolutions Blog

Ankündigungen, Aktualisierungen und Einsichten von Devolutions

Devolutions PowerShell Universal hosting a NuGet feed illustration for the blog.

Einen NuGet-Feed in PowerShell Universal mit Sleet hosten

Dieser Beitrag führt durch Sleet als statischen NuGet-v3-Feed, veröffentlichte Ordner in PowerShell Universal, Register-PSResourceRepository, ein Upload-Skript zum Pushen von Paketen und eine Dashboard-Tabelle mit Find-PSResource-Ergebnissen.

Laut Microsoft ist NuGet der Paketmanager für .NET. Die NuGet-Client-Tools ermöglichen das Erstellen und Konsumieren von Paketen.

nuget.org und die PowerShell Gallery sind Beispiele für NuGet-Feeds. Sie ermöglichen es Benutzern, Pakete zu veröffentlichen, damit andere sie konsumieren können. Wenn Sie Publish-PSResource oder Publish-Module verwenden, erstellen Sie ein NuGet-Paket und veröffentlichen es in einem Feed.

Einen NuGet-Feed in PowerShell Universal erstellen

Typische NuGet-Feeds basieren auf Tausenden von Codezeilen, um robuste Mechanismen für Metadatenspeicher, Caching und Paketsuche bereitzustellen. Für Benutzer mit einer begrenzten Anzahl von Paketen gibt es ein Tool, das statische Feeds erstellen kann: Sleet. Das Sleet-Befehlszeilentool erstellt statische JSON-Dateien und Speicher für NuGet-Pakete. Es unterstützt nicht so viele Optionen wie andere Technologien, bietet aber Einfachheit.

Im Rest dieses Beitrags zeigen wir, wie Sie mit Sleet einen NuGet-Feed in PowerShell Universal erstellen.

Sleet installieren

Sie können Sleet als globales dotnet-Tool installieren, wenn das .NET SDK installiert ist.

dotnet tool install -g sleet

Nach der Installation können Sie einfach sleet ausführen, um auf das Tool zuzugreifen.

Einen Sleet-Feed konfigurieren

Als Nächstes richten wir einen einfachen Sleet-Feed ein. Erstellen Sie ein Verzeichnis und dann eine lokale Sleet-Konfiguration.

New-Item -ItemType Directory C:\sleet\
Set-Location C:\sleet
sleet createconfig --local

Öffnen Sie die erzeugte Datei sleet.json und konfigurieren Sie die Eigenschaften des Feeds. Die Basis-URI zeigt auf einen veröffentlichten Ordner in PowerShell Universal.

{
  "username": "",
  "useremail": "",
  "sources": [
    {
      "name": "myLocalFeed",
      "type": "local",
      "path": "C:\\sleet\\myfeed",
      "baseURI": "http://localhost:5000/feed/"
    }
  ]
}

Ein Paket veröffentlichen

Um ein Paket zu veröffentlichen, können Sie den folgenden Sleet-Befehl gegen ein einzelnes NuGet-Paket oder ein Verzeichnis von Paketen verwenden. Ich habe Posh-SSH veröffentlicht.

Invoke-WebRequest 'https://www.powershellgallery.com/api/v2/package/Posh-SSH/3.0.8' -OutFile "C:\Users\adamr\Downloads\posh-ssh.3.0.8.nupkg"
Set-Location C:\sleet
sleet push -s myLocalFeed "C:\Users\adamr\Downloads\posh-ssh.3.0.8.nupkg"

Sleet aktualisiert alle erforderlichen Feed-Dateien, erstellt die passende Ordnerstruktur und verschiebt das nupkg in den Speicherordner flatcontainer.

In PowerShell Universal hosten

Als Nächstes müssen wir PowerShell Universal so einrichten, dass der NuGet-Feed bereitgestellt wird. Das geht mit einem veröffentlichten Ordner. Sie müssen den Pfad zum NuGet-Feed-Ordner festlegen.

New-PSUPublishedFolder -Path C:\sleet\myfeed -RequestPath /feed

Sie können prüfen, ob der Feed erreichbar ist, indem Sie die folgende URL aufrufen.

http://localhost:5000/feed/index.json

Ein PowerShellGet-Repository registrieren

PowerShellGet v3 ist erforderlich, weil PowerShellGet v2 keine NuGet-v3-Feeds unterstützt. Sleet erzeugt nur NuGet-v3-Feeds.

Install-Module PowerShellGet -AllowPrerelease -Force

Sobald PowerShellGet v3 installiert ist, können Sie Register-PSResourceRepository verwenden, um Ihren neuen Feed zu registrieren.

Register-PSResourceRepository -Name 'MyLocalFeed' -Uri 'http://localhost:5000/feed/index.json'

Sie können mit Find-PSResource prüfen, ob das Repository korrekt registriert wurde.

Find-PSResource -Name posh-ssh
Name     Version Prerelease Repository  Description
----     ------- ---------- ----------  -----------
Posh-SSH 3.0.8.0            MyLocalFeed Provide SSH and SCP functionality for executing commands against remot…

Sie können auch Befehle wie Save-PSResource verwenden.

Save-PSResource -Name posh-ssh -Path .\ -Repository MyLocalFeed

Neue Pakete in PowerShell Universal hochladen

Statt die Sleet-Befehle manuell auf der PowerShell Universal-Maschine auszuführen, können Sie ein PSU-Skript erstellen, das eine Datei entgegennimmt. Erstellen Sie in PSU ein neues Skript mit folgendem Inhalt.

param(
     [File]$File
)

$Package = [IO.Path]::GetTempFileName()
[System.IO.File]::WriteAllBytes($Package, $File.Content)
Set-Location C:\sleet
sleet push -s myLocalFeed $Package

Nach Abschluss des Skripts sind die NuGet-Feed-Dateien aktualisiert, und das Paket ist über die PowerShellGet-Befehle verfügbar.

PowerShell Universal job output showing Sleet pushing PSWindowsUpdate to the local feed.
Sleet-Push-Ausgabe in PowerShell Universal
Find-PSResource -Name pswindowsupdate
Name            Version Prerelease Repository  Description
----            ------- ---------- ----------  -----------
PSWindowsUpdate 2.2.0.3            MyLocalFeed This module contain cmdlets to manage Windows Update Client.

Pakete in einem Dashboard anzeigen

Sie können das Cmdlet Find-PSResource verwenden, um alle Pakete in Ihrem Feed anzuzeigen.

New-UDDashboard -Title 'PowerShell Universal' -Content {
    $Packages = Find-PSResource -Name * -Repository MyLocalFeed | Select Name,Version,Description
    New-UDTable -Data $Packages
}
PowerShell Universal dashboard table listing Polly, Posh-SSH, and PSWindowsUpdate packages.
Pakete aus dem Sleet-Feed in einer Dashboard-Tabelle

Fazit

In diesem Beitrag haben wir gezeigt, wie Sie mit Sleet und PowerShell Universal einen semistatischen NuGet-Feed einrichten.

Bereit zum Bauen? PowerShell Universal herunterladen.