PowerShell Invoke-команда и системные переменные
-
13-12-2019 - |
Вопрос
Я работаю над автоматическим патчами для приложения поставщика.Я хотел использовать 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, который выходит, то без них запускается, то во втором запущен.