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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top