Вопрос

Я работаю над автоматическим патчами для приложения поставщика.Я хотел использовать PowerShell, чтобы повторить перечень серверов и использовать удаление для установки на каждом поле.Однако один аспект дает мне большую головную боль.Я должен вызвать скрипт CMD, предоставленный поставщиком для установки системных переменных перед выполнением сценария установки.Так что я называю сценарий, как так в PowerShell:

Invoke-Command -session $session {cmd /k ($args[0]+"\data\env.bat")} -Args $lesDestDir
.

Я вижу, что он выполняет, когда он откроет свою работу в моем окне PowerShell, но последующие вызовы сценария установки IE:

Invoke-Command -session $session {perl ".\rollout-2010.pl " $args[0] " NC"} -Args $rollout
.

Немедленно выйти, сказав различные системные переменные, которые он использует, не были установлены.Может кто-нибудь объяснить мне объем системных переменных?Они перестают существовать после завершения invoke-command?Нужно ли соединить два звонка с двумя сценариями в одном invoke-команде, чтобы второй скрипт мог получить доступ к системным переменным или что-то в этом роде?

Это было полезно?

Решение

Изменения, выполненные с использованием команды SET, являются не постоянными, они применяются только к текущему процессу cmd и остаются до тех пор, пока процесс cmd не будет завершен.

Если возможно, установите переменную среды с помощью синтаксиса PowerShell:

Invoke-Command -session $session {$env:myvar = 1}
.

В качестве альтернативы вы можете строчить команды, используя командную сепаратор CMD &, как это:

Invoke-Command -session $session {cmd /k "set myvar = 1" `& "set"}
.

Другие советы

Да, вам нужно строчить их вместе.Переменные среды устанавливаются в первом сеансе CMD, который выходит, то без них запускается, то во втором запущен.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top