SharePoint Benutzer und deren Berechtigungen mit PowerShell auslesen 02.07.2012

Thomas Nissen
Thomas Nissen, Senior eXpert

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.
Share |

2 Kommentare:

Anonym hat gesagt…

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

Thomas Nissen hat gesagt…

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

Kommentar veröffentlichen