2017-07-19 2 views
0

Szenario: Wir haben einige geplante Jobs (Control-M), die viele Prozesse ausführen und einige von ihnen führen eine .VBS-Datei (mit Parametern) aus, die die Konfiguration aus einer XML-Datei liest und sendet es an die Software eines Unternehmens, die es interpretiert und Daten in Tabellen lädt.Wscript make proccess läuft nicht im Hintergrund oder warte während das Ende

ich mit der VBS-Datei Hilfe benötigen, dass, wie oben erwähnt, nur die Anweisungen aus dem XML bekommt und an die Software mit diesen Schritten senden (auch protokolliert jeden Schritt):

  1. Findet die XML;

  2. Erstellt ein Objekt zur Anmeldung an der Software (mit XML-Parametern);

    Dim object 
    Set object = CreateObject("service.location.id") 
    
  3. Einloggen in die Datenbank (mit XML-Parametern);

    object.Login("DATABASE_NAME") 
    
  4. Wählen Sie, welche Datenbank (XML ...);

    object.SelectDatabase("DATABASE_NAME") 
    
  5. Sendet Befehl Last proccess

    object.LoadRepositoryTable(XML) 
    

Das Problem zu beginnen, ist, dass, da der Standard-Interpreter wscript ist, wenn das Skript ausgeführt wird, läuft es auf dem Hintergrund und der Job Scheduler denkt Es beendet die Ausführung und startet den nächsten Job.

Ausführen des Skripts auf CMD, wenn ich es als cscript SCRIPT.vbs starte es wartet auf den gesamten Ladeprozess zu beenden (es läuft nicht im Hintergrund), und ich möchte dies tun, wenn wscript ausgeführt - weil da sind Viele Jobs, bearbeiten, wie sie das Skript aufrufen, ist derzeit keine Option. Dazu gehört auch das Erstellen einer .bat-Datei, die SCRIPT.vbs als cscript aufruft.

Ich habe auch versucht, auf "wie eine andere .vbs-Datei in einem VB-Skript auszuführen", um als cscript auszuführen, aber nicht geschafft, es funktioniert.

Was kann ich tun?

Gibt es eine Möglichkeit wscript auf die Last warten zu lassen?

Gibt es eine Möglichkeit, eine .vbs im selben Ordner (ohne Senden als Parameter) aufzurufen, während zwei Argumente übergeben werden?

Eine andere Option, die ich nicht sehe?

Edit: Hier ist, was ich bis jetzt gekommen bin, aber ich bekomme "erwartete Ende der Aussage".

Dim objShell 
Dim arg_dir 
arg_dir = Wscript.Arguments.Item(0) 
Dim arg_xml 
arg_xml = Wscript.Arguments.Item(1) 
Set objShell = CreateObject("Wscript.Shell") 

objShell.Run "cmd /k cscript ""C:\Folder\Scripts\SCRIPT.vbs" &" "& arg_dir &" "& arg_xml"", 1, True 

Antwort

1

cscript ist die Lösung für Ihr Problem. Entweder haben Sie Ihre Scheduler jeden VBScript ausführen mit cscript.exe, oder (wenn das aus irgendeinem Grund nicht möglich ist) machen cscript die Standardskripthost von

läuft
wscript.exe //h:cscript 

einmal als Administrator an.

Das Skript, das Sie zusammengeschustert haben, wird Ihr Problem nicht lösen, auch wenn Sie den Syntaxfehler in der letzten Zeile behoben haben, denn solange Sie es mit wscript.exe ausführen, wird es immer noch sofort zurückkehren. Es spielt keine Rolle, dass der Code in diesem Skript andere Skripte synchron ausführt, solange dies alles im Hintergrund geschieht.

Verwandte Themen