Created
February 4, 2019 09:09
-
-
Save BlackThursdays/899848f3a7258d608d88a4ffb26c406f to your computer and use it in GitHub Desktop.
office activation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'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