Práticas recomendadas de plataforma cruzada do PowerShell 7

Conteúdo

Logotipo de Powershell

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.

  kMantenha os nomes dos diretórios em letras minúsculas, independentemente do caminho que você usa.

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 em execução no Windows 10 frente a Ubuntu Linux

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.

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.

Excelente solução para determinar em qual sistema operacional você está ao executar multiplataforma.

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!!

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.