listview parameter an eine batch übergeben

  • Hallo,

    ich lese gerade gruppen aus dem AD aus und stelle sie dar in einer listview das formatiert jetzt habe ich ein problem

    würde gerne auch die mitglieder wieder darstellen in der $listview2 klappt unter dos wunder bar muss noch formatirt werden aber das kriege ich hin danke eurer hilfe ;)

    und jetzt zu meinem problem ich würde gerne die gruppe die ich in der $listview anklicke als parameter an meine batch übergeben habe etwas gebaut aber leider falsch da iuch den parameter aus einer input lese könnt ihr mir ein tipp geben hier mein code

    Spoiler anzeigen
    [autoit]


    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    case $hButton
    RunWait(@ComSpec & " /c " & \tools\dsquery.bat', "", @SW_HIDE)
    case $hButton2
    Run(@ComSpec & " /c " & 'groups_members.cmd' & GUICtrlRead($listview), "", @SW_HIDE)

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

    Case $hButton1
    NewItems()
    EndSwitch
    WEnd
    Func NewItems()
    $string = FileRead(@ScriptDir & '\logs\gruppen.txt')
    $array = StringRegExp($string, 'CN=(.+?),.*', 3)
    For $i = 0 To UBound($array) - 1
    GUICtrlCreateListViewItem($array[$i], $hListView)
    Next
    EndFunc

    [/autoit]

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

    Einmal editiert, zuletzt von subzero007 (19. Mai 2009 um 12:14)

  • Hallo subzero007,

    dies müsste das richtige Stichwort für dich sein, mit dem du weiterkommst:

    Zitat

    _GUICtrlListView_GetItemTextArray
    --------------------------------------------------------------------------------

    Ermittelt den Inhalt der kompletten Zeile eines Listview Items


    #Include <GuiListView.au3>
    _GUICtrlListView_GetItemTextArray($hWnd[, $iItem = -1])

    Dein Skript lässt sich nicht ausführen, ich habe auch nicht versucht es zum laufen zu bringen. Der Tip kommt also von meiner Glaskugel, ich hoffe er passt trotzdem,

    Alina s Adlerauge hat das fehlende Anführungszeichen entdeckt

    mfg (Auto)Bert

    2 Mal editiert, zuletzt von AutoBert (14. Mai 2009 um 20:39)

  • Wenn ich mich nicht täusche, ist da nur ein kleiner Fehler drinne gewesen.

    Zuvor noch ein TIP: Wenn Du dich auf eine Batchdatei berufst, die einwandfrei arbeitet, dann wäre es hilfreich, wenn Du diese mit postest.

    Also zum Beispiel:
    Ich habe folgende Batch-Datei die einwandfrei arbeitet: xxxxx
    Ich habe sie versucht wie folgt in AutoIt umzusetzen: YYYYYY
    Folgendes Probelm habe ich: DEIN SCRIPT und die Problemdarstellung

    Wieso so?
    Weil Du dann schneller Hilfe bekommst und es leicher ist Dir zu helfen und Dir evtl. auch bessere / einfache Lösungswege mit AutoIt zu zeigen. denn man lernt ja nie aus.

    Also probiere das mal bitte:

    Spoiler anzeigen
    [autoit]


    ;--> http://www.autoit.de/index.php?page…94214#post94214

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

    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    case $hButton
    RunWait(@ComSpec & " /c " & '\tools\dsquery.bat', "", @SW_HIDE)
    case $hButton2
    Run(@ComSpec & " /c " & 'groups_members.cmd' & GUICtrlRead($listview), "", @SW_HIDE)

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

    Case $hButton1
    NewItems()
    EndSwitch
    WEnd
    Func NewItems()
    $string = FileRead(@ScriptDir & '\logs\gruppen.txt')
    $array = StringRegExp($string, 'CN=(.+?),.*', 3)
    For $i = 0 To UBound($array) - 1
    GUICtrlCreateListViewItem($array[$i], $hListView)
    Next
    EndFunc

    [/autoit]

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • ich habe eine Batch die einwandfrei arbeitet das ist ja auch nicht das thema ich leite ja die datei in eine txt um würde aber gerne der batch den parameter aus der $listview übergeben den eintrag den ich anklicke hier mein code:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    GUICreate('Test', 714, 669)
    $hListView = GUICtrlCreateListView('Gruppe', 10, 10, 220, 580)
    GUICtrlSendMsg($hListView, $LVM_SETCOLUMNWIDTH, 0, 560) ; setzt die erste Spalte des Listviews auf 560 Pixel Breite
    $hButton = GUICtrlCreateButton('AD Auslesen', 10, 630, 80, 20)
    GUISetState()
    $hButton1 = GUICtrlCreateButton('Gruppe Auslesen', 10, 590, 90, 20)
    GUISetState()
    $hListView2 = GUICtrlCreateListView('User', 240, 10, 220, 580)
    GUICtrlSendMsg($hListView, $LVM_SETCOLUMNWIDTH, 0, 560) ; setzt die erste Spalte des Listviews auf 560 Pixel Breite
    $hButton2 = GUICtrlCreateButton('Member of', 240, 593, 80, 20)
    GUISetState()
    $hButton3 = GUICtrlCreateButton('Export2', 320, 593, 80, 20)
    GUISetState()

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

    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    case $hButton
    RunWait(@ComSpec & " /c " & 'dsquery.bat', "", @SW_HIDE)
    ;ase $hButton2
    ; Run(@ComSpec & " /c " & 'groups_members.cmd' & GUICtrlRead($listview), "", @SW_HIDE)

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

    Case $hButton1
    NewItems()
    EndSwitch
    WEnd
    Func NewItems()
    $string = FileRead(@ScriptDir & '\logs\gruppen.txt')
    $array = StringRegExp($string, 'CN=(.+?),.*', 3)
    For $i = 0 To UBound($array) - 1
    GUICtrlCreateListViewItem($array[$i], $hListView)
    Next
    EndFunc

    [/autoit]

    und im anhang eine beispiel datei: autoit.de/wcf/attachment/4770/

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Hallo subzero007,

    das läasst sich z.B. so lösen:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #Include <GuiListView.au3>
    #include <ListViewConstants.au3>
    GUICreate('Test', 714, 669)
    $hListView = GUICtrlCreateListView('Gruppe', 10, 10, 220, 580)
    GUICtrlSendMsg($hListView, $LVM_SETCOLUMNWIDTH, 0, 560) ; setzt die erste Spalte des Listviews auf 560 Pixel Breite
    $hButton = GUICtrlCreateButton('AD Auslesen', 10, 630, 80, 20)
    GUISetState()
    $hButton1 = GUICtrlCreateButton('Gruppe Auslesen', 10, 590, 90, 20)
    GUISetState()
    $hListView2 = GUICtrlCreateListView('User', 240, 10, 220, 580)
    GUICtrlSendMsg($hListView, $LVM_SETCOLUMNWIDTH, 0, 560) ; setzt die erste Spalte des Listviews auf 560 Pixel Breite
    $hButton2 = GUICtrlCreateButton('Member of', 240, 593, 80, 20)
    GUISetState()
    $hButton3 = GUICtrlCreateButton('Export2', 320, 593, 80, 20)
    GUISetState()

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

    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    case $hButton
    RunWait(@ComSpec & " /c " & 'dsquery.bat', "", @SW_HIDE)
    case $hButton2
    $ListViewText = _GUICtrlListView_GetItemTextArray($hlistview)
    consolewrite($ListViewText[1]&@CRLF) ;nützlich zum prüfen auskommentieren wenns klappt und nächste Zeile wieder aktivieren
    ;Run(@ComSpec & " /c " & 'groups_members.cmd' & $ListViewText), "", @SW_HIDE)
    Case $hButton1
    NewItems()
    EndSwitch
    WEnd
    Func NewItems()
    ;$string = FileRead(@ScriptDir & '\logs\gruppen.txt')
    $string = FileRead(@ScriptDir & '\gruppen.txt')
    $array = StringRegExp($string, 'CN=(.+?),.*', 3)
    For $i = 0 To UBound($array) - 1
    GUICtrlCreateListViewItem($array[$i], $hListView)
    Next
    EndFunc

    [/autoit]

    mfg (Auto)Bert

    Alina, hatte meine Glaskugel doch die richtige Ahnung

  • Was läuft hier falsch kann jemand sich mal mein code anschauen ?

    problem liegt bei $hButton2 falls ich dort memberof klicke sollte folgendes übergeben werden "groups_member.cmd %1" die %1 ist der parameter der angeklickt ist den er übernimmt von $hlistview

    einen fehler gibt es nicht und die batch wird nicht mal aufgerufen habe es auf @sw_show gesetzt und ein pause damit man es sieht aber wird nicht mal aufgerufen eine idee?


    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #Include <GuiListView.au3>
    #include <ListViewConstants.au3>
    GUICreate('Test', 714, 669)
    $hListView = GUICtrlCreateListView('Gruppe', 10, 10, 220, 580)
    GUICtrlSendMsg($hListView, $LVM_SETCOLUMNWIDTH, 0, 560) ; setzt die erste Spalte des Listviews auf 560 Pixel Breite
    $hButton = GUICtrlCreateButton('AD Auslesen', 10, 630, 80, 20)
    GUISetState()
    $hButton1 = GUICtrlCreateButton('Gruppe Auslesen', 10, 590, 90, 20)
    GUISetState()
    $hListView2 = GUICtrlCreateListView('User', 240, 10, 220, 580)
    GUICtrlSendMsg($hListView, $LVM_SETCOLUMNWIDTH, 0, 560) ; setzt die erste Spalte des Listviews auf 560 Pixel Breite
    $hButton2 = GUICtrlCreateButton('Member of', 240, 593, 80, 20)
    GUISetState()
    $hButton3 = GUICtrlCreateButton('Export2', 320, 593, 80, 20)
    GUISetState()
    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    case $hButton
    RunWait(@ComSpec & " /c " & 'dsquery.bat', "", @SW_HIDE)
    case $hButton2
    $ListViewText = _GUICtrlListView_GetItemTextArray($hlistview)
    consolewrite($ListViewText[1]&@CRLF) ;nützlich zum prüfen auskommentieren wenns klappt und nächste Zeile wieder aktivieren
    Run(@ComSpec & " /c " & 'groups_members.cmd' & ($ListViewText), "", @SW_HIDE)
    Case $hButton1
    NewItems()
    EndSwitch
    WEnd
    Func NewItems()
    ;$string = FileRead(@ScriptDir & '\logs\gruppen.txt')
    $string = FileRead(@ScriptDir & '\logs\gruppen.txt')
    $array = StringRegExp($string, 'CN=(.+?),.*', 3)
    For $i = 0 To UBound($array) - 1
    GUICtrlCreateListViewItem($array[$i], $hListView)
    Next
    EndFunc

    [/autoit]

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Ich frage mich gerade, wo Du die Daten für das ListView her nimmst, das er bearbeiten soll.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • so sieht die batch groups_member.cmd aus


    DSQUERY GROUP "CN=%1,ou=groups,ou=FM,ou=NL,dc=f,dc=m,dc=net"|DSGET GROUP -MEMBERS > \logs\%1.txt

    aber so weit komme ich ja schon garnicht da die batch erst garnicht aufgerufen wird also die %1.txt erstellt sich ja erst garnicht eine idee?

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

    Einmal editiert, zuletzt von subzero007 (18. Mai 2009 um 10:30)

  • so der aufruf funktioniert

    war nur ein pfad angabe falsch!!

    aber der parameter wird nicht übergeben eine idee? also %1 wird nicht übergeben wird ohne parameter aufgerufen ??!!

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Du hast hinter 'groups_members.cmd' ein Leerzeichen vergessen. Siehe korrigierter Code:

    [autoit]

    Run(@ComSpec & " /c " & 'groups_members.cmd ' & ($ListViewText), "", @SW_HIDE)

    [/autoit]
  • neagtiv ;(

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • dsquery.bat > dsquery group ou=groups,ou=xx,ou=xx,dc=xx,dc=xx,dc=net -limit 10000 > \logs\gruppen.txt

    groups_members.cmd > DSQUERY GROUP "CN=%1,ou=groups,ou=xx,ou=xx,dc=xx,dc=xx,dc=xx"|DSGET GROUP -MEMBERS > \logs\%1.txt


    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #Include <GuiListView.au3>
    #include <ListViewConstants.au3>
    GUICreate('*************AD Groups Export*************', 714, 669)
    $hListView = GUICtrlCreateListView('Gruppe', 10, 10, 220, 580)
    GUICtrlSendMsg($hListView, $LVM_SETCOLUMNWIDTH, 0, 560) ; setzt die erste Spalte des Listviews auf 560 Pixel Breite
    $hButton = GUICtrlCreateButton('AD Auslesen', 10, 630, 80, 20)
    GUISetState()
    $hButton1 = GUICtrlCreateButton('Gruppe Auslesen', 10, 590, 90, 20)
    GUISetState()
    $hListView2 = GUICtrlCreateListView('User', 240, 10, 220, 580)
    GUICtrlSendMsg($hListView, $LVM_SETCOLUMNWIDTH, 0, 560) ; setzt die erste Spalte des Listviews auf 560 Pixel Breite
    $hButton2 = GUICtrlCreateButton('Member of', 240, 593, 80, 20)
    GUISetState()
    $hButton3 = GUICtrlCreateButton('Export2', 380, 593, 80, 20)
    GUISetState()
    $hButton4 = GUICtrlCreateButton('Export1', 150, 593, 80, 20)
    GUISetState()

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

    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    case $hButton
    ;RunWait(@ComSpec & " /c " & 'dsquery.bat', "", @SW_HIDE)
    $PID = Run(@ComSpec & " /c " & 'dsquery.bat', "", @SW_HIDE); Ein Programm starten
    ProgressOn("AD Gruppen ","werden ausgelesen...") ; Progressfenster erueugen
    $i = 0 ; Einen Zähler für den Fortschritt
    While ProcessExists('dsquery.exe') ; Schleife ausführen, solange der gesartete Prozess existiert
    $i += 10 ; Zähler um 10 erhöhen
    If $i > 100 Then $i = 0 ; Wenn der ZZähler größer als 100 ist, auf 0 zurücksetzen ( Progressbar geht von 0-100)
    ProgressSet($i) ; Neuen Fortschritt setzen
    Sleep(200) ; 200 Millisekunden Pause machen
    WEnd
    ProgressOff() ; Fortschrittsbalken schließen

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

    case $hButton2
    $ListViewText = _GUICtrlListView_GetItemTextArray($hlistview)
    consolewrite($ListViewText[1]&@CRLF)
    RunWait(@ComSpec & " /c " & 'groups_members.cmd' & ($ListViewText), "", @SW_SHOW)
    ;;;;;;RunWait(@ComSpec & " /c " & 'groups_members.cmd' & _GUICtrlListView_GetItemTextArray($hlistview), "", @SW_SHOW)

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

    Case $hButton1
    NewItems()
    EndSwitch
    WEnd
    Func NewItems()
    ;$string = FileRead(@ScriptDir & '\logs\gruppen.txt')
    $string = FileRead(@ScriptDir & '\logs\gruppen.txt')
    $array = StringRegExp($string, 'CN=(.+?),.*', 3)
    For $i = 0 To UBound($array) - 1
    GUICtrlCreateListViewItem($array[$i], $hListView)
    Next
    EndFunc

    [/autoit]

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Hab das gerade mal so ähnlich hier nachgestellt. Bei mir hat es funktioniert.

    [autoit]

    $ListViewText="gedoens"
    Run(@ComSpec & " /c " & 'test.cmd ' & $ListViewText)

    [/autoit]

    Batch:

    Code
    echo %1 > test.txt

    -> Datei test.txt wird ausgegeben mit Inhalt "gedoens"


    Ich kann mit dem DSQUERY gedönse nicht viel anfangen :D
    Muss das als Batch laufen? Warum verarbeitest du nicht alles in deinem AutoIT-Script?

  • leider ohne erfolg kannst du mal mein quell code anschauen ob da ein fehler ist

    denn aufruf von der cmd kriege ich hin aber %1 wird nicht übergeben??

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • @ subzero007

    Ich meine zu wissen wo das Problem ist.

    Du möchtest an die Batchdatei etwas anfügen und dann alles auf einmal laufen lassen.

    Also so im Batch steht z. B. dir *.* und Du möchtest das /s dran hängen. Wenn das stimmt, dann melde dich mal, denn dann hast Du ein Denkfehler. Aber da gibt es eine Lsg. denn die hatte ich bei meinen Batcgh auch gefunden.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Schon mal so versucht?

    [autoit]

    Run(@ComSpec & " /c " & 'echo DSQUERY GROUP "CN=' & $parameter & ',ou=groups,ou=xx,ou=xx,dc=xx,dc=xx,dc=xx"|DSGET GROUP -MEMBERS > \logs\' & $parameter & '.txt > groups_members.cmd', "", @SW_HIDE)

    [/autoit]
  • ich möchte einen eintrag anklicken und den als variable an meine batch übergeben

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • @DasBoenni

    "Herzlich Willkommen"

    Erst einmal habe ich schon gesehen das Du die Suchfunktion nutzt. Das finde ich super, das Du das gleich machst. LOB.
    "Herzlich Willkommen"

    Also ich würdfe auch versuchen ohne Batch-Dateien auszukommen und wenn es denn unbedingt sein muß, dann diese durch das Script erstellen lassen und nachdem sie nicht mehr genutzt werd wieder löschen. eine Batch-Datei kann man ja z. G. auch mit AutoIt schreiben, wobei ich da nur maximal 5% SINN drinne sehe, da man das sicherlich auch mit AutoIt hin bekommt.

    leider kenne ich mich mit dem DSQUERY nicht so aus, das ich da nur allgemein sagen kann, wo bei der Übernahme der Batch-Datei Fehler sein können, aber ich sehe das Du dich damit gut aus kennst.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • wie übergebe ich $parameter an meine cmd

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Alina: Danke für die Blumen :D

    Hast du schon einmal manuell die Variable übergeben? (Verknüpfung auf die Batch und dann unter Eigenschaften hinter batch.cmd den parameter testeshalber manuell eintragen)

    Ich bin mir ziemlich sicher das dein Fehler an der Batch liegt. Vermutlich (ich kenne DSQUERY nicht) liegt der Fehler irgendwo im "Konstrukt" der Anfürhungszeichen versteckt, ist aber nur eine Vermutung.


    Wie Alina schon vorgeschlagen hat, was spricht dagegen die Batch einfach wegzulassen und DSQUERY direkt vom Script aus anzusprechen?


    EDIT: Versuch das ganze mal mit ShellExecute, ansonsten lass die Batch einfach weg. Erspart dir ne Menge Ärger :rolleyes: