Benutzer mit den meisten Antworten
Get-Aduser und LDAP-Funktion

Frage
-
Hallo zusammen,
ich komme gerade bei folgendem Skript nicht weiter:
Import-Module activedirectory $user = @() $list = @() $item = @() function get_ldap_telephone ($user) { $auth = [System.DirectoryServices.AuthenticationTypes]::Anonymous $Root = new-object system.directoryservices.directoryEntry ("LDAP://XXX:389","","",$auth); $Filter = "(&(objectclass=dominoPerson)(uid=$user))" $Attribute = "telephonenumber" # Compile search $Searcher = New-Object Directoryservices.DirectorySearcher($Root) #$searcher.PageSize = 900 $searcher.Filter = $Filter $searcher.Searchscope = [System.DirectoryServices.SearchScope]::Subtree $Attribute | foreach {[void]$searcher.PropertiesToLoad.Add($_)} # Execute search $result = $searcher.findAll() #"Number of results: " + $result.Count #$result $tel = $result | %{$_.properties.item("telephonenumber")} return $tel } #$list = "sre", "hha" $list = Get-ADUser -filter * -properties cn -SearchScope Subtree -SearchBase "OU=Betrieb,OU=IT,OU=XXX,OU=Org,DC=ads,DC=XXX,DC=de" | select-object cn foreach ($item in $list) { #$telefonnummer = get_ldap_telephone $item get_ldap_telephone $item $item #set-aduser $item -OfficePhone $telefonnummer }
Und zwar scheint es ein Problem mit dem Funktionsaufruf in der foreach Schleife und dem array $list zu geben, welches mit Get-Aduser gefüllt wird. Teste ich hingegen mit $list = "sre", "hha" funktioniert der Funktionsaufruf und ich erhalte die per LDAP abgefragte Telefonnummer. Ich habe mir testweise eine andere Funktion gebaut, die lediglich per echo das $item ausgiebt. Das hat auch soweit funktioniert. Für sich genommen sind also sowohl die LDAP-Funktion als auch das Array in Ordnung. Warum funktionieren diese beiden aber nicht miteinander? Vielen Dank!
Antworten
-
Ah! Ok! Danke für die Erklärung! Da ich kein Domino habe und nichts testen kann, muss ich versuchen dir im Blindflug zu helfen.
Den einzigen unterschied den ich sehe ist in der Art wie die $list erstellt wird/wurde.
Select-Object erstellt IMMER ein Objekt mit dem Typ PSObjekt. Dieses Objekt bekommt in deinem Fall ein Proprty mit dem Namen CN "angeklebt" (Select-Object CN) . In dem Property CN des Objekts wird der Wert des CN abgelegt.
Hier enthält $list ein Array von PSobject Objekten!
Wenn du deine $list "per Hand zu Fuß" erstellst ($list = 'sre','hha') dann hast du ein Array von Strings!
Ändere deine ForEach Schleife so ab, das sie nur den Inhalte (String) des CN Property an die Funktion übergibt und nicht wie bisher das ganze Objekt:
foreach ($item in $list) { #$telefonnummer = get_ldap_telephone $item get_ldap_telephone $item.CN $item.CN #set-aduser $item -OfficePhone $telefonnummer }
Siehe:
PowerShell eigene Objekte erstellen Custom Objects
http://www.admin-source.de/BlogDeu/463/powershell-eigene-objekte-erstellen-custom-objects
Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
German ? Come to German PowerShell Forum!
- Bearbeitet Peter Kriegel Freitag, 7. Dezember 2012 06:33
- Als Antwort markiert Stephan1983 Freitag, 7. Dezember 2012 07:22
Alle Antworten
-
Wenn Du nur die Telefonnummer willst, warum dann nicht so?
Get-ADUser -Filter * -Properties telephonenumber
Du benutzt doch schon Get-ADUSer?
-Raimund
Hi,
die LDAP Abfrage geht auf unser Domino Directory. Die Telefonnummer ist im AD nicht gepflegt. Mit dem Skript soll die im Domino Directory gepflegte Telefonnummer ins AD übertragen werden.
Viele Grüß
Stephan -
In deiner Liste $list befinden sich nur die CN Namen der User, da du mit Select-Object nur die CN Namen herausfilters!
In der Funktion suchst du den user mit seiner UID "(&(objectclass=dominoPerson)(uid=$user))" eine UID ist kein CN Name!
Deshalb kann deine Funktion nichts finden!Überhaupt scheint die ganze Funktion überflüssig zu sein!
Die Telefonnummer der User erhältst du so (ungetestet):Get-ADUser -filter * -properties cn,telephoneNumber -SearchScope Subtree -SearchBase "OU=Betrieb,OU=IT,OU=XXX,OU=Org,DC=ads,DC=XXX,DC=de" | select-object cn,telephoneNumber
Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
German ? Come to German PowerShell Forum! -
In deiner Liste $list befinden sich nur die CN Namen der User, da du mit Select-Object nur die CN Namen herausfilters!
In der Funktion suchst du den user mit seiner UID "(&(objectclass=dominoPerson)(uid=$user))" eine UID ist kein CN Name!
Deshalb kann deine Funktion nichts finden!Überhaupt scheint die ganze Funktion überflüssig zu sein!
Die Telefonnummer der User erhältst du so (ungetestet):Get-ADUser -filter * -properties cn,telephoneNumber -SearchScope Subtree -SearchBase "OU=Betrieb,OU=IT,OU=XXX,OU=Org,DC=ads,DC=XXX,DC=de" | select-object cn,telephoneNumber
Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
German ? Come to German PowerShell Forum!Hallo Peter,
am besten beschreibe ich nochmal, was ich mit dem Skript erreichen möchte. Wir nutzen zwei Directories. Zum einen das gut gepflegte Domino Directory und zum anderen die ADs. In einem ersten Schritt möchte ich das Attribut TelephoneNumber eines Users im Domino Directory seinem entsprechenden Objekt im AD zuordnen. Ganz konkret ist die Telefonnummer nur in den Usern im DD gepflegt und im AD ebenn nicht.
Daher möchte ich per LDAP die Telefonnummer auslesen (siehe Funktion) und dann dem entsprechenden User im AD zuordnen. Die Zuordnung möchte ich über die UID (DD) und den cn (AD) erreichen, da diese identisch sind. Das heisst die uid und der cn haben z.. B. den Wert sre.
Ich hoffe ein wenig Klarheit geschaffen zu haben. Danke!
.
-
Ah! Ok! Danke für die Erklärung! Da ich kein Domino habe und nichts testen kann, muss ich versuchen dir im Blindflug zu helfen.
Den einzigen unterschied den ich sehe ist in der Art wie die $list erstellt wird/wurde.
Select-Object erstellt IMMER ein Objekt mit dem Typ PSObjekt. Dieses Objekt bekommt in deinem Fall ein Proprty mit dem Namen CN "angeklebt" (Select-Object CN) . In dem Property CN des Objekts wird der Wert des CN abgelegt.
Hier enthält $list ein Array von PSobject Objekten!
Wenn du deine $list "per Hand zu Fuß" erstellst ($list = 'sre','hha') dann hast du ein Array von Strings!
Ändere deine ForEach Schleife so ab, das sie nur den Inhalte (String) des CN Property an die Funktion übergibt und nicht wie bisher das ganze Objekt:
foreach ($item in $list) { #$telefonnummer = get_ldap_telephone $item get_ldap_telephone $item.CN $item.CN #set-aduser $item -OfficePhone $telefonnummer }
Siehe:
PowerShell eigene Objekte erstellen Custom Objects
http://www.admin-source.de/BlogDeu/463/powershell-eigene-objekte-erstellen-custom-objects
Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
German ? Come to German PowerShell Forum!
- Bearbeitet Peter Kriegel Freitag, 7. Dezember 2012 06:33
- Als Antwort markiert Stephan1983 Freitag, 7. Dezember 2012 07:22