vbs variable an perl

Von: , Frage gestellt am Di, 5. Apr 2011

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...

11 Antworten zu dieser Frage

  1. Antwort von nach einer Stunde 1 hilfreich
    Re: vbs variable an perl

    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

      • Antwort von nach einer Stunde 1 hilfreich
        Re^3: vbs variable an perl

        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?

        • Antwort von nach 2 Stunden 0 hilfreich
          Re^4: vbs variable an perl

          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.

            • Antwort von nach 2 Stunden 0 hilfreich
              Re^6: vbs variable an perl

              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 ^^

            • Antwort von nach 3 Stunden 1 hilfreich
              Re^7: vbs variable an perl


              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.

            • Antwort von nach 3 Stunden 0 hilfreich
              Re^8: vbs variable an perl

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

            • Antwort von nach 3 Stunden 1 hilfreich
              Re^9: vbs variable an perl

              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.



Keine passende Antwort gefunden? Jetzt eigene Frage stellen!