Benutzer, Gruppen und Benutzer in Gruppen in SharePoint 2010/2013 anlegen

Wird eine SharePoint-Instanz neu ausgerollt, so ist es häufig notwendig in einem einzigen Arbeitsvorgang eine große Menge an Benutzern anzulegen, ebenso wie Benutzergruppen und anschließend die Benutzer den neuen oder bestehenden SharePoint-Gruppen zuzuweisen.
Dies manuell zu erledigen kostet Zeit und viele Mausklicks. Mit einem kleinen Powershell-Script und einer CSV-Datei geht es schneller und nervenschonender.

Die CSV-Datei sollte dabei so aufgebaut sein:

UserSCVdabei ist der Spalten Aufbau so zu interpretieren:

Spalte „Art“:
Kann die Werte „Gruppe“ oder „User“ enthalten
Muss mit einem der beiden Werte gefüllt sein

Spalte „InGruppe“ :
Muss beim Wert „Gruppe“ in der Spalte „Art“ leer sein
Kann beim Wert „User“ in der Spalte „Art“ einen Wert enthalten. Ist ein Wert enthalten, so wird der Benutzer dieser Tabellenzeile in der SharePoint-Gruppe, die hier angegeben ist, als Gruppenmitglied angelegt.

Spalte „Anmeldung“ :
Muss einen Wert enthalten.
Gibt entweder den Namen der Gruppe an, die erzeugt werden soll (Art=Gruppe), oder gibt den gültigen AD-Accountnamen (mit Domain) des Benutzers an, der entweder in einer Gruppe oder mit Einzelberechtigungen (Art=Leer) angelegt werden soll.

Spalte „SiteUrl“ :
Muss einen Wert enthalten.
Gibt den URL-Pfad der SharePoint-Webseite an, in der die Gruppen und Benutzer angelegt werden sollen.
Prinzipiell können die Benutzer und Gruppen für mehrere verschiedenen SharePoint-Sites erzeugt werden.

Spalte „Rechte“ :
Wenn Art=Gruppe, dann muss diese Spalte mit dem Namen einer gültigen Website-Berechtigungsstufe belegt sein.
Wenn Art=User, dann kann diese Spalte mit dem Namen einer gültigen Website-Berechtigungsstufe gefüllt sein. Ist das der Fall, so wird für den in der Spalte „Anmeldung“ genannten Account oder die AD-Berechtigungsgruppe eine entsprechende Einzelberechtigung auf der SharePoint-Website unter „SiteUrl“ erzeugt.

Die CSV-Datei kann mit MS-Excel erzeugt werden und dann als CSV gespeichert werden. Das Script geht von einem Semikolon als Trennzeichen aus.

Das Powershell-Script:



$Daten=import-csv -Path $args[0] -Delimiter „;“
$Daten | ft
# Gruppen durchgehen und die anlegen, die es nicht bereits gibt
$Gruppen = $Daten | where {$_.Art -eq „Gruppe“}
write-host „Gefundene Gruppen in der Import-Datei“
$Gruppen
$Users = $Daten | where {$_.Art -eq „User“ -and $_.InGruppe -ne „“}
write-host „Gefundene User in Gruppen in der Import-Datei“
$Users
$SingleUsers = $Daten | where {$_.Art -eq „User“ -and $_.InGruppe -eq „“}
write-host „Gefundene User mit Einzelberechtigung in der Import-Datei“
$SingleUsers


#Gruppen anlegen
Foreach ($Gruppe in $Gruppen) {
$web = Get-SPWeb $Gruppe.SiteUrl
# Gegebenenfalls die Vererbung der Site unterbrechen. Wenn es sich um eine #Top-Level Site handelt, kann es passieren, dass hier
# ein Fehler angezeigt wird. Das Script sollte jedoch nicht abbrechen
if ($web.HasUniquePerm -eq $false){
$web.BreakRoleInheritance($true, $true)
}
#Gruppe anlegen, wenn sie nicht schon besteht
if ($web.SiteGroups[$Gruppe.Anmeldung] -eq $null)
# Hier wird geprüft, ob es die Gruppe schon gibt
{
$newGroup = $web.SiteGroups.Add($Gruppe.Anmeldung, $web.CurrentUser, $null, $null)
}
else {
$newGroup = $web.SiteGroups[$Gruppe.Anmeldung]
# Falls es die Gruppe schon gibt, wird sie referenziert, weil noch die
# richtige Berechtigungsstufe zugewiesen werden muss
}
# Den Gruppen nun die richtigen Berechtigungsstufen zuweisen
$NewGroupAssignment = new-object Microsoft.SharePoint.SPRoleAssignment($newGroup)
$RoleDefinition = $web.Site.RootWeb.RoleDefinitions[$Gruppe.Rechte]
$NewGroupAssignment.RoleDefinitionBindings.Add($Roledefinition)
$web.Roleassignments.Add($NewGroupAssignment)


$web.Update()
$web.Dispose()
}
Write-Host „Gruppen angelegt und Berechtigungsstufen zugewiesen“
Read-Host -Prompt „Bitte Enter drücken zum Fortfahren“


#Nun im zweiten Schritt die Benutzer aus der Datei in den Gruppen anlegen
Foreach ($User in $Users) {
$web = Get-SPWeb $User.SiteUrl
$Gruppe = $web.SiteGroups[$User.InGruppe]
$Gruppe.AddUser($User.Anmeldung)
$Web.Update()
$Web.Dispose()
}


Write-Host „Benutzer den Gruppen zugewiesen“
Read-Host -Prompt „Bitte Enter drücken zum Fortfahren“


#Drittens die Benutzer mit Einzelberechtigungen anlegen
Foreach ($SingleUser in $SingleUsers) {
$web = Get-SPWeb $SingleUser.SiteUrl
$NewUserAssignment = new-object Microsoft.SharePoint.SPRoleAssignment($SingleUser.Anmeldung)
$RoleDefinition = $web.Site.RootWeb.RoleDefinitions[$SingleUser.Rechte]
$NewUserAssignment.RoleDefinitionBindings.Add($Roledefinition)
$web.Roleassignments.Add($NewUserAssignment)
$web.Update()
$web.Dispose()
}
Write-Host „Einzeln zu berechtigende Benutzer oder AD-Gruppen angelegt“
Read-Host -Prompt „Bitte Enter drücken zum Fortfahren“
Write-host „Fertig!“


 

 Ausführen des Script

Das Script muss in einer SharePoint-Administrations-Powershell ausgeführt werden.
Das Script muss unter einem Account ausgeführt werden, der über die Berechtigung verfügt, auf allen in der CSV-Datei angegebenen SiteUrls die Berechtigungen zu verwalten.
Das Script muss mit einem Parameter aufgerufen werden, der den Pfad zu und den Namen der CSV-Datei enthält.
Beispiel:
.\BenutzerUndGruppenAusCSV.ps1 D:\daten\BenutzerGruppe1.csv 

Das Script selbst ist mit Kommentaren versehen, um seine Funktion zu erläutern

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.