_GUICtrlListView_AddArray Listview geht nicht

  • hiho
    brauch mal eure Hilfe,

    Ich schreibe gerade an einem Script, dass eine AD Abfrage macht, nach inaktiven PC Konten sucht, sie mir nochmal vorsichtshalber anpingt, in eine Liste ausgibt und alle "Fremdzeichen" entfernt die nicht zum Namen gehören. Das ganze dann im GUI abbilden etc.
    Soweit so gut das hab ich geschafft :love:

    Jetzt kommt eine 2te Liste hinzu mit PC Konten die bereits Deaktiviert sind und desshalb nur in der ersten Liste Markiert werden sollen anstatt sie zusätzlichen hinzu zu fügen oder zu löschen.....

    also Liste 1 mit inaktiven PC's:

    PC-1
    PC-2
    PC-3
    PC-4

    Liste 2 mit deaktivierten PC's:

    PC-2
    PC-4
    PC-10
    PC-11

    Liste 3 soll als Ergebnis so aussehen:

    PC-2 -bereits deaktiviert
    PC-4 -bereits deaktiviert
    PC-1
    PC-3

    ich komm leider nicht zum Ziel :thumbdown: , ist mein erstes autoit script also nicht so hart mit mir sein....

    Einmal editiert, zuletzt von Polarfrau (31. Januar 2011 um 17:38)

    • Offizieller Beitrag

    Kannst du mal dein Script posten, so wie es bis jetzt aussieht.
    Am besten postest du auch Beispielsdaten mit, das vereinfacht das Helfen ungemein.

  • Ich lese halt mit dsquery die Daten aus dem AD aus. Beispieldaten sind so wie oben angegeben, halt PC Namen in unterschiedlichsten Namens und Zahlenkombinationen.
    Es entsteht bei der Abfrage je nach Zeitraum ca 50-300 PC's die inaktiv sind, in der 2ten Abfrage func _compare sind es ca 100. damit ich aus der ersten Liste nicht alle PC's deaktivieren muss sondern nur die die es auch in der 2ten Liste gibt brauch ich einen abgleich. Damit aber nicht Aktive aber nur temoräre deaktivierte PC's vermerkt werden dürfen diese nicht zusätzlich von der 2ten Ausgabe in die erste geschrieben werden.

    Hab gerade noch nen Fehler gefunden :( wenn ich es kompiliere erscheint die inputbox auch nach Eingabe immer wieder

    5 Mal editiert, zuletzt von Polarfrau (31. Januar 2011 um 17:40)

  • kann mir wenigstens jemand sagen wieso das passiert, auch:
    wenn ich es kompiliere erscheint die inputbox auch nach Eingabe immer wieder.

    Bei der Array im Array und schleife in der schleife sache scheiterts bei mir irgendwie im Kopf, hab mir gerade nen paar tuts angeguckt aber komme nicht weiter :/

  • hab mal weiter gemacht und neu angefangen......
    _GUICtrlListView_AddArray geht irgendwie nicht :(

    Spoiler anzeigen
    [autoit]

    #include <AD.au3>
    #include <Array.au3>
    #include <Date.au3>

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

    Global $tage="-"&inputbox("Active Directory","Anzahl der Monate:", "", " M2", "190", "130")
    If @error = 1 Then Exit

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

    ; Datum Monate entfernen und Tauschen YYMMDD
    Global $sNewDate = _DateAdd( 'M',$tage, _NowCalcDate())
    Global $sDate = Stringreplace ( $sNewDate, "/", ".")
    Global $changedate = StringSplit ($sDate, ".")
    $sDate = $changedate [1] & "" & $changedate [2] & "" & $changedate [3]

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

    ;Integer8 in Zeit umrechnen
    Global $sAD_DTExpire = $sDate
    $sAD_DTExpire = _Date_Time_SystemTimeToDateTimeStr($sAD_DTExpire, 1)
    Global $iAD_DTExpire = Int(_DateDiff("s", "1601/01/01 00:00:00", $sAD_DTExpire) * 10000000)

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

    _AD_Open()

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

    ;alle inaktiven ausgeben
    Global $tester1 = _AD_GetObjectsInOU("", "(&(objectcategory=computer)(objectclass=computer)(lastlogon<=" & $iAD_DTExpire & ")(!OperatingSystem=*Server*)(!OperatingSystem=OnTap))", 2, "cn")
    ;alle deaktivierten ausgeben
    Global $tester2 = _AD_GetObjectsInOU("", "(&(objectcategory=computer)(objectclass=computer)(!OperatingSystem=*Server*)(!OperatingSystem=OnTap)(userAccountControl:1.2.840.113556.1.4.803:=" & $ADS_UF_ACCOUNTDISABLE & "))", 2, "cn")
    ;alle deaktivierten und inaktiven ausgeben
    Global $tester3 = _AD_GetObjectsInOU("", "(&(objectcategory=computer)(objectclass=computer)(lastlogon<=" & $iAD_DTExpire & ")(!OperatingSystem=*Server*)(!OperatingSystem=OnTap)(userAccountControl:1.2.840.113556.1.4.803:=" & $ADS_UF_ACCOUNTDISABLE & "))", 2, "cn")

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

    _AD_Close()

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

    #include <GuiConstantsEx.au3>
    #include <GuiListView.au3>

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

    Global $GUI = GUICreate('Test', 800, 600, -1, -1)
    GUISetState()
    Global $GUI_Listview = GUICtrlCreateListView('eeeeeeeee', 10, 10, 780, 580)
    _GUICtrlListView_AddArray($GUI_Listview, $tester2)

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

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

    [/autoit]
    • Offizieller Beitrag

    Ist dein Array $tester2 ein 2D Array? Wenn nicht mußt du dein Listview in einer Schleife befüllen.

    Spoiler anzeigen
    [autoit]

    #include <AD.au3>
    #include <Array.au3>
    #include <Date.au3>

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

    Global $tage="-"&inputbox("Active Directory","Anzahl der Monate:", "", " M2", "190", "130")
    If @error = 1 Then Exit

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

    ; Datum Monate entfernen und Tauschen YYMMDD
    Global $sNewDate = _DateAdd( 'M',$tage, _NowCalcDate())
    Global $sDate = Stringreplace ( $sNewDate, "/", ".")
    Global $changedate = StringSplit ($sDate, ".")
    $sDate = $changedate [1] & "" & $changedate [2] & "" & $changedate [3]

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

    ;Integer8 in Zeit umrechnen
    Global $sAD_DTExpire = $sDate
    $sAD_DTExpire = _Date_Time_SystemTimeToDateTimeStr($sAD_DTExpire, 1)
    Global $iAD_DTExpire = Int(_DateDiff("s", "1601/01/01 00:00:00", $sAD_DTExpire) * 10000000)

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

    _AD_Open()

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

    ;alle inaktiven ausgeben
    Global $tester1 = _AD_GetObjectsInOU("", "(&(objectcategory=computer)(objectclass=computer)(lastlogon<=" & $iAD_DTExpire & ")(!OperatingSystem=*Server*)(!OperatingSystem=OnTap))", 2, "cn")
    ;alle deaktivierten ausgeben
    Global $tester2 = _AD_GetObjectsInOU("", "(&(objectcategory=computer)(objectclass=computer)(!OperatingSystem=*Server*)(!OperatingSystem=OnTap)(userAccountControl:1.2.840.113556.1.4.803:=" & $ADS_UF_ACCOUNTDISABLE & "))", 2, "cn")
    ;alle deaktivierten und inaktiven ausgeben
    Global $tester3 = _AD_GetObjectsInOU("", "(&(objectcategory=computer)(objectclass=computer)(lastlogon<=" & $iAD_DTExpire & ")(!OperatingSystem=*Server*)(!OperatingSystem=OnTap)(userAccountControl:1.2.840.113556.1.4.803:=" & $ADS_UF_ACCOUNTDISABLE & "))", 2, "cn")

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

    _AD_Close()

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

    #include <GuiConstantsEx.au3>
    #include <GuiListView.au3>

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

    Global $GUI = GUICreate('Test', 800, 600, -1, -1)
    GUISetState()
    Global $GUI_Listview = GUICtrlCreateListView('eeeeeeeee', 10, 10, 780, 580)
    For $i = 0 to Ubound($tester2) -1
    GUICtrlCreateListViewItem ( $tester2[$i],$GUI_Listview )
    Next
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

    [/autoit]

    Ungetestet, sollte aber trotzdem funktionieren.