Jump to content

Someone with a script, to *CHECK*, if Win / Office are activated?


rudi
 Share

Recommended Posts

Hi.

As a "Checklist Verifyer" I'm doing a Autoit Script, checkin many things, that have to be done, befor the PCs are deployed to the network.

One point, that has been missed several times is, that Windows 7 or Office 2010 were *NOT ACTIVATED*.

So I'm wondering, if somebody knows howto simply check the ACTIVATION STATUS of Win7 and Office 2010:

  • activated yes/no
  • license key present yes/no
(The slmgr.vbs commands to fix it, in case license key or activation were missed, are not the problem [1])

Thanks for any suggestions, Rudi.

[1]

start /w slmgr /upk

start /w slmgr /ipk LICEN-SEKEY-GOES-HERE-TEXT

start slmgr /ato

edit: typo

Edited by rudi

Earth is flat, pigs can fly, and Nuclear Power is SAFE!

Link to comment
Share on other sites

  • Moderators

I know that Office 2010 comes with the ospp.vbs script that will do this for you, not sure about 2007 (Office 2010 install directoryOffice12ospp.vbs), run with the /dstatus switch to find license status.

"Profanity is the last vestige of the feeble mind. For the man who cannot express himself forcibly through intellect must do so through shock and awe" - Spencer W. Kimball

How to get your question answered on this forum!

Link to comment
Share on other sites

  • 2 months later...

Here's how you do it via WMI.

If IsActivated() = False Then
   ;InstallProductKey($OSkey) ; installs a product key and also activates it
  Else
   Return
  EndIf

 If OfficeIsActivated() = False Then
  ;InstallOfficeProductKey($officekey) ; installs a product key and also activates it
 Else
  Return
 EndIf

