Estou decidindo a linguagem de programação que quero usar para um script simples que fará uma solicitação HTTP verificando se há atualizações disponíveis, baixe a atualização se disponível e execute um programa. No MacOS e em todas as distros do Linux, posso apostar com segurança que alguma versão do python estará disponível no sistema - e se uma distribuição Linux não vier com o python, posso assumir com segurança que o usuário desse nicho de sistema operacional saberá como instalar isto.
Mas com o Windows eu sei que ele não possui python, jre ou mesmo bibliotecas de tempo de execução para executar linguagens CLR. Há mais alguma coisa além do Powershell que eu possa usar?
O programa é distribuído para Windows como um arquivo ZIP e é portátil (não requer instalador). É por isso que quero que o idioma já esteja disponível no sistema do usuário.
Você não precisa de uma linguagem de uso geral se puder enviar um programa compilado – em primeiro lugar, você já está escrevendo um programa; use o mesmo método para escrever um Updater.exe junto com o App.exe principal.
PowerShell seria sua melhor opção, geralmente. Ele roda em .NET CLR e existe em algum lugar entre Bash e C# – a linguagem é construída principalmente para o tipo de trabalho "shell script", mas você tem acesso total a todas as classes .NET padrão (bem como COM e WMI/CIM ) e pode até usar código C# embutido
Add-Type
se você precisar de P/Invoke.Há um cliente HTTP integrado disponível como
Invoke-RestMethod
(irm
) e um cliente HTTP ligeiramente diferente emInvoke-WebRequest
(iwr
); um deles pode analisar JSON e XML. Para exibir uma mensagem, você pode chamar o .NET WinForms usando:Todas as versões razoavelmente recentes do Windows incluem o "Windows PowerShell" versão 5. Faltam algumas sutilezas, por exemplo, algumas opções para Invoke-WebRequest estão faltando, mas por outro lado é quase igual ao PowerShell 7 moderno.
A única desvantagem é que os scripts do PowerShell sempre mostram uma janela do console; até agora não há equivalente
pythonw.exe
ou semelhante. (É uma longa história .)Todas as outras opções são um pouco piores:
slmgr.vbs
. Alguns sistemas corporativos podem desativá-lo, mas têm a mesma probabilidade de desabilitar o PowerShell.curl.exe
que vem integrado no Windows 10. (Eu usaria o nircmd.exe da Nirsoft para exibir a mensagem pop-up, mas nada impede você deecho
inserir um VBScript em% TEMP% ou qualquer outra coisa.)Os únicos idiomas que podem existir em todas as versões modernas do Windows são:
Batch é uma linguagem muito antiga com múltiplas idiossincrasias, mas faz a maioria dos trabalhos (mais ou menos). Pode ser muito doloroso usá-lo para operações complexas.
O PowerShell é muito mais recente, mas sua sintaxe é totalmente nova (é possível encontrar exemplos para quase todas as questões na internet). Ele tem uma curva de aprendizado mais acentuada, mas pode realizar muitas operações, de forma muito mais extensa que o Batch. Algumas operações requerem a instalação de módulos adicionais da Internet, o que pode afetar negativamente os scripts distribuídos.
VBScript é talvez a linguagem mais familiar e também muito antiga. A Microsoft gostaria de vê-lo obsoleto. No entanto, tanto software foi escrito usando-o que parece improvável que desapareça nos próximos anos (ou nunca).