簡體   English   中英

任何人都可以幫助我使用以下 JScript 嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM