SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Daten aus SharepointBenutzern in einer Liste abrufen

Geprüfte Antwort Dieser Beitrag hat 8 Antworten

Ohne Rang
133 Beiträge
Shay erstellt 22 Nov. 2013 10:57
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo zusammen =)

Ich habe zwei Probleme vor denen ich gerade stehe, vielleicht kann mir ja jemand mit einer Idee weiter helfen.

1. Ich habe eine Liste, in welcher ein Benutzerfeld existiert und ein Raum-Feld.
Ich möchte gern, dass wenn man den Benutzer auswählt, automatisch das Raum-Feld mit dem dazugehörigem Raum ausgefüllt wird, welches über die Benutztersynchronisation aus dem AD für diesen Benutzer mit nach Sharepoint synchronisiert wird. Ist das möglich?

2. Ich hätte gern eine normale Liste die sich aus den SharepointBenutzern zusammen setzt. Also auch inklusive Telefonnummer und Raumnummer, allgemein so was vom AD mit übermittelt wird.
Momentan benutze ich dafür eine Erweiterung (UsersADBrowser WebPart), die direkt auf das AD zugreift und die Daten wiedergibt, allerdings nicht als Liste, also kann ich damit zum weiterverwenden nichts anfangen. 

Hat jemand eine Idee dazu?

Shay

Alle Antworten

Ohne Rang
391 Beiträge
Frank Daske Als Antwort am 22 Nov. 2013 11:07
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Shay,

eine solche Benutzer-Liste kann man aus dem AD leicht und ohne Programmierung oder Installation erstellen:
http://www.layer2.de/en/community/FAQs/cloud-connector/Pages/Office-365-AD-Phonebook.aspx

Das Beispiel ist für Office 365, geht aber natürlich auch mit einem normalen SharePoint. Die Verwendung einer "normalen" Kontaktliste hat den Vorteil, das alle Listenfunktionen zur Verfügung stehen, wie z.B. Ansichten (z.B. Neue Benutzer), Suche, Anhänge bzw. zusätzliche "SharePoint-Only" Spalten, Metadaten, Änderungsmitteilungen, Workflows wenn sich im AD was ändert. Die Listenelemente sind dann auch Offline verfügbar (über Outlook).

MfG, Frank

 

Ohne Rang
133 Beiträge
Shay Als Antwort am 13 Dez. 2013 10:36
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Dritt Software die etwas kostet kommt leider für mich nicht in Frage.

Ich habe jetzt ein Script gefunden, dass das AD ausließt und die Daten in eine Liste schreibt.
Der einzige Nachteil daran ist, es werden keine im AD gelöschten Benutzer in der Liste gelöscht.
Gibt es hier die Möglichkeit das Script um ein paar Zeilen zu erweitern, um auch so eine Art Abgleich zu machen?

Wenn AD User bereits in der Liste, dann ersetze, wenn nicht da, dann erstelle und andersrum, wenn in Liste vorhanden aber nicht im AD dann löschen?

 

Import-Module ActiveDirectory

$AllUsers=Get-ADUser -Filter {mail -like "*@XXX.de"} -SearchBase “OU=Testuser,OU=XXX,OU=Benutzer,OU=XXX,DC=XXX,DC=DE” -Properties *

Add-PSSnapin Microsoft.SharePoint.PowerShell -EA SilentlyContinue

#Variablen zum adressieren der Liste

$webURL = “http://intranet.XXX.de/”

$listName = “ADImport” 

#Webseite adressieren

$web = Get-SPWeb $webURL 

#Liste adressieren

$list = $web.Lists[$listName]

 

foreach ($User in $AllUsers) {

    foreach ($item in $list.items) {

        if ($item["Title"] -eq $User.SID) {

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

            $item["EMail"] = $User.EmailAddress

            $item["Telefon"] = $User.OfficePhone

   $item["Vorname"] = $User.GivenName

   $item["Abteilung"] = $User.Department

   $item["Büro"] = $User.physicalDeliveryOfficeName

   $item.update()

            $Flag =”gefunden”

        }

    }

    if ($Flag -ne “gefunden”) {  

            #Neuen Eintrag erstellen

            $newItem = $list.Items.Add()  

            #Eigenschaften ins ListItem füllen

            $newItem["Title"] = $User.SID

            $newItem["Nachname"] = $User.sn

            $newItem["EMail"] = $User.EmailAddress

            $newItem["Telefon"] = $User.OfficePhone

   $newItem["Vorname"] = $User.GivenName

   $newItem["Abteilung"] = $User.Department

   $newItem["Büro"] = $User.PhysicalDeliveryOfficeName

   #Listenelement schreiben

            $newItem.Update()

    }

    $Flag=”"

}

Danke schon mal =)

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 13 Dez. 2013 11:21
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Im Grunde mußt Du nur im Anschluß an die vorhandene Funktion das Script nochmal umgekehrt laufen lassen. Also alle Listenelemente durchgehen und nachschauen, ob es einen passenden Eintrag in $allUsers gibt. Wenn nicht ist der Eintrag im AD nicht mehr vorhanden und das Element kann in SharePoint gelöscht werden.

PS: das Script ist sehr schlampig und verbraucht unnötig viele Ressourcen. SPList.Items holt bei jedem Zugriff alle Elemente aus der Datenbank. Also lieber am Anfang einmal in einer Variablen speichern und dann damit arbeiten:

$items = $list.Items
foreach ($item in $items)
usw...

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
133 Beiträge
Shay Als Antwort am 13 Dez. 2013 11:51
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Es ist das Einzige was ich gefunden habe :D

Ich weiß es ist ein bisschen viel verlangt, aber könntest du mir hier vielleicht bei helfen?
Weiß nicht wie ich da Code mäßig was schreiben soll :x

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 13 Dez. 2013 12:29
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Fertige Lösungen kosten Geld ;-)

Aber sinngemäß so:

foreach ($item in $items) {
$found = $false
foreach ($user in $AllUsers) {
if ($item["Title"] -eq $user.SID) {
$found = $true
}
}
if (!$found) {
$item.Recycle()
}
}

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
133 Beiträge
Shay Als Antwort am 13 Dez. 2013 14:34
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Vielen lieben Dank =)

Ich habe zwar noch einen "Fehler bei der Enumeration einer Auflistung: Collection was modified; enumeration operation may not execute..",
aber so weit funktioniert es.
Den Fehler versuch ich mal mit Google zu lösen.

Wirklich vielen Dank für deine Hilfe 

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 13 Dez. 2013 16:52
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das kommt daher, daß innerhalb von "foreach $item" ein Element gelöscht werden soll. Man muß die Elemente vorher in ein Array umkopieren und die foreach-Schleife darüber laufen lassen.

Ich wollte Dir ja eigentlich auch nur das Konzept verdeutlichen ;-)

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
133 Beiträge
Shay Als Antwort am 16 Dez. 2013 07:18
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hab's nun geschafft durch die Umsetzung mit einem Array =)