PowerShell et SharePoint : créer des groupes et des utilisateurs dans un site SharePoint

Voici un bel exemple de ce que l'on peut faire avec PowerShell

Merci à Nicolas Schmitt qui m'a transmis cet exemple.

Introduction :

Comme parler à SharePoint via Powershell :

  • Charger la DLL SharePoint :
    • [Void][System.Reflection.Assembly]::LoadWithPartial      Name("Microsoft.SharePoint")
  • Utiliser les API .Net de SharePoint comme si vous étiez en C# (ou VB ou tout autre langage .Net). Par exemple, ouvrir un objet SPSite :
    • $site = New-Object Microsoft.SharePoint.SPSite($siteurl)
  • A la fin du script, ne pas oublier de libérer les objets SharePoint, par exemple :
    • $site.Dispose();

Exemple de script

Pour illustrer ce que l’on peut faire avec PowerShell et SharePoint, voici un script qui permet de créer des groupes et des utilisateurs dans un site SharePoint. La liste des groupes et des utilisateurs est passée en paramètre dans 2 fichiers CSV.

Ceci est assez pratique, en particulier lors des tests d’intégration, lorsque l’on supprime et recrée souvent des collections de sites.

Ce script prend en paramètre :

  • L’url du site où l’on va importer les groupes et utilisateurs
  • Un fichier CSV contenant les groupes

o 3 colonnes : nom du groupe, permission, propriétaire du groupe (si vide, on prend l’utilisateur courant)

  • Un fichier CSV contenant les utilisateurs à importer

o 2 colonnes : login de l’utilisateur, groupe dans lequel positionner l’utilisateur (facultatif)

Exemple d'utilisation :

powershell ./ImportGroupsAndUsers.ps1 https://team –userfile Users.csv

Principales fonctions utilisées :

ipcsv $groupfile | foreach { Write-Host $_.GroupName } : Importe un fichier CSV, et affiche la colonne « GroupName » de chaque ligne

$spuser = $web.EnsureUser($user) : crée un utilisateur dans le site

          $web.SiteGroups.Add($group, $owner, $null, "") : Crée un groupe dans le site

Le script complet est en attachement, ça donne cela :

    1:  param (
    2:      [string] $siteurl = "",
    3:      [string] $userfile = "",
    4:      [string] $groupfile = ""
    5:  ) 
    6:   
    7:  if ($siteurl -eq "")
    8:  {
    9:      $siteurl = Read-Host "Site url";
   10:  } 
   11:   
   12:  [Void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint"); 
   13:   
   14:  Write-Host -ForegroundColor green "Opening SharePoint site..."; 
   15:   
   16:  $site = New-Object Microsoft.SharePoint.SPSite($siteurl)
   17:  $web = $site.RootWeb; 
   18:   
   19:  if ($groupfile -ne "") 
   20:  {
   21:      Write-Host -ForegroundColor green "Importing groups from $groupfile";
   22:      ipcsv $groupfile | foreach { 
   23:          $group = $_.GroupName;
   24:          $perm = $_.Permissions;
   25:          $owner = $_.Owner;
   26:          if ($owner -eq "") { $owner = $web.CurrentUser.LoginName }
   27:          Write-Host -ForegroundColor green "  $group (owner = $owner, perm = $perm)"
   28:          $exists = $web.SiteGroups | where { $_.Name -eq $group }
   29:          if ($exists -eq $null)
   30:          {
   31:              # Create group
   32:              $web.SiteGroups.Add($group, $web.EnsureUser($owner), $null, "");
   33:              # Give permissions to the group
   34:              $assign = New-Object Microsoft.SharePoint.SPRoleAssignment($web.SiteGroups[$group]);
   35:              $assign.RoleDefinitionBindings.Add($web.RoleDefinitions[$perm])
   36:              $web.RoleAssignments.Add($assign)
   37:          } 
   38:          else 
   39:          {
   40:              Write-Host -ForegroundColor magenta "    already exist"
   41:          }
   42:      }
   43:  } 
   44:   
   45:  if ($userfile -ne "")
   46:  {
   47:      Write-Host -ForegroundColor green "Importing users from $userfile";
   48:      ipcsv $userfile | foreach { 
   49:          $user = $_.User
   50:          $group = $_.Group
   51:          Write-Host -ForegroundColor green "  $user -> $group"
   52:          # Add user to the web
   53:          $spuser = $web.EnsureUser($user);
   54:          # Add user to group
   55:          if ($group -ne "") 
   56:          {
   57:              $web.SiteGroups[$group].AddUser($spuser);
   58:          }
   59:      }
   60:  } 
   61:   
   62:  $site.Dispose();
   63:  Write-Host -ForegroundColor green "Done.";

ImportGroupsAndUsers.zip