Active Directory Funktionen - Neue Version 1.5.0.0 freigegeben!

  • Version 1.4.1.0 (Bug fixes) ist freigegeben.

    ACHTUNG: Funktioniert nur mit AutoIt 3.3.10.2 oder später!

    Bitte ausgiebig testen vor Übernahme in die Produktion!

    Für download siehe bitte den Link in meiner Signatur.

  • Hi,
    ich habe folgendes Scenario und hoffe das ihr mir dabei helfen könnt.

    Wir haben eine Produktionsnetz und ein Entwicklernetz.
    Momentan haben beide Netze den gleichen Computernamen aufbau. Pxxxxx
    Nun möchten wir ganz gerne die P-Namen im E-Netz auf Exxxxx umbenennen.
    Ich denke am Client selber sollte dies relativ schnell machbar sein. Doch in der AD stehe ich noch auf dem Schlauch.

    Ich habe daher gegoogled und bin in diesem Thread gelandet.

    Weiterführend habe ich dann _AD_RenameObject gesehen und dachte das dies ja helfen würde. Doch soweit ich das jetzt verstanden habe, kann ich da nur User Objecte umbennenen. Ist dies korrekt?

    Gibt es evtl. mit den vorhandenen Scriptbausteinen eine möglichkeit den Computernamen abzuändern?

    Vielen Dank für eure Mühen

    crdy

  • Mit _AD_RenameObject kannst Du - gemäß Doku - generell Objekte umbenennen:

    [autoit]

    $sObject - Object (user, group, computer) to rename (FQDN or sAMAccountName)

    [/autoit]
  • oh... ich hab da was überlesen gehabt...

    in _AD_SamAccountNameToFQDN steht ja das für Computername das $ zeichen mitgegeben werden muss...

    e.g. Global $IObject = GuiCtrlCreateInput(_AD_SamAccountNametoFQDN(@UserName)
    wird zu
    Global $IObject = GuiCtrlCreateInput(_AD_SamAccountNametoFQDN(@ComputerName & "$")

    Dann klappts auch mit dem Nachbarn.

    danke für die Hilfe.

    Gruß

  • Version 1.4.1.1 (Bugfixes) der AD UDF ist freigegeben.

    Bitte ausgiebig testen vor Übernahme in die Produktion!

    Für download siehe bitte den Link in meiner Signatur.

  • Sowas?

    [autoit]

    #include <AD.au3>

    [/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]

    Global $sGivenName = "Jon"
    Global $sSN = "Doe"
    Global $aObjects[1][1]
    Global $sOU = "" ; Search all OUs

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

    $aObjects = _AD_GetObjectsInOU($sOU, "(&(SN=" & $sSN & ")(Givenname=" & $sGivenName & "))", 2, "sAMAccountName")
    If @error > 0 Then
    MsgBox(64, "Active Directory Functions - Example 1", "No OUs could be found")
    Else
    _ArrayDisplay($aObjects, "Active Directory Functions")
    EndIf

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

    ; Close Connection to the Active Directory
    _AD_Close()

    [/autoit]

  • Super! Genial,..
    Eventuell brauche ich nochmal hilfe,..aber vielen Dank!

  • Was ich noch sagen wollte: Diese Abfrage ist natürlich nicht eindeutig, d.h. es können mehrere Ergebnisse zurcükgegeben werden. Du must also sicherstellen, dass Du den richtigen Usernamen verwendest.

  • Zitat

    "Was ich noch sagen wollte: Diese Abfrage ist natürlich nicht eindeutig, d.h. es können mehrere Ergebnisse zurcükgegeben werden. Du must also sicherstellen, dass Du den richtigen Usernamen verwendest."

    das habe ich gesehen, ich würde gerne von dem ersten ergebnis den namen in die zwischenablage kopieren... (das _ArrayDisplay benötige ich nicht)
    d.h. ohne [1] HansDampf ,.. nur HansDampf :)

    habe es so gelöst:

    3 Mal editiert, zuletzt von Herbert (12. August 2014 um 11:44)

  • Du solltest Dir dringend die Funktionsweise von Arrays in AutoIt nochmals ansehen! [1] ist kein Teil des zurückgegebenen Arrays, sondern der Zähler für die Anzahl der Zeilen im Array.
    Ich würde das so machen:

    [autoit]

    If @error > 0 Then
    MsgBox(64, "Active Directory Functions - Example 1", "No OUs could be found")
    Else
    ClipPut($aObjects[1])
    EndIf

    [/autoit]
  • Diese Informationen stehen nicht im AD. Einzige Möglichkeit ist, diese Infos durch das Logon-Skript zu erfassen und zentral zu speichern.

  • die telefonnummer ist ja ein attribute was zum user gehört!
    hast du nur die telefonnummer oder auch den namen, eventuell aus einer anderen liste?

    mit dem ADSI Editor die Attribute auslesen ...

    Beispiel "telephoneNumber"

    [autoit]


    $aProperties = _AD_GetObjectProperties($sSamAccountName)
    ; _ArrayDisplay($aProperties, "Active Directory Functions - Example 1 - Properties for user '" & @UserName & "'")

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

    For $x = 1 to $aProperties[0][0]
    If $aProperties[$x][0] = ""telephoneNumber"l" then $telefonl = $aProperties[$x][1]
    If $aProperties[$x][0] = "cn" then $name_cn = $aProperties[$x][1]
    Next

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

    gruß gmmg

  • da müsstest du ja jeden User im AD durchgehen und die _AD_GetObjectProperties($sSamAccountName) zur Telefonnummer abfragen oder falls die User alle in einer Gruppe sind, diese auslesen und den abgleich machen ..

    beispiel zu _AD_GetObjectsInOU , kann aber sein, dass es an die neue AD Funktion angepast werden muss ...

    [autoit]


    $aObjects = _AD_GetObjectsInOU("OU=User,OU="&$aOUs[$x]&",DC=konzern,DC=de", "(&(objectcategory=person)(objectclass=user)(mail=*)(|(userAccountControl=512)(msExchHideFromAddressLists="")(msExchHideFromAddressLists=FALSE)(userAccountControl=66048)))", 2, "name,department,company,createTimeStamp")

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

    $aObjects = _AD_GetObjectsInOU("OU=User,OU="&$aOUs[$x]&",DC=Konzern,DC=de", "(&(objectcategory=person)(objectclass=user)(mail=*)(|(userAccountControl=512)(msExchHideFromAddressLists="")(msExchHideFromAddressLists=FALSE)(userAccountControl=66048)))", 2, "name,description,company");"name,department,company")

    [/autoit]

    AD User aus einer bestimmten Gruppe auslesen ...

    Spoiler anzeigen
    [autoit]


    ; *****************************************************************************
    #include <AD.au3>

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

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

    [/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 an array of group names (FQDN) that the user is immediately a member of with element 0 containing the number of groups.
    $aGroups = _AD_GetUserGroups()
    If @error > 0 Then
    MsgBox(64, "Active Directory Functions - Example 1", "The current user is not a member of any group")
    Else
    ; Get a sorted list of members for the first group the currently logged on user is a member of
    $aMembers = _AD_GetGroupMembers("AD_Gruppe")
    If @error > 0 Then
    MsgBox(64, "Active Directory Functions - Example 1", "The group '" & $aGroups[1] & "' has no members")
    Else
    _ArraySort($aMembers, 0, 1)
    _ArrayDisplay($aMembers, "Active Directory Functions - Example 1 - List of members for group '" & $aGroups[1] & "'")

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

    for $i = 1 to $aMembers[0]

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

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

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

    EndIf
    EndIf

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

    ; Close Connection to the Active Directory
    _AD_Close()

    [/autoit]

    gruß gmmg

    3 Mal editiert, zuletzt von gmmg (14. August 2014 um 14:00)

  • [autoit]

    $aObjects = _AD_GetObjectsInOU($sOU, "(&(objectcategory=person)(objectclass=user)(xx=" & $sTelephone & "))", 2, "sAMAccountName")

    [/autoit]

    xx musst Du durch das Attribut ersetzen in dem die Telefonnummer gespeicherrt wird.

  • so?

    Bekommen kein Ergebnis :(