Windows Aktivierung Status

  • Guten Abend,

    wie kann ich für Windows 7, 8, 10 mit AutoIt ( API ) abfragen, ob Windows aktiviert ist oder nicht, wie lange die Testzeit ist und die GracePeriod?

    Ich habe bei MS folgende Infos gefunden - das kann ich nicht in AutoIt umsetzen..

    Für AutoIt konnte ich nichts finden, wie ich die folgenden Daten abfragen kann.

    https://msdn.microsoft.com/en-us/library/…6(v=vs.85).aspx

    Wscript.Echo "Activation Required: " & objWPA.ActivationRequired

    Wscript.Echo "Remaining Evaluation Period: " & objWPA.RemainingEvaluationPeriod

    Wscript.Echo "Remaining Grace Period: " & objWPA.RemainingGracePeriod

    Ich möchte diese 3 Daten gerne als Info in einer MessageBox ausgeben.

    Vielen Dank :)

  • Du kannst das WinMgmt auch in AutoIt callen mit ObjGet.

    Das Script liefert mir für Windows 7 Home Premium x64 zwar keine Infos aber andere Queries (z.B. welches Service Pack installiert ist) funktionieren.

    Vielleicht klappts ja bei dir und Win10. Ob das #RequireAdmin notwendig ist weiß ich nicht.

    AutoIt
    #RequireAdmin
    
    $oWinMgmts = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & @ComputerName & "\root\cimv2")
    $oQuery = $oWinMgmts.ExecQuery("SELECT * FROM Win32_WindowsProductActivation")
    
    For $oObj In $oQuery
        MsgBox(64, "Info", "ActivationRequired" & $oObj.ActivationRequired & @CRLF & _
                           "RemainingEvaluationPeriod: " & $oObj.RemainingEvaluationPeriod & @CRLF & _
                           "GracePeriod: " & $oObj.RemainingGracePeriod & @CRLF)
    Next
  • Guten Morgen Alpines,

    andere Queries (z.B. welches Service Pack installiert ist) funktionieren

    kannst Du mir bitte dieses Script und ggf. zwei andere, die auch bei Dir funktionieren, hier reinstellen?

    edit: habe einige ObjGet Beispiele testen können - das geht grundsätzlich - nur bringt es oft keine oder andere als erwartete Ergebnisse


    Bei mir hat obiges Script unter Windows 8 / 64 nichts zurückgegeben.

    Gibt es eine Möglichkeit, den kompletten Inhalt der Variable $oQuery anzuzeigen?

    Mit einer einfachen arraydisplay und console hat es nicht geklappt.

    #include <Array.au3>

    _ArrayDisplay ( $oQuery , "Zeile " & @ScriptLineNumber )


    Übrigens - das Beispiel 1 aus der Hilfe zu ObjGet

    $oExcel.workbooks.add ; Eine neue Arbeitsmappe hinzufügen

    ... öffnet hier keine neue Arbeitsmappe sondern eine neue Excel-Datei.

    Ein diffizieles und spannendes Thema.

    Vielen Dank Alpines !!


    Vielleicht kann jemand das Script von Alpines ( oder ein anderes ) unter Windows 8 / 64 testen ( vmware und System ), ob das eine Info ausgibt.

    Danke !!

    Einmal editiert, zuletzt von AutoMit (18. April 2018 um 12:18)

    • Offizieller Beitrag

    Gibt es eine Möglichkeit, den kompletten Inhalt der Variable $oQuery anzuzeigen?

    Das ist eine Objektvariable. Die Abfrage erfolgt in der Schleife (selbst wenn nur ein Objekt in der Objektvariablen enthalten ist:

    For $oObj In $oQuery ...

    Alle enthaltenen Objekt-Eigenschaften siehst du hier bei MSDN.

  • Alpines Script spuckt unter Windows 8.1 64-bit system (nix VM) nix aus... Script läuft aber einfach runter, kommt nur keine MsgBox

    Danke Sonderbaar - ja - so ist es hier leider auch - keine Info über den Inhalt der Objektvariablen.

    Bugfix, funktioniert bei Dir die Abfrage der Windows Aktivierungsdaten?


    Die Abfrage erfolgt in der Schleife (selbst wenn nur ein Objekt in der Objektvariablen enthalten ist:

    Hallo Bugfix, wie kann ich folgenden Code verändern, so dass ich für alle unter Windows verfügbaren Objektvariablen eine Ausgabe erhalte - und nicht nur für eine bestimmte Objektvariable?

    So funktioniert es nicht - (1) und (2) müssen geändert werden.

    Code
    $oWinMgmts = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & @ComputerName & "\root\cimv2")
    
    $oQuery = $oWinMgmts.ExecQuery("SELECT * FROM *")        ;    (1)
    
    For $oObj In $oQuery
        ConsoleWrite (@ScriptLineNumber & @TAB & "$oQuery = " & $oObj & @CRLF)                    ;    (2)
    Next

    Danke und knacken wir die Nuss :)

    • Offizieller Beitrag

    Oder du rufst den Lizenzmanager auf, in allen Windowsversionen enthalten:

    AutoIt
    ShellExecute(@SystemDir & "\slmgr.vbs", "/dlv", @SystemDir)
    $hScripthost = WinWait("Windows Script Host")
    $sText = WinGetText($hScripthost)
    WinClose($hScripthost)
    
    ConsoleWrite($sText & @CRLF)
  • Vielen Dank gmmg, obigen Beitrag aus dem englischsprachigen Forum habe ich zwischenzeitlich auch gefunden, aber konnte nichts daraus unter Windows 8 / 64 / vmware erfolgreich ausführen.


    ConsoleWrite( $oObj.Caption )

    Ich habe das als Beispiel mal durchnummeriert. Bei der Druckerzeile erhalte ich 1 = Drucker x, 2 = Drucker y etc.

    Bei der Abfrage mit der Zeile "Win32_WindowsProductActivation" wird per Console nur der Wert von "$counter = 0" angezeigt, in die "For $oObj In $oQuery" geht das Script nicht rein.

    Mh - warum nur?

    PS: BugFix - Danke für Deinen Tipp zu slmgr eine gute Idee :)

  • Beide Scripte geben bei mir eine Info zur Aktivierung von Windows zurück

    (Windows 7 X64 )


    Gruß gmmg

  • Es muss nur das Macro @OSVersion unter Windows 7 und / oder Windows 10 angepasst werden.

  • Vielen Dank für die zahlreichen Lösungsansätze - die einfachste scheint die von Bugfix zu sein, indem man aus dem Lizenzmanager den Text nimmt und die Zeilen ausliest.

    Grünen Haken gesetzt :)

    Einen sonnigen Tag Euch allen!

    • Offizieller Beitrag

    Hallo,

    wenn der Standardskripthost auf cscript umgestellt ist, funktioniert die Version von BugFix nicht mehr. Besser wäre es so

    AutoIt
    Run("wscript.exe slmgr.vbs /dlv", @SystemDir, @SW_HIDE)
    $hScripthost = WinWait("Windows Script Host")
    $sText = WinGetText($hScripthost)
    WinClose($hScripthost)
    ConsoleWrite($sText & @CRLF)

    oder du nimmst gleich den Skripthost cscript, dann stört auch das Ausgabefenster von wscript nicht mehr

  • Vielen Dank bernd670,

    wenn der Standardskripthost auf cscript umgestellt ist

    davon lese ich zum ersten Mal.

    Was ist der Vorteil der Umstellung auf cscript? Standard scheint wscript zu sein? Ich kenn mich hier gar nicht aus.

    Bringst Du bitte ein wenig Licht ins Dunkel, wie am einfachsten auf csript umgestellt wird, wie man erkennt, ob umgestellt wurde und welche Vorteile das in Kurzform bietet?

    Danke :)

    • Offizieller Beitrag

    Hallo,

    ändern kann man den Scripthost mit dem Parameter //H: cscript //H:cscript aktiviert cscript und cscript //H:wscript aktiviert wscript als StandardScripthost. Alles weitere wird bei Windows Scripting FAQ recht gut erklärt.

  • cscript vs wscript

    Was unterscheidet wscript.exe und csript.exe?

    WSH umfasst zwei eng verwandte Scripting Hosts: WScript und CScript. Beide sind hinsichtlich ihres Befehlsumfangs nahezu gleich. Sie unterscheiden sich lediglich darin, wohin die Ausgaben gehen. Außerdem sind die Intrinsic Objects von CScript ein klein wenig mächtiger als die von WScript.

    WScript.exe

    WScript ist der Standard; bei der Installation des WSH werden die WSH-Dateiextensionen mit WScript verknüpft.

    Diese Verknüpfungen können in der Registry, in den Optionen des Windows Explorers oder mit der WSH-Kommandozeilenoption //H: geändert werden.

    Bei WScript (implementiert in WScript.exe) erfolgt die Ausführung als Windows-Anwendung.

    Alle Ausgaben werden in Form von Dialogboxen dargestellt. Wenn das Skript viele Ausgaben macht, kann dies sehr lästig sein, da jede Dialogbox einzeln bestätigt werden muss. Zudem ist jede Dialogbox modal: Das Skript hält an und wartet auf die Bestätigung. WScript eignet sich also für die unbeaufsichtigte Ausführung nur dann, wenn das Skript keine Ausgaben macht. Gut geeignet ist WScript jedoch dann, wenn der Benutzer über jeden einzelnen Schritt informiert werden und dabei die jeweils erfolgten Veränderungen überprüfen möchte (also beispielsweise beim Debugging von Skripten).

    CScript.exe

    Bei CScript (implementiert in CSCRIPT.EXE) erfolgt die Ausführung des Skripts im Kontext einer Kommandozeile (auch: Konsole oder DOS-Box).

    Die Form der Ausgabe hängt von den verwendeten Ausgabebefehlen ab. Alle Ausgaben über die Methode Echo() aus dem WSH-Intrinsic Object WScript erfolgen in die DOS-Box. Alle Ausgaben über die spracheigenen Ausgabemethoden (z.B. MsgBox() in VBScript) werden weiterhin als modale Dialogboxen dargestellt.

    Ein Vorteil von CScript ist, dass es mit der Methode WScript.StdIn.ReadLine() das Einlesen von Eingaben des Benutzers im DOS-Fenster unterstützt.

    CScript hat außerdem den Vorteil, dass die Skriptausführung mit (STRG)+(C) jederzeit vom Benutzer abgebrochen werden kann. Bei WScript hilft – wenn modale Dialogboxen angezeigt werden – nur das Beenden der Anwendung mit dem Windows Task-Manager.

    Quelle: https://db0xw.dc4fs.de/echolinkplus/WScriptOderCScript.htm

    Hier noch eine kleine Demo, die zeigt wie der Standardskripthost via Registry ausgelesen bzw. geändert werden kann... das Script muss als Administrator ausgeführt werden.

    Lizenzmanager_Demo

    Edit: Auf ESC-Taste warten hinzugefügt, wenn das Script nicht in der Console gestartet wurde.

    Einmal editiert, zuletzt von Bitnugger (24. April 2018 um 10:50)