Best Practices für plattformübergreifende PowerShell 7

Inhalt

Powershell-Logo

Als PowerShell zum ersten Mal veröffentlicht wurde, das Ziel war es, leistungsstarke Scripting-Tools für Windows bereitzustellen, die zu dieser Zeit normalerweise eine GUI-basierte Verwaltung hatte. Seit damals, PowerShell hat sich zu einer der beliebtesten Skriptsprachen entwickelt.

Einer der größten Beiträge zu diesem Popularitätsschub ist, dass das Microsoft PowerShell-Team es möglich gemacht hat. Open Source in 2016, Einführung von PowerShell Core für die PowerShell-Version 6. Trotz dieses, das hat einige unerwartete probleme verursacht, wie die Kompatibilität zwischen den Versionen unterstützen zu müssen 5.1 (Windows PowerShell) und die version 6.2 (PowerShell-Kern), oder verwenden Sie dieselben Cmdlets, die in verschiedenen Versionen von .NET leicht unterschiedliche Dinge tun.

Um das zu beheben, das PowerShell-Team gab bekannt, dass sie PowerShell zurückziehen 5.1 und dass die nächste Version danach 6.2 möchten Power Shell 7, die darauf abzielen, Windows PowerShell auf Windows-Betriebssystemen zu ersetzen, ohne die Kompatibilität bei der Ausführung auf Mac oder Linux zu beeinträchtigen.

Power Shell 7 war GA im März vom letzten Jahr, und selbst wenn die Cmdlets selbst auf jedem Betriebssystem laufen, Es müssen noch einige Best Practices befolgt werden, um sicherzustellen, dass Ihre PowerShell-Skripte reibungslos laufen, egal wo sie ausgeführt werden.

Verzeichnisnamen in Kleinbuchstaben verwenden

Im Windows-Betriebssystem, das oder der umgekehrte Schrägstrich wird verwendet, um verschachtelte Verzeichnisse in einem Dateisystem mit Anmerkungen zu versehen, unter Linux und macOS, das / oder der Schrägstrich macht es stattdessen und der Backslash wird als Escape-Zeichen verwendet. (Wenn Sie zu irgendeinem Zeitpunkt Schwierigkeiten haben, diese beiden gerade zu halten, stell dir vor, es kippt um. Der Backslash fällt zurück, nach vorne gebogene Stange fällt nach vorne)

Dies kann bei der Skripterstellung in den meisten anderen Sprachen zu einigen Herausforderungen führen, pero PowerShell 7 wird in ein Verzeichnisobjekt übersetzt und Sie kümmern sich nicht wirklich um die Zeichen, die zum Aufteilen des Pfads verwendet werden. Trotz dieses, Ein Bereich, in dem Sie in Schwierigkeiten geraten können, ist, dass Linux- und macOS-Dateisysteme die Groß-/Kleinschreibung beachten und Verzeichnisnamen in verschiedenen Fällen als unterschiedliche Verzeichnisse behandeln.

Hier empfiehlt es sich, die Verzeichnisnamen in Kleinbuchstaben zu halten, Egal welche Route du fährst. Falls erforderlich, Sie können den Pfad als String übergeben und die aufrufen ToLower() darauf in deinem Code, Dies funktioniert jedoch nur, wenn der Verzeichnisname bereits kleingeschrieben ist.

  kHalten Sie die Verzeichnisnamen in Kleinbuchstaben, unabhängig von dem Pfad, den Sie verwenden.

Keine Aliase verwenden

Aliasing kann eine großartige Möglichkeit sein, den Schreibaufwand beim Ausführen von PowerShell über eine Konsole zu verkürzen. Es ist viel einfacher zu schreiben ls Ö cgi das Get-ChildItem auch mit dem Ausfüllen des Tabs. Nachdem ich dies gesagt habe, Es ist selten eine gute Idee, Aliase in Ihren Skripten zu verwenden, da das Skript dadurch davon abhängt, dass dieser Alias ​​überall dort eingerichtet ist, wo es ausgeführt wird..

Dies gilt insbesondere für Linux- und macOS-Systeme.. Auf diesen Plattformen, anstatt einen Alias ​​zu verwenden, um einen anderen PowerShell-Befehl auszuführen, führe den nativen Befehl aus, Das bedeutet, dass das Rückgabeobjekt sehr unterschiedlich ist und der Rest des Skripts entfernt wird.

ls und Get-ChildItem laufen unter Windows 10 gegen Ubuntu Linux

ls und Get-ChildItem läuft auf windows 10 vs Ubuntu Linux.

Einige Befehle wie ls Es darf sich nicht zu viel ändern, aber mit anderen wie ihm date Befehl, PowerShell gibt ein völlig anderes Objekt als der native Linux-Befehl zurück, wodurch alles entfernt wird, was später im Code von der Ausgabe abhängt. Auch wenn Sie nur den String-Wert in einem PowerShell-Skript benötigen, Verwenden Sie PowerShell, um es zu erhalten.

date gibt ein DateTime-Objekt unter Windows und ein String-Objekt unter Linux zurück.

date gibt ein DateTime-Objekt unter Windows und ein String-Objekt unter Linux zurück.

Verwenden Sie eine Änderungsanweisung, um das Betriebssystem einzustellen

Manchmal, Sie haben eine Abhängigkeit, die Sie nicht scripten können, Egal welche Tricks ich verwende. In diesen Fällen, Power Shell 7 hat einige reservierte Marken, die zurückkehren werden true Ö false abhängig vom Betriebssystem, auf dem es ausgeführt wird. Als Beispiel, $IsMacOS Zurück zu True auf macOS und False auf jedem anderen Betriebssystem, und $IsLinux Zurück zu True egal auf welcher Linux-Distribution Sie sich befinden.

Außerdem gibt es eine $IsWindows Flagge, aber mit einem großen Vorbehalt: einfach zurück True zum Ausgeben von PowerShell Core oder PowerShell 7 unter Windows. Nie zurück zu Windows PowerShell übertragen, Es wird also nur ein Fehler ausgegeben, wenn es dort ausgeführt wird.

Tyler Leonhardt, vom Microsoft PowerShell-Team, hat eine großartige Lösung gefunden, um festzustellen, welches Betriebssystem Sie verwenden, wenn Sie plattformübergreifend laufen, Was ist die Änderungsaussage, die beschreibt? Hier.

Ausgezeichnete Lösung, um festzustellen, welches Betriebssystem Sie verwenden, wenn Sie plattformübergreifend laufen.

Jetzt sollten Sie eine Vorstellung von einigen Alternativen zum Schreiben Ihrer PowerShell-Skripte und -Module haben 7 damit sie etwas nahtloser zwischen den Plattformen laufen können. Probieren Sie sie noch heute in Ihren Skripten aus!!

Abonniere unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.