Comando de invocação do Powershell e variáveis do sistema
-
13-12-2019 - |
Pergunta
Estou trabalhando na automação de patches para um aplicativo de fornecedor.Eu queria usar o PowerShell para iterar em uma lista de servidores e usar a comunicação remota para instalar em cada caixa.Porém, um aspecto está me dando uma grande dor de cabeça.Preciso chamar um script cmd fornecido pelo fornecedor para definir variáveis do sistema antes de executar o script de instalação.Então eu chamo o script assim no PowerShell:
Invoke-Command -session $session {cmd /k ($args[0]+"\data\env.bat")} -Args $lesDestDir
Vejo que ele é executado enquanto ecoa seu trabalho na minha janela do PowerShell, mas chamadas subsequentes para o script de instalação, ou seja:
Invoke-Command -session $session {perl ".\rollout-2010.pl " $args[0] " NC"} -Args $rollout
saia imediatamente dizendo que as várias variáveis do sistema que ele usa não foram definidas.Alguém pode me explicar o escopo das variáveis do sistema?Eles deixam de existir após a conclusão do comando de invocação?Preciso encadear as duas chamadas de script em um único comando de invocação para que o segundo script possa acessar as variáveis do sistema ou algo parecido?
Solução
Alterações feitas usando o SET
comando são NÃO permanentes, eles se aplicam ao atual cmd
processar apenas e permanecer até o cmd
o processo é encerrado.
Se possível, defina a variável de ambiente usando a sintaxe do PowerShell:
Invoke-Command -session $session {$env:myvar = 1}
Alternativamente, você pode encadear os comandos usando o separador de comandos cmd &
assim:
Invoke-Command -session $session {cmd /k "set myvar = 1" `& "set"}
Outras dicas
Sim, você precisa amarrá-los.As variáveis de ambiente estão sendo definidas na primeira sessão cmd que sai e, em seguida, uma segunda é iniciada sem elas.