"Subscript used on non-accessible variable" beim AD UDF, zB: "_AD_GetObjectProperties"

  • Folgendes

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #include <AD.au3>
    #include <DATE.au3>
    #include <Array.au3>
    _AD_Open()

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

    ;$aProperties = _AD_GetObjectProperties("telgte\"&@UserName, "displayname,distinguishedName,pwdlastset")
    $aProperties = _AD_GetObjectProperties()
    ConsoleWrite(@error & @CRLF)

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

    _ArrayDisplay ($aProperties)

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

    ;$ddd = $aProperties[3][1]
    ;_DateTimeFormat($ddd,2)
    ;$zuletzt = _DateTimeFormat($ddd,2)&" "&" "&_DateTimeFormat($ddd,4)
    ;$aProperties = _AD_GetObjectProperties(@ComputerName & "$")
    ;$PCName = $aProperties[4][1]
    ;$PCBeschreibung = $aProperties[7][1]
    ;msgbox(4144,"",$PCName&" "&$PCBeschreibung)
    _AD_Close()

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

    gibt mir nur das hier aus (nichts im _ArrayDisplay):

    Spoiler anzeigen
    Code
    >"C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "E:\TEST\AD_test3.au3" /UserParams    
    +>08:50:41 Starting AutoIt3Wrapper v.2.1.2.9    Environment(Language:0407  Keyboard:00000407  OS:WIN_7/Service Pack 1  CPU:X64 OS:X64)
    -> Skipping AU3check: Current version doesn't support the AutoIt3 v 3.3.9.5+ syntax.
    >Running:(3.3.10.2):C:\Program Files (x86)\AutoIt3\autoit3_x64.exe "E:\TEST\AD_test3.au3"    
    --> Press Ctrl+Alt+F5 to Restart or Ctrl+Break to Stop
    1
    +>08:50:41 AutoIt3.exe ended.rc:0
    >Exit code: 0    Time: 0.673
  • Wirf mal nach _AD_Open ein "ConsoleWrite(@error & @CRLF)" rein.
    Irgendwas besonderes an Eurem AD? Wie groß, sprich wie viele Domänen Controller?

  • - 3 DCs (2x 2003, 1x2012)
    - Primärer ist einer der 2003er
    - ca. 100 User


    Code:

    Spoiler anzeigen
    [autoit]

    #include <AD.au3>
    #include <DATE.au3>
    #include <Array.au3>
    _AD_Open()

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

    ConsoleWrite(@error & @CRLF)

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

    ;$aProperties = _AD_GetObjectProperties("telgte\"&@UserName, "displayname,distinguishedName,pwdlastset")
    $aProperties = _AD_GetObjectProperties()
    ConsoleWrite(@error & @CRLF)

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

    _ArrayDisplay ($aProperties)

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

    ;$ddd = $aProperties[3][1]
    ;_DateTimeFormat($ddd,2)
    ;$zuletzt = _DateTimeFormat($ddd,2)&" "&" "&_DateTimeFormat($ddd,4)
    ;$aProperties = _AD_GetObjectProperties(@ComputerName & "$")
    ;$PCName = $aProperties[4][1]
    ;$PCBeschreibung = $aProperties[7][1]
    ;msgbox(4144,"",$PCName&" "&$PCBeschreibung)
    _AD_Close()

    [/autoit]

    Ausgabe:

    Spoiler anzeigen
    Code
    >"C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "E:\TEST\AD_test3.au3" /UserParams    
    +>09:19:06 Starting AutoIt3Wrapper v.2.1.2.9    Environment(Language:0407  Keyboard:00000407  OS:WIN_7/Service Pack 1  CPU:X64 OS:X64)
    -> Skipping AU3check: Current version doesn't support the AutoIt3 v 3.3.9.5+ syntax.
    >Running:(3.3.10.2):C:\Program Files (x86)\AutoIt3\autoit3_x64.exe "E:\TEST\AD_test3.au3"    
    --> Press Ctrl+Alt+F5 to Restart or Ctrl+Break to Stop
    0
    1
    +>09:19:08 AutoIt3.exe ended.rc:0
    >Exit code: 0    Time: 1.420

    -------------------------------------------------------------------------------------------------------------

    -> s. 2. Seite

    Einmal editiert, zuletzt von freddyd (19. Januar 2015 um 14:08)

  • Sehr seltsam!
    Welche Version der UDF verwendest Du?

  • welche autoit version benutzt du?

    auch die 3.3.12.0?
    sehe nur grad in der in deiner Ausgabe (Post 17) "Starting AutoIt3Wrapper v.2.1.2.9"

    bei mir steht da folgendes "Starting AutoIt3Wrapper v.2.1.4.4" ....
    da scheint mir die version etwas zu alt zu sein :)

    gruß gmmg

  • Nach Update auf 3.3.12 leider keine Besserung.

    Code:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #include <AD.au3>
    #include <DATE.au3>
    #include <Array.au3>
    _AD_Open()

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

    ConsoleWrite(@error & @CRLF)

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

    ;$aProperties = _AD_GetObjectProperties(@UserName, "displayname,distinguishedName,pwdlastset")
    $aProperties = _AD_GetObjectProperties()
    ConsoleWrite(@error & @CRLF)

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

    _ArrayDisplay ($aProperties)

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

    ;$ddd = $aProperties[3][1]
    ;_DateTimeFormat($ddd,2)
    ;$zuletzt = _DateTimeFormat($ddd,2)&" "&" "&_DateTimeFormat($ddd,4)
    ;$aProperties = _AD_GetObjectProperties(@ComputerName & "$")
    ;$PCName = $aProperties[4][1]
    ;$PCBeschreibung = $aProperties[7][1]
    ;msgbox(4144,"",$PCName&" "&$PCBeschreibung)
    _AD_Close()

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

    Output

    Spoiler anzeigen
    Code
    >"C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "E:\TEST\AD_test3.au3" /UserParams    
    +>14:03:42 Starting AutoIt3Wrapper v.2.1.2.9    Environment(Language:0407  Keyboard:00000407  OS:WIN_7/Service Pack 1  CPU:X64 OS:X64)
    -> Skipping AU3check: Current version doesn't support the AutoIt3 v 3.3.9.5+ syntax.
    >Running:(3.3.12.0):C:\Program Files (x86)\AutoIt3\autoit3.exe "E:\TEST\AD_test3.au3"    
    --> Press Ctrl+Alt+F5 to Restart or Ctrl+Break to Stop
    0
    1
    +>14:03:43 AutoIt3.exe ended.rc:0
    >Exit code: 0    Time: 3.392

    Einmal editiert, zuletzt von freddyd (19. Januar 2015 um 15:14)

  • Hab jetz nochmal SciTE aktualliert auf 3.4.4

    Ergebniss (Code ist der gleiche):

    Spoiler anzeigen

    Einmal editiert, zuletzt von freddyd (19. Januar 2015 um 15:28)

  • die meldungen in den ausgaben sind schon unterschiedlich!

    in der obersten steht noch > Skipping AU3check: Current version doesn't support the AutoIt3 v 3.3.9.5+ syntax.
    den fehler sieht man in der underen nicht mehr.

    probiere mal das folgendes Testscript! hier werden die user aus einer gruppe ausgelesen und entsprechende properties.

    Spoiler anzeigen
    [autoit]


    #include <D:\Data\scripte\AD_1.4.1.1_Functions\AD.au3>

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

    Global $aGroups[1], $aMembers[1], $aProperties[1][2]

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

    ; Open Connection to the Active Directory
    _AD_Open()
    If @error Then Exit MsgBox(16, "Active Directory Example Skript", "Function _AD_Open encountered a problem. @error = " & @error & ", @extended = " & @extended)

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

    ; Get a sorted list of members for the first group the currently logged on user is a member of
    $aMembers = _AD_GetGroupMembers("AD_Gruppennamen_eingeben") ; hier den AD gruppennamen eintragen AD-Gruppenname
    If @error > 0 Then
    MsgBox(64, "Active Directory Functions - Example 1", "The group has no members")
    Else
    _ArraySort($aMembers, 0, 1)
    _ArrayDisplay($aMembers, "Active Directory Functions - Example 1 - List of members for group")
    EndIf

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

    For $i = 1 to $aMembers[0]

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

    $sFQDN = _AD_SamAccountNameToFQDN()

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

    $aMembers01 = _AD_FQDNToDisplayname($aMembers[$i])
    $sSamAccountName = _AD_FQDNToSamAccountName($aMembers[$i])
    ;MsgBox(0,"",$sSamAccountName)
    ;$login = $sSamAccountName
    $aProperties = _AD_GetObjectProperties($sSamAccountName)
    ;_ArrayDisplay($aProperties, "Active Directory Functions - Example 1 - Properties for user '" & @UserName & "'")
    ;MsgBox(0,"", $aProperties[41][1])

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

    For $x = 1 to $aProperties[0][0]
    If $aProperties[$x][0] = "mail" then $mail = $aProperties[$x][1];MsgBox(0,"",$aProperties[$x][1])
    If $aProperties[$x][0] = "objectSid" then $sid = $aProperties[$x][1]
    Next

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

    ;MsgBox(0,"", $aMembers01)
    ConsoleWrite($aMembers01 & ";"& $sSamAccountName & ";" & $mail & ";" & $sid & @CRLF)

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

    Next

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

    ; Close Connection to the Active Directory
    _AD_Close()

    [/autoit]

    gruß gmmg

  • Füge mal bitte vor _AD_Open die Zeile

    [autoit]

    _AD_ErrorNotify(2)

    [/autoit]

    ein.
    Damit sollten wir exaktere Fehlermeldungen erhalten. Das Verhalten des AD scheint mir irgendwie seltsam zu sein.

  • @gmmg

    Auch wenn ich einen existierenden Gruppennamen eintrage:

    Meldung:

    Code
    ---------------------------
    Active Directory Functions - Example 1
    ---------------------------
    The group has no members
    ---------------------------
    OK   
    ---------------------------

    Output:

    Spoiler anzeigen

    @water

    code:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

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

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

    _AD_ErrorNotify(2)

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

    _AD_Open()

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

    ConsoleWrite(@error & @CRLF)

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

    $aProperties = _AD_GetObjectProperties(@UserName, "displayname,distinguishedName,pwdlastset")
    $aProperties = _AD_GetObjectProperties()
    ConsoleWrite(@error & @CRLF)

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

    _ArrayDisplay ($aProperties)

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

    ;$ddd = $aProperties[3][1]
    ;_DateTimeFormat($ddd,2)
    ;$zuletzt = _DateTimeFormat($ddd,2)&" "&" "&_DateTimeFormat($ddd,4)
    ;$aProperties = _AD_GetObjectProperties(@ComputerName & "$")
    ;$PCName = $aProperties[4][1]
    ;$PCBeschreibung = $aProperties[7][1]
    ;msgbox(4144,"",$PCName&" "&$PCBeschreibung)
    _AD_Close()

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


    Output:

    Spoiler anzeigen

    2 Mal editiert, zuletzt von freddyd (20. Januar 2015 um 08:08)

  • Sehr, sehr seltsam!!

    Sind bei Euch irgendwelche Sicherheitsmaßnahmen aktiviert, die den Zugriff auf AD ganz oder teilweise verhindern?
    Welches Betriebssystem verwendest Du?
    Von welchem Laufwerk aus startest Du Dein Skript (lokal, Netzwerk)?

  • Es sind keine Maßnamen bekannt die den Zugriff auf das AD verhindern.
    Ich kann auch mit zB. "LEX - the LDAP Explorer" wunderbar alle Werte auslesen.
    Ich hab Win7 64 bit SP1 wie fast alle anderen(32 oder 64 Bit) in der Domain auch.
    Das Script liegt lokal auf E:\ .

    Wieso wird bei

    [autoit]

    _AD_ErrorNotify(2)

    [/autoit]

    garnichts ausgegeben bzw was hättest du erwartet?

  • noch eine idee!

    starte mal das _AD_Open mit der übergabe von user und passwort.

    [autoit]


    ; Open Connection to the Active Directory
    _AD_Open($ADMINUSER, $ADMINPASS)

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

    If @error Then Exit MsgBox(16, "Active Directory Example Skript", "Function _AD_Open encountered a problem. @error = " & @error & ", @extended = " & @extended)

    [/autoit]

    und ein zweites script - getUserGroups zum testen

    Spoiler anzeigen
    [autoit]


    #include <D:\Data\scripte\AD_1.4.1.0_Functions\AD.au3>

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

    ;MsgBox(0,"",@LogonServer & @LogonDNSDomain & @LogonDomain)

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

    ; Open Connection to the Active Directory
    _AD_Open()
    If @error Then Exit MsgBox(16, "Active Directory Example Skript", "Function _AD_Open encountered a problem. @error = " & @error & ", @extended = " & @extended)

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

    ; Get a sorted array of group names (FQDN) that the user is immediately a member of
    Global $aUser = _AD_GetUserGroups(@username)
    If @error > 0 Then
    MsgBox(64, "Active Directory Functions - Example 1", "User '" & @UserName & "' has not been assigned to any group")
    Else
    _ArraySort($aUser, 0, 1)
    _ArrayDisplay($aUser, "Active Directory Functions - Example 1 - Group names user '" & @UserName & "' is immediately a member of")

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

    for $i = 1 to $aUser[0]

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

    ;MsgBox(0,"", $aMembers01)
    ConsoleWrite(_AD_FQDNToSamAccountName($aUser[$i]) & @CRLF)
    Next
    EndIf

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

    ; Close Connection to the Active Directory
    _AD_Close()

    [/autoit]

    gruß gmmg

  • _AD_ErrorNotify gibt nur im Fehlerfall eine MsgBox aus.
    Ich hatte mal Probleme in W7 durch sogenannte Trusted Locations.
    Kopier die EXE mal auf ein anderes Laufwerk (z.B.: C:\Temp oder dorhin wo andere erfolgreich ausführbare Programme liegen)

  • @gmmg:

    mit user und password:

    Spoiler anzeigen

    Meldung bei deinem Script

    Spoiler anzeigen
    Code
    ---------------------------
    Active Directory Functions - Example 1
    ---------------------------
    User '***' has not been assigned to any group
    ---------------------------
    OK   
    ---------------------------

    @water:

    Ich hab die exe und die au3 mal nach "C:\Temp" kopiert

    Output:

    Spoiler anzeigen

    Einmal editiert, zuletzt von freddyd (26. Januar 2015 um 10:00)

  • Da fehlt mir jetzt aber langsam der Plan.
    Kannst Du Dich bitte mal - wie hier beschrieben - am Global Catalog anmelden?

  • Mit Angabe von "Domain\User, Password, DC.domain.de:3268" bekomme ich folgende Ausgabe:

    Spoiler anzeigen
  • Probier mal

    [autoit]

    $iResult = _AD_Open("", "", "", "DC.domain.de:3268")

    [/autoit]

    "DC.domain.de:3268" muss der 4-te nicht der 3-te Parameter sein.

  • Hier das Script:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Outfile=C:\temp\test.Exe
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <AD.au3>
    #include <DATE.au3>
    #include <Array.au3>

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

    _AD_ErrorNotify(2)

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

    _AD_Open("Domain\User","*PW*","","dc.domain.de:3268")

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

    ConsoleWrite(@error & @CRLF)

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

    $aProperties = _AD_GetObjectProperties(@UserName, "displayname,distinguishedName,pwdlastset")
    $aProperties = _AD_GetObjectProperties()

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

    ConsoleWrite(@error & @CRLF)

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

    _ArrayDisplay ($aProperties)

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

    ;$ddd = $aProperties[3][1]
    ;_DateTimeFormat($ddd,2)
    ;$zuletzt = _DateTimeFormat($ddd,2)&" "&" "&_DateTimeFormat($ddd,4)
    ;$aProperties = _AD_GetObjectProperties(@ComputerName & "$")
    ;$PCName = $aProperties[4][1]
    ;$PCBeschreibung = $aProperties[7][1]
    _AD_Close()

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

    Output:

    Spoiler anzeigen