Mittendrin.

Zurück

Flurfunk der eXperts.

Hier erfahren Sie mehr über eXperts, Technologien und das wahre Leben in der SDX.

SharePoint Benutzer und deren Berechtigungen mit PowerShell auslesen

02.07.201208:06 Uhr , Thomas Nissen

Dieser Artikel beschreibt, wie mittels einfacher PowerShell-Kommandos die Benutzer und Berechtigungen von einer Site Collection eines SharePoint Servers ausgelesen werden können.

Durch das PowerShell SharePoint-AddIn werden eine Fülle von Befehlen bereitgestellt, mit denen man Informationen aus dem SharePoint 2010 auslesen, anlegen oder aber auch den SharePoint konfigurieren kann.

Das folgende PowerShell-Commandlet ist folgendermaßen aufgebaut:

  1. Hinzufügen des SharePoint Powershell-AddIn
  2. Abfrage aller Benutzer und deren Berechtigungen über den Befehl Get-SPUser
  3. Speichern der Informationen in einem Objekt für eine spätere Ausgabe

In diesem Fall möchten wir die folgenden Benutzer und deren Berechtigungsinformationen ausgeben:

  • Loginname
  • Benutzername
  • explizite Benutzerrolle
  • Benutzerrolle innerhalb der Gruppe
  • Gruppe(n)
param($Site = "<Name der Site Collection>")

if((Get-PSSnapin -Name "Microsoft.SharePoint.PowerShell" -EA 0) -eq $null)
{
  Add-PSSnapin "Microsoft.SharePoint.PowerShell"
}


#Auslesen aller Benutzer mit Detailinformationen wie Gruppen, Rollen, etc. innerhalb der aktuellen Site Collection Url.
$users = Get-SPUser -Web $Site -ErrorAction Stop | select UserLogin, DisplayName, @{Label="ExplicitGivenRoles";expression={$_.Roles}}, @{Label="RolesGivenViaGroups";expression={$_.Groups | %{$_.Roles}}}, Groups

$users | foreach{
    $strGroups = ""
    $strGroupWithoutPraefix = ""
    $_.Groups | foreach{$strGroups += "$_, "}
    if($strGroups -ne "")
    {$strGroupWithoutPraefix = $strGroups.Substring(0,$strGroups.Length-2)}
    $object = New-Object PSObject
        $object | add-member noteproperty -name "UserLogin" -value $_.UserLogin
        $object | add-member noteproperty -name "DisplayName" -value $_.DisplayName
        $object | add-member noteproperty -name "ExplicitRoles" -value $_.ExplicitGivenRoles
        $object | add-member noteproperty -name "GroupRoles" -value $_.RolesGivenViaGroups
        $object | add-member noteproperty -name "SPGroup" -value $strGroupWithoutPraefix
        $object
}

Fazit

Das innerhalb dieses Artikels beschriebene Powershell-Commandlet ermöglicht es, mit wenigen Zeilen Code die Benutzer und Berechtigungen einer Site Collection im SharePoint Server auszulesen.
 
Zusätzlich zum aktuell verwendeten Commandlet Get-SPUser, existieren innerhalb des SharePoint SnapIns noch weitere Commandlets, welche Sie auf den Microsoft Technet noch näher erläutert finden.

Tags: SharePoint

5 Kommentare

17.10.201415:50 Uhr
Anonym

Sehr hilfreich!
Ist es möglich AD Gruppen mit auszugeben?

21.10.20149:25 Uhr
Thomas Nissen

Hallo Anonym.

Das Skript liefert auch die AD-Gruppen zurück, die Zugriff auf die SiteCollection haben.
Wenn man das Skript ein wenig erweitert, kann man mit Hilfe der Windows Claims diese identifizieren und Sortieren.
Eine Übersicht über die ClaimTypes findest du unter
http://www.wictorwilen.se/Media/Default/Windows-Live-Writer/How-Claims-encoding-works-in-SharePoint-_14813/image_10.png

Ersetzte den Teil ab "$users | foreach{…" mit dem folgenden
$userList = @()
$users | foreach{
$claimType = ""
if($_.UserLogin.Split("|")[0].substring(3,1) -eq "#") { $claimType = "User"}
elseif($_.UserLogin.Split("|")[0].substring(3,1) -eq "+") { $claimType = "Gruppe"}
elseif($_.UserLogin.Split("|")[0].substring(3,1) -eq ".") { $claimType = "Anonym"}
elseif($_.UserLogin.Split("|")[0].substring(3,1) -eq "S") { $claimType = "Emailadresse"}
elseif($_.UserLogin.Split("|")[0].substring(3,1) -eq "!") { $claimType = "Identity Provider"}
elseif($_.UserLogin.Split("|")[0].substring(3,1) -eq "-") { $claimType = "Rolle"}
elseif($_.UserLogin.Split("|")[0].substring(3,1) -eq "%") { $claimType = "Farm"}
elseif($_.UserLogin.Split("|")[0].substring(3,1) -eq "?") { $claimType = "Namensidentifizierer"}
else { $claimType = "Andere"}

$strGroups = ""
$strGroupWithoutPraefix = ""
$_.Groups | foreach{$strGroups += "$_, "}
if($strGroups -ne "")
{$strGroupWithoutPraefix = $strGroups.Substring(0,$strGroups.Length-2)}
$object = New-Object PSObject
$object | add-member noteproperty -name "ClaimType" -value $claimType
$object | add-member noteproperty -name "UserLogin" -value $_.UserLogin
$object | add-member noteproperty -name "DisplayName" -value $_.DisplayName
$object | add-member noteproperty -name "ExplicitRoles" -value $_.ExplicitGivenRoles
$object | add-member noteproperty -name "GroupRoles" -value $_.RolesGivenViaGroups
$object | add-member noteproperty -name "SPGroup" -value $strGroupWithoutPraefix
$userList += $object
}
$userList | Sort-Object ClaimType

Jetzt sollte deine Ausgabe nach den ClaimTypes sortiert sein.

VG
Thomas

14.01.201514:01 Uhr
Anonym

Hallo,
ist es möglich auch eine Ausgabe mit hineinzubringen, auf welche Website die User berechtigt sind?
Sprich eine Auflistung wie bei den Gruppen, nur das hier die ganzen Website aufgelistet sind wo der User hinzugefügt wurden ist?

30.01.20159:25 Uhr
Thomas Nissen

Hallo Anonym.
Ja, das ist möglich. Jedoch macht es aus meiner Sicht keinen Sinn, da die Berechtigungen des Benutzers auf den Websites unterschiedlich sein kann/wird.

Lösung: Du müsstest mit dem Benutzer über alle Websites/Subsites iterieren.

28.04.20158:52 Uhr
Anonym

Hallo, habe den Track verfolgt. Letzeres wäre genau das, was ich bräuchte eine Iteration über alle Subsites. Gibt es den Code dafür schon irgendwo ?

Dein Kommentar wartet auf Freischaltung.

Artikel kommentieren

Zurück

Tag Cloud


Kontakt aufnehmen


Anrufen

Gerne beantworten wir Ihre Fragen in einem persönlichen Gespräch!


Kontakt aufnehmen

Schreiben Sie uns eine E-Mail mit Ihren Fragen und Kommentaren!