谁能帮助我以下的JScript?

| 在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
但是我得到ѭ2的价值 我不了解
c:\\windows\\system32\\config\\systemprofile
的值来自何处以及它如何代替
%USERPROFILE%
的值。     
已邀请:
USERPROFILE是一个环境变量,它将替换%USERPROFILE%以在计算机上获取它的正确位置。它随计算机而变化。 要查看所有环境变量,请在命令外壳上键入\“ set \”,或转到\“控制面板\”> \“系统设置\”> \“高级\”>环境变量     
GetExpandedStringValue
自动将注册表值数据中包含的所有环境变量替换为这些变量的实际值。由于WMI服务本身以本地系统帐户运行,因此%USERPROFILE%最有可能扩展到C:\\ Windows \\ system32 \\ config \\ systemprofile而不是C:\\ users \\ admin。 您需要使脚本正常工作的是: 使用
GetStringValue
而非
GetExpandedStringValue
读取未扩展的
Local AppData
值, 通过从
HKLM\\Software\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList\\<user_SID>
键中读取
ProfileImagePath
值来获取所需用户的个人资料路径, 执行字符串替换以用配置文件路径替换%USERPROFILE%。 您可以在我的答案中找到如何执行此操作的示例: 在Jscript中获取给定用户的特殊文件夹路径 您可能还想使用
WshShell.RegRead
代替WMI,因为它对JScript更友好。     

要回复问题请先登录注册