我们都知道微软部分产品可以使用不同的激活方式,对于企业内部的用户来说,会针对Office和windows os部署对应的kms服务进行激活,但是对于但是对于企业外部的用户来说,一般使用mak的激活方式,MAK的key是有数量限制的,用一个会少一个,所以我们建议少用,当然有人会说,将kms服务器的1688发布到外网不就可以对于外部的用户使用了么,这么敏感的信息发布到外网肯定不好,所以一般会使用Mak激活方式,使用mak的话,我们不能给用户远程来输入key,所以只能通过对应的vbs程序让用户自己执行。但是如果给用户的话,我们就无法控制,如果对激活程序不做特殊限制的话,那样就容易造成信息遗漏给企业造成不必要的损失,所以我们就定义激活程序绑定功能;在激活脚本中定义用户的mac地址,只要mac地址匹配了才能执行该对应的激活流程。需要注意的是我们首先需要从客户手里获取需要激活服务的机器Mac地址,然后在激活程序中定义该Mac地址才能执行后续代码的执行任务,匹配mac地址后,再获取用户office版本及安装路径,最后执行相关的office版本的mak key导入及激活流程。最后我们需要说明一下,因为用vbs脚本定义的激活程序,最后需要发送给用户自行执行,所以我们为了信息外漏,需要使用vbs2exe工具将激活程序转换格式为exe,这样用户就无法查看里面的相关信息了。具体见下:
一、首先是脚本分析:
如果对于office来说,我们都知道,目前使用最多的是office2010和office2013,而且在安装不同的系统版本的路径也是不一样的,所以我们为了保证能够执行成功;我们需要定义一个函数变量来判断office的安装路径及版本
因为我们安装的是office2013版本,所以获取到的版本号为15.0
如果是office2010版本,获取的版本号为14.0
代码:
SET wordApp=CreateObject("Word.Application.8") msgbox wordApp.Version msgbox wordApp.Path
我们代码获取office的版本及路径
然后同时获取到的office安装路径
然后我们定义需要对指定的mac地址做激活,所以我们也同样需要定义一个函数变量,来获取本地的mac地址
Set mc = GetObject("Winmgmts:").InstancesOf("Win32_NetworkAdapterConfiguration") For Each mo In mc If mo.IPEnabled = True Then ‘TracePrint "本机网卡MAC地址是: " & mo.MacAddress GetMAC = mo.MacAddress Exit For End If Next msgbox getmac
执行代码
准备好前面两步就基本上好了,接下来我们只需要将两个函数变量整合判断;
将获取到的mac地址跟vbs脚本中指定的代码进行匹配,然后通过获取到的office版本及路径来判断执行mak key的导入及激活;
注:第一行GetMAC() <> "MAC Address" 的话就是不等于的意思,任何机器都可以执行激活
如果将<>修改为=(等号)就是匹配的意思,只要MAC地址等于获取的MAC才能激活
if GetMAC() = "44:37-e6:20-f8:03" Then SET Wshell=CreateObject("Wscript.Shell") SET wordApp=CreateObject("Word.Application.8") msgbox "mac address:" & GetMAC() & Chr(13) & "office version:" & wordApp.Version & Chr(13) & "office setup path:" & wordApp.Path if wordApp.Version = "14.0" then msgbox "cscript """ & wordApp.Path & "\ospp.vbs"" /inpkey: xxxxx-xxxxx-xxxxx-xxxxx-xxxxx " Wshell.Run "cscript """ & wordApp.Path & "\ospp.vbs"" /inpkey: xxxxx-xxxxx-xxxxx-xxxxx-xxxxx",0,True Wshell.Run "cscript """ & wordApp.Path & "\ospp.vbs"" /act" else msgbox "cscript """ & wordApp.Path & "\ospp.vbs"" /inpkey: xxxxx-xxxxx-xxxx-xxxxx-xxxxx " Wshell.Run "cscript """ & wordApp.Path & "\ospp.vbs"" /inpkey:xxxxx-xxxxx-xxxxx-xxxxx-xxxxx",0,True Wshell.Run "cscript """ & wordApp.Path & "\ospp.vbs"" /act" end if msgbox "Active Success" Else msgbox "Active Failed" End If Function GetMAC() GetMAC = "" Dim mc,mo Set mc = GetObject("Winmgmts:").InstancesOf("Win32_NetworkAdapterConfiguration") For Each mo In mc If mo.IPEnabled = True Then ‘TracePrint "本机网卡MAC地址是: " & mo.MacAddress GetMAC = mo.MacAddress Exit For End If Next Set mc = nothing End Function
接下来我们测试以下代码运行结果:
我们再次使用的是office2013的进行测试
单击确认执行下一步;开始导入mak key
Active Success
查看office状态
最后我们同事提到了一个问题说如果用户没有看见提示信息的话,会一直点,这样会给用户造成代码没有执行的假象,所以想在后行后给用户一个提示,所以再次修改代码
注:因为我们最终发送给用户的话会将一些Msgbox的信息注释,所以用户最后只会看见一个执行成功的显示;
CreateObject("Wscript.Shell").Popup "三秒钟关闭", 3, "MsgBox", 64
根据以上显示我们就可以替换需要显示的内容及自动退出的时间
待3秒提示完成后自动继续向下执行
继续完成Active的任务
我们最后再说一下,为了保险起见将vbs脚本通过工具转换成exe,这样就大大提高了安全
运行程序,运行打开---选择需要编译的vbs文件
打开vbs文件后,单机项目---编译
提示保存路径及格式默认为exe
保存后执行也正常
如果需要vbs2exe的转换工具需要下载附件,将扩展名从txt修改为7.z压缩模式,然后解压即可