Может кто-нибудь помочь мне со следующим JScript? - PullRequest
1 голос
/ 04 мая 2011

В Vista я пытаюсь получить путь «Local AppData» для учетной записи пользователя (кроме текущего пользователя) на локальном компьютере, но столкнулся с некоторой проблемой.Может кто-нибудь, пожалуйста, помогите мне, что не так с приведенным ниже кодом.

var HKU = 0x80000003; 
var username = "xyz";

//Loading registry hive of user xyz
var WshShell = new ActiveXObject("WScript.Shell");
var LoadHiveCmd = "REG LOAD " + "HKU" + "\\" + username + " \"" + "c:\\users\\xyz\\NTUSER.DAT" + "\"";
var oExec = WshShell.Exec(strLoadHiveCmd); 

var oReg = GetObject("WinMgmts:/root/default:StdRegProv"); 

var profileRegPath = username  + "\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders";

var method, inparams, outparams;  

method = oReg.Methods_.Item("GetExpandedStringValue");
inparams = method.InParameters.SpawnInstance_();
inparams.hDefKey = HKU;
inparams.sSubKeyName = profileRegPath ;
inparams.sValueName =  "Local AppData";

outparams = oReg.ExecMethod_(method.Name, inparams);
var appDataPath= outparams.sValue;   

Здесь значение appDataPath в реестре %USERPROFILE%\AppData\Local

Но я получаю значение C:\Windows\system32\config\systemprofile\AppData\Local

Я не понимаю, откуда приходит значение c:\windows\system32\config\systemprofile и как оно заменило %USERPROFILE% значение.

Ответы [ 2 ]

0 голосов
/ 19 мая 2011

GetExpandedStringValue автоматически заменяет любые переменные среды, включенные в данные значений реестра, фактическими значениями этих переменных.Скорее всего,% USERPROFILE% расширяется до C: \ Windows \ system32 \ config \ systemprofile вместо C: \ users \ admin , поскольку сама служба WMI работает под учетной записью локальной системы.

Для работы скрипта необходимо:

  • использовать GetStringValue вместо GetExpandedStringValue для чтения нерасширенного значения Local AppData,

  • получить путь к профилю нужного пользователя, прочитав значение ProfileImagePath с помощью клавиши HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList\<user_SID>,

  • сделать замену строки для замены% USERPROFILE% с путем к профилю.

Вы можете найти пример того, как сделать это в этом моем ответе:
Получение специального пути к папке для данного пользователя в Jscript

Вы также можете использовать WshShell.RegRead вместо WMI, потому что он более дружественный к JScript.

0 голосов
/ 04 мая 2011

USERPROFILE - это переменная среды, которая заменит% USERPROFILE%, чтобы получить правильное расположение на этом компьютере. он меняется с компьютера на компьютер.

Чтобы просмотреть все переменные среды, введите «set» в командной оболочке или перейдите в «Панель управления»> «Системные настройки»> «Дополнительно»> Переменные среды

...