Vbs variable an perl

Hallo,

ich habe eine Aufgabe bekommen, füllen von Daten in eine DB. Da ich mich in Perl ein wenig auskenne, habe ich mich für diese Sprache entschieden.
Nun nochmal zum Theme…

Ich soll aus einer SQL DB Servernamen auslesen, von diesem dann, mit Hilfe eines VBS Scriptes, dass aktuelle Microsoft Patchdatum herausfiltern und die DB damit füllen.

Das Auslesen der Servernamen ist erledigt auch die Übergabe an das VBS Script. Nun stellt sich bei mir die Frage, wie bekomme ich die Werte, welche mir das VBS Script ausliest in das Perl Script zurück?

Gegoogelt habe ich schon, finde jedoch nichts einleuchtenes

Hier einmal der Q-Text:

Perlausschnitt:
#########################################################
$sql = qq[Select Servername FROM $servername];
$rc = $dbh->Sql($sql);
while ($dbh->FetchRow())
{
@ar = $dbh->Data();
$server[$i][0] = $ar[0];
$i++;
}
$anzahl = $i;
$i = 0;
#######################################################

########################################################

VBS Datei öffnen

#######################################################
while ($i ne $anzahl)
{
my $prog = „Patchdatum.vbs $server[$i][0]“;
system($prog);

Was nun? …

}

VBSausschnitt:

Dim strHostname, Updatedaten

set strHostname = WScript.Arguments

On Error Resume Next
Set objSession = CreateObject(„Microsoft.Update.Session“, strHostname(0))
Set objSearcher = objSession.CreateUpdateSearcher

Set myFSO = CreateObject(„Scripting.FileSystemObject“)
Set Datenschreiben = myFSO.OpenTextFile(„Patchauswertung.txt“, 8, True)

Set colHistory = objSearcher.QueryHistory(1, 1)

For Each objEntry in colHistory
Updatedaten = strHostname(0) & „;“ & objEntry.Date
request.querystring(Updatedaten)
Datenschreiben.WriteLine(Updatedaten)
’ Keine Ahnung ob hier noch iwas hin muss
Next

Vielen Dank schonmal fürs anschauen…

z.b. kommandozeile

http://pronix.linuxdelta.de/Perl_cgi/Perl/perl_kurs_…
siehe
12.4. Kommandozeilenargumente @ARGV
übergabe und auslesen ,

Also

im perl sollte das eh mit
print ARGV[argumentnummer]
gehn

Falls du das WEB basierend machst

Kannst du einfach an die adresse das anfügen: mit nem „?“ und duch „&“ getrennt

…/cgi-bin/script.pl?zahl=2&von=USA&zu=SimCity

dazu dann noch wie man die parameter via vbs an die kommandozeile gibt

siehe http://www.digital-inn.de/visual-basic/31634-kommand…

hoffe es hilft dir zur lösung

Vielen Dank für das schnelle Antworten aber ich denk, dass das nicht das richtige ist.
Ich rufe ja mit der Perl Datei die VBS auf sprich dort übergebe ich parameter! wenn die Datei Fertig ist, geht es automatisch in der Perldatei weiter.
Also wenn ich in der VBS nocheinmal die Perldatei mit Parametern starte ist diese ja doppelt auf… Oder versteh ich das mit @ARGV falsch?

Ach so , wie ruffst du den das auf in Perl , weil eigentlich arbeitet man dann mit rückgabe werten , ergo dein vba gibt was aus und das fängste als return wert ein.

Ach so , wie ruffst du den das auf in Perl , weil eigentlich
arbeitet man dann mit rückgabe werten , ergo dein vba gibt was
aus und das fängste als return wert ein.

siehe dazu http://www.perlhowto.com/executing_external_commands

Ok die Backticks sehen suoper aus ^^
rufe das nun so auf:

while ($i ne $anzahl)
{
my $result = 0;
$result = Patchdatum.vbs wdeteg5005;
print „$i - $result“;
}

Jedoch ist bei der Ausgabe nur $i gefüllt, also ist die Ausgabe beim VBS Script fehlerhaft. Habe da nun auch schon alles durch. VBS hat ja auch keine richtige Ausgabe im Sinne von cmd, nur iwelche Popups oder Fenster…

Son Mist aber danke bisher ^^

Ok die Backticks sehen suoper aus ^^
rufe das nun so auf:

while ($i ne $anzahl)
{
my $result = 0;
$result = Patchdatum.vbs wdeteg5005;
print „$i - $result“;
}

wie erzeugst du die ausgabe , laut

http://www.devguru.com/Technologies/wsh/quickref/wsc…

sollte ein

WScript.echo(„meine=rueckgabe=daten“)

eine ausgabe ergeben, ob das dann auch als return code genommen wird , hmm, musst mal ausprobieren ob das als letzte ausgabe ohne eine quit anweisung das als returnwert fürs perl erzeugt.

ansonsten fällt mir nur ein zu versuchen etwas in den standart output zu schreiben bevor das programm endet.

Also mit:

.
.
.
For Each objEntry in colHistory
Updatedaten = strHostname(0) & „;“ & objEntry.Date
WScript.Quit(Updatedaten)
Next

Kommt leider nur eine Fehlermeldung zurück das das Typenunverträglich ist. Mit einer 1 in den Klammern funktioniert leider auch nichts.
Die Ausgabe bleibt jedesmal leer. Kommt mir so vor, als ob WScript.Quit
nur das Skript stoppt und keine Ausgabe macht.

Deine andere Idee klingt auch nicht schlecht.
Ansonsten würde ich eine unsaubere Art machen und die Daten einfach in eine .txt Datei schreiben und dann aus Perl herause wieder auslesen.

ansonsten fällt mir nur ein zu versuchen etwas in den standart
output zu schreiben bevor das programm endet.

und die registry kannman auch von perl und von vbs aus ansprechen.
http://www.tutorials.de/programming-tutorials/175707…

For Each objEntry in colHistory
Updatedaten = strHostname(0) & „;“ & objEntry.Date
WScript.Quit(Updatedaten)
Next

war das noch von meinen ersten eintrag ? den ich schon gelöscht hatte.

weil versuch mal WScript.echo

oder wie beim anderen link , nimm die registry zur hilfe .
Gibt wohl einige wege .
Mit dem rückgabe errorcode als zahl könnte man wenigstens gugen wann man denn in der registry den wert abholen kann (und danach löschen für ne neue lieferung)