ein paar Zeilen VBS in AutoIT

  • Hi @all,

    ich versuche verzweifelt ein paar Zeilen VBS-Code in AutoIT zu integrieren:

    VBS-Code:

    Ich wollte zumindest, dass der Inhalt dieses XML-Objekts als MsgBox ausgegeben wird.

    Nur leider erscheint folgender Fehler:

    "C:\Program Files\AutoIT\SciTe\..\autoit3.exe" /ErrorStdOut "C:\Program Files\AutoIT\Projects\isa.au3"
    C:\Program Files\AutoIT\Projects\isa.au3 (8) : ==> Error parsing function call.:
    MsgBox(4096, "", $array1[0])
    MsgBox(4096, "", $array1^ ERROR
    >Exit code: 1 Time: 0.663"

    Bis jetzt sieht mein AutoIT-Code so aus:


    [autoit]

    #Include <_XMLDomWrapper.au3>
    #include <Array.au3>
    Local $obj = ObjCreate("Msxml.DomDocument")
    $oFPC=ObjCreate("Fpc.Root")
    $array1=$oFPC.GetContainingArray
    MsgBox(4096, "", $array1[0])

    [/autoit]

    Könnt Ihr mir helfen? Vielen Dank schonmal im Voraus!
    Gruß
    Peter

    Einmal editiert, zuletzt von Peter81 (2. Juli 2008 um 13:53)

  • Probiers aml so:

    Spoiler anzeigen
    [autoit]

    Dim $fileName
    Dim $WSHNetwork
    ;~ Dim $shareName = WScript.Arguments(0)
    $xmldom = ObjCreate("Msxml2.DOMDocument")
    $fpc = ObjCreate("Fpc.Root")
    $array = $fpc.GetContainingArray
    ;~ set WSHNetwork = CreateObject("WScript.Network")
    ;~ fileName=shareName & "\" & WSHNetwork.ComputerName & "-" & _
    ;~ Month(Now) & "-" & Day(Now) & "-" & Year(Now) & ".xml"
    $fileName = @ScriptDir & "\test.txt"
    $array.Export( $xmldom, 0 )
    $xmldom.save($fileName)
    ShellExecute($fileName)

    [/autoit]
  • Hi progandy,

    erst einmal vielen Dank für deine Antwort!

    Leider erhalte ich jetzt folgenden Fehler:
    C:\Program Files\AutoIT\Projects\isa.au3 (20) : ==> The requested action with this object has failed.:
    $array.Export( $xmldom, 0 )
    $array.Export( $xmldom, 0 )^ ERROR
    >Exit code: 1 Time: 0.551

    Woran könnte das liegen?
    PS: Es geht um einen Export der ISA-Server-Konfiguration, den ich ungern über VBS machen möchte, da ich noch ein wenig mehr dazuscripten wollte und ungern zwei Scriptsprachen benutzen wollte.


    @Xenobiologist

    Was meinst Du genau mit "zeig mal XML"?

    Gruß
    Peter

    • Offizieller Beitrag

    Prüf doch mal mit Errorhandler, was es genau für ein Fehler ist, vielleicht bringt dich das weiter:

    Object Error Handler (aus der Hilfe)
    [autoit]

    $oMyError = ObjEvent("AutoIt.Error","MyErrFunc") ; Initialize a COM error handler

    [/autoit] [autoit][/autoit] [autoit]

    Func MyErrFunc()
    Msgbox(0,"AutoItCOM Test","Ein COM-Fehler ist aufgetreten !" & @CRLF & @CRLF & _
    "err.description is: " & @TAB & $oMyError.description & @CRLF & _
    "err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _
    "err.number is: " & @TAB & hex($oMyError.number,8) & @CRLF & _
    "err.lastdllerror is: " & @TAB & $oMyError.lastdllerror & @CRLF & _
    "err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _
    "err.source is: " & @TAB & $oMyError.source & @CRLF & _
    "err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _
    "err.helpcontext is: " & @TAB & $oMyError.helpcontext )
    Local $err = $oMyError.number
    If $err = 0 Then $err = -1
    $g_eventerror = $err ; to check for after this function returns
    Endfunc

    [/autoit]
  • Hi,

    also mein AutoIT-Code mit Error Handler sieht jetzt so aus:

    [autoit]

    #include <IE.au3>
    _IEErrorHandlerRegister ()
    Dim $fileName
    Dim $WSHNetwork
    ;~ Dim $shareName = WScript.Arguments(0)
    $xmldom = ObjCreate("Msxml2.DOMDocument")
    $fpc = ObjCreate("Fpc.Root")
    $array = $fpc.GetContainingArray
    ;~ set WSHNetwork = CreateObject("WScript.Network")
    ;~ fileName=shareName & "\" & WSHNetwork.ComputerName & "-" & _
    ;~ Month(Now) & "-" & Day(Now) & "-" & Year(Now) & ".xml"
    $fileName = @ScriptDir & "\test.txt"
    $array.Export( $xmldom, 0 )
    $xmldom.save($fileName)
    ShellExecute($fileName)
    _IEErrorHandlerDeregister ()
    Exit

    [/autoit]

    Die ausführliche Fehlermeldung sieht so aus:
    >"C:\Program Files\AutoIT\SciTe\..\autoit3.exe" /ErrorStdOut "C:\Program Files\AutoIT\Projects\isa.au3"
    --> COM Error Encountered in isa.au3
    ----> $IEComErrorScriptline = 13
    ----> $IEComErrorNumberHex = 80020009
    ----> $IEComErrorNumber = -2147352567
    ----> $IEComErrorWinDescription = Das angegebene Modul wurde nicht gefunden.
    ----> $IEComErrorDescription = Das angegebene Modul wurde nicht gefunden.

    Der Fehler ist auf Objekt "DEV_ARRAY" der Klasse "Array" im Arraybereich "DEV_ARRAY" aufgetreten.
    ----> $IEComErrorSource =
    ----> $IEComErrorHelpFile =
    ----> $IEComErrorHelpContext = 0
    ----> $IEComErrorLastDllError = 0

    >Exit code: 0 Time: 0.687

    Könnt Ihr da etwas rauslesen?

    Gruß
    Peter

  • Hi BugFix,

    vielen Dank für Deine Antwort.
    Wenn ich folgenden Code ausführe (Auszug aus den AuoIT-Quellen):

    [autoit]

    If IsObj($fpc) Then
    MsgBox(4096,"Test","Es ist ein Objekt!")
    Else
    MsgBox(4096),"Test","Es ist kein Objekt!")
    EndIf

    [/autoit]

    ...dann erscheint: "Es ist ein Objekt!".
    Wie könnte ich weiter vorgehen, um den Fehler zu finden?

    Gruß
    Peter

    • Offizieller Beitrag

    Ist der betreffende Rechner der ISA selbst, so startet man mit

    [autoit]

    $objFPC = ObjCreate("FPC.Root")

    [/autoit]

    andernfalls mit

    [autoit]

    $objFPC = ObjCreate("FPC.Root", $IsaHost)

    [/autoit]

    Die Unterscheidung ist notwendig. ISAHost ist der Namen des ISA-Servers. Diesen darf man auf dem ISA selbst nicht angeben!

    Hast du das berücksichtigt?

    Ach nochwas: Füge mal noch ein Refresh ein - und der Containig-Befehl braucht noch Arrays.:

    [autoit]

    $objFPC.Refresh
    $objArray = $objFPC.Arrays.GetContainingArray

    [/autoit]
  • Hi BugFix,

    erst einmal vielen Dank für Deine schnellen Antworten!!!
    Ich habe Deine Zeilen (bei mir Zeile 7 und 8 ) jetzt eingefügt. Ich hoffe, ich habe Deine Zeilen Code richtig angepasst. Leider erhalte ich jetzt folgenden Fehler:
    >"C:\Program Files\AutoIT\SciTe\..\autoit3.exe" /ErrorStdOut "C:\Program Files\AutoIT\Projects\isa.au3"
    --> COM Error Encountered in isa.au3
    ----> $IEComErrorScriptline = 8
    ----> $IEComErrorNumberHex = 80020006
    ----> $IEComErrorNumber = -2147352570
    ----> $IEComErrorWinDescription = Unbekannter Name.
    ----> $IEComErrorDescription =
    ----> $IEComErrorSource =
    ----> $IEComErrorHelpFile =
    ----> $IEComErrorHelpContext =
    ----> $IEComErrorLastDllError = 0

    --> COM Error Encountered in isa.au3
    ----> $IEComErrorScriptline = 10
    ----> $IEComErrorNumberHex = 000000A9
    ----> $IEComErrorNumber = 169
    ----> $IEComErrorWinDescription = Variable must be of type 'Object'.
    ----> $IEComErrorDescription =
    ----> $IEComErrorSource =
    ----> $IEComErrorHelpFile =
    ----> $IEComErrorHelpContext =
    ----> $IEComErrorLastDllError = 0

    >Exit code: 0 Time: 0.505

    Mein AutoIT-Script sieht im Moment so aus:

    [autoit]

    #include <IE.au3>
    _IEErrorHandlerRegister ()
    Dim $fileName
    Dim $WSHNetwork
    $xmldom = ObjCreate("Msxml2.DOMDocument")
    $fpc = ObjCreate("Fpc.Root")
    $fpc.Refresh
    $array = $fpc.Arrays.GetContainingArray
    $fileName = @ScriptDir & "\test.txt"
    $array.Export( $xmldom, 0 )
    $xmldom.save($fileName)
    ShellExecute($fileName)
    _IEErrorHandlerDeregister ()
    Exit

    [/autoit]

    Das Script selbst führe ich direkt auf dem ISA aus.
    Hast Du noch eine Idee?

    Gruß
    Peter

    • Offizieller Beitrag

    Hmm, die Methode

    [autoit]

    $array = $fpc.Arrays.GetContainingArray

    [/autoit]

    kann nicht umgesetzt werden. Der zweite Fehler ist ein darauf basierender Fehler.

    Hast du mal getestet, ob das Ganze als VBScript überhaupt funktioniert? Nicht, dass wir uns beim Portieren die Köpfe zerbrechen und das Problem liegt irgendwo maschinenseitig. ;)

    • Offizieller Beitrag

    Prüf mal schrittweise durch:

    [autoit]

    $oArray = $fpc.Arrays
    If IsObj($oArray) Then
    MsgBox(0, '', '.Arrays erfolgreich')
    $oArrays = $oArray.GetContainingArray
    If IsObj($oArrays) Then
    MsgBox(0, '', '.GetContainingArray erfolgreich')
    Else
    MsgBox(0, '', '.GetContainingArray fehlgeschlagen')
    EndIf
    Else
    MsgBox(0, '', '.Arrays fehlgeschlagen')
    EndIf

    [/autoit]
  • Also:
    Zuerst kommt ".Arrays erfolgreich" und danach ".GetContainingArray fehlgeschlagen". Sieht wohl nicht gut aus... :(

  • Hi BugFix,

    wenn ich die Zeile

    [autoit]

    $oArray = $fpc.Arrays

    [/autoit]


    in

    [autoit]

    $oArray = $fpc

    [/autoit]


    umwandle, dann erscheint die MsgBox ".GetContainingArray erfolgreich"

    Hilft uns das weiter?

    Gruß
    Peter