windows - 如何创建向所有用户 HKCU\... 配置单元(包括默认用户和域用户)写入 32 位和 64 位的 VBS 脚本
问题描述
它是关于在没有任何强制策略的情况下配置新的 Windows 配置模板。我需要一个 Visual Basic 脚本 (VBS),它可以访问所有用户 HKCU 注册表配置单元(不是 HKLM!),包括域用户和未来用户的默认用户,并且可以选择定义 32 位和 64 位的方法(或绕过窗口重定向)。
到目前为止我发现了什么:
- “RegUpdateAllHkcuHkcr.vbs”(由 Mick Grove 编写)适用于所有用户,但无法使用特定的 32/64 位(https://github.com/micksmix/RegUpdateAllUsers)。
- 来自“https://www.4thcorner.net/2011/09/30/reading-and-writing-64-bit-register-of-32-bit/”的脚本可以处理 32/64 位,但对于当前仅限用户。
=> 对我来说,没有办法将上面提到的这两种脚本方法结合起来。
有人能帮助我吗?
解决方案
The WMI ProviderArchitecture method does not appear to be needed. You can update HKLM and HKEY_USERS 32 bit and 64 bit entries directly and you can do the same with the not logged on users by loading the NTUser.dat and UsrClass.dat files. HKCU does not need to be edited directly, as it's covered by updating HKEY_USERS. Here's the code (run as administrator):
Const HKLM = &H80000002
Const HKU = &H80000003
Set oWSH = CreateObject("WScript.Shell")
Set oReg = GetObject("winmgmts:\\.\root\default:StdRegProv")
Dim Prefix, SoftwareClasses
UpdateUserTemplate = True
UpdateHKLM
If UpdateUserTemplate Then
Prefix = "HKEY_LOCAL_MACHINE\TempHive"
ProfilePath = "C:\Users\Default"
oWSH.Run "reg load HKLM\TempHive " & chr(34) & ProfilePath & "\AppData\Local\Microsoft\Windows\UsrClass.dat" & chr(34), 0, True
SoftwareClasses = ""
UpdateUserClasses
oWSH.Run "reg unload HKLM\TempHive", 0, True
oWSH.Run "reg load HKLM\TempHive " & chr(34) & ProfilePath & "\NTUser.dat" & chr(34), 0, True
UpdateUserOther
oWSH.Run "reg unload HKLM\TempHive", 0, True
End If
Key = "Software\Microsoft\Windows NT\CurrentVersion\ProfileList"
Result = oReg.EnumKey(HKLM, Key, ArrProfileList)
If Result=0 Then
For Each SID In ArrProfileList
If Len(SID)=45 Then
Result = oReg.EnumKey(HKU, SID, ArrHKU)
If Result=0 Then
UpdateUser True,SID 'Logged on user
Else
UpdateUser False,SID 'Not logged on user
End If
End If
Next
End If
Sub UpdateUser(LoggedOn,SID)
If LoggedOn Then
Prefix = "HKEY_USERS\" & SID
SoftwareClasses = "\Software\Classes"
End If
If Not LoggedOn Then
Prefix = "HKEY_LOCAL_MACHINE\TempHive"
ProfilePath = oWSH.RegRead("HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList\" & SID & "\ProfileImagePath")
oWSH.Run "reg load HKLM\TempHive " & chr(34) & ProfilePath & "\AppData\Local\Microsoft\Windows\UsrClass.dat" & chr(34), 0, True
SoftwareClasses = ""
End If
UpdateUserClasses
If Not LoggedOn Then
oWSH.Run "reg unload HKLM\TempHive", 0, True
oWSH.Run "reg load HKLM\TempHive " & chr(34) & ProfilePath & "\NTUser.dat" & chr(34), 0, True
End If
UpdateUserOther
If Not LoggedOn Then oWSH.Run "reg unload HKLM\TempHive", 0, True
End Sub
'HKLM registry entries go here:
Sub UpdateHKLM
oWSH.RegWrite "HKLM\Software\_Test\StrTest", "Test", "REG_SZ"
oWSH.RegWrite "HKLM\Software\_Test\DWTest", "1", "REG_DWORD"
oWSH.RegWrite "HKLM\Software\WOW6432Node\_Test\StrTest", "Test", "REG_SZ"
oWSH.RegWrite "HKLM\Software\WOW6432Node\_Test\DWTest", "1", "REG_DWORD"
End Sub
'User registry entries that are in the Classes subkey go here:
Sub UpdateUserClasses
oWSH.RegWrite Prefix & SoftwareClasses & "\CLSID\_Test\StrTest", "Test", "REG_SZ"
oWSH.RegWrite Prefix & SoftwareClasses & "\CLSID\_Test\DWTest", "1", "REG_DWORD"
oWSH.RegWrite Prefix & SoftwareClasses & "\WOW6432Node\CLSID\_Test\StrTest", "Test", "REG_SZ"
oWSH.RegWrite Prefix & SoftwareClasses & "\WOW6432Node\CLSID\_Test\DWTest", "1", "REG_DWORD"
End Sub
'User registry entries that are NOT in the Classes subkey go here:
Sub UpdateUserOther
oWSH.RegWrite Prefix & "\Software\_Test\StrTest", "Test", "REG_SZ"
oWSH.RegWrite Prefix & "\Software\_Test\DWTest", "1", "REG_DWORD"
End Sub
推荐阅读
- jquery - 用户在新浏览器选项卡中输入 PDF 文件的 HTML 表单
- android - VideoPlayer 小部件不断给出 NullPointerException 调用空对象引用上的虚拟方法
- vba - 用于自动搜索的 Excel VBA 代码
- javascript - 用数字和星号在javascript中构建正方形
- arrays - 选择多个输入并以角度 5 存储到数组中
- php - 我无法在 PHP 邮件程序中编辑我的邮件文本
- mysql - 错误代码:1292。截断不正确的 DOUBLE 值
- c++ - 为字典 cpp 创建 []= 运算符
- jquery - 根据列组移动DataTable colmn和列在组内移动
- php - smarty 中的 preg_replace 用于删除 unicode 符号