Laufen PowerShell-Cmdlets unter Linux-Dotnet? Oder nur Microsoft .NET?

684
Thufir

Titel sagt alles Wikipedia sagt :

Design [edit] Die Entwickler von PowerShell basierten die Kerngrammatik des Tools auf der von POSIX 1003.2. [21]

Windows PowerShell kann vier Arten von benannten Befehlen ausführen: [22]

Cmdlets (.NET Framework-Programme, die für die Interaktion mit PowerShell konzipiert wurden) PowerShell-Skripts (Dateien mit der Erweiterung .ps1) Eigenständige ausführbare PowerShell-Funktionen Wenn ein Befehl ein eigenständiges ausführbares Programm ist, wird es von PowerShell in einem separaten Prozess gestartet. Wenn es sich um ein Cmdlet handelt, wird es im PowerShell-Prozess ausgeführt. PowerShell bietet eine interaktive Befehlszeilenschnittstelle, in der die Befehle eingegeben und deren Ausgabe angezeigt werden können. Die auf der Win32-Konsole basierende Benutzeroberfläche bietet eine anpassbare Tab-Fertigstellung. PowerShell ermöglicht die Erstellung von Aliasnamen für Cmdlets, die von PowerShell textlich in Aufrufe der ursprünglichen Befehle übersetzt werden. PowerShell unterstützt sowohl benannte als auch Positionsparameter für Befehle. Beim Ausführen eines Cmdlets

Die PowerShell Extended Type System (ETS) basiert auf dem .NET-Typsystem, jedoch mit erweiterter Semantik (z. B. propertySets und Erweiterbarkeit von Drittanbietern). So können Sie beispielsweise verschiedene Ansichten von Objekten erstellen, indem Sie nur einen Teil der Datenfelder, Eigenschaften und Methoden anzeigen und benutzerdefinierte Formatierungs- und Sortierverhalten angeben. Diese Ansichten werden mithilfe von XML-basierten Konfigurationsdateien dem Originalobjekt zugeordnet. [23]

was darauf hindeutet, dass .NETerforderlich ist, und dass Linux dotnetist unzureichend Cmdlets auszuführen.

1
Wir müssen wissen, welche Cmdlets Sie verwenden möchten. Die unter Linux unterstützte PowerShell ist auf eine bestimmte Teilmenge beschränkt. Cmdlets, die .NET Framework anstelle von .NET Core erfordern, sind unter Linux nicht funktionsfähig. Ramhound vor 6 Jahren 4

4 Antworten auf die Frage

4
DavidPostill

Windows PowerShell vs. PowerShell Core

Die folgenden FAQs beschreiben die Unterschiede.

PowerShell Core ist der Nachfolger von Windows PowerShell 5.1 und läuft unter Windows, Linux und macOS.

...

  1. Funktionieren alle alten Windows PowerShell-Skripts auf PowerShell Core, dh ist PowerShell Core abwärtskompatibel mit Windows PowerShell?

    Vorherige PowerShell-Updates waren vollständig abwärtskompatibel. Dies gilt nur teilweise für PowerShell Core. Da PowerShell Core eine plattformübergreifende Edition von PowerShell ist, hat Microsoft einige Kompromisse eingegangen. Das bedeutet, dass Sie jedes einzelne Skript testen müssen, um sicherzustellen, dass es auch mit PowerShell Core funktioniert.

  2. Werden alle Skripts, die ich für PowerShell Core schreibe, auf allen unterstützten Plattformen ausgeführt?

    Grundlegende Skripts werden auf allen Plattformen ausgeführt. Angesichts der großen Unterschiede zwischen den unterstützten Plattformen müssen Sie jedoch jedes Skript auf allen Plattformen testen, auf denen es ausgeführt werden soll.

  3. Laufen alle Module für Windows PowerShell auf PowerShell Core?

    Nein, viele komplexe Module müssen für PowerShell Core angepasst werden. In einigen Fällen sind für beide PowerShell-Editionen unterschiedliche Modulversionen vorhanden .

  4. Kann ich alle .NET Framework-Klassen in PowerShell Core verwenden?

    Nein, PowerShell ist auf .NET Core angewiesen, dem viele Features von .NET Framework fehlen. In .NET Core fehlen beispielsweise Windows Presentation Foundation (WPF), Windows Forms und Windows Workflow. Weitere Informationen finden Sie hier .

(Hervorhebung meines)

Quelle Unterschiede zwischen Powershell - Versionen - 4sysops

LOL: "Sie sind nicht alleine. Wenn Sie die offizielle PowerShell 6.0-Dokumentation finden, fügen Sie bitte einen Link hier hinzu" -4sysops. Microsoft. Thufir vor 6 Jahren 0
2
postanote

Sie können dies leicht für sich selbst bestimmen, indem Sie beide Seiten nebeneinander betrachten.

Bedeutet verfügbares Modul, Cmdlets usw.

PowerShell v6 / Core  https://docs.microsoft.com/en-us/powershell/scripting/powershell-scripting?view=powershell-6  PowerShell v6.0.1 Copyright (c) Microsoft Corporation. All rights reserved.  https://aka.ms/pscore6-docs Type 'help' to get help.  PS D:\> (Get-Command -Module *).Count 425  PS D:\> (Get-Command -Name *).Count 1483    Windows PowerShell Copyright (C) Microsoft Corporation. All rights reserved.  PS C:\> (Get-Command -Module *).Count 1529  PS C:\> (Get-Command -Name *).Count 2474 

In PSCore / v6 stehen Ihnen also buchstäblich "1104" weniger Module und "945" weniger Cmdlets zur Verfügung. Ja, es hängt davon ab, was Sie verwenden und ob sie überhaupt verfügbar sind.

Um zu versuchen, PSCore auf dem Niveau von Windows PowerShell zu erreichen, hat Microsoft das PowerShell Compatibility Pack veröffentlicht. Noch...

Wie im letzten Monat berichtet, ist das Windows Compatibility Pack für .NET Core verfügbar. Dies fügt einige der Funktionen wieder hinzu, die im .NET-Kern fehlen. "Diese Funktionalität ist NUR auf Windows-Computern relevant."

https://richardspowershellblog.wordpress.com/2018/01/04/windows-compatibility-pack

1
headkase

PowerShell ist für Linux verfügbar, sodass davon ausgegangen werden kann, dass die Skripts unabhängig von der Plattform zumindest die meisten und möglicherweise alle ihre Funktionalität behalten.

leider falsche Annahme. Soweit ich weiß, zumindest. Die Frage ist: Was ist diese Grenze für "die meisten" und "vielleicht alle"? Thufir vor 6 Jahren 0
-2
uSlackr

Microsoft hat kürzlich PowerShell 6.0 sowohl unter Linux als auch unter Windows veröffentlicht. Die beiden sind funktional austauschbar. Beide sind jedoch eine deutliche Abweichung von PowerShell 5.1 unter Windows. Daher müssen Sie für Version 6 entwickeln, um die Kompatibilität sicherzustellen.

Ihr Paketmanager behandelt alle Abhängigkeiten.