=====Running an Executable from a Script===== In MIStudio you can use the CommmandExecutor to run an external executable or script (.sh or .bat). In a script you can use the Java Runtime and create a Process to run a command. ====Simple Example with One Parameter==== var Runtime = Java.type("java.lang.Runtime"); var Process = Java.type("java.lang.Process");  //This runs the external program //Consider running this in its own Thread         try         {             // Command to create an external process             command = "notepad";                // Running the above command             run = Runtime.getRuntime();             proc = run.exec(command); //will launch notepad.exe on windows         }  catch (e) {                 print("error in script: \n"+e.stack);         }   output="finished"; ====Example with a Command Array==== In this example we need to run a CMD shell to launch a PDF viewer. This will run the default viewer on the system using Windows start. var Runtime = Java.type("java.lang.Runtime"); var Process = Java.type("java.lang.Process"); pdfname="C:/Reports/SummaryReport_2023-01-24_12-58-26.pdf"; //launch pdf viewer using Windows START command = ["cmd.exe","/c","start",pdfname]; try  { print("command for launching pdf viewer: "+command); rt = Runtime.getRuntime(); proc = rt.exec(command);  } catch (e) { print("error in script: \n"+e.stack); }   incomingValue; ====Running a Command with an Output==== Sometimes you might need to run a command or script on a system and need to capture the output of the exec. In the example below the Windows tzutil (time zone utility) to return a time zone string. The command is "tzutil /g". The return string will be something such as "Pacific Standard Time". In this example we have set up a BroadcastServer (Variable) called "LocalTimeZone" under UtilityServers in Devices. The result is stored in this BCS. //test script to read the local time zone and store it in a BCS "LocalTimeZone" var Runtime = Java.type("java.lang.Runtime"); var Process = Java.type("java.lang.Process"); var BufferedReader = Java.type("java.io.BufferedReader"); var InputStreamReader = Java.type("java.io.InputStreamReader"); //get the local time zone for this Windows system using tzutil /g command = ["tzutil","/g"]; timezone=""; try { //print("command: "+command); rt = Runtime.getRuntime(); proc = rt.exec(command); //proc contains the return value, a string, but is an InputStream, so need to read it one line at a time (should only be one line in this example) resultLine=""; stdIn = new BufferedReader(new InputStreamReader (proc.getInputStream())); while ((resultLine = stdIn.readLine()) != null) { timezone=timezone+resultLine; } print ("timezone is :"+timezone); //store the value /Devices/DemoServers_Servers/LocalTimeZone->setStringValue(timezone); } catch (e) { print("error in script: \n"+e.stack); } incomingValue;