Seite 1 von 1

Windows-Version ermitteln

Verfasst: 12. Mai 2017, 08:23
von wernerperplies
Es ist nicht immer drin, was draufsteht! :-)

Wenn Sie die in InDesign-ExtendScript eingebaute Funktion $.os verwenden, um Ihre Windows-Version zu ermitteln, werden Sie ab Windows 8 eine Überraschung erleben, für Adobe ist einfach bei Windows 7 Schluss!

Mit meinem Skript wpsGetOutputFromWmic.jsx können Sie das Rätsel lösen.

Es benutzt Microsofts Windows Management Instrumentation Command-line, kurz WMIC.

WMIC liefert Ihnen umfangreiche Informationen über Ihr Windows-Betriebssystem.

Weitere Informationen über dieses hilfreiche Programm finden Sie hier:
Windows Management Instrumentation Command-line

Um die von WMIC ermittelten Informationen in das eigene JavaScript-Skript zu bekommen, bedarf es einigen Aufwands:

1. Eine Batchdatei, um Informationen von Windows abzuholen und in eine Textdatei zu schreiben.
2. Eine VBS-Datei (Visual Basic Script), um ein verborgenes Konsolenfenster zu erzeugen, damit die Batchdatei ohne aufpoppendes Konsolenfenster auszuführt wird.
3. Routinen, die diese Dateien on the fly erzeugen und das Ergebnis in Ihre Script einlesen.

Das alles macht mein Skript wpsGetOutputFromWmic.jsx.

Wenn Sie mein Skript in Ihr eigenes Skript einbinden, können Sie WMIC-Informationen einfach so abrufen:

Code: Alles auswählen

wpsGetOutputFromWmic("os get version,osarchitecture,caption");
Das Ergebnis könnte dann so aussehen:
VersionAlert.png
VersionAlert.png (7.96 KiB) 22150 mal betrachtet
oder lieber so?

Code: Alles auswählen

wpsGetOutputFromWmic("os get version,osarchitecture,caption /value");
VersionAlertLine.png
VersionAlertLine.png (8.19 KiB) 22116 mal betrachtet

Code: Alles auswählen

// DESCRIPTION execute a wmic (Windows Management Instrumentation Command-line) command
// see also https://msdn.microsoft.com/en-us/library/aa394531(v=vs.85).aspx
// Dateiname: wpsGetOutputFromWmic.jsx
// #includepath "C:/Users/WernerPerplies/Source/Workspaces/Singles/";
// projPath: C:/Users/WernerPerplies/Source/Workspaces/Singles/
// for this Script
//  © 2017 by Werner Perplies, EDV-Anwendungsberatung, 
// http://www.weepee.de, email: werner.perplies@weepee.de 
// created: Thu May 11 2017 07:20:34 GMT+0200
// [modified]
// next line is a placeholder for last version of wpsIncludes (>= version 3)
// [lastFileProps:({time:"1488208806000", size:14240, checkSum:"151ae4fa", scriptVersion:"1.48", scriptDate:"201703201000"})]
// [end of header]

#include "wpsWriteString2File.jsx";
#include "wpsReadFile2String.jsx";
var /*String*/result = wpsGetOutputFromWmic("os get version,osarchitecture,caption");
if (result.length > 0)
    alert("Windows-Version:\nInDesign JavaScript meint: " + $.os + "\nWindows meint: \n" + result);

function wpsGetOutputFromWmic(/*String*/wmicCommand)
{
    try
    {
	// create wmic batch file
        var wmMcOutput = "";
        //  critical if one of filenames exists, test this or create unique filenames
        var /*File*/outputFile = File(Folder.temp + "/wmic.text").fsName;
        wmicCommand = " " + wmicCommand + " > " + outputFile; 
        outputFile = new File(outputFile);
        if (outputFile.exists)
        {            
            if (!(outputFile.remove()))
                throw new Error(outputFile.error);
        }
        var /*File*/wMicFile = new File(Folder.system + "/wbem/WMIC.exe");
        var /*String*/wMicBatch = "@ECHO OFF\nwmic"  + wmicCommand + "\nExit /B";  
        var /*File*/wMicBatchFile = new File( File(Folder.temp + "/wmic.bat"))
        // needs vbs startscript to hide DOS console window
        var /*File*/startFile = new File( File(Folder.temp + "/start.vbs"))
        var /*String*/startContent = "Set WshShell = WScript.CreateObject(\"WScript.Shell\")\nWshShell.Run \"" + wMicBatchFile.fsName + "\",0,True\n";
        var counter = 0;
        wpsWriteString2File(startFile, startContent);
        wpsWriteString2File(wMicBatchFile, wMicBatch);
        wMicBatchFile = File(wMicBatchFile) ;
        // to be sure that batch file exists;
        while (!wMicBatchFile.exists)
        {
            if (++counter > 100)
                break;
            $.sleep(10);
            wMicBatchFile = File(wMicBatchFile) ;
        }
        counter = 0;
        if (startFile.execute())
        {
            outputFile = new File(outputFile)
            // to be sure that batch file exists;
            while (!outputFile.exists)
            {
                if (++counter > 10000)
                    break;
                $.sleep(100);
                outputFile = new File(outputFile)
            }
            // necessary to verify, that outputfile is created and closed!
            counter = 0;
            while (!(outputFile.length > 0))
            {
                if (++counter > 10000)
                    break;
                $.sleep(100);
                outputFile = new File(outputFile)
            }
        }
        if (!( wMicBatchFile.remove()))
            throw new Error(wMicBatchFile.error);
        wmMcOutput = wpsReadFile2String(outputFile, "");
    }
    catch (error)
    {
        alert(error.message + "\nin line: " + error.line);
        throw error;
    }
    return wmMcOutput;
}
   /*array */function properties(/*object*/o)
    {
        var a = new Array();
        for (var prop in o)
        {
            a.push(prop);
        }
        return a;
    }
Die Zip-Datei enthält alle notwendigen Dateien, die Sie am besten in ein gemeinsames Verzeichnis kopieren.
Bei Aufruf des Skriptes werden alle Module automatisch geladen und ausgeführt.

Download (erfordert Anmeldung/Registrierung im Forum):
wpsGetOutputFromWmic.zip (Version 1.01 vom 12.05.2017)