Parameterüber (cmdline) + _AD_RecursiveGetMemberOf

  • Hallo AutoIt'ler!

    Ich stehe an, verstehe nicht wo der Unterschied ist und bin schon recht verzweifelt ;(

    Zuerst das kleine Script:


    Was soll es tun: Ich frage mit Hilfe der AD_UDF einen Domainuser ab in welche Gruppe er ist. Das Ganze soll als Commandline-Programm verwendet werden. Um das typische "DOS" feeling zu haben :D

    Zu dem Eigenlichen Problem: Nach dem Compilieren rufe ich das Programm in der Console mit zwei Parameter auf: Programm.exe Parameter1 Parameter2
    Die beiden Parameter lasse ich mir zur Sicherheit auch noch ausgeben mit der Stringlänge (Zeile 17 und 18). Bis hier her ist alles OK. Aber ich bekommen keine Daten in das Array $alle_gruppen.

    Schreibe ich in das Script hardcodet die Parameter (ab Zeile 16)

    Code
    $skz = "0123456"
    $user = "Benutzer"


    funktioniert die Abfrage und ich bekomme eine lange Liste an Gruppeninformationen. Die Consolenausgabe (Zeile 16 und 17) ist exakt die Selbe als würde ich Parameter übergeben!

    Ich habe schon Probiert Leerzeichen an die Parameter anzuhängen, ich überprüfte mit _arraydisplay den Inhalt von $cmdline - alles OK

    Was mache ich da falsch da?

    lg
    Racer

  • Hallo @Racer !

    Hast Du die Parameter in Anführungsstriche gesetzt, also :
    Programm.exe "0123456" "Benutzer"

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • @Musashi das hat er ja schon ausgeschlossen. die anführungszeichen braucht man auch nur, wenn leerzeichen in den Parametern sind.

    Also ich sehe, wenn alles gleich ist, so wie du sagst, als einzige Möglichkeit die Textkodierung. Lass dir mal mit Asc("char") jeden einzelnen Buchstaben als ASCII-Code ausgeben und vergleich die ASCII werte.

    Etwa so:

    Spoiler anzeigen
    [autoit]


    for $i=1 to StringLen($user) step 1
    ConsoleWrite(Asc(StringMid($user,$i,1))&@tab)
    next
    ConsoleWrite(@crlf)

    [/autoit]
  • Ich habe auch mal so etwas gebaut - zum Vergleich:


    Wenn ich mir mein eigenes Skript so ansehe dann stelle ich fest, das die Funktion $Gruppen_indirekt_TEMP = _AD_RecursiveGetMemberOf(@UserName, 10, 1, 0) wohl nur die indirekten Gruppenmitgliedschaften findet.
    Vielleicht ist dein Testbenutzer in keinen indirekten Gruppen.

    Probier mal _AD_GetUserGroups(), der listet die direkten Gruppen auf. Da sollte es immer eine geben.

    Gruß,
    BLinz

    PS: Das stammt aus meinem Programm ifmemberdeluxe , bei Bedarf könnten ich den ganzen Quellcode bereit stellen.
    Es hat eine Testfunktion: Testfunktionen die aber immer für den gerade angemeldeten Benutzer gelten

  • @Musashi das hat er ja schon ausgeschlossen. die anführungszeichen braucht man auch nur, wenn leerzeichen in den Parametern sind.

    In manchen Sprachen wird ein Parameter 123 ggf. als nummerischer Wert interpretiert, nicht als String.
    Bei AutoIt ergeben 123 und "123" aber sowohl mit VarGetType() als auch IsString() -> String.
    Daher sind die Anführungszeichen tatsächlich überflüssig.

    Die Textkodierung habe ich mal durchgespielt. Bei mir sind die Varianten CmdLine und Hardcoded identisch.
    Das muss aber nichts heißen, da die Einstellungen bei @Racer natürlich anders sein können.

    Die Zeichen in "0123456" und "Benutzer" liegen alle im 7-Bit ASCII Bereich. Sind diese nicht bei den meisten Kodierungen identisch ?

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Danke für die vielen guten Ideen zum Eingrenzen des Problems.

    Ich werde mal einiges ausprobieren, inbesonders mit dem Zeichenvergleichen!

    Sicher kann ich sagen der der Testuser auch in den Gruppen ist, da ich ja sonst bei einer direkten definition der Variable ja auch keine Output bekommen würde. Da funkt es ja...

    Bericht folgt...


    lg
    Racer

  • Das ist ein altbekanntes Problem mit AutoIt. Der Klassiker darin ist die Verarbeitung von ListView Indices. Hier ein kleines Beispiel: (Konsole beachten!)

  • Vielleicht ist dein Testbenutzer in keinen indirekten Gruppen.

    Probier mal _AD_GetUserGroups(), der listet die direkten Gruppen auf. Da sollte es immer eine geben.

    Bevor du dich daran vertiefst das es Zeichensatzproblem etc ist - _AD_RecursiveGetMemberOf() listet die indirekten Gruppen auf!

  • Noch ein Nachtrag:

    Du nutzt diesen Aufruf:

    AutoIt
    $alle_gruppen = _AD_RecursiveGetMemberOf($user, 10, 1, false)


    Mich stört das false - bei mir steht da 0:


    AutoIt
    Global $Gruppen_indirekt_TEMP = _AD_RecursiveGetMemberOf(@UserName, 10, 1, 0)

    ich habe mal in AD.au3 geschaut ... richtig wäre

    AutoIt
    $alle_gruppen = _AD_RecursiveGetMemberOf($user, 10, True, False)

    wobei im zweifel immer True nimmt. Bei mir ist es also völlig falsch und funktioniert nur zufällig wie ich es will

  • Soda, diverse Tests durchgeführt mit einen positiven Ergebnis!

    Vorweg möchte ich mich bei allen Bedanken, ganz besonders bei Kanashius, der mich auf die richtige Fährte gebracht hat.

    Kurzes Erklärung:

    1.) Ich habe den fest eingeben Variable mit der übergeben simpel verglichen und sie war nicht gleich....
    2.) Dann habe ich mir von Beiden Variablen (Fix und Parameter) die ASCII-Werte ausgeben lassen und die waren so weit von einander weg...ganz wild

    Beim Auflösen der Werte bin ich dann dahinter gekommen: Die Parameter sind in der falschen Reihenfolge!!!!!! Mein Fehler, ich gestehe!

    Kaum macht man es Richtig, funktioniert das Script auch wie erwartet!

    vielen Danke nochmal
    Racer