0

Я пытаюсь получить доступ к переменной пользовательской среды на виртуальной машине из работающего на ней командного файла. Этот командный файл вызывается из пакетного файла на главной машине, который также устанавливает переменную среды.Чтение переменных среды для конкретного пользователя

Если я открою новую командную строку на виртуальной машине, тогда я могу получить значение этой переменной. Но если я попытаюсь получить к нему доступ из пакетного файла на виртуальной машине, который вызывается из командного файла на главной машине, я не могу получить к нему доступ.

Пакетный файл на хост-машине:

set BUILD=4732 
"C:\Program Files (x86)\VMware\VMware VIX\vmrun" -T ws -gu PostBuild -gp ****** -h https://WIN-M7AT2VUR3HQ:8333/sdk writeVariable "E:\VM Testing\Windows 7.vmx" guestEnv BUILD %BUILD%" 

"C:\Program Files (x86)\VMware\VMware VIX\vmrun" -T ws -gu PostBuild -gp ****** -h https://WIN-M7AT2VUR3HQ:8333/sdk runProgramInGuest "E:\VM Testing\Windows 7.vmx" -activeWindow -interactive "C:\Automation\CopylatestbuildAndInstall.bat" 

pause 

Есть ли способ изменить учетной записи пользователя пакетный файл на виртуальной машине работает как? Чтобы он имел доступ к переменной.

ответ

0

Обратите внимание, что при запуске процесса, такого как процессор командной строки, переменные окружения копируются из родительского процесса, и каждый процесс работает с его собственными переменными среды.

Explorer.exe и, возможно, другие системные процессы копируют системные переменные системы и пользователя по умолчанию для дочерних процессов.

Существует способ установки системной/пользовательской среды по умолчанию, SETX. Этот метод изменяет переменные по умолчанию, а не текущие. SET изменить ток, но не по умолчанию.

Как к вашей проблеме:

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

Но он не устанавливает среду командной строки, поэтому, когда вы продолжаете выполнение, у вас нет новых переменных.

Чтобы обойти это, вы должны получить переменную среды по умолчанию в вашей текущей среде.

Для этого вы должны получить его из реестра: HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment для системных переменных, HKCU\Environment для пользователя.

Следующий пример будет читать BUILD пользовательскую переменную по умолчанию из реестра и установить его в текущем пакете:

FOR /F "SKIP=2 TOKENS=2,*" %i IN ('REG QUERY HKCU\Environment /v BUILD') DO SET BUILD=%%j 
Смежные вопросы