Func IsActivated()
 $oWMIService = ObjGet("winmgmts:\\.\root\cimv2")
 If IsObj($oWMIService) Then
  $oCollection = $oWMIService.ExecQuery("SELECT Description, LicenseStatus, GracePeriodRemaining FROM SoftwareLicensingProduct WHERE PartialProductKey <> null")
  If IsObj($oCollection) Then
   For $oItem In $oCollection
    Switch $oItem.LicenseStatus
     Case 0
      ConsoleWrite("Unlicensed" & @CRLF)
      Return False
     Case 1
      If $oItem.GracePeriodRemaining Then
       If StringInStr($oItem.Description, "TIMEBASED_") Then
        ConsoleWrite("Timebased activation will expire in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
        Return False
       Else
        ConsoleWrite("Volume activation will expire in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
        Return False
       EndIf
      Else
       ConsoleWrite("The machine is permanently activated." & @CRLF)
       Return True
      EndIf
     Case 2
      ConsoleWrite("Initial grace period ends in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
      Return False
     Case 3
      ConsoleWrite("Additional grace period ends in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
      Return False
     Case 4
      ConsoleWrite("Non-genuine grace period ends in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
      Return False
     Case 5
      ConsoleWrite("Windows is in Notification mode" & @CRLF)
      Return False
     Case 6
      ConsoleWrite("Extended grace period ends in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
      Return False
    EndSwitch
   Next
  EndIf
 EndIf
EndFunc

Func OfficeIsActivated()
 $oWMIService = ObjGet("winmgmts:\\.\root\cimv2")
 If IsObj($oWMIService) Then
  $oCollection = $oWMIService.ExecQuery("SELECT Description, LicenseStatus, GracePeriodRemaining FROM OfficeSoftwareProtectionProduct WHERE PartialProductKey <> null")
  If IsObj($oCollection) Then
   For $oItem In $oCollection
    Switch $oItem.LicenseStatus
     Case 0
      ConsoleWrite(" ---UNLICENSED--- " & @CRLF)
      Return False
     Case 1
      ConsoleWrite(" ---LICENSED--- " & @CRLF)
       ;If licSr = 0 Then
       ; WScript.Echo MSG_ERRCODE & licSr & " as licensed"   
       ;End If
      Return True
     Case 2
      ConsoleWrite("---OOB_GRACE--- Initial grace period ends in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
      Return False
     Case 3
      ConsoleWrite("---OOT_GRACE--- Initial grace period ends in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
      Return False
     Case 4
      ConsoleWrite("---NON_GENUINE_GRACE--- Grace period ends in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
      Return False
     Case 5
      ConsoleWrite("---NOTIFICATIONS--- Grace period ends in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
      Return False
     Case 6
      ConsoleWrite("---EXTENDED GRACE--- Extended grace period ends in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
      Return False
     Case Else
      ConsoleWrite("---UNKNOWN---" & @CRLF)
      Return False
    EndSwitch
   Next
  EndIf
 EndIf
EndFunc

If you are interested I will give you the code to activate it directly through WMI as well.

Edited by NDog
Link to comment
Share on other sites

  • 3 months later...
  • 2 weeks later...

Here you go.

The IsActivated() Function was written by trancexx (who never replies to PM's TT), and the rest I wrote. I think the Windows XP activation part is a bit broken, maybe someone can check it. Part of this code block here has missing proxy gateway authentication stuff, which may get added eventually. It also has offline token restore for Office 2010 activation, but that is a whole lot more complex and I have not included it here.

Please add improvements if you have any.

$OSkey = "ZZZZZ-VVVVV-XXXXX-VVVVV-ZZZZZ"
$officekey = "ZZZZZ-VVVVV-XXXXX-VVVVV-ZZZZZ"

; For WPA activation
Global $g_eventerror = 0 ; to be checked to know if com error occurs. Must be reset after handling.
$oMyError = ObjEvent("AutoIt.Error","MyErrFunc") ; Install a custom error handler

; Detect OS version
If @OSVersion == "WIN_8" Or @OSVersion == "WIN_7" Or @OSVersion == "WIN_VISTA" Or @OSVersion = "WIN_2008" Then
    $OS = 'NT6'
ElseIf @OSVersion == "WIN_XP" Then
    $OS = 'NT5'
Else
    MsgBox(48, "Error", "Wrong OS version")
    Exit
EndIf


If IsDeclared('OSkey') Then OSactivate()
If IsDeclared('officekey') Then Officeactivate()


Func OSactivate()
    If $OS = 'NT6' Then
        ; First attempt - go out to the internet directly
        If IsActivated() = False Then
            InstallProductKey($OSkey) ; installs a product key and also activates it
        Else
            Return
        EndIf
        
        ; Second attempt - set the gateway as the proxy and go to .microsoft.com out the proxy
        If IsActivated() = False Then
            ;setgatewayproxy("on")
            InstallProductKey($OSkey) ; installs a product key and also activates it
            ;setgatewayproxy("off")
        Else
            Return
        EndIf

        ; Third attempt - proxy out through gateway using a user/pass combo
        If IsActivated() = False Then
            ;setgatewayproxy("on","user","password")
            InstallProductKey($OSkey) ; installs a product key and also activates it
            ;setgatewayproxy("off")
        Else
            Return
        EndIf

    ElseIf $OS = 'NT5' Then
        $VOL_PROD_KEY = StringReplace($OSkey,"-","") ;remove hyphens if any
        $x = ObjGet("winmgmts:{impersonationLevel=impersonate}")
        $y = $x.InstancesOf ("win32_WindowsProductActivation")
        For $Obj In $y
            $result = $Obj.SetProductKey ($VOL_PROD_KEY)
            If $g_eventerror then Msgbox(0,"","The key used is not valid - " & $VOL_PROD_KEY)
        Next
    EndIf
EndFunc

Func IsActivated()
    $oWMIService = ObjGet("winmgmts:\\.\root\cimv2")
    If IsObj($oWMIService) Then
        $oCollection = $oWMIService.ExecQuery("SELECT Description, LicenseStatus, GracePeriodRemaining FROM SoftwareLicensingProduct WHERE PartialProductKey <> null")
        If IsObj($oCollection) Then
            For $oItem In $oCollection
                Switch $oItem.LicenseStatus
                    Case 0
                        ConsoleWrite("Unlicensed" & @CRLF)
                        Return False
                    Case 1
                        If $oItem.GracePeriodRemaining Then
                            If StringInStr($oItem.Description, "TIMEBASED_") Then
                                ConsoleWrite("Timebased activation will expire in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
                                Return False
                            Else
                                ConsoleWrite("Volume activation will expire in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
                                Return False
                            EndIf
                        Else
                            ConsoleWrite("The machine is permanently activated." & @CRLF)
                            Return True
                        EndIf
                    Case 2
                        ConsoleWrite("Initial grace period ends in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
                        Return False
                    Case 3
                        ConsoleWrite("Additional grace period ends in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
                        Return False
                    Case 4
                        ConsoleWrite("Non-genuine grace period ends in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
                        Return False
                    Case 5
                        ConsoleWrite("Windows is in Notification mode" & @CRLF)
                        Return False
                    Case 6
                        ConsoleWrite("Extended grace period ends in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
                        Return False
                EndSwitch
            Next
        EndIf
    EndIf
EndFunc

Func InstallProductKey($strProductKey)
    $oWMIService = ObjGet("winmgmts:\\.\root\cimv2")
    If IsObj($oWMIService) Then
        $oCollection = $oWMIService.ExecQuery("SELECT Version FROM SoftwareLicensingService")
        If IsObj($oCollection) Then
            For $oItem In $oCollection
                ConsoleWrite($oItem.Version & @CRLF)
                
                $oItem.InstallProductKey($strProductKey)
                If $g_eventerror then Return
                ActivateProduct()
                
            Next
        EndIf
    EndIf
EndFunc

Func ActivateProduct()
    $oWMIService = ObjGet("winmgmts:\\.\root\cimv2")
    If IsObj($oWMIService) Then
        $oCollection = $oWMIService.ExecQuery("SELECT ID, ApplicationId, PartialProductKey, LicenseIsAddon, Description, Name, LicenseStatus FROM SoftwareLicensingProduct WHERE PartialProductKey <> null")
        If IsObj($oCollection) Then
            For $oItem In $oCollection
                ConsoleWrite($oItem.Name & @CRLF)
                ConsoleWrite($oItem.ID & @CRLF)
                
                $oItem.Activate()
                If $g_eventerror then Return
                RefreshStatus() ; Needed otherwise windows complains about non genuine key and changes background to black
                $oItem.refresh_
            Next
        EndIf
    EndIf
EndFunc

Func RefreshStatus()
    $oWMIService = ObjGet("winmgmts:\\.\root\cimv2")
    If IsObj($oWMIService) Then
        $oCollection = $oWMIService.ExecQuery("SELECT Version FROM SoftwareLicensingService")
        If IsObj($oCollection) Then
            For $oItem In $oCollection
                ConsoleWrite("Refresh Status" & @CRLF)
                $oItem.RefreshLicenseStatus()
            Next
        EndIf
    EndIf
EndFunc


Func Officeactivate()
    ; First attempt - go out to the internet directly
    If OfficeIsActivated() = False Then
        InstallOfficeProductKeyActivateInternet($officekey) ; installs a product key and also activates it
    Else
        Return
    EndIf
EndFunc

Func OfficeIsActivated()
    $oWMIService = ObjGet("winmgmts:\\.\root\cimv2")
    If IsObj($oWMIService) Then
        $oCollection = $oWMIService.ExecQuery("SELECT Description, LicenseStatus, GracePeriodRemaining FROM OfficeSoftwareProtectionProduct WHERE PartialProductKey <> null")
        If IsObj($oCollection) Then
            For $oItem In $oCollection
                Switch $oItem.LicenseStatus
                    Case 0
                        ConsoleWrite(" ---UNLICENSED--- " & @CRLF)
                        Return False
                    Case 1
                        ConsoleWrite(" ---LICENSED--- " & @CRLF)
                            ;If licSr = 0 Then
                            ;    WScript.Echo MSG_ERRCODE & licSr & " as licensed"    
                            ;End If
                        Return True
                    Case 2
                        ConsoleWrite("---OOB_GRACE--- Initial grace period ends in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
                        Return False
                    Case 3
                        ConsoleWrite("---OOT_GRACE--- Initial grace period ends in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
                        Return False
                    Case 4
                        ConsoleWrite("---NON_GENUINE_GRACE--- Grace period ends in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
                        Return False
                    Case 5
                        ConsoleWrite("---NOTIFICATIONS--- Grace period ends in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
                        Return False
                    Case 6
                        ConsoleWrite("---EXTENDED GRACE--- Extended grace period ends in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
                        Return False
                    Case Else
                        ConsoleWrite("---UNKNOWN---" & @CRLF)
                        Return False
                EndSwitch
            Next
        EndIf
    EndIf
EndFunc


Func InstallOfficeProductKeyOnly($strProductKey)
    $oWMIService = ObjGet("winmgmts:\\.\root\cimv2")
    If IsObj($oWMIService) Then
        $oCollection = $oWMIService.ExecQuery("SELECT Version FROM OfficeSoftwareProtectionService")
        If IsObj($oCollection) Then
            For $oItem In $oCollection
                ConsoleWrite($oItem.Version & @CRLF)
                
                $oItem.InstallProductKey($strProductKey)
                If $g_eventerror then Return
                
            Next
        EndIf
    EndIf
EndFunc



Func InstallOfficeProductKeyActivateInternet($strProductKey)
    $oWMIService = ObjGet("winmgmts:\\.\root\cimv2")
    If IsObj($oWMIService) Then
        $oCollection = $oWMIService.ExecQuery("SELECT Version FROM OfficeSoftwareProtectionService")
        If IsObj($oCollection) Then
            For $oItem In $oCollection
                ConsoleWrite($oItem.Version & @CRLF)
                
                $oItem.InstallProductKey($strProductKey)
                If $g_eventerror then Return
                ActivateOfficeProduct()
                
            Next
        EndIf
    EndIf
EndFunc

Func ActivateOfficeProduct()
    $oWMIService = ObjGet("winmgmts:\\.\root\cimv2")
    If IsObj($oWMIService) Then
        $oCollection = $oWMIService.ExecQuery("SELECT ID, ApplicationId, PartialProductKey, LicenseIsAddon, Description, Name, LicenseStatus FROM OfficeSoftwareProtectionProduct WHERE PartialProductKey <> null")
        If IsObj($oCollection) Then
            For $oItem In $oCollection
                ConsoleWrite($oItem.Name & @CRLF)
                ConsoleWrite($oItem.ID & @CRLF)
                
                $oItem.Activate()
                If $g_eventerror then Return
                RefreshOfficeStatus() ; Needed to refresh status
                $oItem.refresh_
            Next
        EndIf
    EndIf
EndFunc

Func RefreshOfficeStatus()
    $oWMIService = ObjGet("winmgmts:\\.\root\cimv2")
    If IsObj($oWMIService) Then
        $oCollection = $oWMIService.ExecQuery("SELECT Version FROM OfficeSoftwareProtectionService")
        If IsObj($oCollection) Then
            For $oItem In $oCollection
                ConsoleWrite("Refresh Status" & @CRLF)
                $oItem.RefreshLicenseStatus()
            Next
        EndIf
    EndIf
EndFunc
Link to comment
Share on other sites

  • 1 year later...
  • 4 years later...
On 10/28/2012 at 1:55 PM, NDog said:

Here you go.

 

The IsActivated() Function was written by trancexx (who never replies to PM's TT), and the rest I wrote. I think the Windows XP activation part is a bit broken, maybe someone can check it. Part of this code block here has missing proxy gateway authentication stuff, which may get added eventually. It also has offline token restore for Office 2010 activation, but that is a whole lot more complex and I have not included it here.

 

Please add improvements if you have any.

 

 

$OSkey = "ZZZZZ-VVVVV-XXXXX-VVVVV-ZZZZZ"
$officekey = "ZZZZZ-VVVVV-XXXXX-VVVVV-ZZZZZ"

; For WPA activation
Global $g_eventerror = 0 ; to be checked to know if com error occurs. Must be reset after handling.
$oMyError = ObjEvent("AutoIt.Error","MyErrFunc") ; Install a custom error handler

; Detect OS version
If @OSVersion == "WIN_8" Or @OSVersion == "WIN_7" Or @OSVersion == "WIN_VISTA" Or @OSVersion = "WIN_2008" Then
    $OS = 'NT6'
ElseIf @OSVersion == "WIN_XP" Then
    $OS = 'NT5'
Else
    MsgBox(48, "Error", "Wrong OS version")
    Exit
EndIf


If IsDeclared('OSkey') Then OSactivate()
If IsDeclared('officekey') Then Officeactivate()


Func OSactivate()
    If $OS = 'NT6' Then
        ; First attempt - go out to the internet directly
        If IsActivated() = False Then
            InstallProductKey($OSkey) ; installs a product key and also activates it
        Else
            Return
        EndIf
        
        ; Second attempt - set the gateway as the proxy and go to .microsoft.com out the proxy
        If IsActivated() = False Then
            ;setgatewayproxy("on")
            InstallProductKey($OSkey) ; installs a product key and also activates it
            ;setgatewayproxy("off")
        Else
            Return
        EndIf

        ; Third attempt - proxy out through gateway using a user/pass combo
        If IsActivated() = False Then
            ;setgatewayproxy("on","user","password")
            InstallProductKey($OSkey) ; installs a product key and also activates it
            ;setgatewayproxy("off")
        Else
            Return
        EndIf

    ElseIf $OS = 'NT5' Then
        $VOL_PROD_KEY = StringReplace($OSkey,"-","") ;remove hyphens if any
        $x = ObjGet("winmgmts:{impersonationLevel=impersonate}")
        $y = $x.InstancesOf ("win32_WindowsProductActivation")
        For $Obj In $y
            $result = $Obj.SetProductKey ($VOL_PROD_KEY)
            If $g_eventerror then Msgbox(0,"","The key used is not valid - " & $VOL_PROD_KEY)
        Next
    EndIf
EndFunc

Func IsActivated()
    $oWMIService = ObjGet("winmgmts:\\.\root\cimv2")
    If IsObj($oWMIService) Then
        $oCollection = $oWMIService.ExecQuery("SELECT Description, LicenseStatus, GracePeriodRemaining FROM SoftwareLicensingProduct WHERE PartialProductKey <> null")
        If IsObj($oCollection) Then
            For $oItem In $oCollection
                Switch $oItem.LicenseStatus
                    Case 0
                        ConsoleWrite("Unlicensed" & @CRLF)
                        Return False
                    Case 1
                        If $oItem.GracePeriodRemaining Then
                            If StringInStr($oItem.Description, "TIMEBASED_") Then
                                ConsoleWrite("Timebased activation will expire in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
                                Return False
                            Else
                                ConsoleWrite("Volume activation will expire in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
                                Return False
                            EndIf
                        Else
                            ConsoleWrite("The machine is permanently activated." & @CRLF)
                            Return True
                        EndIf
                    Case 2
                        ConsoleWrite("Initial grace period ends in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
                        Return False
                    Case 3
                        ConsoleWrite("Additional grace period ends in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
                        Return False
                    Case 4
                        ConsoleWrite("Non-genuine grace period ends in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
                        Return False
                    Case 5
                        ConsoleWrite("Windows is in Notification mode" & @CRLF)
                        Return False
                    Case 6
                        ConsoleWrite("Extended grace period ends in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
                        Return False
                EndSwitch
            Next
        EndIf
    EndIf
EndFunc

Func InstallProductKey($strProductKey)
    $oWMIService = ObjGet("winmgmts:\\.\root\cimv2")
    If IsObj($oWMIService) Then
        $oCollection = $oWMIService.ExecQuery("SELECT Version FROM SoftwareLicensingService")
        If IsObj($oCollection) Then
            For $oItem In $oCollection
                ConsoleWrite($oItem.Version & @CRLF)
                
                $oItem.InstallProductKey($strProductKey)
                If $g_eventerror then Return
                ActivateProduct()
                
            Next
        EndIf
    EndIf
EndFunc

Func ActivateProduct()
    $oWMIService = ObjGet("winmgmts:\\.\root\cimv2")
    If IsObj($oWMIService) Then
        $oCollection = $oWMIService.ExecQuery("SELECT ID, ApplicationId, PartialProductKey, LicenseIsAddon, Description, Name, LicenseStatus FROM SoftwareLicensingProduct WHERE PartialProductKey <> null")
        If IsObj($oCollection) Then
            For $oItem In $oCollection
                ConsoleWrite($oItem.Name & @CRLF)
                ConsoleWrite($oItem.ID & @CRLF)
                
                $oItem.Activate()
                If $g_eventerror then Return
                RefreshStatus() ; Needed otherwise windows complains about non genuine key and changes background to black
                $oItem.refresh_
            Next
        EndIf
    EndIf
EndFunc

Func RefreshStatus()
    $oWMIService = ObjGet("winmgmts:\\.\root\cimv2")
    If IsObj($oWMIService) Then
        $oCollection = $oWMIService.ExecQuery("SELECT Version FROM SoftwareLicensingService")
        If IsObj($oCollection) Then
            For $oItem In $oCollection
                ConsoleWrite("Refresh Status" & @CRLF)
                $oItem.RefreshLicenseStatus()
            Next
        EndIf
    EndIf
EndFunc


Func Officeactivate()
    ; First attempt - go out to the internet directly
    If OfficeIsActivated() = False Then
        InstallOfficeProductKeyActivateInternet($officekey) ; installs a product key and also activates it
    Else
        Return
    EndIf
EndFunc

Func OfficeIsActivated()
    $oWMIService = ObjGet("winmgmts:\\.\root\cimv2")
    If IsObj($oWMIService) Then
        $oCollection = $oWMIService.ExecQuery("SELECT Description, LicenseStatus, GracePeriodRemaining FROM OfficeSoftwareProtectionProduct WHERE PartialProductKey <> null")
        If IsObj($oCollection) Then
            For $oItem In $oCollection
                Switch $oItem.LicenseStatus
                    Case 0
                        ConsoleWrite(" ---UNLICENSED--- " & @CRLF)
                        Return False
                    Case 1
                        ConsoleWrite(" ---LICENSED--- " & @CRLF)
                            ;If licSr = 0 Then
                            ;    WScript.Echo MSG_ERRCODE & licSr & " as licensed"    
                            ;End If
                        Return True
                    Case 2
                        ConsoleWrite("---OOB_GRACE--- Initial grace period ends in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
                        Return False
                    Case 3
                        ConsoleWrite("---OOT_GRACE--- Initial grace period ends in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
                        Return False
                    Case 4
                        ConsoleWrite("---NON_GENUINE_GRACE--- Grace period ends in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
                        Return False
                    Case 5
                        ConsoleWrite("---NOTIFICATIONS--- Grace period ends in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
                        Return False
                    Case 6
                        ConsoleWrite("---EXTENDED GRACE--- Extended grace period ends in " & $oItem.GracePeriodRemaining & " minutes" & @CRLF)
                        Return False
                    Case Else
                        ConsoleWrite("---UNKNOWN---" & @CRLF)
                        Return False
                EndSwitch
            Next
        EndIf
    EndIf
EndFunc


Func InstallOfficeProductKeyOnly($strProductKey)
    $oWMIService = ObjGet("winmgmts:\\.\root\cimv2")
    If IsObj($oWMIService) Then
        $oCollection = $oWMIService.ExecQuery("SELECT Version FROM OfficeSoftwareProtectionService")
        If IsObj($oCollection) Then
            For $oItem In $oCollection
                ConsoleWrite($oItem.Version & @CRLF)
                
                $oItem.InstallProductKey($strProductKey)
                If $g_eventerror then Return
                
            Next
        EndIf
    EndIf
EndFunc



Func InstallOfficeProductKeyActivateInternet($strProductKey)
    $oWMIService = ObjGet("winmgmts:\\.\root\cimv2")
    If IsObj($oWMIService) Then
        $oCollection = $oWMIService.ExecQuery("SELECT Version FROM OfficeSoftwareProtectionService")
        If IsObj($oCollection) Then
            For $oItem In $oCollection
                ConsoleWrite($oItem.Version & @CRLF)
                
                $oItem.InstallProductKey($strProductKey)
                If $g_eventerror then Return
                ActivateOfficeProduct()
                
            Next
        EndIf
    EndIf
EndFunc

Func ActivateOfficeProduct()
    $oWMIService = ObjGet("winmgmts:\\.\root\cimv2")
    If IsObj($oWMIService) Then
        $oCollection = $oWMIService.ExecQuery("SELECT ID, ApplicationId, PartialProductKey, LicenseIsAddon, Description, Name, LicenseStatus FROM OfficeSoftwareProtectionProduct WHERE PartialProductKey <> null")
        If IsObj($oCollection) Then
            For $oItem In $oCollection
                ConsoleWrite($oItem.Name & @CRLF)
                ConsoleWrite($oItem.ID & @CRLF)
                
                $oItem.Activate()
                If $g_eventerror then Return
                RefreshOfficeStatus() ; Needed to refresh status
                $oItem.refresh_
            Next
        EndIf
    EndIf
EndFunc

Func RefreshOfficeStatus()
    $oWMIService = ObjGet("winmgmts:\\.\root\cimv2")
    If IsObj($oWMIService) Then
        $oCollection = $oWMIService.ExecQuery("SELECT Version FROM OfficeSoftwareProtectionService")
        If IsObj($oCollection) Then
            For $oItem In $oCollection
                ConsoleWrite("Refresh Status" & @CRLF)
                $oItem.RefreshLicenseStatus()
            Next
        EndIf
    EndIf
EndFunc

Is there any way to check the error code (For example. 0xC004C008) when execute .Activate()?
 

Link to comment
Share on other sites

A COM error handler does this for you. Please see the Autoit help file.

BTW: Please do not quote a thread. Simply add your reply at the bottom of the thread.

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to comment
Share on other sites

If Not IsObj($Outlook) then Exit

If Not IsObj($Outlook) then Exit

:)

If you use the UDFs they will do most of the hard work, simply exit if the Object does not exit.

Note that unlicensed MS Office products do not create objects...

Skysnake

Edited by Skysnake

Skysnake

Why is the snake in the sky?

Link to comment
Share on other sites

I Can not check Activate Error when execute .Activate()

$oItem.Activate()

 

It report error

==> The requested action with this object has failed.:
$oItem.Activate()
$oItem^ ERROR

 

Check it and Error Autoit is "-2147352567 0x80020009 Exception occurred."

 

Please help me fix it!

Link to comment
Share on other sites

Did you add a COM error handler as I suggested? Have a look at ObjEvent in the help file.

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to comment
Share on other sites

I have use ObjEvent but it don't as I like. It is AutoIT Error not Activate() Error.

If Windows not Activated it will report Error Autoit is "-2147352567 0x80020009 Exception occurred."

 

#include <array.au3>
local $aErrRet[3]
Local $oErrObj = ObjEvent("AutoIt.Error", "_ErrFunc")
local $oWMI = ObjGet("winmgmts:\\.\root\cimv2")
$oWMIService = ObjGet("winmgmts:\\.\root\cimv2")
            If IsObj($oWMIService) Then
               $oCollection = $oWMIService.ExecQuery("SELECT * FROM SoftwareLicensingProduct WHERE PartialProductKey <> Null", "WQL")
               If IsObj($oCollection) Then
                  For $oItem In $oCollection
                     ConsoleWrite($oItem.PartialProductKey & @CRLF)
                     local $cQuery = $oItem.Activate()
                     if @error then _arraydisplay($aErrRet)
                        if $cQuery.count = 0 then ConsoleWrite('Nothing found for query' & @CRLF)
                     Next
                  EndIf
               Else
                  Msgbox(0,"Activator","Activation failed")
                  Endif

Func _ErrFunc()
    $HexNumber = Hex($oErrObj.number, 8)
    $aErrRet[0] = $HexNumber
    $aErrRet[1] = StringStripWS($oErrObj.description, 3)
    $aErrRet[2] = StringStripWS($oErrObj.windescription, 3)
    SetError(1); something to check for when this function returns
 EndFunc

 

Link to comment
Share on other sites

18 hours ago, Skysnake said:

Is this solution simplistic?

  

I need try method Activate() and read uint32 Activate() in SoftwareLicensingProduct class.

 

Please help me complete script autoit above. Thanks so much!

Link to comment
Share on other sites

Can you help me convert VBScript after to au3?

 

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set objShare = objWMIService.Get("SoftwareLicensingProduct.ID='ac96e1a8-6cc4-4310-a4ff-332ce77fb5b8'")
Set objOutParams = objWMIService.ExecMethod("SoftwareLicensingProduct.ID='ac96e1a8-6cc4-4310-a4ff-332ce77fb5b8'", "Activate")
Wscript.Echo "Out Parameters: "
Wscript.echo "ReturnValue: " & objOutParams.ReturnValue

 

Thanks so much!

Link to comment
Share on other sites

  • Developers
4 hours ago, bbkim said:

Can you help me convert VBScript after to au3?

Help or you want us to do it for you?
Post what you have tried and isn;t working.

Jos

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Link to comment
Share on other sites

On 8/24/2019 at 3:34 PM, Jos said:

Help or you want us to do it for you?
Post what you have tried and isn;t working.

Jos

I code as this post but it isn't working.

And I Try With under code

#include <array.au3>
Local $aErrRet[3]
Local $oErrObj = ObjEvent("AutoIt.Error", "_ErrFunc")
Local $spp = "SoftwareLicensingProduct"
$oWMIService = ObjGet("winmgmts:\\.\root\cimv2")
            If IsObj($oWMIService) Then
               $oCollection = $oWMIService.ExecQuery("SELECT * FROM "&$spp&" WHERE PartialProductKey <> Null", "WQL")
               If IsObj($oCollection) Then
                  For $oItem In $oCollection
                     $objOutParams = $oWMIService.ExecMethod_($spp&".ID='"& $oItem.ID&"'", "Activate")
                     ConsoleWrite($oItem.ID & @CRLF)
                     ConsoleWrite("ReturnValue: " & $objOutParams.ReturnValue & @CRLF)
                     ConsoleWrite("Error: "&$objOutParams & @CRLF)
                     Next
                  EndIf
               Else
                  Msgbox(0,"Activator","Activation failed")
                  Endif

Func _ErrFunc()
    $HexNumber = Hex($oErrObj.number, 8)
    $aErrRet[0] = $HexNumber
    $aErrRet[1] = StringStripWS($oErrObj.description, 3)
    $aErrRet[2] = StringStripWS($oErrObj.windescription, 3)
    SetError(1); something to check for when this function returns
 EndFunc

 

I can't view Error Code while run method Activate()

Example: "Error: 0xC004C003 The activation server determined the specified product key is blocked"

 

Product Key Windows 7 Blocked for Error above: "YDDHV-66XXV-RQHQQ-6G733-BDJVX"

Edited by bbkim
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...