Quando PowerShell è stato rilasciato per la prima volta, l'obiettivo era portare potenti strumenti di scripting in Windows, che di solito aveva un'amministrazione basata su GUI all'epoca. Da allora, PowerShell è cresciuto fino a diventare uno dei linguaggi di scripting più popolari.
Uno dei maggiori contributori a questa ondata di popolarità è che il team di Microsoft PowerShell lo ha realizzato. open source in 2016, Presentazione di PowerShell Core per la versione di PowerShell 6. Nonostante questo, che ha causato alcuni problemi imprevisti, come dover supportare la compatibilità tra le versioni 5.1 (Windows PowerShell) e la versione 6.2 (PowerShell Core), o avere gli stessi cmdlet che fanno cose leggermente diverse in diverse versioni di .NET.
Per aggiustarlo, il team di PowerShell ha annunciato il ritiro di PowerShell 5.1 e che la prossima versione dopo 6.2 voluto PowerShell 7, che mirerebbe a sostituire Windows PowerShell sui sistemi operativi Windows senza sacrificare alcuna compatibilità durante l'esecuzione su Mac o Linux.
PowerShell 7 era GA a marzo dell'anno scorso, e anche quando i cmdlet stessi vengono eseguiti su qualsiasi sistema operativo, ci sono ancora alcune best practice da seguire per assicurarsi che i tuoi script PowerShell funzionino senza problemi, indipendentemente da dove sono in esecuzione.
Usa nomi di directory minuscoli
Nel sistema operativo Windows, il o il carattere barra rovesciata viene utilizzato per annotare le directory nidificate in un filesystem, mentre su Linux e macOS, il
/
o lo fa invece il carattere barra in avanti e la barra rovesciata viene usata come carattere di escape. (Se in qualsiasi momento hai problemi a mantenere questi due dritti, immagina che si capovolga. Il backslash ricade, la barra piegata in avanti cade in avanti)
Ciò può comportare alcune sfide durante lo scripting nella maggior parte delle altre lingue, pero PowerShell 7 si tradurrà in un oggetto directory e non ti interessano davvero i caratteri usati per dividere il percorso. Nonostante questo, un'area in cui puoi metterti nei guai è che i file system Linux e macOS fanno distinzione tra maiuscole e minuscole e tratteranno i nomi delle directory in casi diversi come directory diverse.
La migliore pratica qui è mantenere i nomi delle directory in minuscolo, non importa quale percorso usi. Se richiesto, puoi passare il percorso come una stringa e chiamare il ToLower()
su di esso nel tuo codice, ma funzionerà solo se il nome della directory è già minuscolo.
Non usare alias
L'aliasing può essere un ottimo modo per ridurre la quantità di scrittura che devi fare quando esegui PowerShell da una console. È molto più facile scrivere ls
oh cgi
Quello Get-ChildItem
anche con il completamento della scheda. Avendo detto questo, Raramenteèuna buona idea usare gli alias nei tuoi script perché fa sì che lo script dipenda dall'avere quell'alias impostato ovunque venga eseguito.
Ciò è particolarmente vero per i sistemi Linux e macOS.. Su quelle piattaforme, invece di usare un alias per eseguire un altro comando PowerShell, esegui il comando nativo, il che significa che l'oggetto restituito sarà molto diverso e questo rimuoverà il resto dello script.
ls
e Get-ChildItem
in esecuzione su Windows 10 contro Ubuntu Linux.
Alcuni comandi come ls
Potrebbe non cambiare molto, ma con altri come lui date
comando, PowerShell restituisce un oggetto completamente diverso dal comando Linux nativo, che rimuoverà tutto ciò che dipende dall'output più avanti nel codice. Anche se hai solo bisogno del valore della stringa in uno script PowerShell, usa PowerShell per ottenerlo.
date
restituisce un oggetto DateTime su Windows e un oggetto String su Linux.
Utilizzare una dichiarazione di modifica per impostare il sistema operativo
Qualche volta, hai una dipendenza che non puoi script, non importa che tipo di trucchi uso. In quei casi, PowerShell 7 ha dei marchi riservati che torneranno true
oh false
a seconda del sistema operativo da cui è in esecuzione. Come esempio, $IsMacOS
Ritornare a True
su macOS e False
su qualsiasi altro sistema operativo, e $IsLinux
Ritornare a True
non importa su quale distribuzione Linux ti trovi.
Inoltre c'è un $IsWindows
bandiera, ma con un grosso avvertimento: basta tornare True
al ejecutar PowerShell Core o PowerShell 7 in Windows. Mai trasferito di nuovo in Windows PowerShell, quindi genererà un errore solo quando viene eseguito lì.
Tyler Leonhardt, dal team di Microsoft PowerShell, ha trovato un'ottima soluzione per stabilire su quale sistema operativo ti trovi durante l'esecuzione multipiattaforma, qual è la dichiarazione di modifica che descrive? qui.
Ora dovresti avere un'idea di alcune alternative per scrivere i tuoi script e moduli PowerShell 7 in modo che possano funzionare un po' più facilmente tra le piattaforme. Provali nei tuoi script oggi!!