Vbs脚本执行不同版本的Office激活任务(MAK&KMS激活)

Vbs脚本执行不同版本的Office激活任务(MAK激活)

我们都知道微软部分产品可以使用不同的激活方式,对于企业内部的用户来说,会针对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

clip_image002

我们代码获取office的版本及路径

clip_image004

然后同时获取到的office安装路径

clip_image006

然后我们定义需要对指定的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

clip_image008

执行代码

clip_image010

准备好前面两步就基本上好了,接下来我们只需要将两个函数变量整合判断;

将获取到的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

clip_image012

接下来我们测试以下代码运行结果:

我们再次使用的是office2013的进行测试

clip_image014单击确认执行下一步;开始导入mak key

clip_image016

Active Success

clip_image018

查看office状态

clip_image020

最后我们同事提到了一个问题说如果用户没有看见提示信息的话,会一直点,这样会给用户造成代码没有执行的假象,所以想在后行后给用户一个提示,所以再次修改代码

注:因为我们最终发送给用户的话会将一些Msgbox的信息注释,所以用户最后只会看见一个执行成功的显示;

CreateObject("Wscript.Shell").Popup "三秒钟关闭", 3, "MsgBox", 64

clip_image022

根据以上显示我们就可以替换需要显示的内容及自动退出的时间

clip_image024

待3秒提示完成后自动继续向下执行

clip_image026

继续完成Active的任务

clip_image028

如果环境的用户使用KMS主机激活的话,简单修改代码即可:

将ipk更改为skms方式激活即可

Wshell.Run "cscript """ & wordApp.Path & "\ospp.vbs"" /sethst:bj-actsrv02.abc.com",0,True
Wshell.Run "cscript """ & wordApp.Path & "\ospp.vbs"" /act",0,True

更改后的完全代码为:

if GetMAC() <> "44:37-e6:20-f8:03" Then
SET Wshell=CreateObject("Wscript.Shell")
SET wordApp=CreateObject("Word.Application.8")
     CreateObject("Wscript.Shell").Popup "Please Wait for Activing ...", 3, "MsgBox", 64
'msgbox "mac address:" & GetMAC() & Chr(13) & "office version:" & wordApp.Version & Chr(13) & "office setup path:" & wordApp.Path
if wordApp.Version = "14.0" then
Wshell.Run "cscript """ & wordApp.Path & "\ospp.vbs"" /sethst:bj-actsrv02.abc.com",0,True
Wshell.Run "cscript """ & wordApp.Path & "\ospp.vbs"" /act",0,True
Else
Wshell.Run "cscript """ & wordApp.Path & "\ospp.vbs"" /sethst:bj-actsrv02.abc.com",0,True
Wshell.Run "cscript """ & wordApp.Path & "\ospp.vbs"" /act",0,True
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

我们最后再说一下,为了保险起见将vbs脚本通过工具转换成exe,这样就大大提高了安全

clip_image030

运行程序,运行打开---选择需要编译的vbs文件

clip_image032

打开vbs文件后,单机项目---编译

clip_image034

提示保存路径及格式默认为exe

clip_image036

保存后执行也正常

clip_image038

如果需要vbs2exe的转换工具需要下载附件,将扩展名从txt修改为7.z压缩模式,然后解压即可

本文出自 “高文龙” 博客,谢绝转载!

你可能感兴趣的:(Vbs脚本执行不同版本的Office激活任务(MAK&KMS激活))