[英]Can anyone help me with the following JScript?
在 Vista 中,我試圖在本地計算機上獲取用戶帳戶(當前用戶除外)的“本地 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%
值。
USERPROFILE 是一個環境變量,將替換 %USERPROFILE% 以使其在此計算機上的正確位置。 它從計算機更改為計算機。
要查看所有環境變量,請在命令 shell 或 go 中輸入“設置”到“控制面板”>“系統設置”>“高級”>“環境變量”
GetExpandedStringValue
自動將注冊表值數據中包含的任何環境變量替換為這些變量的實際值。 最有可能的是,%USERPROFILE% 擴展為C:\Windows\system32\config\systemprofile而不是C:\users\admin ,因為 WMI 服務本身在本地系統帳戶下運行。
你需要讓你的腳本工作是:
使用GetStringValue
而不是GetExpandedStringValue
來讀取未擴展的Local AppData
值,
通過從HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList\<user_SID>
鍵讀取ProfileImagePath
值來獲取所需用戶的配置文件路徑,
執行字符串替換以將 %USERPROFILE% 替換為配置文件路徑。
您可以在我的回答中找到如何執行此操作的示例:
在 Jscript 中獲取給定用戶的特殊文件夾路徑
您可能還想使用WshShell.RegRead
而不是 WMI,因為它對 JScript 更友好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.