none
Active Directory: Name des Managers auslesen RRS feed

  • Frage

  • Hallo zusammen,

    ich habe ein PowerShell Skript geschrieben, welches Informationen aus dem AD ausliest und diese in eine SharePoint Liste einfügt. Funktioniert eigentlich auch alles super. Allerdings liest das Skript bei dem Feld Manager (Vorgesetzte) den kompletten Inhalt aus, sprich CN, OU, DC, DC.

    Ich will hier aber nur CN, also den Namen des Vorgesetzten auslesen. Hier ein Auszug des momentanen Befehls:

    Get-ADUser -properties * | ForEach-Object { 

    $item = $spList.AddItem()

    $item["Nachname"] = $_.sn

    $item["Vorname"] = $_.givenname

    $item["Vorgesetzter"] = $_.manager

    $item.Update()

    Write-Host "Item $($_.sAMAccountName) Added to List"}


    Wie muss ich den Code ändern, um das zu bekommen was ich will? Ich vermute, man muss in den Befehl $_.manager irgendwo den CN unterbringen?!

    Bin für jede Hilfe dankbar!

    Montag, 28. Oktober 2013 09:47

Antworten

  • Der Manager wird von AD als Text zurückgeliefert.

    Du kannst diesen Text mit Get-ADUser in ein user Objekt umwandeln oder du musst textverarbeitung machen.

    Get-ADUser -properties * | ForEach-Object { 
    
    $item = $spList.AddItem()
    
    $item["Nachname"] = $_.sn
    
    $item["Vorname"] = $_.givenname
    
    # wenn das Feld Manager nicht leer ist
    If(-not [String]::IsNullOrEmpty($_.manager)) {
    	# Text mit dem Komma in eine Liste (Array) zerschneiden und
    	# den ersten Wert in der Liste mit dem Index 0 auslesen
    	$item["Vorgesetzter"] = ($_.manager -split ',')[0]
    } Else {
    	# leeren Manger eintragen
    	$item["Vorgesetzter"] = ''
    }
    
    $item.Update()
    
    Write-Host "Item $($_.sAMAccountName) Added to List"}


    Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    Mein deutscher PowerShell Blog
    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)

    • Als Antwort markiert Kathriin Dienstag, 29. Oktober 2013 07:46
    Montag, 28. Oktober 2013 11:14
  • Hallo,

    bei der Methode Substring muss man dann aber wissen, wie lange der Name nach dem CN= ist, denn der ist ja pro Treffer unterschiedlich, und Substring nutzt man ja in der Form, das aber einer bestimmten Stelle eine bestimmte Laenge ausgeschnitten wird.

    Natuerlich kann man dem Substring die jeweilige Laenge uebermitteln, ich wuerde es aber in dem Fall mit der Replace Methode machen, ist einfacher zu verstehen.

    Hier ein Beispiel mit beiden Methoden.

    PS E:\scripte> $a = "cn=Vorname Nachname"
    PS E:\scripte> $a
    cn=Vorname Nachname
    PS E:\scripte> $a.substring(3,$a.Length-3)
    Vorname Nachname
    PS E:\scripte> $a.replace('cn=','')
    Vorname Nachname
    PS E:\scripte>

    Die entsprechende Zeile in Peters Vorschalg muesste dann so aussehen um auch CN= abzuschneiden.

    $item["Vorgesetzter"] = ($_.manager -split ',')[0] -replace 'CN=',''

    Beste Gruesse
    brima

    • Bearbeitet brima Montag, 28. Oktober 2013 14:36
    • Als Antwort markiert Kathriin Dienstag, 29. Oktober 2013 09:23
    Montag, 28. Oktober 2013 14:29

