PowerShell 7 best practices voor meerdere platforms

Inhoudsopgave:

PowerShell 7 best practices voor meerdere platforms
PowerShell 7 best practices voor meerdere platforms
Anonim

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.

kHoud directorynamen in kleine letters, ongeacht het pad dat u gebruikt
kHoud directorynamen in kleine letters, ongeacht het pad dat u gebruikt

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 vs Ubuntu Linux
ls en Get-ChildItem draaien op Windows 10 vs Ubuntu Linux
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
date retourneert een DateTime-object op Windows en een String-object op Linux
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.

Geweldige oplossing om te bepalen welk besturingssysteem u gebruikt wanneer u platformonafhankelijk werkt
Geweldige oplossing om te bepalen welk besturingssysteem u gebruikt wanneer u platformonafhankelijk werkt

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!

Populair onderwerp