Toen PowerShell voor het eerst werd uitgebracht, was het doel om krachtige scripttools naar Windows te brengen, die op dat moment doorgaans een GUI-gebaseerd beheer hadden. Sindsdien is PowerShell uitgegroeid tot een van de meest populaire scripttalen.
Een van de grootste bijdragen aan deze stijgende populariteit is dat het PowerShell-team van Microsoft het in 2016 open-source heeft gemaakt door PowerShell Core voor PowerShell versie 6 te introduceren. Dat veroorzaakte echter enkele onverwachte problemen, zoals het moeten ondersteunen compatibiliteit tussen versie 5.1 (Windows PowerShell) en versie 6.2 (PowerShell Core), of dezelfde cmdlets die iets andere dingen doen in verschillende versies van. NET.
Om dat te regelen, kondigde het PowerShell-team aan dat ze PowerShell 5.1 stopzetten en dat de volgende versie na 6.2 PowerShell 7 zou zijn, die erop gericht zou zijn om Windows PowerShell op Windows-besturingssystemen te vervangen zonder enige compatibiliteit op te offeren bij het draaien op Mac of Linux.
PowerShell 7 werd in maart vorig jaar GA, en hoewel de cmdlets zelf op elk besturingssysteem draaien, zijn er nog enkele best practices die moeten worden gevolgd om ervoor te zorgen dat uw PowerShell-scripts soepel werken, ongeacht waar ze worden uitgevoerd.
Gebruik directorynamen in kleine letters
In het Windows-besturingssysteem wordt het
\
of backslash-teken gebruikt om geneste mappen in een bestandssysteem te noteren, terwijl in Linux en macOS de
/of slash-teken doet het in plaats daarvan en de backslash wordt gebruikt als een escape-teken.(Als je ooit problemen hebt om deze twee recht te houden, stel je voor dat het omv alt. Backslash v alt terug, forward slash v alt naar voren)
Dit kan voor wat uitdagingen zorgen bij het scripten in de meeste andere talen, maar PowerShell 7 verta alt ofwel naar een directory-object en geeft niet echt om de tekens die worden gebruikt om het pad te splitsen. Een gebied waar je echter in de problemen kunt komen, is dat Linux- en macOS-bestandssystemen hoofdletters belangrijk vinden en mapnamen in verschillende gevallen als verschillende mappen behandelen.
De beste methode hier is om directorynamen in kleine letters te houden, ongeacht welk pad je gebruikt. Als dat nodig is, kun je het pad als een tekenreeks doorgeven en de methode
ToLower() erop aanroepen in je code, maar dit werkt alleen als de mapnaam al in lager staat. geval.

Gebruik geen aliasing
Aliasing kan een geweldige manier zijn om de hoeveelheid typen die u moet doen te verkorten wanneer u PowerShell vanaf een console uitvoert. Het is veel gemakkelijker om
ls
of
cgi
te typen dan
Get-ChildItem, zelfs als het tabblad is voltooid. Dat gezegd hebbende, is het zelden een goed idee om aliassen in scripts te gebruiken, omdat het script hierdoor afhankelijk wordt van het feit dat die alias is ingesteld, waar het ook wordt uitgevoerd.
Dat geldt vooral voor Linux- en macOS-systemen. Op die platforms wordt, in plaats van een alias te gebruiken om een ander PowerShell-commando uit te voeren, het native commando uitgevoerd, wat betekent dat het return-object heel anders zal zijn, en dat zal de rest van het script afwerpen.

ls
en
Get-ChildItem draaien op Windows 10 versus Ubuntu Linux.
Sommige commando's zoals
ls
veranderen misschien niet veel, maar met andere, zoals de
date commando, retourneert PowerShell een heel ander object van de native Linux-opdracht, die alles weggooit dat afhankelijk is van de uitvoer later in de code. Zelfs als je alleen de tekenreekswaarde in een PowerShell-script nodig hebt, gebruik dan PowerShell om het te krijgen.

date retourneert een DateTime-object op Windows en een String-object op Linux.
Gebruik een schakelverklaring om het besturingssysteem te bepalen
Soms heb je een afhankelijkheid waar je niet omheen kunt scripten, wat voor soort trucs je ook gebruikt. In die gevallen heeft PowerShell 7 een paar gereserveerde vlaggen die
true
of
false
retourneren, afhankelijk van het besturingssysteem waarop u werkt.
$IsMacOS
geeft bijvoorbeeld
True
terug op macOS en
False
op elk ander besturingssysteem, en
$IsLinux
geeft
True terug, ongeacht op welke Linux-distributie u zich bevindt.
Er is ook een
$IsWindows
vlag, maar met één groot voorbehoud: het retourneert alleen
True wanneer PowerShell Core of PowerShell 7 wordt uitgevoerd op Windows. Het is nooit teruggezet naar Windows PowerShell, dus het zal gewoon een foutmelding geven wanneer het daar wordt uitgevoerd.
Tyler Leonhardt van het PowerShell-team bij Microsoft kwam met een geweldige oplossing om te bepalen welk besturingssysteem je gebruikt als je cross-platform draait, wat de switch-statement is die hij hier beschrijft.

Samenvatting
Nu zou je een idee moeten hebben van een paar manieren om je PowerShell 7-scripts en -modules te schrijven, zodat ze een beetje soepeler platformonafhankelijk kunnen werken. Probeer ze vandaag nog uit in uw scripts!