如何在VBScript中创建含当前登录用户SID变量的注册表路径
动态获取当前用户SID并构建VBScript注册表路径的解决方案
我来帮你搞定这个需求——要自动获取当前登录用户的SID并把它作为变量插入到注册表路径里,我们需要做几个关键修改,包括添加SID获取函数、动态构建路径,还要修正原脚本里的一个小错误。
完整修改后的脚本
' 先获取当前登录用户的SID Dim currentUserSID currentUserSID = GetCurrentUserSID() ' 动态构建注册表路径数组,替换硬编码的SID KEY_PATHS = Array( _ "HKEY_USERS\" & currentUserSID & "\Software\Microsoft\Office\16.0\Outlook", _ "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-2660683129-3636505375-3381148637-65620" _ ) DEBUG_PRINTING = False MASTER_EXECUTION Sub MASTER_EXECUTION() ' WMI Class Management MAINTAIN_WMI_CLASS() ' Registry Key Storage For Each KEY_PATH In KEY_PATHS STORE_KEYS(KEY_PATH) Next If Err.Number <> 0 Then EVENT_WRITER "ERROR","Storing Registry Keys Failed " & Err.Number & " | " & Err.Description Else EVENT_WRITER "INFO", "Storing Registry Keys Completed Successfully" End If End Sub Function CONVERT_HIVE(HIVE) ' Check and return a system name based on a friendly name If UCase(HIVE) = "HKEY_LOCAL_MACHINE" Then CONVERT_HIVE = &H80000002 ElseIf UCase(HIVE) = "HKEY_USERS" Then ' 修正:HKEY_USERS的正确常量是&H80000003,原代码错误使用了HKLM的值 CONVERT_HIVE = &H80000003 ElseIf UCase(HIVE) = "HKEY_CURRENT_CONFIG" Then CONVERT_HIVE = &H80000005 Else EVENT_WRITER "ERROR","Converting Hive " & HIVE & " failed - " & Err.Number & " | " & Err.Description WScript.Quit End If End Function ' 新增函数:获取当前登录用户的SID Function GetCurrentUserSID() Dim objWMIService, colAccounts, objAccount, strUsername, strDomain ' 获取当前用户名和域名 strUsername = CreateObject("WScript.Network").UserName strDomain = CreateObject("WScript.Network").UserDomain ' 查询WMI获取用户SID Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") Set colAccounts = objWMIService.ExecQuery _ ("SELECT * FROM Win32_UserAccount WHERE Name = '" & strUsername & "' AND Domain = '" & strDomain & "'") For Each objAccount In colAccounts GetCurrentUserSID = objAccount.SID Next ' 如果未获取到SID,抛出错误 If GetCurrentUserSID = "" Then EVENT_WRITER "ERROR", "Failed to retrieve current user SID" WScript.Quit End If End Function
关键修改说明
新增
GetCurrentUserSID函数:- 通过
WScript.Network获取当前登录的用户名和域名 - 利用WMI查询
Win32_UserAccount类,匹配用户名和域名,提取对应的SID值 - 如果无法获取SID,会触发错误并退出脚本
- 通过
动态构建注册表路径:
- 在脚本最开始调用
GetCurrentUserSID获取SID,然后用字符串拼接的方式替换KEY_PATHS数组中硬编码的SID部分 - 这样每次运行脚本时,都会自动使用当前登录用户的SID构建Outlook的注册表路径
- 在脚本最开始调用
修正
CONVERT_HIVE函数的错误:- 原代码中HKEY_USERS的常量值错误地写成了
&H80000002(这是HKEY_LOCAL_MACHINE的常量) - 正确的HKEY_USERS常量是
&H80000003,这个修正确保脚本能正确访问HKEY_USERS下的注册表项
- 原代码中HKEY_USERS的常量值错误地写成了
这样修改后,你的脚本就能自动适配当前登录用户,无需手动修改硬编码的SID了。
内容的提问来源于stack exchange,提问作者Anil K Kushwaha
相关产品推荐
相关产品推荐

