PowerShell-7-Cross-Plattform-Best Practices

Wenn PowerShell zuerst veröffentlicht wurde, war das Ziel zu bringen, leistungsfähige Skripting-tools auf Windows, die hatten typischerweise GUI-basierte administration an der Zeit. Seitdem PowerShell ist gewachsen zu einem der beliebtesten Skriptsprachen. Zum Zeitpunkt des Schreibens, es sitzt bei 35 auf dem TIOBE-index der beliebtesten Programmiersprachen.

Einer der größten Beitragszahler zu diesem Anstieg in der Popularität ist, dass die PowerShell-team bei Microsoft machte es open-source-2016, Einführung in PowerShell-Core für die PowerShell version 6. Jedoch, durch das einige unerwartete Probleme, wie mit, um die Kompatibilität zwischen der version 5.1 (Windows PowerShell) und in der version 6.2 (PowerShell-Core), oder haben Sie die gleichen cmdlets dabei leicht verschiedene Dinge auf verschiedenen Versionen von .NET.

Zu Regeln, dass die PowerShell-team verkündet, dass Sie den Ruhestand PowerShell 5.1 und dass die nächste version nach der 6.2 wäre PowerShell-7, die darauf abzielt, ersetzen Sie Windows PowerShell auf Windows-Betriebssystemen, ohne Abstriche bei der Kompatibilität bei Mac oder Linux.

PowerShell-7 ging der GA im März dieses Jahres, und während die cmdlets, die sich auf allen Betriebssystemen ausgeführt werden, gibt es noch einige beste Praktiken zu Folgen, um sicherzustellen, dass Ihre PowerShell Skripte laufen reibungslos, egal wo Sie ausgeführt werden.

Verwenden Sie Kleinbuchstaben Directory-Namen

In der Windows-Betriebssystem, die ” oder backslash-Zeichen wird verwendet, um den Hinweis verschachtelte Verzeichnisse in einem Datei-system, während in Linux und macOS, die / oder forward-slash-Zeichen hat es statt, und der backslash wird als escape-Zeichen verwendet. (Wenn Sie jemals Schwierigkeiten haben, zu halten diese zwei geraden, nur vorstellen, dass es nicht umfällt. Backslash fällt zurück, Schrägstrich fällt nach vorn)

Dies kann für einige Herausforderungen bei der Skripterstellung in den meisten anderen Sprachen, aber PowerShell-7 werden übersetzen, entweder in ein Verzeichnis-Objekt und nicht wirklich Pflege über die Charaktere spaltet sich der Weg. Ein Bereich, wo Sie können in Schwierigkeiten geraten, jedoch, ist, dass Linux-und macOS-Dateisysteme kümmern, groß – / Kleinschreibung und behandelt directory-Namen in unterschiedlichen Fällen verschiedene Verzeichnisse.

Die beste Methode hierbei ist zu halten directory-Namen in Kleinbuchstaben, egal was Pfad, den Sie verwenden. Wenn Sie möchten, können Sie übergeben Sie den Pfad als string und rufen Sie die ToLower () – Methode auf, die es in Ihrem code, aber das funktioniert nur, wenn der name des Verzeichnisses bereits in Kleinbuchstaben.

Nicht Verwenden Sie Aliasing

Aliasing kann eine große Weise sein, kürzen Sie den Betrag den Sie eingeben müssen, wenn ausführen von PowerShell aus einer Konsole. Es ist viel einfacher, geben Sie ls-oder cgi als Get-ChildItem auch mit tab-Vervollständigung. That being said, ist es selten eine gute Idee, verwenden Sie Aliase in Skripten, da macht es das Skript abhängig von der alias gesetzt, wo es läuft.

Das gilt besonders für die Linux-und macOS-Systemen. Auf diese Plattformen, anstatt einen alias zu laufen, ein weiteres PowerShell-Befehl, es läuft der native-Befehl, was bedeutet, dass die Rendite Objekt ist sehr anders, und das wirft aus, um den rest des Skripts.

ls und Get-ChildItem ausgeführt auf Windows 10 vs Ubuntu Linux.

Einige Befehle wie ls vielleicht nicht allzu viel ändern, aber mit anderen wie der date-Befehl in PowerShell gibt ein völlig anderes Objekt aus dem native Linux-Befehl, die werfen alles, ist abhängig von der Leistung später im code auf. Auch wenn Sie nur den string-Wert in ein PowerShell-script, PowerShell verwenden, um es zu bekommen.

date gibt ein DateTime-Objekt auf Windows-und ein String-Objekt auf Linux.

Verwenden Sie eine Switch-Anweisung, um zu Bestimmen, Betriebssystem

Manchmal, Sie haben eine Abhängigkeit, dass man nicht das Skript um, egal, welche Arten von tricks, die Sie verwenden. In diesen Fällen PowerShell-7 hat ein paar reservierte flags, wird true zurückgegeben, oder false, je nachdem, was Betriebssystem Sie läuft. Zum Beispiel, $IsMacOS wird True zurückgegeben, auf macOS und False auf jedes andere Betriebssystem, und $IsLinux True zurück, egal welche Linux-distribution Sie sind auf.

Es gibt auch eine $IsWindows Flagge, aber mit einer großen Einschränkung: Es gibt nur True, wenn das ausführen von PowerShell-Core oder 7 auf Windows PowerShell. Es wurde nie portiert zurück zu Windows PowerShell, so wird es nur einen Fehler auslösen, wenn die dort laufen.

Tyler Leonhardt von der PowerShell-team bei Microsoft kam mit einer großen workaround für die Bestimmung, welches OS Sie auf, wenn Sie laufen, cross-Plattform, die die switch-Anweisung beschreibt er hier.

Zusammenfassung

Jetzt sollten Sie haben eine Idee, ein paar Möglichkeiten, um schreiben Sie Ihre PowerShell-7 Skripte und Module, so dass Sie laufen ein wenig mehr reibungslos cross-Plattform. Versuchen Sie sich in Ihren Skripten, heute!


Posted

in

by

Tags: