Utilisation de Windows PowerShell pour gérer SharePoint Online

 

Dernière rubrique modifiée : 2015-03-09

Résumé : Utilisez Windows PowerShell pour gérer Office 365 à l’aide des cmdlets, des scripts et des processus de traitement par lots Windows PowerShell.

SharePoint Online peut être géré à l’aide des cmdlets SharePoint Online. (Comme vous pouvez le constater, les noms de logiciels ne sont tous pas énigmatiques et obscurs.) Sous sa forme actuelle, l’implémentation SharePoint Online de Windows PowerShell est quelque peu limitée : les administrateurs Office 365 ne disposent que de 30 cmdlets et, pour le moment, vous ne pouvez pas utiliser Windows PowerShell pour gérer des produits comme OneDrive Pro, les recherches SharePoint Online, le magasin de termes SharePoint Online, les profils utilisateur, etc. Cela signifie-t-il qu’il n’y a aucune raison d’utiliser Windows PowerShell pour gérer SharePoint Online ? Ne soyons pas si catégoriques. Il s’avère qu’il existe plusieurs parties clés de SharePoint Online qui non seulement peuvent être gérées à l’aide de Windows PowerShell, mais qui sont de surcroît très bien gérées par Windows PowerShell.

Utilisation de Windows PowerShell pour gérer SharePoint Online

Dans cette rubrique, nous allons aborder les sujets suivants :

  • Utilisation des sites SharePoint Online

  • Travail avec des utilisateurs SharePoint Online

  • Utilisation des groupes de sites SharePoint Online

  • Note rapide relative à la cmdlet ForEach-Object

Pour plus d’informations sur l’utilisation de Windows PowerShell pour gérer SharePoint Online, vous voudrez peut-être jeter un œil à la référence des cmdlets SharePoint Online, un ensemble de rubriques d’aide disponibles ici.

Et n’oubliez pas ces deux articles, pleins de commandes Windows PowerShell utiles pour SharePoint Online :

Utilisation des sites SharePoint Online

Est-il possible de vous donner un exemple de zone associée à SharePoint Online pouvant être gérée à l’aide de Windows PowerShell ? Bien entendu. L’une des fonctionnalités les plus performantes de Windows PowerShell consiste à vous aider à identifier l’un des sous-ensembles de vos sites SharePoint Online. Les grandes entreprises ont généralement de nombreux sites, pour ne pas dire des centaines, voire des milliers. Cela représente-t-il un problème ? Absolument pas. Toutefois, supposons que vous ayez plusieurs centaines de sites et que vous souhaitiez savoir combien de ces sites sont des wikis, c’est-à-dire des sites créés à l’aide du modèle Wiki d’entreprise (officiellement, ce modèle est nommé ENTERWIKI#0.) Pouvons-nous obtenir ces informations à l’aide du Centre d’administration SharePoint Online ? Cette méthode fonctionne, mais implique quelques difficultés. Ce n’est pas aussi simple que d’exécuter cette commande Windows PowerShell :

Get-SPOSite | Where-Object {$_.Template -eq "ENTERWIKI#0"}

En d’autres termes, nous utilisons la cmdlet Get-SPOSite pour renvoyer des informations sur tous nos sites, puis la cmdlet Where-Object afin de sélectionner uniquement les sites où la propriété de modèle est égale à ENTERWIKI#0.

RemarqueRemarque :
Comment avons-nous su que le modèle Wiki d’entreprise est officiellement nommé ENTERWIKI#0 ? C’est facile. Nous avons simplement exécuté la commande suivante :
Get-SPOWebTemplate

Vous souhaitez peut-être obtenir une liste de tous les sites dont le quota de stockage est supérieur à 1 000 Mo ou inférieur à 250 Mo. Est-il possible de le faire rapidement et facilement à l’aide de Windows PowerShell ? Bien entendu.

Get-SPOSite | Where-Object {$_.StorageQuota -gt 1000 -or $_.StorageQuota -lt 250}

Cette requête est certes légèrement plus complexe que celles que nous avons vues jusqu’à présent, mais une fois que vous maîtrisez le langage utilisé, la compréhension du fonctionnement de cette action ne pose aucun problème. Dans cet exemple, nous recherchons les sites qui répondent à l’un des deux critères suivants. Le site : 1) possède un StorageQuota supérieur à 1 000 Mo (-gt) ou (-or) 2) possède un StorageQuota inférieur à 250 Mo (-lt). Supposons que nous ayons 4 sites :

Site StorageQuota

Site A

180

Site B

700

Site C

300

Site D

1 500

En ce qui concerne ces exemples de données, le site A sera renvoyé, étant donné que son StorageQuota est inférieur à 250. Le site D sera également renvoyé, car son StorageQuota est supérieur à 1 000. Les sites B et C ne répondent à aucun des critères et ne seront donc pas renvoyés.

Voici un autre exemple. Supposons que vous souhaitiez obtenir une liste de tous les sites qui n’appartiennent pas à l’administrateur, c’est-à-dire tous les sites dont le propriétaire ne correspond pas à admin@litwareinc.onmicrosoft.com dans cet exemple. Cette commande est un jeu d’enfant :

Get-SPOSite | Where-Object {$_.Owner -ne "admin@litwareinc.onmicrosoft.com"}

Mais le fait qu’elle soit « simple » ne signifie pas qu’elle est « inutile », n’est-ce pas ?

Travail avec des utilisateurs SharePoint Online

Windows PowerShell est un outil extrêmement utile pour travailler avec les utilisateurs du site SharePoint Online. Vous pouvez utiliser Windows PowerShell et la cmdlet Get-SPOUser pour renvoyer la liste de tous les utilisateurs qui ont obtenu l’accès à un site. C’est facile.

Get-SPOUser -Site "https://litwareinc.sharepoint.com/sites/finance"

Vous devez seulement appeler la commande Get-SPOUser suivie de l’URL du site qui vous intéresse.

Ou, si vous voulez voir uniquement les utilisateurs (et pas les groupes) qui ont accès à un site, vous pouvez utiliser cette commande :

Get-SPOUser -Site "https://litwareinc.sharepoint.com/sites/finance" | Where-Object {$_.IsGroup -eq $False}

C’est facile également. Nous demandons seulement les utilisateurs du site pour lesquels la propriété IsGroup est définie sur False. (Dans Windows PowerShell, vous utilisez $True et $False lors de l’écriture des commandes plutôt que les valeurs habituelles True et False.)

Il est tout aussi facile de renvoyer uniquement les utilisateurs qui sont des administrateurs de site ; autrement dit, les utilisateurs pour lesquels la propriété IsSiteAdmin a la valeur True :

Get-SPOUser -Site "https://litwareinc.sharepoint.com/sites/finance" | Where-Object {$_.IsSiteAdmin -eq $True}

Mais ceci n’est valable que pour un seul site. La puissance de Windows PowerShell (pour ainsi dire) est souvent mise en lumière lorsque vous avez besoin de travailler avec plusieurs objets, notamment avec plusieurs sites. Par exemple, il est utile d’avoir une liste de tous les utilisateurs qui ont accès à un site donné. Mais qu’en est-il de l’inverse : que dire d’une liste de tous les sites auxquels un seul utilisateur a accès ? Est-il possible d’obtenir cette liste à l’aide de Windows PowerShell ? Bien entendu. Voici un petit script simple (évidemment, simple pour ceux qui ont une certaine expérience de Windows PowerShell) qui renvoie les noms de tous les sites auxquels un utilisateur particulier (dans cet exemple, Ken Myer) a accès :

$x = (Get-SPOSite).Url

foreach ($y in $x)
    {
        $z = $Null
        $z = Get-SpoUser -Site $y | Where-Object {$_.DisplayName -eq "Ken Myer"}
        if ($z -ne $Null) {$y}
    }
RemarqueRemarque :
Comment utiliser un script dans Windows PowerShell ? De cette façon : copiez le code précédent, collez-le dans le Bloc-notes (ou un autre éditeur de texte), puis enregistrez le fichier en utilisant une extension de fichier .ps1 (par exemple, C:\Scripts\SitesAUserCanAccess.ps1). Pour exécuter le script, utilisez Windows PowerShell pour vous connecter à SharePoint Online, puis, à l’invite de commandes Windows PowerShell, entrez simplement le chemin d’accès au fichier .ps1 et appuyez sur ENTRÉE :
C:\Scripts\SitesAUserCanAccess.ps1

Ou qu’en est-il d’une liste de tous vos sites et des administrateurs pour chacun de ces sites ? Ces informations peuvent être renvoyées à l’aide d’une seule commande :

Get-SPOSite | ForEach-Object {Write-Host $_.Url; Get-SPOUser -Site $_.Url | Where-Object {$_.IsSiteAdmin -eq $True}}

Vous devez obtenir en retour quelque chose de semblable à ceci :

https://litwareinc.sharepoint.com/sites/communities
MOD Administrator  admin@litwareinc.com {Communities Members, Comm...}
Sara Davis  sarad@litwareinc.com {Communities Members, Communities...}

