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.
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
Was 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
Ja 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.
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, Ja $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.
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!!