You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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下的注册表项

这样修改后,你的脚本就能自动适配当前登录用户,无需手动修改硬编码的SID了。

内容的提问来源于stack exchange,提问作者Anil K Kushwaha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:22:30