为了编写方便和说明,我举一个实际例子,然后通过不同的方法实现这个目的,例子是这样的:(看不懂背景请直接看正文部分)
背景
一个用户映射了一个网络共享文件夹到本的M盘
网络共享文件夹位置://Fileserver/share/software
使用如下命令:net use M: //Fileserver/share/software
但映射完后驱动器名称是类似“software在Fileserver/share”这样的名称,看着很不舒服,当然,我可以通过直接重命名来修改,但是要是有上百个这样的用户我也给一个个做?肯定还是写脚本快了哈~~
首先,我找到了这个键值在注册表中的位置~不同的操作系统竟然还是在不同的地方,不要紧,一个个来:
WindowsXP和Windows2003在这个地方:
HKCU/software/microsoft/windows/currentVersion/explorer/mountpoints2/##Fileserver#share#software
/_LabelFromReg
其中有一段##Fileserver#share#software合着这个共享文件夹的网络位置//Fileserver/share/software对比着一看就知道怎么一回事了,是吧~
然后,把这个地方的值“个人文件夹”直接写在这里就可以了,哈哈~
而在Windows2000中,这个地方就不一样了,在这里:
HKCU/software/microsoft/windows/currentVersion/explorer/mountpoints/M/_LabelFromReg
其中M当然就是指M盘了,那是不是和XP中一样,直接修改这个只就可以了呢?(有这么简单就好了哦~),当然不是,这个名称是以另一种格式存放在cache字段中的,而cache是一个存储二进制数组的字段,并不是字符串格式,比如“网络文件夹”就需要在这里写入“e8,90,e8,95,71,51,ab,4e”这一组数据才可以。(有人会问:你不是说是二进制吗?回答:恩~~十六进制比较短一些~)
正文
好了,前言终于说完了,现在进入正题,以上其实是关于映射驱动器和注册表位置的一段说明,看不懂没关系,现在我要通过几种方法,达到以下两个目的:
字符串数据:“个人文件夹”写入到:HKCU/software/microsoft/windows/currentVersion/explorer/mountpoints2/##Fileserver#share#software/_LabelFromReg
将一组十六进制数据“e8,90,e8,95,71,51,ab,4e”写入到
HKCU/software/microsoft/windows/currentVersion/explorer/mountpoints/M/_LabelFromReg
的cache字段中
1,最简单的办法,直接调用.reg文件,导入注册表设置进行修改~。
首先,要编写注册表(*.reg)文件,具体编写方法和注意事项自己查~,写完了就是这个样子:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER/software/microsoft/windows/currentVersion/explorer/mountpoints2/##Fileserver#share#software]
"_LabelFromReg"="个人文件夹"
[HKEY_CURRENT_USER/software/microsoft/windows/currentVersion/explorer/mountpoints/M/_LabelFromReg]
"Cache"=hex:e8,90,e8,95,71,51,ab,4e,
编写完后保存为注册表文件(比如M.reg),直接运行就可以了。恩,这一段好像和VBS脚本没什么关系,恩~的确是没关系,不过,只要能就决问题,你的老板才不管你用的是什么方法~下面说说和脚本有关的事情。如果你打算在域环境中通过登陆脚本让每个用户来运行这个的话,会发现系统不支持reg作为启动脚本类型,那怎么办呢,呵呵,那就写一个东西来运行reg就好了,于是,编写bat文件(比如M.bat):
regedit /s M.reg
让用户登陆运行M.bat一样达到了导入注册表的目的。
2,通过wscript.shell的方法对注册表进行操作
首先拿出直接可以达到目的代码,再一一解释,代码如下:
set obshell=wscript.createobject("wscript.shell")
obshell.regwrite "HKCU/software/microsoft/windows/currentVersion/explorer/mountpoints2/##Fileserver#share#software/_LabelFromReg","个人文件夹"
说明:这种方法不能将二进制写入到注册表里(你知道请告诉我),下面是对这段代码的说明:
这段代码将字符串"个人文件夹"写到了制定的位置,覆盖原来的值。
操作格式为:obshell.方法 "子主键/键值名","数据","类型"
其中方法可以为:
regwrite:如示例代码,为新建或者修改
regdelete:删除主键或者键值
regreag:读取键值
其中类型可以为:(全大写)
REG_BINARY:二进制值
REG_DWORD:双字节值
以上两种类型数值可以不加引号,而字符串数据必须加引号,但不必声明类型。
3,使用WMI方法,这个方法功能强大,基本可以在任何场合应用。
先看完成这个工作的实际代码:
Const HKEY_CURRENT_USER = &H80000001
Set objRegistry = GetObject ("winmgmts://./root/default:StdRegProv")
strKeyPathM = "software/microsoft/windows/currentVersion/explorer/mountpoints/M/_LabelFromReg"
arrValuesM = Array(232,144,232,149,164,78,98,99,58,83)
objRegistry.SetBinaryValue HKEY_CURRENT_USER, strKeyPathR, "Cache", arrValuesM
strKeyPathM = "HKCU/software/microsoft/windows/currentVersion/explorer/mountpoints2##Fileserver#share#software"
strValue = "个人文件夹"
objRegistry.SetStringValue HKEY_CURRENT_USER, strKeyPath,"_LabelFromReg", strValue
使用WMI方法的好处是能够处理各种数据类型,比如能够将二进制数组写入到注册表,不过在这里的二进制书哟换算成十进制,比较一下(232,144,232,149,164,78,98,99,58,83)和(e8,90,e8,95,71,51,ab,4e),看出来了吧,另外把这个其他的使用方法举例如下,自己看罗~
删除键值:
objRegistry.DeleteValue HKEY_CURRENT_USER, strKeyPath, strValueName
删除主键:
objRegistry.DeleteKey HKEY_CURRENT_USER, strKeyPath
写字符串:
objRegistry.SetStringValue HKEY_CURRENT_USER, strKeyPath, strValueName, strValue
写DWORD:
objRegistry.SetDWORDValue HKEY_CURRENT_USER, strKeyPath, strValueName, dwValue
如果是操作HKEY_CURRENT_MACHINE的值,那就声明
Const HKEY_CURRENT_MACHINE = &H80000001
如果是操作HKEY_CURRENT_MACHINE的值,那就声明
Const HKEY_CURRENT_MACHINE = &H80000002