https://litwareinc.sharepoint.com/sites/finance
MOD Administrator admin@litwareinc.com {Excel Services Viewers, Hi...}

https://litwareinc.sharepoint.com/sites/hr
MOD Administrator  admin@litwareinc.com   {Contoso Beta Members, C...}

Il est vrai qu’il ne s’agit pas de la sortie la plus agréable au monde, mais, inutile de le dire, l’apparence ne fait pas tout. Et, lorsque vous aurez davantage d’expérience et deviendrez un peu plus habile avec Windows PowerShell, vous apprendrez à personnaliser cette sortie de façons différentes et conviviales.

Surtout, Windows PowerShell n’est pas seulement un outil permettant de récupérer des éléments : il permet également de les configurer. Vous avez plusieurs centaines de sites et vous devez faire de Ken Myer l’administrateur de chacun d’entre eux ? Il suffit de demander !

Get-SPOSite | ForEach-Object {Set-SPOUser -Site $_.Url -LoginName "kenmyer@litwareinc.com" -IsSiteCollectionAdmin $True}

Intéressant, non ?

Utilisation des groupes de sites SharePoint Online

Ne vous inquiétez pas : nous n’avons pas oublié les groupes de sites. En fait, Windows PowerShell est un excellent moyen pour gérer vos groupes de sites SharePoint. Le Centre d’administration SharePoint Online dispose de quelques méthodes faciles à utiliser pour la gestion des groupes de sites, mais comprendre ces méthodes peut être un peu difficile. Par exemple, supposons que vous vouliez voir les groupes et les membres de groupes du site https://litwareinc.com/sites/finance. Voici ce que vous devez faire :

  1. À partir du Centre d’administration SharePoint Online, dans l’onglet collections de sites, cliquez sur le nom du site.

  2. Dans la boîte de dialogue propriétés de la collection de sites, cliquez sur le lien qui ouvre https://litwareinc.com/sites/finance.

  3. Sur la page du site, cliquez sur l’icône Paramètres (située dans l’angle supérieur droit de la page), puis cliquez sur Paramètres du site :

    Option Paramètres de site SharePoint Online

  4. Sur la page Paramètres du site, cliquez sur Sites et autorisations.

Répétez ensuite ce processus pour le prochain site que vous souhaitez consulter.

Existe-t-il une autre façon d’obtenir la liste de tous les groupes, et de leurs utilisateurs, à partir d’un site donné ? En fait, il existe au moins une autre manière :

$x = Get-SPOSiteGroup -Site "https://litwareinc.com/sites/finance"

foreach ($y in $x)
    {
        Write-Host $y.Title -ForegroundColor "Yellow"
        Get-SPOSiteGroup -Site "https://litwareinc.com/sites/finance" -Group $y.Title | Select-Object -ExpandProperty Users
        Write-Host
    }

Certes, le script précédent est un petit peu plus compliqué que la plupart des commandes que nous vous avons montrées jusqu’à présent. Et c’est un petit peu laborieux également : après tout, vous devez copier le code, le coller dans le Bloc-notes (ou un autre éditeur de texte), enregistrer le fichier avec une extension de fichier .ps1 (par exemple, C:\Scripts\SiteGroupsAndUsers.ps1) et exécuter le script dans Windows PowerShell. Comme nous l’avons dit, il s’agit d’une tâche un peu laborieuse car, en fin de compte, l’exécution du script n’implique que la saisie du chemin d’accès complet au fichier .ps1 :

C:\Scripts\SiteGroupsAndUsers.ps1

Il est donc vrai que cela demande un petit effort. Mais observons ce que nous obtenons en retour :

Groupes de sites et membres de groupes de sites.

Il s’agit de tous les groupes qui ont été créés pour le site https://litwareinc.com/sites/finance, ainsi que de tous les utilisateurs affectés à ces groupes. (Et, juste pour vous montrer, nous avons affiché les noms de groupes en jaune, pour vous aider à garder les groupes et leurs listes de membres séparés.)

Et si vous pensez que ceci est impressionnant, attendez de voir ce script :

$x = Get-SPOSite

foreach ($y in $x)
    {
        Write-Host $y.Url -ForegroundColor "Yellow"
        $z = Get-SPOSiteGroup -Site $y.Url
        foreach ($a in $z)
            {
                 $b = Get-SPOSiteGroup -Site $y.Url -Group $a.Title 
                 Write-Host $b.Title -ForegroundColor "Cyan"
                 $b | Select-Object -ExpandProperty Users
                 Write-Host
            }
    }

