Quando o PowerShell foi lançado pela primeira vez, o objetivo era trazer ferramentas de script poderosas para o Windows, que geralmente tinha uma administração baseada em GUI na época. Desde então, PowerShell cresceu e se tornou uma das linguagens de script mais populares.
Um dos maiores contribuidores para esse aumento na popularidade é que a equipe do Microsoft PowerShell fez isso acontecer. código aberto em 2016, Apresentando o PowerShell Core para a versão PowerShell 6. Apesar disto, que causou alguns problemas inesperados, como ter que suportar compatibilidade entre as versões 5.1 (Windows PowerShell) e a versão 6.2 (PowerShell Core), ou ter os mesmos cmdlets fazendo coisas ligeiramente diferentes em diferentes versões do .NET.
Para consertar isso, a equipe do PowerShell anunciou que estava retirando o PowerShell 5.1 e que a próxima versão depois 6.2 seria PowerShell 7, que visaria substituir o Windows PowerShell em sistemas operacionais Windows sem sacrificar qualquer compatibilidade quando executado em Mac ou Linux.
PowerShell 7 foi GA em março do ano passado, e mesmo quando os próprios cmdlets são executados em qualquer sistema operacional, ainda existem algumas práticas recomendadas a seguir para garantir que seus scripts do PowerShell sejam executados sem problemas, não importa onde eles estejam sendo executados.
Use nomes de diretório em letras minúsculas
No sistema operacional Windows, a ou o caractere barra invertida é usado para anotar diretórios aninhados em um sistema de arquivos, enquanto no Linux e macOS, a
/
ou o caractere de barra faz isso e a barra invertida é usada como um caractere de escape. (Se a qualquer momento você tiver problemas para manter esses dois direitos, imagine que vira. A barra invertida cai para trás, barra dobrada para frente cai para frente)
Isso pode representar alguns desafios ao criar scripts na maioria das outras linguagens, pero PowerShell 7 irá traduzir para um objeto de diretório e você realmente não se preocupa com os caracteres usados para dividir o caminho. Apesar disto, uma área em que você pode ter problemas é que os sistemas de arquivos Linux e macOS diferenciam maiúsculas de minúsculas e tratam nomes de diretório em casos diferentes como diretórios diferentes.
A prática recomendada aqui é manter os nomes dos diretórios em letras minúsculas, não importa a rota que você usa. Sim é necessário, você pode passar o caminho como uma string e chamar o ToLower()
nele em seu código, mas isso só funcionará se o nome do diretório já estiver em minúsculas.
Não use apelidos
O aliasing pode ser uma ótima maneira de reduzir a quantidade de escrita que você precisa fazer ao executar o PowerShell a partir de um console. É muito mais fácil escrever ls
o cgi
naquela Get-ChildItem
mesmo com o preenchimento da guia. Tendo dito isto, Raramente é uma boa ideia usar apelidos nos seus scripts porque faz com que o script dependa de ter esse apelido configurado onde quer que seja executado.
Isso é especialmente verdadeiro para sistemas Linux e macOS.. Nessas plataformas, em vez de usar um alias para executar outro comando do PowerShell, execute o comando nativo, o que significa que o objeto de retorno será muito diferente e isso removerá o resto do script.
ls
e Get-ChildItem
correndo no windows 10 vs Ubuntu Linux.
Alguns comandos como ls
Pode não mudar muito, mas com outros como ele date
comando, O PowerShell retorna um objeto totalmente diferente do comando nativo do Linux, o que removerá qualquer coisa que dependa da saída posterior no código. Mesmo se você só precisar do valor da string em um script PowerShell, use o PowerShell para obtê-lo.
date
retorna um objeto DateTime no Windows e um objeto String no Linux.
Use uma declaração de mudança para definir o sistema operacional
As vezes, você tem uma dependência que você não pode fazer script, não importa que tipo de truques eu use. Nesses casos, PowerShell 7 tem algumas marcas reservadas que voltarão true
o false
dependendo do sistema operacional a partir do qual está sendo executado. Como um exemplo, $IsMacOS
de volta para True
no macOS e False
em qualquer outro sistema operacional, e $IsLinux
de volta para True
não importa em qual distribuição Linux você esteja.
Além disso, há um $IsWindows
bandeira, mas com uma grande ressalva: apenas retorne True
al ejecutar PowerShell Core o PowerShell 7 no Windows. Nunca foi transferido de volta para o Windows PowerShell, então ele só vai gerar um erro quando for executado lá.
Tyler Leonhardt, da equipe do Microsoft PowerShell, surgiu com uma ótima solução para estabelecer em qual sistema operacional você está ao executar multiplataforma, qual é a declaração de mudança que descreve aqui.
Agora você deve ter uma ideia de algumas alternativas para escrever seus scripts e módulos do PowerShell 7 para que possam funcionar de maneira um pouco mais integrada entre as plataformas. Experimente-os em seus scripts hoje!!