
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:
- Hinzufügen des SharePoint Powershell-AddIn
- Abfrage aller Benutzer und deren Berechtigungen über den Befehl Get-SPUser
- 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.
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 ?