Ce script répertorie tous les groupes, ainsi que toutes les appartenances aux groupes, de tous vos sites SharePoint Online, tous sans exception. Faites donc un essai et voyez par vous-même.

Comprenez-vous maintenant pourquoi vous souhaiterez probablement utiliser Windows PowerShell pour gérer SharePoint Online ?

Note rapide relative à la cmdlet ForEach-Object

Dans la section Travail avec des utilisateurs SharePoint Online, vous avez sans doute remarqué que nous avons transmis les informations sur le site à la cmdlet ForEach-Object :

Get-SPOSite | ForEach-Object {Set-SPOUser -Site $_.Url -LoginName "kenmyer@litwareinc.com" -IsSiteCollectionAdmin $True}

Cela soulève une question intéressante : quel est le but de cette action ? Après tout, lorsque vous utilisez les cmdlets Azure Active Directory, nous transmettons des informations directement de la cmdlet Get-MsolUser à la cmdlet Set-MsolUser :

Get-MsolUser | Set-MsolUser -UsageLocation "FR"

Par conséquent, pourquoi ne pas avoir effectué cette action avec notre commande SharePoint Online ?

Get-SPOSite | Set-SPOUser -LoginName "kenmyer@litwareinc.com" -IsSiteCollectionAdmin $True

Voici la raison principale : cela ne fonctionne pas. Avec la cmdlet Set-SPOUser, vous devez inclure explicitement le paramètre du site suivi du nom du site. Par exemple :

Set-SPOUser -Site "https://litwareinc.sharepoint.com/sites/communities" -LoginName "kenmyer@litwareinc.com" -IsSiteCollectionAdmin $True

Cela signifie que, si nous tentons de transmettre des informations directement à la cmdlet Set-SPOUser, celle-ci ne prendra pas tous les sites et Ken Myer ne sera pas administrateur de chacun d’eux. À la place, elle nous invite à saisir l’URL du site :

Get-SPOSite | Set-SPOUser -LoginName "kenmyer@litwareinc.com" -IsSiteCollectionAdmin $True
cmdlet Set-SPOUser at command pipeline position 2
Supply values for the following parameters:
Site: 

Cela signifie que nous devons transmettre les informations sur le site à la cmdlet ForEach-Object. Cette dernière prend chaque élément qui lui est transmis (chaque site), puis effectue toutes les actions indiquées. Dans ce cas, nous lui demandons d’utiliser la cmdlet Set-SPOUser pour désigner Ken Myer comme administrateur de ce site :

Set-SPOUser -Site $_.Url -LoginName "kenmyer@litwareinc.com" -IsSiteCollectionAdmin $True

La syntaxe $_.Url représente l’URL du site. $_. indique que nous utilisons des informations qui ont été transmises à la cmdlet ForEach-Object par une autre cmdlet.

Vous êtes perdu ? Voici un exemple rapide. Supposons que nous ayons trois sites avec les URL suivantes :

Lorsque nous transmettons ces informations à la cmdlet ForEach-Object, cette dernière prend le premier élément de la collection (site 1) et exécute la cmdlet Set-SPOUser à l’aide de l’URL de ce site. En d’autres termes, elle exécute la commande suivante :

Set-SPOUser -Site "https://litwareinc.sharepoint.com/sites/site1" -LoginName "kenmyer@litwareinc.com" -IsSiteCollectionAdmin $True

Une fois la commande exécutée, elle prend le deuxième site (site 2) et exécute la cmdlet Set-SPOUser sur ce dernier :

Set-SPOUser –Site "https://litwareinc.sharepoint.com/sites/site1" –LoginName "kenmyer@litwareinc.com" –IsSiteCollectionAdmin $True

Comme vous pouvez le constater, la cmdlet utilise à présent l’URL du deuxième site de la collection. À la fin, la cmdlet ForEach-Object aura été exécutée sur tous les sites de la collection et Ken Myer aura été désigné administrateur de chacun d’eux.

Pour plus d’informations, consultez cet article. Inutile de préciser que la cmdlet ForEach-Object est extrêmement pratique. Par exemple, quelquefois, lorsque vous tentez de transmettre des informations d’une cmdlet à une autre, vous obtenez un message d’erreur semblable à celui-ci :

The input object cannot be bound to any parameters for the command either because the command does not take pipeline input or the input and its properties do not match any of the parameters that take pipeline input.

Cela se produit car les cmdlets n’acceptent pas toutes l’entrée canalisée. Comment résoudre ce problème ? Vous avez la solution : utilisez la cmdlet ForEach-Object

Voir aussi

Meilleures méthodes pour gérer Office 365 avec Windows PowerShell