Я надеюсь, что заголовок краток, но на всякий случай:
Я называю сценарий PowerShell от пакетного файла. Я хочу, чтобы сценарий PowerShell установил значение переменной среды, и чтобы то новое значение было доступно в пакетном файле, когда сценарий PowerShell заканчивается.
Я знаю, что возможно установить переменную среды с помощью $env в PowerShell, но значение не сохраняется, когда сценарий PowerShell завершается. Я предполагаю, что это, вероятно, потому что PowerShell выполняется в отдельном процессе.
Я знаю, что могу возвратить код выхода и использовать %ErrorLevel %, но это только даст мне числа, и будет конфликт, так как 1 указывает на исключение PowerShell, а не полезное число.
Теперь, вот протест: Я не хочу, чтобы переменная среды сохранилась. Таким образом, я не хочу, чтобы это было определено для пользователя или системы, и поэтому я хочу, чтобы это было недоступно, как только пакетный файл выходит. В конечном счете я просто хочу передать результаты назад от сценария PowerShell до пакетного файла вызова.
Действительно ли это возможно?
Заранее спасибо :)
Nick
Самый простой способ получения результатов из PowerShell - использовать stdout в PowerShell. Например, это сохраняет дату в d env var в cmd.exe
set d = powershell -noprofile "& { get-date }"
Чтобы подхватить идею Кита об использовании 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