Computer OU abfragen -> Programmabsturz

  • Hallo zusammen,
    Ich brauche eure Hilfe. Ich benötige bei einem Programm, dass die User als auch Computer OU auswertet mal ein Tipp.

    Mit folgendem Skript rufe ich die OU ab:

    [autoit]


    Func _getPCOU()
    $objInfo = ObjCreate("ADSystemInfo")
    return ($objInfo.Computername)
    EndFunc

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

    ; Nur zum Test ;)
    MsgBox(0,"Test", _getPCOU())

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

    Das funktioniert auch wunderbar.. Bis ich das ganze Offline probiere. Das Programm stürzt mit "test.au3 (3) : ==> The requested action with this object has failed.:" ab. Soweit verständlich aber die Frage ist, wie bekomme ich das abgefangen, dass mir das Programm nicht abstürtz?

    Würde mich über Vorschläge freuen.

    Beste Grüße und Danke
    Matthias

    Einmal editiert, zuletzt von MBMP (14. Dezember 2010 um 13:37)

  • Hallo stayawayknight,
    so sieht mein derzeitiger Workaround aus (um genau zu sein, prüfe ich anhand der IP Range, ping auf google und einem Ping auf die DCs ab wo ich derzeit bin), elegant finde ich das jedoch nicht und performant ebenfalls nicht.
    Hab schon mit dem Gedanken gespielt, diese Abfrage in eine separate exe zu packen die das in eine Textdatei zu schreibt und dann wieder einzulesen. Aber auch das ist alles andere als sauber -.-

  • Schau mal hier im Forum, es gibt eine UDF für active directory abfragen.
    Bei den dort verwendeten funktionen müsstest du einen fehlercode zurückbekommen.

    bei ping hast du die möglichkeit den timeout wert festzulegen. Standard ist 4000ms also 4 sekunden.
    im LAN (ping auf dc) solltest du auf zeiten von 10ms oder weniger kommen.
    ein ping($IP, 30) sollte also ausreichend sein für einen verbindungstest.

  • Da Du hier ein COM-Objekt benutzt, solltest Du Dir in der AutoIt-Hilfe das Kapitel COM-Fehlerbehandlung anschauen.

  • Die AD UDF sollte das relativ einfach machen. Da alle Skripte mit der AD UDF den folgenden Aufbau haben:

    [autoit]

    $iResult = _AD_Open()
    $iResult = _AD_irgendeineFunktion()
    $iResult = _AD_Close()

    [/autoit]


    Fragst Du einfach nach _AD_Open den Fehlercode ab. Wenn ich es halbwegs sinnvoll programmiert habe, dann bekommt Du - falls Du offline bist - einen schönen @Error.

  • Danke für die Antworten.
    water: Schicke UDF hast du da an den Start gebracht!

    User OU habe bereits über diesen Weg gelöst bekommen. Computer werde ich mir noch anschauen.

    Vielen Dank für die Unterstützung an alle!

    Einmal editiert, zuletzt von MBMP (14. Dezember 2010 um 16:28)

  • Computer werde ich mir noch anschauen.

    Denk aber dran, dass Du ein Dollar-Zeichen anhängen musst, wenn Du den SamAccountName verwendest also: @ComputerName & "$"