Skip to content

Instantly share code, notes, and snippets.

@BlackThursdays
Created February 4, 2019 09:09
Show Gist options
  • Save BlackThursdays/899848f3a7258d608d88a4ffb26c406f to your computer and use it in GitHub Desktop.
Save BlackThursdays/899848f3a7258d608d88a4ffb26c406f to your computer and use it in GitHub Desktop.
office activation
'Copyright (c) Microsoft Corporation. All rights reserved.
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
CONST wshOK =0
CONST VALUE_ICON_WARNING =16
CONST wshYesNoDialog =4
CONST VALUE_ICON_QUESTIONMARK =32
CONST VALUE_ICON_INFORMATION =64
CONST HKEY_LOCAL_MACHINE =&H80000002
CONST KEY_SET_VALUE =&H0002
CONST KEY_QUERY_VALUE =&H0001
CONST REG_SZ =1
CONST OfficeAppId = "0ff1ce15-a989-479d-af46-f275c6370663"
CONST STR_SYS32PATH = ":\Windows\System32\"
CONST STR_OSPPREARMPATH = "\Microsoft Office\Office15\OSPPREARM.EXE"
CONST STR_OSPPREARMPATH_DEBUG = "\Microsoft Office Debug\Office15\OSPPREARM.EXE"
CONST REG_OSPP = "SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform"
CONST REG_SPP = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform"
CONST VER_INFO = "Version Info: 2013 1.0 (RTM)"
'////////////////////////////////////////////////////////////////////////////////////////
CONST MSG_NOREGRIGHTS = "Insufficient rights to perform operation."
CONST MSG_ISCMD_ELEVATED = "Ensure cmd.exe is elevated (right click > run as administrator)."
CONST MSG_CREDENTIALFAILURE = "Connection failed with passed credentials."
CONST MSG_FILENOTFOUND = "File not found: "
CONST MSG_SEPERATE = "---------------------------------------"
CONST MSG_PROCESSING = "---Processing--------------------------"
CONST MSG_EXIT = "---Exiting-----------------------------"
CONST MSG_UNSUPPORTED = "Unsupported command passed."
CONST MSG_UNSUPPORTEDOPEROS7 = "The following command is supported on Windows 7 only: "
CONST MSG_UNSUPPORTEDOPEROS8 = "The following command is supported on Windows 8 and above only: "
CONST MSG_UNSUPPORTEDLOCAL = "The following command is supported on local machine only: "
CONST MSG_CREDENTIALERR = "Passing credentials is not supported for this command."
CONST MSG_SUCCESS = "Successfully applied setting."
CONST MSG_NOKMSLICS = "No Office KMS licenses were found on the system."
CONST MSG_ACTATTEMPT = "Installed product key detected - attempting to activate the following product:"
CONST MSG_TOKACTATTEMPT = "Installed product key detected - attempting to token activate the following product:"
CONST MSG_NOKEYSINSTALLED = "<No installed product keys detected>"
CONST MSG_UNINSTALLKEYSUCCESS = "<Product key uninstall successful>"
CONST MSG_ACTSUCCESS = "<Product activation successful>"
CONST MSG_OFFLINEACTSUCCESS = "<Offline product activation successful>"
CONST MSG_KEYINSTALLSUCCESS = "<Product key installation successful>"
CONST MSG_PARTIALKEY = "Last 5 characters of installed product key: "
CONST MSG_UNINSTALLKEY = "Uninstalling product key for: "
CONST MSG_UNRECOGFILE = "Unrecognized file. Office licenses have an .xrm-ms file extension."
CONST MSG_INSTALLLICENSE = "Installing Office license: "
CONST MSG_INSTALLLICSUCCESS = "Office license installed successfully."
CONST MSG_SEARCHEVENTSKMS = "Searching for KMS activation events on machine: "
CONST MSG_SEARCHEVENTSRET = "Searching for Internet activation failure events on machine: "
CONST MSG_NOEVENTSSKMS = "No KMS activation events found on machine: "
CONST MSG_NOEVENTSRET = "No failure events found on machine: "
CONST MSG_OSPPSVC_NOINSTALL = "Error: The Software Protection Platform service is not installed."
CONST MSG_OSPPSVC_NORUN = "Error: The Software Protection Platform service is not running."
CONST MSG_ERRPARTIALKEY = "The last 5 characters of an installed product key are required to run this option. Run the /dstatus option to display the partial product key."
CONST MSG_KEYNOTFOUND = "<Product key not found>"
CONST MSG_CMID = "Client Machine ID (CMID): "
CONST MSG_NOLICENSEFOUND = "<No licenses found>"
CONST MSG_AUTHERR = "Authorization Error: 0x"
CONST MSG_REMILID = "Removed Token-based Activation License with License ID (ILID): "
CONST MSG_NOTFOUNDILID = "License not found with License ID (ILID): "
CONST MSG_KMSLOOKUP = "KMS Lookup Domain: "
CONST MSG_INFO_ONLY = " (for information purposes only as the status is licensed)"
'////////////////////////////////////////////////////////////////////////////////////////
CONST MSG_VLActivationType = "Activation Type Configuration: "
'////////////////////////////////////////////////////////////////////////////////////////
CONST MSG_Act_Recent = "Most recent successful activation client information: "
CONST MSG_KMS_DNS = "KMS machine name from DNS: "
CONST MSG_KMS_DNS_ERR = "DNS auto-discovery: KMS name not available"
CONST MSG_ADInfoAOName = "Activation Object name: "
CONST MSG_ADInfoAODN = "AO DN: "
CONST MSG_ADInfoExtendedPid = "AO extended PID: "
CONST MSG_ADInfoActID = "AO activation ID: "
CONST MSG_ACTIVATION_INTERVAL = "Activation Interval: "
CONST MSG_RENEWAL_INTERVAL = "Renewal Interval: "
CONST MSG_HOST_CACHING = "KMS host caching: "
CONST MSG_HOST_REG_OVERRIDE = "KMS machine registry override defined: "
CONST MSG_DEFAULT_PORT = "1688"
'////////////////////////////////////////////////////////////////////////////////////////
CONST MSG_SKUID = "SKU ID: "
CONST MSG_LICENSENAME = "LICENSE NAME: "
CONST MSG_DESCRIPTION = "LICENSE DESCRIPTION: "
CONST MSG_LICSTATUS = "LICENSE STATUS: "
CONST MSG_LICENSED = " ---LICENSED--- "
CONST MSG_UNLICENSED = " ---UNLICENSED--- "
CONST MSG_OOBGRACE = " ---OOB_GRACE--- "
CONST MSG_OOTGRACE = " ---OOT_GRACE--- "
CONST MSG_NONGENGRACE = " ---NON_GENUINE_GRACE--- "
CONST MSG_NOTIFICATION = " ---NOTIFICATIONS--- "
CONST MSG_EXTENDEDGRACE = " ---EXTENDED GRACE--- "
CONST MSG_LICUNKNOWN = " ---UNKNOWN--- "
CONST MSG_REMAINGRACE = "REMAINING GRACE: "
CONST MSG_LICEXPIRY = "BETA EXPIRATION: "
CONST MSG_ERRCODE = "ERROR CODE: "
CONST MSG_ERRDESC = "ERROR DESCRIPTION: "
CONST MSG_ERRUNKNOWN = "An unknown error occurred."
CONST MSG_ERRCODEVALUE = "An error code must start with '0x'. Example: 0xC004F009"
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
On Error Resume Next
Set WshShell = WSCript.CreateObject("WSCript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objNetwork = WSCript.CreateObject("WSCript.Network")
Dim globalResource, globalErr, foundSlUi, strSluiPath, strLocal, objWMI, objWMI1, wmiErr, productinstances, strValue, Win7, productClass, tokenClass, intIsKms, kmsCounter, isAdActivated
globalResource = ""
globalErr = ""
foundSlUi = False
Win7 = False
kmsCounter = 0
isAdActivated = False
currentDir = Left(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName, "\"))
Select Case WSCript.Arguments.Count
Case 0
verifyFileExists currentDir & "ospp.htm"
showIePopUp currentDir & "ospp.htm"
WScript.Quit
Case 1
var1 = WSCript.Arguments(0)
Case 2
var1 = WSCript.Arguments(0)
var2 = WSCript.Arguments(1)
Case 3
var1 = WSCript.Arguments(0)
var2 = WSCript.Arguments(1)
var3 = WSCript.Arguments(2)
Case 4
var1 = WSCript.Arguments(0)
var2 = WSCript.Arguments(1)
var3 = WSCript.Arguments(2)
var4 = WSCript.Arguments(3)
Case Else
End Select
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Call Main(var1,var2,var3,var4)
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Sub Main(strCommand,strMachine,strUser,strPassword)
On Error Resume Next
getEngine()
pProcessing()
getSlui()
strLocal = objNetwork.ComputerName
strCommand = LCase(strCommand)
Select Case strCommand
Case "/act", "/dstatus", "/dstatusall", "/dinstid", "/dtokils", _
"/remhst", "/stokflag", "/ctokflag", "/dcmid", "/dtokcerts", "/ckms-domain"
connectWMI strMachine,strUser,strPassword,""
performLicAction strCommand,"",""
Case "/dhistoryacterr", "/dhistorykms"
connectWMI strMachine,strUser,strPassword,""
performLicAction strCommand,"",strMachine
Case "/puserops", "/duserops"
connectWMI strMachine,strUser,strPassword,"reg"
performRegAction strCommand
Case "/osppsvcrestart", "/osppsvcauto"
connectWMI strMachine,strUser,strPassword,""
performServiceAction strCommand
Case "/help", "help", "?", "/?", "/?"
verifyFileExists currentDir & "ospp.htm"
showIePopUp currentDir & "ospp.htm"
quitExit()
Case "/regmof"
registerMof "osppwmi.mof"
Case "/rearm"
If strMachine = "" Then
reARM ""
Else
globalPopFailure MSG_UNSUPPORTEDLOCAL & vbCr & strCommand,True
End If
quitExit()
Case "/version"
globalPopSuccess VER_INFO,True
Case Else
pos = InStr(strCommand,":")
Select Case pos
Case 7
getCommand = Left(strCommand,6)
Case 8
getCommand = Left(strCommand,7)
Case 13
getCommand = Left(strCommand,12)
Case Else
globalPopFailure MSG_UNSUPPORTED,True
End Select
Select Case getCommand
Case "/skms-domain", "/actype", "/inpkey", "/unpkey", "/inslic", "/actcid", "/sethst", "/setprt", "/ddescr", "/rtokil", "/tokact", "/cachst", "/rearm"
strValue = Replace(strCommand,getCommand & ":","")
If strValue = "" Then
globalPopFailure MSG_UNSUPPORTED & " A value is required for: " & strCommand,True
End If
If getCommand = "/ddescr" Then
If Left(strValue,2) = "0x" Then
getDescription strValue,""
Else
WScript.Echo MSG_ERRCODEVALUE
quitExit()
End If
ElseIf getCommand = "/rearm" Then
If strMachine = "" Then
reARM strValue
Else
globalPopFailure MSG_UNSUPPORTEDLOCAL & vbCr & strCommand,True
End If
quitExit()
Else
connectWMI strMachine,strUser,strPassword,""
performLicAction getCommand,strValue,""
End If
Case Else
globalPopFailure MSG_UNSUPPORTED,True
End Select
End Select
End Sub
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function showIePopUp(strPath)
On Error Resume Next
Set objExplorer = CreateObject("InternetExplorer.Application")
With objExplorer
.Navigate strPath
.ToolBar = 0
.StatusBar = 0
.Width = 1000
.Height = 593
.Left = 1
.Top = 1
.Visible = 1
End With
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function getEngine()
strEngine = LCase(Right(WScript.FullName,12))
If strEngine <> "\cscript.exe" Then
WshShell.Popup "Unable to perform operation. " & WSCript.ScriptName & " requires the cscript engine." & _
vbCr & "Command line example: cscript ospp.vbs ?", _
,WSCript.ScriptName, VALUE_ICON_WARNING
WScript.Quit
End If
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function WMIDateStringToDate(dtmEventDate)
WMIDateStringToDate = CDate(Mid(dtmEventDate, 5, 2) & "/" & _
Mid(dtmEventDate, 7, 2) & "/" & Left(dtmEventDate, 4) _
& " " & Mid (dtmEventDate, 9, 2) & ":" & _
Mid(dtmEventDate, 11, 2) & ":" & Mid(dtmEventDate, _
13, 2))
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function getDescription(strSearch,cType)
If foundSlUi <> True Then
If cType <> "wmi" Then
globalPopFailure "slui.exe not found.",True
quitExit()
End If
Else
Set objScriptExec = WshShell.Exec (strSluiPath & " 0x2a " & strSearch)
readOut = objScriptExec.StdOut.ReadAll
quitExit()
End If
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function checkRegRights(wmiObject,strKeyPath)
On Error Resume next
wmiObject.CheckAccess HKEY_LOCAL_MACHINE, strKeyPath, KEY_SET_VALUE, _
bHasAccessRight
If bHasAccessRight = True Then
'Success
Else
globalPopFailure MSG_NOREGRIGHTS & vbCr & MSG_ISCMD_ELEVATED,True
End If
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function quitExit()
Set WshShell = Nothing
Set objFSO = Nothing
Set objNetwork = Nothing
Set objWMI = Nothing
WScript.Echo MSG_SEPERATE
WScript.Echo MSG_EXIT
WSCript.Quit
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function verifyFileExists(file)
If Not objFSO.FileExists(file) Then
If file = currentDir & "slerror.xml" Then
WScript.Echo "[" & MSG_FILENOTFOUND & file & " Unable to display error description.]"
ElseIf file = currentDir & "ospp.htm" Then
globalPopFailure MSG_FILENOTFOUND & vbCr & file,False
quitExit()
Else
globalPopFailure MSG_FILENOTFOUND & vbCr & file,True
End If
End If
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function registerMof(strFile)
For Each Drv In objFSO.Drives
If Drv.DriveType=2 Then
If objFSO.FileExists(Drv.DriveLetter & STR_SYS32PATH & "wbem\mofcomp.exe") Then
foundComp = True
strMofExePath = Drv.DriveLetter & STR_SYS32PATH & "wbem\mofcomp.exe"
If objFSO.FileExists(Drv.DriveLetter & STR_SYS32PATH & "wbem\" & strFile) Then
foundMof = True
strOWmi = Drv.DriveLetter & STR_SYS32PATH & "wbem\" & strFile
Set objScriptExec = WshShell.Exec (strMofExePath & " " & strOWmi)
readOut = objScriptExec.StdOut.ReadAll
WScript.Echo readOut
quitExit()
End If
End If
End If
Next
If foundComp <> True Then
globalPopFailure MSG_FILENOTFOUND & Replace(STR_SYS32PATH,":","") & "wbem\mofcomp.exe",True
Else
If foundMof <> True Then
globalPopFailure MSG_FILENOTFOUND & Replace(STR_SYS32PATH,":","") & "wbem\osppwmi.mof",True
End If
End If
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function pProcessing()
WScript.Echo MSG_PROCESSING
WScript.Echo MSG_SEPERATE
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function getSlui()
For Each Drv In objFSO.Drives
If Drv.DriveType=2 Then
If objFSO.FileExists(Drv.DriveLetter & STR_SYS32PATH & "slui.exe") Then
strSluiPath = Drv.DriveLetter & STR_SYS32PATH & "slui.exe"
foundSlUi = True
Exit For
End If
End If
Next
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
' Returns the encoding for a givven file.
' Possible return values: ascii, unicode, unicodeFFFE (big-endian), utf-8
Function GetFileEncoding(strFileName)
Dim strData
Dim strEncoding
Set oStream = CreateObject("ADODB.Stream")
oStream.Type = 1 'adTypeBinary
oStream.Open
oStream.LoadFromFile(strFileName)
' Default encoding is ascii
strEncoding = "ascii"
strData = BinaryToString(oStream.Read(2))
' Check for little endian (x86) unicode preamble
If (Len(strData) = 2) and strData = (Chr(255) + Chr(254)) Then
strEncoding = "unicode"
Else
oStream.Position = 0
strData = BinaryToString(oStream.Read(3))
' Check for utf-8 preamble
If (Len(strData) >= 3) and strData = (Chr(239) + Chr(187) + Chr(191)) Then
strEncoding = "utf-8"
End If
End If
oStream.Close
GetFileEncoding = strEncoding
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
' Converts binary data (VT_UI1 | VT_ARRAY) to a string (BSTR)
Function BinaryToString(dataBinary)
Dim i
Dim str
For i = 1 To LenB(dataBinary)
str = str & Chr(AscB(MidB(dataBinary, i, 1)))
Next
BinaryToString = str
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
' Returns string containing the whole text file data.
' Supports ascii, unicode (little-endian) and utf-8 encoding.
Function ReadAllTextFile(strFileName)
Dim strData
Set oStream = CreateObject("ADODB.Stream")
oStream.Type = 2 'adTypeText
oStream.Open
oStream.Charset = GetFileEncoding(strFileName)
oStream.LoadFromFile(strFileName)
strData = oStream.ReadText(-1) 'adReadAll
oStream.Close
ReadAllTextFile = strData
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function sppErrHandle(strCommand)
globalErr = Hex(Err.Number)
Select Case Err.Number
Case 0
'Success
Select Case strCommand
Case "/act","/tokact"
WScript.Echo MSG_ACTSUCCESS
Case "/inpkey"
WScript.Echo MSG_KEYINSTALLSUCCESS
quitExit()
Case "/inslic"
WScript.Echo MSG_INSTALLLICSUCCESS
quitExit()
Case "/ckms-domain","/skms-domain","/actype","/sethst","/setprt","/remhst","/stokflag","/ctokflag","/cachst"
WScript.Echo MSG_SUCCESS
quitExit()
Case "/rtokil"
WScript.Echo MSG_REMILID & UCase(strValue)
quitExit()
Case "/unpkey"
WScript.Echo MSG_UNINSTALLKEYSUCCESS
quitExit()
Case Else
End Select
Case Else
verifyFileExists currentDir & "slerror.xml"
getResource("err" & "0x" & globalErr)
If globalResource = "" Then
If Len(globalErr) <> "8" Then
WScript.Echo MSG_ERRDESC & MSG_ERRUNKNOWN
Else
If foundSlUi = True Then
WScript.Echo MSG_ERRCODE & "0x" & globalErr
WScript.Echo MSG_ERRDESC & "Run the following: cscript ospp.vbs /ddescr:0x" & globalErr
Else
WScript.Echo MSG_ERRCODE & "0x" & globalErr
End If
End If
If strCommand <> "/act" Then
quitExit()
End If
Else
WScript.Echo MSG_ERRCODE & "0x" & globalErr
Wscript.Echo MSG_ERRDESC & globalResource
End If
If strCommand = "/dtokcerts" Or strCommand = "/ignore" Then
quitExit()
End If
End Select
If globalErr = "C004F074" Then
WScript.Echo "To view the activation event history run: cscript " & WScript.ScriptName & " /dhistorykms"
End If
globalResource = ""
globalErr = ""
Err.Clear
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function wmiErrHandle()
Select Case Err.Number
Case 0
'Successs
Case 424
globalPopFailure MSG_ERRCODE & Err.Number & vbCr & MSG_ERRDESC & MSG_CREDENTIALFAILURE,True
Case Else
If Err.Description <> "" Then
globalPopFailure MSG_ERRCODE & Err.Number & vbCr & MSG_ERRDESC & Err.Description,True
Else
globalPopFailure "An error occurred while making the connection." & vbCr & MSG_ERRCODE & Err.Number,True
End If
End Select
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function setRegValue(wmiObject,opsValue,strValueName)
On Error Resume Next
Err.Clear()
If Win7 = True Then
strKeyPath = REG_OSPP
Else
strKeyPath = REG_SPP
End If
Select Case strValueName
Case "UserOperations"
wmiObject.CreateKey HKEY_LOCAL_MACHINE,strKeyPath
wmiObject.SetDWORDValue HKEY_LOCAL_MACHINE,_
strKeyPath,strValueName,opsValue
Case Else
End Select
wmiErrHandle()
WScript.Echo MSG_SUCCESS
quitExit()
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function getResource(resource)
On Error Resume Next
Set xmlDoc = CreateObject("Msxml2.DOMDocument.6.0")
xmlDoc.load(currentDir & "slerror.xml")
Set ElemList = xmlDoc.getElementsByTagName(resource)
resValue = ElemList.item(0).text
globalResource = resValue
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function globalPopSuccess(strSuccess,boolQuit)
If boolQuit = True Then
WshShell.Popup strSuccess,,WScript.ScriptName, wshOK + VALUE_ICON_INFORMATION
quitExit()
Else
WshShell.Popup strSuccess,,WScript.ScriptName, wshOK + VALUE_ICON_INFORMATION
End If
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function globalPopFailure(strFailure,boolQuit)
If boolQuit = True Then
WshShell.Popup strFailure,,WScript.ScriptName, wshOK + VALUE_ICON_WARNING
quitExit()
Else
WshShell.Popup strFailure,,WScript.ScriptName, wshOK + VALUE_ICON_WARNING
End If
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function connectWMI(strMachine,strUser,strPassword,ctype)
On Error Resume Next
If ctype = "" Then
If strMachine = "" Or LCase(strMachine) = LCase(strLocal) Then
Set objWMI = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & "." & "\root\cimv2")
Else
If strUser = "" And strPassword = "" Then
Set objWMI = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strMachine & "\root\cimv2")
Else
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMI = objSWbemLocator.ConnectServer _
(strMachine, "\root\cimv2", strUser, strPassword)
wmiErr = CStr(Hex(Err.Number))
If Len(wmiErr) = "8" Then
getDescription "0x" & wmiErr,"wmi"
End If
objWMI.Security_.ImpersonationLevel = 3
End If
End If
Else
If strUser <> "" Then
globalPopFailure MSG_CREDENTIALERR,True
End If
If strMachine = "" Or LCase(strMachine) = LCase(strLocal) Then
Set objWMI1 = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & "." & "\root\default:StdRegProv")
Set objWMI = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & "." & "\root\cimv2")
Else
Set objWMI1 = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strMachine & "\root\default:StdRegProv")
Set objWMI = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strMachine & "\root\cimv2")
End If
End If
wmiErrHandle()
isWin7OS()
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Private Function TkaGetSigner()
On Error Resume Next
If Win7 = True Then
Set TkaGetSigner = WScript.CreateObject("OSPPWMI.OSppWmiTokenActivationSigner")
Else
Set TkaGetSigner = WScript.CreateObject("SPPWMI.SppWmiTokenActivationSigner")
End If
If Hex(Err.Number) = "80020009" Then
globalPopFailure MSG_ERRCODE & "0x" & Hex(Err.Number) & vbCr & MSG_ERRDESC & Err.Description,True
End If
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function TkaPrintCertificate(strThumbprint)
arrParams = Split(strThumbprint, "|")
WScript.Echo "Thumbprint: " & arrParams(0)
WScript.Echo "Subject: " & arrParams(1)
WScript.Echo "Issuer: " & arrParams(2)
vf = FormatDateTime(CDate(arrParams(3)), vbShortDate)
WScript.Echo "Valid From: " & vf
vt = FormatDateTime(CDate(arrParams(4)), vbShortDate)
WScript.Echo "Valid To: " & vt
WScript.Echo MSG_SEPERATE
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function ExecuteQuery(strSelect,strWhere,strClass)
Err.Clear
If strWhere = "" Then
Set productinstances = objWMI.ExecQuery("SELECT " & strSelect & " FROM " & strClass)
Else
Set productinstances = objWMI.ExecQuery("SELECT " & strSelect & " FROM " & strClass & " WHERE " & strWhere)
End If
sppErrHandle ""
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function performLicAction(strCommand,strValue,strMachine)
On Error Resume Next
If strCommand = "/dhistorykms" Or strCommand = "/dhistoryacterr" Then
verifyFileExists currentDir & "slerror.xml"
If strCommand = "/dhistorykms" Then
'12288 = KMS Activation event id
eventCode = "12288"
strSrcEvents = MSG_SEARCHEVENTSKMS
strNoEvents = MSG_NOEVENTSSKMS
Else
'8200 = Internet Activation event id
eventCode = "8200"
strSrcEvents = MSG_SEARCHEVENTSRET
strNoEvents = MSG_NOEVENTSRET
End If
If strMachine <> "" Then
WScript.Echo strSrcEvents & strMachine
Else
WScript.Echo strSrcEvents & strLocal
End If
WScript.Echo "Event ID: " & eventCode
WScript.Echo vbCr
Set objEvents = objWMI.ExecQuery _
("Select * from Win32_NTLogEvent Where Logfile = 'Application' and " _
& "EventCode = '" & eventCode & "'")
If objEvents.Count > 0 Then
For each objEvent in objEvents
If strCommand = "/dhistoryacterr" Then
i = i + 1
dtmEventDate = objEvent.TimeWritten
strTimeWritten = WMIDateStringToDate(dtmEventDate)
WScript.Echo "Coordinated Universal Time Written: " & strTimeWritten
strReplCrs = Replace(objEvent.Message,vbCrLf,"")
WScript.Echo "MESSAGE: " & strReplCrs
strhr10 = Right(strReplCrs,10)
getResource("err" & strhr10)
If globalResource = "" Then
If foundSlUi = True Then
WScript.Echo MSG_ERRDESC & "Run the following: cscript ospp.vbs /ddescr:" & strhr10
Else
WScript.Echo MSG_ERRDESC & "Not available."
End If
Else
Wscript.Echo MSG_ERRDESC & globalResource
End If
WScript.Echo MSG_SEPERATE
Else
strhr10 = Mid(objEvent.Message,90,10)
strReplCrs = Replace(objEvent.Message,vbCrLf,"")
If Right(strReplCrs,2) = " 5" Then
strReplStrs = Replace(strReplCrs,"The client has sent an activation request to the key management service machine.Info:","")
dtmEventDate = objEvent.TimeWritten
strTimeWritten = WMIDateStringToDate(dtmEventDate)
WScript.Echo "Coordinated Universal Time Written: " & strTimeWritten
intColon = InStr(strReplStrs,":")
strErrHost = Left(strReplStrs,intColon)
strErrHost = Trim(strErrHost)
strErrHost = Replace(strErrHost,":","")
WScript.Echo "ERROR/HOST: " & strErrHost
Select Case strhr10
Case "0x00000000"
WScript.Echo MSG_ERRDESC & "N/A"
Case Else
getResource("err" & strhr10)
If globalResource = "" Then
If foundSlUi = True Then
WScript.Echo MSG_ERRDESC & "Run the following: cscript ospp.vbs /ddescr:" & strhr10
Else
WScript.Echo MSG_ERRDESC & "Not available."
End If
Else
Wscript.Echo MSG_ERRDESC & globalResource
End If
End Select
WScript.Echo MSG_SEPERATE
End If
End If
Next
Else
WScript.Echo MSG_SEPERATE
If strMachine <> "" Then
WScript.Echo strNoEvents & strMachine
Else
WScript.Echo strNoEvents & strLocal
End If
WScript.Echo MSG_SEPERATE
End If
quitExit()
End If
'Verify osppsvc service is installed for win7 case
If Win7 = True Then
Set colListOfServices = objWMI.ExecQuery _
("Select * from Win32_Service ")
For Each objService in colListOfServices
If objService.Name = "osppsvc" Then
installed = True
Exit For
End If
Next
If installed <> True Then
globalPopFailure MSG_OSPPSVC_NOINSTALL,True
End If
End If
Select Case strCommand
'The following operations are performed @ a service level
Case "/inpkey", "/dcmid", "/inslic", "/cachst", "/stokflag", "/ctokflag", "/dstatus", "/dstatusall"
If Win7 = True Then
For Each objService in objWMI.InstancesOf("OfficeSoftwareProtectionService")
Set objOspp = objService
Exit For
Next
Else
'Win8 and beyond
For Each objService in objWMI.InstancesOf("SoftwareLicensingService")
Set objOspp = objService
Exit For
Next
End If
Case Else
End Select
sppErrHandle ""
If strCommand = "/inpkey" Then
i = i + 1
Err.Clear
objOspp.InstallProductKey(strValue)
sppErrHandle(strCommand)
ElseIf strCommand = "/cachst" Then
i = i + 1
If strValue = "true" Then
objOspp.DisableKeyManagementServiceHostCaching(False)
sppErrHandle(strCommand)
ElseIf strValue = "false" Then
objOspp.DisableKeyManagementServiceHostCaching(True)
sppErrHandle(strCommand)
Else
globalPopFailure MSG_UNSUPPORTED & " A TRUE or FALSE value is required for: " & strCommand,True
End If
ElseIf strCommand = "/dcmid" Then
If objOspp.ClientMachineID <> "" Or objOspp.ClientMachineID <> Null Then
WScript.Echo MSG_CMID & objOspp.ClientMachineID
Else
WScript.Echo MSG_CMID & "Not found."
End If
quitExit()
ElseIf strCommand = "/inslic" Then
i = i + 1
If Right(strValue,7) = ".xrm-ms" Then
verifyFileExists strValue
WScript.Echo MSG_INSTALLLICENSE & strValue
Else
globalPopFailure MSG_UNRECOGFILE,True
End If
LicenseData = ReadAllTextFile(strValue)
objOSpp.InstallLicense(LicenseData)
SppErrHandle(strCommand)
ElseIf strCommand = "/stokflag" Then
i = i + 1
If Win7 = True Then
objOspp.DisableKeyManagementServiceActivation(True)
sppErrHandle(strCommand)
Else
'Unsupported - osppsvc only supports this.
globalPopFailure MSG_UNSUPPORTEDOPEROS7 & vbCr & strCommand,True
End If
ElseIf strCommand = "/ctokflag" Then
i = i + 1
If Win7 = True Then
objOspp.DisableKeyManagementServiceActivation(False)
SppErrHandle(strCommand)
Else
'Unsupported - osppsvc only supports this.
globalPopFailure MSG_UNSUPPORTEDOPEROS7 & vbCr & strCommand,True
End If
ElseIf strCommand = "/dtokils" Then
Err.Clear
Set objWmiDate = CreateObject("WBemScripting.SWbemDateTime")
ExecuteQuery "ILID, ILVID, AuthorizationStatus, ExpirationDate, Description, AdditionalInfo","",tokenClass
For Each instance in productinstances
sppErrHandle ""
i = i + 1
WScript.Echo "License ID (ILID): " & instance.ILID
WScript.Echo "Version ID (ILvID): " & instance.ILVID
If Not IsNull(instance.ExpirationDate) Then
objWmiDate.Value = instance.ExpirationDate
If (objWmiDate.GetFileTime(false) <> 0) Then
WScript.Echo "Expiry Date: " & objWmiDate.GetVarDate
End If
End If
If Not IsNull(instance.AdditionalInfo) Then
WScript.Echo "Additional Info: " & instance.AdditionalInfo
End If
If Not IsNull(instance.AuthorizationStatus) And instance.AuthorizationStatus <> 0 Then
globalErr = CStr(Hex(instance.AuthorizationStatus))
WScript.Echo MSG_AUTHERR & globalErr
quitExit()
Else
WScript.Echo "Description: " & instance.Description
End If
WScript.Echo MSG_SEPERATE
Next
If i = 0 Then
WScript.Echo MSG_NOLICENSEFOUND
End If
quitExit()
ElseIf strCommand = "/rtokil" Then
Err.Clear
ExecuteQuery "ILID, ID","",tokenClass
For Each instance in productinstances
sppErrHandle ""
i = i + 1
If LCase(strValue) = LCase(instance.ILID) Then
instance.Uninstall
SppErrHandle(strCommand)
Else
WScript.Echo MSG_NOTFOUNDILID & strValue & " Run /dtokils to display the ILID for installed licenses."
End If
Next
If i = 0 Then
WScript.Echo MSG_NOLICENSEFOUND
End If
quitExit()
ElseIf strCommand = "/dtokcerts" Then
Err.Clear
Set objSigner = TkaGetSigner()
sppErrHandle(strCommand)
ExecuteQuery "ID, Name, ApplicationId, PartialProductKey, Description, LicenseIsAddon ","ApplicationId = '" & OfficeAppId & "' " & "AND PartialProductKey <> NULL " & "AND LicenseIsAddon = FALSE",productClass
For each instance in productinstances
i = i + 1
sppErrHandle ""
iRet = instance.GetTokenActivationGrants(arrGrants)
If Err.Number = 0 Then
arrThumbprints = objSigner.GetCertificateThumbprints(arrGrants)
If Err.Number = 0 Then
For Each strThumbprint in arrThumbprints
TkaPrintCertificate strThumbprint
Next
Else
sppErrHandle ""
End If
Else
sppErrHandle ""
End If
WScript.Echo MSG_SEPERATE
Err.Clear
Next
ElseIf strCommand = "/tokact" Then
Err.Clear
Set objSigner = TkaGetSigner()
sppErrHandle "/ignore"
pos1 = InStr(strValue,":")
If pos1 = 0 Then
'PIN not passed
strThumbprint = strValue
Else
'PIN passed
strThumbprint = Left(strValue,pos1 - 1)
strPin = Replace(strValue,strThumbprint & ":","")
End If
ExecuteQuery "ID, Name, ApplicationId, PartialProductKey, Description, LicenseIsAddon ","ApplicationId = '" & OfficeAppId & "' " & "AND PartialProductKey <> NULL " & "AND LicenseIsAddon = FALSE",productClass
For each instance in productinstances
i = i + 1
sppErrHandle ""
WScript.Echo MSG_TOKACTATTEMPT
WScript.Echo MSG_SKUID & instance.ID
WScript.Echo MSG_LICENSENAME & instance.Name
WScript.Echo MSG_DESCRIPTION & instance.Description
WScript.Echo MSG_PARTIALKEY & instance.PartialProductKey
iRet = instance.GenerateTokenActivationChallenge(strChallenge)
If Err.Number = 0 Then
strAuthInfo1 = objSigner.Sign(strChallenge, strThumbprint, strPin, strAuthInfo2)
If Err.Number = 0 Then
iRet = instance.DepositTokenActivationResponse(strChallenge, strAuthInfo1, strAuthInfo2)
SppErrHandle(strCommand)
Else
sppErrHandle ""
End If
Else
sppErrHandle ""
End If
WScript.Echo MSG_SEPERATE
Next
Else
Err.Clear
If strCommand = "/dstatus" Or strCommand = "/dstatusall" Then
If Win7 = True Then
ExecuteQuery "ID, ApplicationId, EvaluationEndDate, PartialProductKey, Description, Name, LicenseStatus, LicenseStatusReason, ProductKeyID, GracePeriodRemaining, DiscoveredKeyManagementServiceMachineName, DiscoveredKeyManagementServiceMachinePort, VLActivationInterval, VLRenewalInterval, KeyManagementServiceMachine, KeyManagementServicePort","ApplicationId = '" & OfficeAppId & "' ",productClass
Else
ExecuteQuery "ID, ApplicationId, EvaluationEndDate, PartialProductKey, Description, Name, LicenseStatus, LicenseStatusReason, ProductKeyID, GracePeriodRemaining, KeyManagementServiceLookupDomain, VLActivationType, ADActivationObjectName, ADActivationObjectDN, ADActivationCsvlkPid, ADActivationCsvlkSkuId, VLActivationTypeEnabled, DiscoveredKeyManagementServiceMachineName, DiscoveredKeyManagementServiceMachinePort, VLActivationInterval, VLRenewalInterval, KeyManagementServiceMachine, KeyManagementServicePort","ApplicationId = '" & OfficeAppId & "' ",productClass
End If
ElseIf strCommand = "/act" Then
ExecuteQuery "ID, ApplicationId, PartialProductKey, Description, Name","ApplicationId = '" & OfficeAppId & "' " & "AND PartialProductKey <> NULL ",productClass
ElseIf strCommand = "/unpkey" Then
ExecuteQuery "ID, ApplicationId, Description, PartialProductKey, Name, ProductKeyID","ApplicationId = '" & OfficeAppId & "' " & "AND PartialProductKey <> NULL ",productClass
ElseIf strCommand = "/dinstid" Or strCommand = "/actcid" Then
ExecuteQuery "ID, ApplicationId, Description, PartialProductKey, Name, OfflineInstallationId","ApplicationId = '" & OfficeAppId & "' " & "AND PartialProductKey <> NULL ",productClass
ElseIf strCommand = "/actype" Or strCommand = "/skms-domain" Or strCommand = "/ckms-domain" Then
If Win7 = True Then
'Unsupported - sppsvc only supports this.
globalPopFailure MSG_UNSUPPORTEDOPEROS8 & vbCr & strCommand,True
Else
ExecuteQuery "ID, Description, PartialProductKey, ApplicationId ","ApplicationId = '" & OfficeAppId & "' ",productClass
End If
ElseIf strCommand = "/sethst" Or strCommand = "/setprt" Or strCommand = "/remhst" Then
ExecuteQuery "ID, Description, PartialProductKey, ApplicationId ","ApplicationId = '" & OfficeAppId & "' ",productClass
End If
For Each instance in productinstances
sppErrHandle ""
If (LCase(instance.ApplicationId) = OfficeAppId) Then
If instance.PartialProductKey <> "" Then
i = i + 1
End If
intIsKms = InStr(UCase(instance.Description),"KMS")
If intIsKms <> 0 Then
kmsCounter = kmsCounter + 1
End If
Select Case strCommand
Case "/actype"
Select Case strValue
Case "0","1","2","3"
Case Else
globalPopFailure MSG_UNSUPPORTED & " A value of" & vbCr & _
"0 (for all)" & vbCr & "1 (for AD)" & vbCr & "2 (for KMS" & vbCr & _
"3 (for Token)" & vbCr & "Is required for: " & strCommand,True
End Select
If intIsKms <> 0 Then
If strValue <> 0 Then
instance.SetVLActivationTypeEnabled(strValue)
Else
instance.ClearVLActivationTypeEnabled()
End If
End If
sppErrHandle ""
Case "/skms-domain"
If intIsKms <> 0 Then
instance.SetKeyManagementServiceLookupDomain(strValue)
End If
sppErrHandle ""
Case "/ckms-domain"
If intIsKms <> 0 Then
instance.ClearKeyManagementServiceLookupDomain()
End If
sppErrHandle ""
Case "/sethst"
If intIsKms <> 0 Then
instance.SetKeyManagementServiceMachine(strValue)
End If
sppErrHandle ""
Case "/setprt"
If intIsKms <> 0 Then
instance.SetKeyManagementServicePort(strValue)
End If
sppErrHandle ""
Case "/remhst"
If intIsKms <> 0 Then
instance.ClearKeyManagementServiceMachine()
sppErrHandle ""
instance.ClearKeyManagementServicePort()
sppErrHandle ""
End If
Case "/act"
WScript.Echo MSG_ACTATTEMPT
WScript.Echo MSG_SKUID & instance.ID
WScript.Echo MSG_LICENSENAME & instance.Name
WScript.Echo MSG_DESCRIPTION & instance.Description
WScript.Echo MSG_PARTIALKEY & instance.PartialProductKey
instance.Activate
SppErrHandle(strCommand)
WScript.Echo MSG_SEPERATE
Case "/unpkey"
If Len(strValue) <> "5" Then
globalPopFailure MSG_ERRPARTIALKEY,True
End If
If UCase(strValue) = instance.PartialProductKey Then
y = y + 1
WScript.Echo MSG_UNINSTALLKEY & instance.Name
instance.UninstallProductKey(instance.ProductKeyID)
SppErrHandle(strCommand)
End If
Case "/dinstid"
WScript.Echo "Installation ID for: " & instance.Name & ": " & instance.OfflineInstallationId
WScript.Echo MSG_SEPERATE
Case "/actcid"
instance.DepositOfflineConfirmationId instance.OfflineInstallationId, strValue
If Err.Number = 0 Then
If telsuccess <> True Then
WScript.Echo MSG_LICENSENAME & instance.Name
WScript.Echo MSG_OFFLINEACTSUCCESS
telsuccess = True
End If
Else
WScript.Echo MSG_LICENSENAME & instance.Name
sppErrHandle ""
End If
WScript.Echo MSG_SEPERATE
Case "/dstatus", "/dstatusall"
getInstalled = False
verifyFileExists currentDir & "slerror.xml"
licSr = Hex(instance.LicenseStatusReason)
If strCommand = "/dstatusall" Then
getInstalled = True
WScript.Echo MSG_SKUID & instance.ID
WScript.Echo MSG_LICENSENAME & instance.Name
WScript.Echo MSG_DESCRIPTION & instance.Description
Else
If instance.ProductKeyID <> "" Then
getInstalled = True
WScript.Echo MSG_SKUID & instance.ID
WScript.Echo MSG_LICENSENAME & instance.Name
WScript.Echo MSG_DESCRIPTION & instance.Description
'EvaluationEndDate always returns a value. When an expiry date is not defined "1/1/1601" is returned.
'So avoid displaying this against RTM licenses as that date = no expiry defined.
If instance.EvaluationEndDate <> "" Then
Set objDate = CreateObject("WBemScripting.SWbemDateTime")
objDate.Value = instance.EvaluationEndDate
If objDate.GetVarDate() <> "1/1/1601" Then
WScript.Echo MSG_LICEXPIRY & objDate.GetVarDate()
End If
Set objDate = Nothing
End If
End If
End If
If getInstalled = True Then
Select Case instance.LicenseStatus
Case 0
WScript.Echo MSG_LICSTATUS & MSG_UNLICENSED
Case 1
WScript.Echo MSG_LICSTATUS & MSG_LICENSED
Case 2
WScript.Echo MSG_LICSTATUS & MSG_OOBGRACE
Case 3
WScript.Echo MSG_LICSTATUS & MSG_OOTGRACE
Case 4
WScript.Echo MSG_LICSTATUS & MSG_NONGENGRACE
Case 5
WScript.Echo MSG_LICSTATUS & MSG_NOTIFICATION
Case 6
WScript.Echo MSG_LICSTATUS & MSG_EXTENDEDGRACE
Case Else
WScript.Echo MSG_LICSTATUS & MSG_LICUNKNOWN
End Select
If licSr <> "0" Then
If instance.LicenseStatus <> 1 Then
WScript.Echo MSG_ERRCODE & "0x" & licSr
Else
WScript.Echo MSG_ERRCODE & "0x" & licSr & MSG_INFO_ONLY
End If
getResource("err" & "0x" & licSr)
If globalResource = "" Then
If foundSlUi <> True Then
WScript.Echo MSG_ERRDESC & "Not available."
Else
WScript.Echo MSG_ERRDESC & "Run the following: cscript ospp.vbs /ddescr:0x" & licSr
End if
Else
WScript.Echo MSG_ERRDESC & globalResource
End If
End If
If instance.GracePeriodRemaining <> 0 Then
dGrace = instance.GracePeriodRemaining / 60 / 24
rndDown = Int(dGrace)
WScript.Echo MSG_REMAINGRACE & rndDown & " days " & " (" & instance.GracePeriodRemaining & " minute(s) before expiring" & ")"
End If
If instance.PartialProductKey <> "" Then
WScript.Echo MSG_PARTIALKEY & instance.PartialProductKey
'Display additional volume info for KMS licenses
If intIsKms <> 0 Then
'Display activation type set (Win8+).
If Win7 <> True Then
Select Case instance.VLActivationTypeEnabled
Case 1
WScript.Echo MSG_VLActivationType & "AD"
Case 2
WScript.Echo MSG_VLActivationType & "KMS"
Case 3
WScript.Echo MSG_VLActivationType & "Token"
Case Else
WScript.Echo MSG_VLActivationType & "ALL"
End Select
'Check to see if last activated via AD- display object info (Win8+).
If instance.VLActivationType = 1 Then
isAdActivated = True
WScript.Echo MSG_Act_Recent + "AD"
WScript.Echo vbTab & MSG_ADInfoAOName & instance.ADActivationObjectName
WScript.Echo vbTab & MSG_ADInfoAODN & instance.ADActivationObjectDN
WScript.Echo vbTab & MSG_ADInfoExtendedPid & instance.ADActivationCsvlkPid
WScript.Echo vbTab & MSG_ADInfoActID & instance.ADActivationCsvlkSkuId
End If
End If
If isAdActivated = False Then
strKms = instance.DiscoveredKeyManagementServiceMachineName
strPort = instance.DiscoveredKeyManagementServiceMachinePort
If IsNull(strKms) Or (strKms = "") Or IsNull(strPort) Or (strPort = 0) Then
WScript.Echo vbTab & MSG_KMS_DNS_ERR
Else
WScript.Echo vbTab & MSG_KMS_DNS & strKMS & ":" & strPort
End If
'Check to see if registry override is defined
strKms = instance.KeyManagementServiceMachine
If strKms <> "" And Not IsNull(strKms) Then
strPort = instance.KeyManagementServicePort
If (strPort = 0) Then
strPort = MSG_DEFAULT_PORT
End If
WScript.Echo vbTab & MSG_HOST_REG_OVERRIDE & strKms & ":" & strPort
End If
WScript.Echo vbTab & MSG_ACTIVATION_INTERVAL & instance.VLActivationInterval & " minutes"
WScript.Echo vbTab & MSG_RENEWAL_INTERVAL & instance.VLRenewalInterval & " minutes"
If (objOspp.KeyManagementServiceHostCaching = True) Then
WScript.Echo vbTab & MSG_HOST_CACHING & "Enabled"
Else
WScript.Echo vbTab & MSG_HOST_CACHING & "Disabled"
End If
If Win7 <> True Then
If instance.KeyManagementServiceLookupDomain <> "" Then
WScript.Echo vbTab & MSG_KMSLOOKUP & instance.KeyManagementServiceLookupDomain
End If
End If
End If
End If
End If
WScript.Echo MSG_SEPERATE
End If
Case Else
End Select
End If
Next
End If
Select Case strCommand
Case "/unpkey"
If y = 0 Then
WScript.Echo MSG_KEYNOTFOUND
quitExit()
End If
Case "/ckms-domain","/skms-domain","/actype","/sethst","/setprt","/remhst"
If kmsCounter = 0 Then
WScript.Echo MSG_NOKMSLICS
quitExit()
Else
sppErrHandle(strCommand)
End If
Case Else
End Select
If i = 0 Then
WScript.Echo MSG_NOKEYSINSTALLED
WScript.Echo MSG_SEPERATE
End If
quitExit()
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function performRegAction(strCommand)
On Error Resume Next
If Win7 = True Then
Set colListOfServices = objWMI.ExecQuery _
("Select * from Win32_Service ")
For Each objService in colListOfServices
If objService.Name = "osppsvc" Then
installed = True
Exit For
End If
Next
If installed <> True Then
globalPopFailure MSG_OSPPSVC_NOINSTALL,True
End If
checkRegRights objWMI1,REG_OSPP
Else
checkRegRights objWMI1,REG_SPP
End If
Select Case strCommand
Case "/puserops"
setRegValue objWMI1,"1","UserOperations"
Case "/duserops"
setRegValue objWMI1,"0","UserOperations"
End Select
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function performServiceAction(strCommand)
On Error Resume Next
Set colListOfServices = objWMI.ExecQuery _
("Select * from Win32_Service ")
For Each objService in colListOfServices
If objService.Name = "osppsvc" Then
installed = True
Exit For
End If
Next
If installed <> True Then
globalPopFailure MSG_OSPPSVC_NOINSTALL,True
End If
Set objService = Nothing
Set colListOfServices = Nothing
If strCommand = "/osppsvcauto" Then
Set colListOfServices = objWMI.ExecQuery _
("Select * from Win32_Service where StartMode = 'Manual' or StartMode = 'Disabled'")
For Each objService in colListOfServices
If LCase(objService.Name) = "osppsvc" Then
foundOsppNonAuto = True
objService.Change , , , , "Automatic"
WScript.Sleep(15000)
Exit For
End If
Next
If foundOsppNonAuto <> True Then
WScript.Echo "Service startup type already set to automatic: Office Software Protection Platform"
quitExit()
End If
Set objService = Nothing
Set colListOfServices = Nothing
Set colListOfServices = objWMI.ExecQuery _
("Select * from Win32_Service where StartMode = 'Auto'")
For Each objService in colListOfServices
If LCase(objService.Name) = "osppsvc" Then
foundOsppAuto = True
WScript.Echo "Successfully set service startup to automatic:" & objService.DisplayName
quitExit()
End If
Next
If foundOsppAuto <> True Then
WScript.Echo "Unsuccessful setting service startup to automatic. " & MSG_ISCMD_ELEVATED
quitExit()
End If
Else
Set colListOfServices = objWMI.ExecQuery _
("Select * from Win32_Service ")
For Each objService in colListOfServices
If LCase(objService.Name) = "osppsvc" Then
Select Case LCase(objService.State)
Case "running"
objService.StopService()
WScript.Sleep(15000)
objService.StartService()
WScript.Sleep(15000)
Case Else
objService.StartService()
WScript.Sleep(15000)
End Select
Exit For
End If
Next
Set objService = Nothing
Set colListOfServices = Nothing
Set colListOfServices = objWMI.ExecQuery _
("Select * from Win32_Service ")
For Each objService in colListOfServices
If LCase(objService.Name) = "osppsvc" Then
If LCase(objService.State) = "running" Then
WScript.Echo "Successfully restarted: " & objService.DisplayName
quitExit()
Else
WScript.Echo "Unsuccessful restart: " & objService.DisplayName & ". Status: " _
& objService.State & ". " & MSG_ISCMD_ELEVATED
quitExit()
End If
Exit For
End If
Next
End If
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function reARM(skuid)
progFiles = WshShell.ExpandEnvironmentStrings("%ProgramFiles%")
If objFSO.FileExists(progFiles & STR_OSPPREARMPATH) Then
rearmPath = progFiles & STR_OSPPREARMPATH
ElseIf objFSO.FileExists(progFiles & STR_OSPPREARMPATH_DEBUG) Then
rearmPath = progFiles & STR_OSPPREARMPATH_DEBUG
Else
progFilesX86 = WshShell.ExpandEnvironmentStrings("%ProgramFiles(x86)%")
If objFSO.FileExists(progFilesX86 & STR_OSPPREARMPATH) Then
rearmPath = progFilesX86 & STR_OSPPREARMPATH
ElseIf objFSO.FileExists(progFilesX86 & STR_OSPPREARMPATH_DEBUG) Then
rearmPath = progFilesX86 & STR_OSPPREARMPATH_DEBUG
Else
WScript.Echo MSG_FILENOTFOUND & "OSPPREARM.EXE"
quitExit()
End If
End If
If skuid = "" Then
Set objScriptExec = WshShell.Exec (rearmPath)
Else
Set objScriptExec = WshShell.Exec (rearmPath & " " & skuid)
End If
readOut = objScriptExec.StdOut.ReadAll
WScript.Echo readOut
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function isWin7OS()
Set colOperatingSystems = objWMI.ExecQuery _
("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
Ver = Split(objOperatingSystem.Version, ".", -1, 1)
'Win7
If (Ver(0) = "6" And Ver(1) = "1" And objOperatingSystem.ProductType = 1) Then
Win7 = True
Exit For
End If
'Server2008R2
If (Ver(0) = "6" And Ver(1) = "1" And (objOperatingSystem.ProductType = 2 Or objOperatingSystem.ProductType = 3)) Then
Win7 = True
Exit For
End If
Next
setWmiClasses()
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function setWmiClasses()
If Win7 = True Then
productClass = "OfficeSoftwareProtectionProduct"
tokenClass = "OfficeSoftwareProtectionTokenActivationLicense"
Else
productClass = "SoftwareLicensingProduct"
tokenClass = "SoftwareLicensingTokenActivationLicense"
End If
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
'' SIG '' Begin signature block
'' SIG '' MIIhkgYJKoZIhvcNAQcCoIIhgzCCIX8CAQExDzANBglg
'' SIG '' hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
'' SIG '' BgEEAYI3AgEeMCQCAQEEEE7wKRaZJ7VNj+Ws4Q8X66sC
'' SIG '' AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
'' SIG '' zEwik1Z5edAj7+sqHGDiJNmSFwExtnAcWrZywByYrk+g
'' SIG '' ggswMIIEuDCCA6CgAwIBAgITMwAAABYRBLSIOIy+wwAA
'' SIG '' AAAAFjANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJV
'' SIG '' UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
'' SIG '' UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
'' SIG '' cmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBT
'' SIG '' aWduaW5nIFBDQSAyMDEwMB4XDTEyMDgzMDE3NDkwM1oX
'' SIG '' DTEzMTEzMDE3NDkwM1owgYMxCzAJBgNVBAYTAlVTMRMw
'' SIG '' EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
'' SIG '' b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp
'' SIG '' b24xDTALBgNVBAsTBE1PUFIxHjAcBgNVBAMTFU1pY3Jv
'' SIG '' c29mdCBDb3Jwb3JhdGlvbjCCASIwDQYJKoZIhvcNAQEB
'' SIG '' BQADggEPADCCAQoCggEBAKBQnx1OlLoHCty+lknhPaAG
'' SIG '' 75W++b1WKluc7x4RLsbW4S2yb8wzLZ4epLGCFspkMamK
'' SIG '' JoH04y7yHg4cyOFZ4dQjPWV3/+rlt7ONCPYS129JV6SF
'' SIG '' 4wQe0EKop7LbMAoV0ck1bX+8hl6lPraQZAUkHD6gcWgK
'' SIG '' Mfd+1JXpLZvKZQV6FAIMCfaz3XFdJh9aCy8JumcybJwV
'' SIG '' 2Jw8iehHOu+mFN9CPiEeuzHiLNFU9uqAkiuTNHdtkmcm
'' SIG '' NsEqMdt4E0mrk5XcbKoMAHHAzc3dY+2RV5evjCqExd4N
'' SIG '' dWWM4NEfQTu7tZLSaTl1mABMbEw9GEMDzmY7nF1OUXiR
'' SIG '' Qjt+0FrgX0MCAwEAAaOCAScwggEjMB8GA1UdJQQYMBYG
'' SIG '' CCsGAQUFBwMDBgorBgEEAYI3PQYBMB0GA1UdDgQWBBRr
'' SIG '' 2fF2+KN4NKT3Rp4n8bC5bM82pjAfBgNVHSMEGDAWgBTm
'' SIG '' /F97uyIAWORyTrX0IXQjMubvrDBWBgNVHR8ETzBNMEug
'' SIG '' SaBHhkVodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtp
'' SIG '' L2NybC9wcm9kdWN0cy9NaWNDb2RTaWdQQ0FfMjAxMC0w
'' SIG '' Ny0wNi5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsGAQUF
'' SIG '' BzAChj5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtp
'' SIG '' L2NlcnRzL01pY0NvZFNpZ1BDQV8yMDEwLTA3LTA2LmNy
'' SIG '' dDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IB
'' SIG '' AQBSQvO9uPl8uzKyi9ukLZAQqUK3SJ69+UtczCFgpL2A
'' SIG '' l2MuKon2m9a8IpIBc56D+/KLa70wWuztMD7uyOF/qDcp
'' SIG '' 90wfrd4j1yptJQrRMD5D8aq1RTirbkTj0KEDM9daNOUh
'' SIG '' MSuOKC547WVyB4e1/rwWxKwvZMuizcnqB2p1YuvM5map
'' SIG '' PMEyOcXRwGxr+gU8K22z+0f9urwcgF0ShtQr2tIsKDJ9
'' SIG '' VwWEJ4Ef8EFlUgHwaq95DbjtwGOnRNb5ngJVRQ54Xlzb
'' SIG '' AHrpZSRzEni2UPk2JkiUBO3YQNXhPUM3H5hFnSzjNtpz
'' SIG '' MFSXah4gXBP5DtiMMLbrPnWEpetjkgotSUu2MIIGcDCC
'' SIG '' BFigAwIBAgIKYQxSTAAAAAAAAzANBgkqhkiG9w0BAQsF
'' SIG '' ADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp
'' SIG '' bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoT
'' SIG '' FU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMp
'' SIG '' TWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9y
'' SIG '' aXR5IDIwMTAwHhcNMTAwNzA2MjA0MDE3WhcNMjUwNzA2
'' SIG '' MjA1MDE3WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMK
'' SIG '' V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
'' SIG '' A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYD
'' SIG '' VQQDEx9NaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQSAy
'' SIG '' MDEwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
'' SIG '' AQEA6Q5kUHlntcTj/QkATJ6UrPdWaOpE2M/FWE+ppXZ8
'' SIG '' bUW60zmStKQe+fllguQX0o/9RJwI6GWTzixVhL99COMu
'' SIG '' K6hBKxi3oktuSUxrFQfe0dLCiR5xlM21f0u0rwjYzIjW
'' SIG '' axeUOpPOJj/s5v40mFfVHV1J9rIqLtWFu1k/+JC0K4N0
'' SIG '' yiuzO0bj8EZJwRdmVMkcvR3EVWJXcvhnuSUgNN5dpqWV
'' SIG '' XqsogM3Vsp7lA7Vj07IUyMHIiiYKWX8H7P8O7YASNUwS
'' SIG '' pr5SW/Wm2uCLC0h31oVH1RC5xuiq7otqLQVcYMa0Kluc
'' SIG '' IxxfReMaFB5vN8sZM4BqiU2jamZjeJPVMM+VHwIDAQAB
'' SIG '' o4IB4zCCAd8wEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0O
'' SIG '' BBYEFOb8X3u7IgBY5HJOtfQhdCMy5u+sMBkGCSsGAQQB
'' SIG '' gjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAP
'' SIG '' BgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP
'' SIG '' 6KJcYmjRPZSQW9fOmhjEMFYGA1UdHwRPME0wS6BJoEeG
'' SIG '' RWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3Js
'' SIG '' L3Byb2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIz
'' SIG '' LmNybDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKG
'' SIG '' Pmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2Vy
'' SIG '' dHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3J0MIGd
'' SIG '' BgNVHSAEgZUwgZIwgY8GCSsGAQQBgjcuAzCBgTA9Bggr
'' SIG '' BgEFBQcCARYxaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
'' SIG '' L1BLSS9kb2NzL0NQUy9kZWZhdWx0Lmh0bTBABggrBgEF
'' SIG '' BQcCAjA0HjIgHQBMAGUAZwBhAGwAXwBQAG8AbABpAGMA
'' SIG '' eQBfAFMAdABhAHQAZQBtAGUAbgB0AC4gHTANBgkqhkiG
'' SIG '' 9w0BAQsFAAOCAgEAGnTvV08pe8QWhXi4UNMi/AmdrIKX
'' SIG '' +DT/KiyXlRLl5L/Pv5PI4zSp24G43B4AvtI1b6/lf3mV
'' SIG '' d+UC1PHr2M1OHhthosJaIxrwjKhiUUVnCOM/PB6T+DCF
'' SIG '' F8g5QKbXDrMhKeWloWmMIpPMdJjnoUdD8lOswA8waX/+
'' SIG '' 0iUgbW9h098H1dlyACxphnY9UdumOUjJN2FtB91TGcun
'' SIG '' 1mHCv+KDqw/ga5uV1n0oUbCJSlGkmmzItx9KGg5pqdfc
'' SIG '' wX7RSXCqtq27ckdjF/qm1qKmhuyoEESbY7ayaYkGx0aG
'' SIG '' ehg/6MUdIdV7+QIjLcVBy78dTMgW77Gcf/wiS0mKbhXj
'' SIG '' pn92W9FTeZGFndXS2z1zNfM8rlSyUkdqwKoTldKOEdqZ
'' SIG '' Z14yjPs3hdHcdYWch8ZaV4XCv90Nj4ybLeu07s8n07Ve
'' SIG '' afqkFgQBpyRnc89NT7beBVaXevfpUk30dwVPhcbYC/GO
'' SIG '' 7UIJ0Q124yNWeCImNr7KsYxuqh3khdpHM2KPpMmRM19x
'' SIG '' HkCvmGXJIuhCISWKHC1g2TeJQYkqFg/XYTyUaGBS79ZH
'' SIG '' maCAQO4VgXc+nOBTGBpQHTiVmx5mMxMnORd4hzbOTsNf
'' SIG '' svU9R1O24OXbC2E9KteSLM43Wj5AQjGkHxAIwlacvyRd
'' SIG '' UQKdannSF9PawZSOB3slcUSrBmrm1MbfI5qWdcUxghW6
'' SIG '' MIIVtgIBATCBlTB+MQswCQYDVQQGEwJVUzETMBEGA1UE
'' SIG '' CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe
'' SIG '' MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgw
'' SIG '' JgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBD
'' SIG '' QSAyMDEwAhMzAAAAFhEEtIg4jL7DAAAAAAAWMA0GCWCG
'' SIG '' SAFlAwQCAQUAoIHAMBkGCSqGSIb3DQEJAzEMBgorBgEE
'' SIG '' AYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3
'' SIG '' AgEVMC8GCSqGSIb3DQEJBDEiBCD1TJpTGWrIm4napIKJ
'' SIG '' YhzLZWUWjiXYdz5av5AAR9fYhjBUBgorBgEEAYI3AgEM
'' SIG '' MUYwRKAigCAATQBpAGMAcgBvAHMAbwBmAHQAIABPAGYA
'' SIG '' ZgBpAGMAZaEegBxodHRwOi8vb2ZmaWNlLm1pY3Jvc29m
'' SIG '' dC5jb20gMA0GCSqGSIb3DQEBAQUABIIBAGu21FD/HaKe
'' SIG '' x/u2c2W5ahMQfqtl1D7pmywem006AtumQmviOOafquMZ
'' SIG '' mT/jJf9FrrR6tVKN2v8UfTJwIQi1lWlQAyYTA/bOGiI2
'' SIG '' Uepum9IQyFbbtbqu7RWwqeEGbpugGTHF1H/5nXWTwUfj
'' SIG '' XGUcySYJhQI20/DcGw0G2TD2xPPT7JfbHviXvH0d2nRW
'' SIG '' P/10Gi1AmAY7+Koe/jZ6Z7uhzw2TbL1oZpBrvlDzY/0t
'' SIG '' PopVtLTWf8MMQLD81+oBkj9TcgG684Gu4oYWoXQ2VGxX
'' SIG '' hxTwJJWmJ/Lk16pxtmfsTDKmbVZQKQq/Kfmot6mBhT+v
'' SIG '' srzqUZmrI5fj8kmq27NRiYihghMyMIITLgYKKwYBBAGC
'' SIG '' NwMDATGCEx4wghMaBgkqhkiG9w0BBwKgghMLMIITBwIB
'' SIG '' AzEPMA0GCWCGSAFlAwQCAQUAMIIBPQYLKoZIhvcNAQkQ
'' SIG '' AQSgggEsBIIBKDCCASQCAQEGCisGAQQBhFkKAwEwMTAN
'' SIG '' BglghkgBZQMEAgEFAAQgaPCujLfd+uxBHGfJ4h+nFCAS
'' SIG '' qeiGNAoy2HNoucsL2xUCBlBkYEUZ2hgTMjAxMjEwMDIw
'' SIG '' MDA4NTEuMjQ3WjAHAgEBgAIB9KCBuaSBtjCBszELMAkG
'' SIG '' A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO
'' SIG '' BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m
'' SIG '' dCBDb3Jwb3JhdGlvbjENMAsGA1UECxMETU9QUjEnMCUG
'' SIG '' A1UECxMebkNpcGhlciBEU0UgRVNOOkI4RUMtMzBBNC03
'' SIG '' MTQ0MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFt
'' SIG '' cCBTZXJ2aWNloIIOxzCCBnEwggRZoAMCAQICCmEJgSoA
'' SIG '' AAAAAAIwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYT
'' SIG '' AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
'' SIG '' EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
'' SIG '' cG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290
'' SIG '' IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDEwMB4XDTEw
'' SIG '' MDcwMTIxMzY1NVoXDTI1MDcwMTIxNDY1NVowfDELMAkG
'' SIG '' A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO
'' SIG '' BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m
'' SIG '' dCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0
'' SIG '' IFRpbWUtU3RhbXAgUENBIDIwMTAwggEiMA0GCSqGSIb3
'' SIG '' DQEBAQUAA4IBDwAwggEKAoIBAQCpHQ28dxGKOiDs/BOX
'' SIG '' 9fp/aZRrdFQQ1aUKAIKF++18aEssX8XD5WHCdrc+Zitb
'' SIG '' 8BVTJwQxH0EbGpUdzgkTjnxhMFmxMEQP8WCIhFRDDNdN
'' SIG '' uDgIs0Ldk6zWczBXJoKjRQ3Q6vVHgc2/JGAyWGBG8lhH
'' SIG '' hjKEHnRhZ5FfgVSxz5NMksHEpl3RYRNuKMYa+YaAu99h
'' SIG '' /EbBJx0kZxJyGiGKr0tkiVBisV39dx898Fd1rL2KQk1A
'' SIG '' UdEPnAY+Z3/1ZsADlkR+79BL/W7lmsqxqPJ6Kgox8NpO
'' SIG '' BpG2iAg16HgcsOmZzTznL0S6p/TcZL2kAcEgCZN4zfy8
'' SIG '' wMlEXV4WnAEFTyJNAgMBAAGjggHmMIIB4jAQBgkrBgEE
'' SIG '' AYI3FQEEAwIBADAdBgNVHQ4EFgQU1WM6XIoxkPNDe3xG
'' SIG '' G8UzaFqFbVUwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBD
'' SIG '' AEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8w
'' SIG '' HwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9lJBb186aGMQw
'' SIG '' VgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDovL2NybC5taWNy
'' SIG '' b3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljUm9v
'' SIG '' Q2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoGCCsGAQUFBwEB
'' SIG '' BE4wTDBKBggrBgEFBQcwAoY+aHR0cDovL3d3dy5taWNy
'' SIG '' b3NvZnQuY29tL3BraS9jZXJ0cy9NaWNSb29DZXJBdXRf
'' SIG '' MjAxMC0wNi0yMy5jcnQwgaAGA1UdIAEB/wSBlTCBkjCB
'' SIG '' jwYJKwYBBAGCNy4DMIGBMD0GCCsGAQUFBwIBFjFodHRw
'' SIG '' Oi8vd3d3Lm1pY3Jvc29mdC5jb20vUEtJL2RvY3MvQ1BT
'' SIG '' L2RlZmF1bHQuaHRtMEAGCCsGAQUFBwICMDQeMiAdAEwA
'' SIG '' ZQBnAGEAbABfAFAAbwBsAGkAYwB5AF8AUwB0AGEAdABl
'' SIG '' AG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQAH
'' SIG '' 5ohRDeLG4Jg/gXEDPZ2joSFvs+umzPUxvs8F4qn++ldt
'' SIG '' GTCzwsVmyWrf9efweL3HqJ4l4/m87WtUVwgrUYJEEvu5
'' SIG '' U4zM9GASinbMQEBBm9xcF/9c+V4XNZgkVkt070IQyK+/
'' SIG '' f8Z/8jd9Wj8c8pl5SpFSAK84Dxf1L3mBZdmptWvkx872
'' SIG '' ynoAb0swRCQiPM/tA6WWj1kpvLb9BOFwnzJKJ/1Vry/+
'' SIG '' tuWOM7tiX5rbV0Dp8c6ZZpCM/2pif93FSguRJuI57BlK
'' SIG '' cWOdeyFtw5yjojz6f32WapB4pm3S4Zz5Hfw42JT0xqUK
'' SIG '' loakvZ4argRCg7i1gJsiOCC1JeVk7Pf0v35jWSUPei45
'' SIG '' V3aicaoGig+JFrphpxHLmtgOR5qAxdDNp9DvfYPw4Ttx
'' SIG '' Cd9ddJgiCGHasFAeb73x4QDf5zEHpJM692VHeOj4qEir
'' SIG '' 995yfmFrb3epgcunCaw5u+zGy9iCtHLNHfS4hQEegPsb
'' SIG '' iSpUObJb2sgNVZl6h3M7COaYLeqN4DMuEin1wC9UJyH3
'' SIG '' yKxO2ii4sanblrKnQqLJzxlBTeCG+SqaoxFmMNO7dDJL
'' SIG '' 32N79ZmKLxvHIa9Zta7cRDyXUHHXodLFVeNp3lfB0d4w
'' SIG '' wP3M5k37Db9dT+mdHhk4L7zPWAUu7w2gUDXa7wknHNWz
'' SIG '' fjUeCLraNtvTX4/edIhJEjCCBNEwggO5oAMCAQICCmEH
'' SIG '' 1FUAAAAAAA4wDQYJKoZIhvcNAQELBQAwfDELMAkGA1UE
'' SIG '' BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV
'' SIG '' BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD
'' SIG '' b3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRp
'' SIG '' bWUtU3RhbXAgUENBIDIwMTAwHhcNMTIwMTA5MjEzNTMx
'' SIG '' WhcNMTMwNDA5MjE0NTMxWjCBszELMAkGA1UEBhMCVVMx
'' SIG '' EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
'' SIG '' ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
'' SIG '' dGlvbjENMAsGA1UECxMETU9QUjEnMCUGA1UECxMebkNp
'' SIG '' cGhlciBEU0UgRVNOOkI4RUMtMzBBNC03MTQ0MSUwIwYD
'' SIG '' VQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNl
'' SIG '' MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
'' SIG '' weiiiavCaSU5yAO7J7LMoFhyzUv4QGcC85Sl6EdWInsg
'' SIG '' nJ4/uPz92BPkJqKQ7+S9iEplO1iwcoUEiARNaVXKHaxz
'' SIG '' g/vjTPVeJrFRZwdt7mDhCISPS/Jmzo1gPxiQ89ySBo5u
'' SIG '' 9eCyW35wKULrQhWmxVXzHr3ZvcsT2eqwdL97m4xWCbmI
'' SIG '' ZSSUTMqApPPv8se3fU23u6A/U6J5jWzxubjJ5HXUXttd
'' SIG '' reRWpTihDFQ7KcsEyB4MrRJP8qXec6sZ9HUC0HTUB+GR
'' SIG '' WWqbJRiYCyjH13ViaapBfos7kYb/pPTqtveVi5nDphrs
'' SIG '' i+jxsygf7gyFNBKBUwfIyW9vAqZ86Be0DwIDAQABo4IB
'' SIG '' GzCCARcwHQYDVR0OBBYEFMbW5nU1U+/wnbjYtEvuXlMB
'' SIG '' CGPZMB8GA1UdIwQYMBaAFNVjOlyKMZDzQ3t8RhvFM2ha
'' SIG '' hW1VMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwu
'' SIG '' bWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01p
'' SIG '' Y1RpbVN0YVBDQV8yMDEwLTA3LTAxLmNybDBaBggrBgEF
'' SIG '' BQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cu
'' SIG '' bWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljVGltU3Rh
'' SIG '' UENBXzIwMTAtMDctMDEuY3J0MAwGA1UdEwEB/wQCMAAw
'' SIG '' EwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZIhvcNAQEL
'' SIG '' BQADggEBAI0KBSOJ6bP7QV7OBc3Qqr9NuRE/A3XEtCto
'' SIG '' Oz7ZTYBcGswSypS0o+c2jD54GkUSz8eNIK/HNwpipKCv
'' SIG '' Yqp9KTUgw66SS/r2uF5LX3RmrPKhLXA4cdGYNlu/BuX+
'' SIG '' LeyJ2KXql1BCgrU1+xB4fxhe7baUWx9o5rN8N2/4P8L5
'' SIG '' b4Wlw2clhOvZuKCjtO5YJqk6yH0ESwyoE0ZtnsZaYOcI
'' SIG '' cZEblJidE2CtM702fe0IaCLIMOffLMQr9T+4gVlPq+1s
'' SIG '' vCAGEQVMMDkoR1BU37nOc9+Q82n/qBMTgnvQG9ogqcFQ
'' SIG '' 5skb/6SCon+aXmEWujxcUQfTqh0ixjkd346o0uBTH9yh
'' SIG '' ggN5MIICYQIBATCB46GBuaSBtjCBszELMAkGA1UEBhMC
'' SIG '' VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
'' SIG '' B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
'' SIG '' b3JhdGlvbjENMAsGA1UECxMETU9QUjEnMCUGA1UECxMe
'' SIG '' bkNpcGhlciBEU0UgRVNOOkI4RUMtMzBBNC03MTQ0MSUw
'' SIG '' IwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2
'' SIG '' aWNloiUKAQEwCQYFKw4DAhoFAAMVAIMU1+AB1G7ZyJUz
'' SIG '' KxZvn3EmZVMnoIHCMIG/pIG8MIG5MQswCQYDVQQGEwJV
'' SIG '' UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
'' SIG '' UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
'' SIG '' cmF0aW9uMQ0wCwYDVQQLEwRNT1BSMScwJQYDVQQLEx5u
'' SIG '' Q2lwaGVyIE5UUyBFU046QjAyNy1DNkY4LTFEODgxKzAp
'' SIG '' BgNVBAMTIk1pY3Jvc29mdCBUaW1lIFNvdXJjZSBNYXN0
'' SIG '' ZXIgQ2xvY2swDQYJKoZIhvcNAQEFBQACBQDUFAnFMCIY
'' SIG '' DzIwMTIxMDAxMTIyMzMzWhgPMjAxMjEwMDIxMjIzMzNa
'' SIG '' MHcwPQYKKwYBBAGEWQoEATEvMC0wCgIFANQUCcUCAQAw
'' SIG '' CgIBAAICCfICAf8wBwIBAAICF3EwCgIFANQVW0UCAQAw
'' SIG '' NgYKKwYBBAGEWQoEAjEoMCYwDAYKKwYBBAGEWQoDAaAK
'' SIG '' MAgCAQACAxbjYKEKMAgCAQACAwehIDANBgkqhkiG9w0B
'' SIG '' AQUFAAOCAQEAR/OueYR+g/HRIidEawooT2diG+SL852l
'' SIG '' aPKtFYpQ2evbBhC6mrWYwfJJh7+so1dptvEQ5oCjx2Ko
'' SIG '' /MSkTqsyLn2cfgT160PMyOeabh4/jMgUGU/C1YnkM4R2
'' SIG '' K4ShNBu3H6cGxTJMFv3edD+5tEZjPFJvdfJkewL2u+4T
'' SIG '' Jzbbo/SZ2Mp0mYYNnYlXBbwXy27ZtKeQqwdZO5oqyNlg
'' SIG '' NwYktOW1REwe9+1YIHfw9IhLPmAjF+ag7+FmKZG1ou1J
'' SIG '' R95O7apQeOrLONDdraALCmb4JgNntqwy+x+RgmXdnUgo
'' SIG '' 7mZF2oiDM/NqIWB/mN1ILdPF/ckEXOtLutVGHcEKpdpb
'' SIG '' EzGCAuMwggLfAgEBMIGKMHwxCzAJBgNVBAYTAlVTMRMw
'' SIG '' EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
'' SIG '' b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp
'' SIG '' b24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1w
'' SIG '' IFBDQSAyMDEwAgphB9RVAAAAAAAOMA0GCWCGSAFlAwQC
'' SIG '' AQUAoIIBKTAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQ
'' SIG '' AQQwLwYJKoZIhvcNAQkEMSIEIMVDfBvNNWKr5LBboTVX
'' SIG '' gRlLtx9uanEUsfPaJoM5/ZbLMIHZBgsqhkiG9w0BCRAC
'' SIG '' DDGByTCBxjCBwzCBqAQUgxTX4AHUbtnIlTMrFm+fcSZl
'' SIG '' UycwgY8wgYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UE
'' SIG '' CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe
'' SIG '' MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYw
'' SIG '' JAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0Eg
'' SIG '' MjAxMAIKYQfUVQAAAAAADjAWBBRjIEaoyFA06dGB75Ys
'' SIG '' NATncLtMNDANBgkqhkiG9w0BAQsFAASCAQBvTI/fQJ7r
'' SIG '' /bKY6hyQc46TuKX4MBG5kc4j3qwYY9hBWAfZtebgojiU
'' SIG '' N4sDMmAQ9RJo6/tAXqtoc2hh/hn3nwJmXbpDzEj50wmB
'' SIG '' zMnOyo+YNcTkGhV9z3DfdIzLJ6iglM6y3kyy8ySjdXw3
'' SIG '' X9b4UlqeEetg6mb4S7FtLRnBGPNB9wXLt2Cw3tSSLWbt
'' SIG '' hLeGi6Xh5AkWaNMz/2SZZIj7vVj/S01BZsGxGpV6BmXP
'' SIG '' 0UW1gEJSNbqBKPuUsTD1I6aMH7hp57XL9q3np5DHU/Ae
'' SIG '' q45jBLGD0mx3n73y//7FnQiFKpoRM8l33KGaUkkYHDIM
'' SIG '' 5XalKnWa59yf/0L8Ls6Bzflz
'' SIG '' End signature block
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment