Вызов PowerShell от пакета и получение нового значения временной переменной среды установлены в сценарии?

Я надеюсь, что заголовок краток, но на всякий случай:

Я называю сценарий PowerShell от пакетного файла. Я хочу, чтобы сценарий PowerShell установил значение переменной среды, и чтобы то новое значение было доступно в пакетном файле, когда сценарий PowerShell заканчивается.

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

Я знаю, что могу возвратить код выхода и использовать %ErrorLevel %, но это только даст мне числа, и будет конфликт, так как 1 указывает на исключение PowerShell, а не полезное число.

Теперь, вот протест: Я не хочу, чтобы переменная среды сохранилась. Таким образом, я не хочу, чтобы это было определено для пользователя или системы, и поэтому я хочу, чтобы это было недоступно, как только пакетный файл выходит. В конечном счете я просто хочу передать результаты назад от сценария PowerShell до пакетного файла вызова.

Действительно ли это возможно?

Заранее спасибо :)

Nick

8
задан Nicholas Hill 5 August 2010 в 11:42
поделиться

2 ответа

Самый простой способ получения результатов из PowerShell - использовать stdout в PowerShell. Например, это сохраняет дату в d env var в cmd.exe

set d = powershell -noprofile "& { get-date }"
-2
ответ дан 5 December 2019 в 20:12
поделиться

Чтобы подхватить идею Кита об использовании stdout для работы, вы можете вызвать powershell из вашего пакетного скрипта следующим образом:

FOR /F "usebackq delims=" %v IN (`powershell -noprofile "& { get-date }"`) DO set "d=%v"

Немного неудобно, но работает:

C:\>FOR /F "usebackq delims=" %v IN (`powershell -noprofile "& { get-date }"`) DO set "d=%v"
C:\>set d
d=August 5, 2010 11:04:36 AM
10
ответ дан 5 December 2019 в 20:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: