0

我正在编写一个脚本来提取键中的值

HKCurrentUser\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Desktop

目前它返回的只是:

C:\WINDOWS\system32\config\systemprofile\Desktop

当我想要/认为它应该返回时:

%USERPROFILE%\Desktop

下面是从密钥中提取信息的脚本,据我所知,它应该提取正确的信息。只是想知道是否有人可以启发我了解我所缺少的东西。它还返回正确返回的计算机名称和登录用户名。这将在相当多的机器上远程运行。

'These are the constants for the following KEYS'
Const HKClassesRoot = &H80000000 'HKEY_CLASSES_ROOT
Const HKCurrentUser = &H80000001 'HKEY_CURRENT_USER
Const HKLocalMachine = &H80000002 'HKEY_LOCAL_MACHINE
Const HKUsers = &H80000003 'HKEY_USERS
Const HKCurrentConfig = &H80000005 'HKEY_CURRENT_CONFIG
'Setup objects to interact with here'
Set wshShell = WScript.CreateObject("Wscript.Shell")
strComputer = wshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")
Set objRegistry = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
Set objNetwork = CreateObject("Wscript.Network")
Set objFSO = CreateObject("Scripting.FileSystemObject")
'Define variable to store the current user and then pull the current user
Dim currentUser
strCurrentUser = objNetwork.UserName

'find the data in the string we want to get the value from'
strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\"
strValueName = "Desktop"
'pull the info and store it in strValue'
objRegistry.GetStringValue HKCurrentUser,strKeyPath,strValueName,strValue

'setup for output of data to the file'
Dim strSpacer
Dim strData
strSpace = "+-------------------------------------------------------------------------------------------------------------------------+"
strData = "|  " & strComputer & " == " &  strCurrentUser & " == " & strValue & " |"

Dim strFileName
strFileName = "\\server\share\" & strCurrentUser & ".txt"
Set objFile = objFSO.OpenTextFile(strFileName,8,true)
objFile.write vbCrLf & strSpace & vbCrLf
objFile.write strData & vbCrLf
objFile.write strSpace & vbCrLf

'Close file'
objFile.Close

经过审查,我找到了自己问题的答案。我正在错误地读取注册表以了解我在做什么。

strRegkey = "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Desktop"
strDataValue = wshShell.RegRead(strRegKey)

这将返回当前存储在键中的值。

4

1 回答 1

0

我怀疑%USERPROFILE%注册表值中的环境变量被扩展为运行 WMI 服务(本地系统)的用户的配置文件。似乎与读取 REG_EXPAND_SZ 值时GetStringValue的行为相同。GetExpandedStringValue

于 2013-08-19T09:16:04.630 回答