Alle Antworten

  • Der Manager wird von AD als Text zurückgeliefert.

    Du kannst diesen Text mit Get-ADUser in ein user Objekt umwandeln oder du musst textverarbeitung machen.

    Get-ADUser -properties * | ForEach-Object { 
    
    $item = $spList.AddItem()
    
    $item["Nachname"] = $_.sn
    
    $item["Vorname"] = $_.givenname
    
    # wenn das Feld Manager nicht leer ist
    If(-not [String]::IsNullOrEmpty($_.manager)) {
    	# Text mit dem Komma in eine Liste (Array) zerschneiden und
    	# den ersten Wert in der Liste mit dem Index 0 auslesen
    	$item["Vorgesetzter"] = ($_.manager -split ',')[0]
    } Else {
    	# leeren Manger eintragen
    	$item["Vorgesetzter"] = ''
    }
    
    $item.Update()
    
    Write-Host "Item $($_.sAMAccountName) Added to List"}


    Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    Mein deutscher PowerShell Blog
    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)

    • Als Antwort markiert Kathriin Dienstag, 29. Oktober 2013 07:46
    Montag, 28. Oktober 2013 11:14
  • Danke für die schnelle Antwort! Es hat super funktioniert!

    Allerdings steht da jetzt "CN = Name". Kann ich da noch irgendwie die ersten drei Zeichen wegschneiden? 

    Montag, 28. Oktober 2013 12:54
  • Hallo Kathriin,

    dafür kannst du die Methode Substring benutzen, die Stringobjekte in Powershell besitzen.

    Viele Grüße,

    Florian Frank

    Montag, 28. Oktober 2013 13:31
  • Hallo,

    bei der Methode Substring muss man dann aber wissen, wie lange der Name nach dem CN= ist, denn der ist ja pro Treffer unterschiedlich, und Substring nutzt man ja in der Form, das aber einer bestimmten Stelle eine bestimmte Laenge ausgeschnitten wird.

    Natuerlich kann man dem Substring die jeweilige Laenge uebermitteln, ich wuerde es aber in dem Fall mit der Replace Methode machen, ist einfacher zu verstehen.

    Hier ein Beispiel mit beiden Methoden.

    PS E:\scripte> $a = "cn=Vorname Nachname"
    PS E:\scripte> $a
    cn=Vorname Nachname
    PS E:\scripte> $a.substring(3,$a.Length-3)
    Vorname Nachname
    PS E:\scripte> $a.replace('cn=','')
    Vorname Nachname
    PS E:\scripte>

    Die entsprechende Zeile in Peters Vorschalg muesste dann so aussehen um auch CN= abzuschneiden.

    $item["Vorgesetzter"] = ($_.manager -split ',')[0] -replace 'CN=',''

    Beste Gruesse
    brima

    • Bearbeitet brima Montag, 28. Oktober 2013 14:36
    • Als Antwort markiert Kathriin Dienstag, 29. Oktober 2013 09:23
    Montag, 28. Oktober 2013 14:29
  • Hallo,

    stimmt, ist auf alle Fälle sauberer und übersichtlicher, vor allem hier.

    (Allerdings kann Substring wenn man nur den Startindex angibt, alles ab dieser Stelle ausgeben, unabhängig davon wie lange dieser String ist.)

    Hast aber natürlich recht, ich hatte jetzt nur gesehen, dass der Anfang weggeschnitten werden soll und nicht darauf geachtet, dass ein DN ja doch etwas mehr hinten dran stehen hat, was hier ja nicht gesucht ist ;-)

    Also am besten deine und Peter's Antwort mergen, dann hat man eine runde Sache.

    Viele Grüße,

    Florian


    Montag, 28. Oktober 2013 15:01
  • Ich versuche in der PowerShell immer Objekte zu verwenden, wenn es geht, das ist nun mal die natur von PowerShell.

    Textverarbeitung ist immer sehr fehleranfällig......

    Deshalb hatte ich oben auch geschrieben man kann auch den Manager wieder in ein AD objekt verwandeln. Ich dachte nur das Katrhiin genau den String mit CN= haben will.

    Das nächste mal genauer ausdrücken ! ;-)

    Get-ADUser -properties * | ForEach-Object { 
    
    $item = $spList.AddItem()
    
    $item["Nachname"] = $_.sn
    
    $item["Vorname"] = $_.givenname
    
    # wenn das Feld Manager nicht leer ist
    If(-not [String]::IsNullOrEmpty($_.manager)) {
    	# Mit Get-AdObject den Manager als Objekt aus dem AD abholen
    	# von dem Objekt, das in den Klammern erzeugt wird, den Namen abrufen
        # (man könnte auch hier Get-ADuser nehmen, ist hier aber wurscht....)
    	$item["Vorgesetzter"] = (Get-ADObject $_.manager).Name
    } Else {
    	# leeren Manger eintragen
    	$item["Vorgesetzter"] = ''
    }
    
    $item.Update()
    
    Write-Host "Item $($_.sAMAccountName) Added to List"}


    Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    Mein deutscher PowerShell Blog
    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)

    Montag, 28. Oktober 2013 17:19
  • Erst einmal vielen Dank für die vielen Antworten!

    Ich habe erst versucht Peters Vorschlag umzusetzen, allerdings wurde hier nur ein Teil der Liste erstellt und bei diesen war dann die Spalte Vorgesetzter auch noch leer. Vermutlich liegt es an mir, ich bin ziemlich neu in dem Thema. Und sorry, dass ich mich zu Beginn nicht klar genug ausgedrückt habe!

    Dann habe ich brimas Lösung versucht und hier bekomme ich genau das Ergebnis, das ich gesucht habe.

    Jetzt bin ich sehr zufrieden. Danke nochmal an alle!

    Dienstag, 29. Oktober 2013 07:46
  • Hallo,

    kannst du dann bitte auch meinen Beitrag zusaetzlich als Antwort makieren, es ist moeglich mehrere Beitraege als Antworten zu makieren.

    Beste Gruesse
    brima 

    Dienstag, 29. Oktober 2013 09:06