Les commandes PowerShell SharePoint les plus utiles
Nov 12, 2018
Les commandes PowerShell SharePoint les plus utiles permettent aux administrateurs de gérer les sites, les objets et les permissions plus efficacement que les outils natifs. Des cmdlets comme Get-SPSite et Get-SPWeb fournissent des informations détaillées sur les sites et les fichiers, tandis que New-SPSite, Remove-SPSite, et Set-SPUser simplifient la création, la suppression et le contrôle d'accès des sites. En automatisant les rapports, la gestion des permissions et les audits, les scripts PowerShell SharePoint améliorent la productivité, réduisent les erreurs et renforcent la sécurité à travers les environnements.
SharePoint Server est une plateforme collaborative basée sur le web qui s'intègre à Microsoft Office. Pour configurer les paramètres des sites SharePoint, les administrateurs système utilisent souvent SharePoint Management Shell qui est installé avec le produit SharePoint. L'exécution de SharePoint Management Shell appelle l'environnement d'exécution Windows PowerShell et exécute un fichier de script nommé sharepoint.ps1, qui charge le snap-in Windows PowerShell pour SharePoint et exécute quelques commandes. Ces commandes ne sont pas très importantes ; elles incluent le choix de C:UsersUsername comme emplacement principal pour l'exécution des commandes et l'exécution de la dernière version de PowerShell console.
Une meilleure option est d'utiliser PowerShell ISE. Non seulement il comprend de nombreux cmdlets créés spécialement pour la gestion de SharePoint, mais il offre également du code en couleur, un moteur de débogage et un moteur de recherche de cmdlets.
Pour charger le snap-in SharePoint, nous devons exécuter la commande suivante :
Add-PSSnapin Microsoft.SharePoint.PowerShell
Ensuite, il est prudent de mettre à jour l'aide PowerShell afin d'obtenir les dernières informations sur les cmdlets PowerShell de Microsoft SharePoint :
Update-Help
Alors, quels cmdlets sont disponibles dans le snap-in SharePoint ? Voici la commande qui les listera tous pour vous :
Get-Command -Module "Microsoft.SharePoint.PowerShell"
Examinons de plus près les cmdlets SharePoint les plus utiles.
Contenu connexe sélectionné :
Obtention des informations du site SharePoint
Get-SPSite cmdlet est le principal cmdlet pour obtenir des informations sur vos collections de sites SharePoint. Il répertorie les URL de vos sites SharePoint et leurs niveaux de compatibilité (versions de SharePoint).
En utilisant le paramètre Select-Object avec cette cmdlet, nous pouvons obtenir des propriétés spécifiques d'un site, telles que le propriétaire du site, l'utilisation du stockage, le niveau de quota maximum et la date de dernière modification du contenu :
Get-SPSite "http://sharepoint/sites/ent" | Select-Object url, owner, @{Expression={$_.Usage.Storage}}, @{Expression={$_.Audit.AuditFlags}}, readonly, LastContentModifiedDate, @{Express={$_.QuotaStorageMaximumLevel}}
De plus, nous pouvons exporter des informations concernant tous les sites de notre ferme SharePoint vers un fichier csv :
Get-SPWebApplication http://sharepoint/ | Get-SPSite -Limit All | Get-SPWeb -Limit All | Select Title, URL, ID, ParentWebID | Export-CSV C:rootsharepointinventory.csv -NoTypeInformation
Nous pouvons également utiliser la cmdlet Get-SPSite pour créer un script PowerShell SharePoint qui liste tous les groupes et leurs membres pour un site SharePoint particulier :
$site = Get-SPSite http://sharepoint/sites/ent/
$groups = $site.RootWeb.sitegroups
foreach ($grp in $groups) {"Group: " + $grp.name; foreach ($user in $grp.users) {" User: " + $user.name} }
$site.Dispose()
Si vous avez besoin d'un rapport complet des permissions pour un site SharePoint, exécutez le code suivant, en spécifiant l'URL du site SharePoint ($SPSiteURL) et le chemin pour exporter les données vers un fichier csv ($ExportFile) :
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$SPSiteUrl = "http://sharepoint/sites/ent"
$SPSite = New-Object Microsoft.SharePoint.SPSite($SPSiteUrl);
$ExportFile = "C:rootPermissions.csv"
"Web Title,Web URL,List Title,User or Group,Role,Inherited" | out-file $ExportFile
foreach ($WebPath in $SPSite.AllWebs)
{
if ($WebPath.HasUniqueRoleAssignments)
{
$SPRoles = $WebPath.RoleAssignments;
foreach ($SPRole in $SPRoles)
{
foreach ($SPRoleDefinition in $SPRole.RoleDefinitionBindings)
{
$WebPath.Title + "," + $WebPath.Url + "," + "N/A" + "," + $SPRole.Member.Name + "," + $SPRoleDefinition.Name + "," + $WebPath.HasUniqueRoleAssignments | out-file $ExportFile -append
}
}
}
foreach ($List in $WebPath.Lists)
{
if ($List.HasUniqueRoleAssignments)
{
$SPRoles = $List.RoleAssignments;
foreach ($SPRole in $SPRoles)
{
foreach ($SPRoleDefinition in $SPRole.RoleDefinitionBindings)
{
$WebPath.Title + "," + $WebPath.Url + "," + $List.Title + "," + $SPRole.Member.Name + "," + $SPRoleDefinition.Name | out-file $ExportFile -append
}
}
}
}
}
$SPSite.Dispose();
Pour trouver un certain fichier sur un site SharePoint, nous devons utiliser la cmdlet Get-SPWeb. Voici un script qui recherche un fichier dont le nom contient le mot « readme » sur le site « http://sharepoint/sites/ent » :
Get-SPWeb http://sharepoint/sites/ent |
Select -ExpandProperty Lists |
Where { $_.GetType().Name -eq "SPDocumentLibrary" -and
-not $_.Hidden } |
Select -ExpandProperty Items |
Where { $_.Name -like "*readme*" } |
Select Name, {$_.File.Length}, url
Maintenant, créons un rapport qui affichera tous les fichiers créés par un utilisateur spécifique. Ce script peut être utile, par exemple, lorsqu'un employé quitte l'entreprise et que vous devez transférer ses données à d'autres personnes.
Get-SPWeb http://sharepoint/sites/ent |
Select -ExpandProperty Lists |
Where { $_.GetType().Name -eq "SPDocumentLibrary" -and
-not $_.Hidden } |
Select -ExpandProperty Items |
Where { $_["Created By"] -like "*system*" } |
Select Name, url, {$_["Created By"]}
Notre dernier script utilisant la cmdlet Get-SPWeb rend compte de tous les fichiers avec une extension spécifiée :
Get-SPWeb http://sharepoint/sites/ent |
Select -ExpandProperty Lists |
Where { $_.GetType().Name -eq "SPDocumentLibrary" -and
-not $_.Hidden } |
Select -ExpandProperty Items |
Where { $_.Name -Like "*.rtf" } |
Select Name,
@{Name="URL";
Expression={$_.ParentList.ParentWeb.Url + "/" + $_.Url}}
Utiliser PowerShell pour gérer les sites et objets SharePoint
Les nouveaux sites SharePoint sont généralement créés à l'aide d'un modèle. Pour obtenir une liste de tous les modèles de site, exécutez la cmdlet Get-SPWebTemplate sans paramètres.
Nous utilisons le cmdlet Get-SPWebTemplate avec le cmdlet New-SPSite pour créer un nouveau site SharePoint basé sur un modèle. Voici un exemple de script pour créer un site en utilisant le modèle « Site d'équipe » (STS#0) :
$template = Get-SPWebTemplate "STS#0"
New-SPSite -Url "http://sharepoint/sites/Netwrixteamsite" -OwnerAlias "enterpriset.simpson" -Template $template
Pour supprimer un site, nous utilisons la cmdlet Remove-SPSite :
Remove-SPSite -Identity "http://sharepoint/sites/Netwrixteamsite" -GradualDelete
Parfois, vous pourriez avoir besoin de changer l'administrateur de la collection de sites. Exécutez le script suivant pour ajouter les droits d'administrateur à l'utilisateur spécifié :
Set-SPSite -Identity "http://sharepoint/sites/Netwrixteamsite" -SecondaryOwnerAlias " i:0#.w|enterprisei.scur"
Maintenant, voyons comment gérer les permissions pour nos collections de sites. D'abord, ajoutons certains droits d'accès à un compte utilisateur Active Directory spécifique. Dans ce cas, l'utilisateur « enterpriset.simpson » se verra attribuer les droits de « Contributeur » pour le site « http://sharepoint/sites/ent ». Notez qu'avant un nom de compte utilisateur régulier comme « enterpriset.simpson », vous devez utiliser le préfixe « i:0#.w| ». Sinon, l'exécution échouera et le script générera une erreur.
Set-SPUser -Identity "i:0#.w|enterpriset.simpson" -Web http://sharepoint/sites/ent -AddPermissionLevel "Contributor"
Pour ajouter des autorisations à un certain groupe de sécurité AD security, utilisez le même script mais tapez le nom du groupe au lieu du nom du compte utilisateur.
Pour ajouter un utilisateur à un groupe, utilisez cette commande :
Set-SPUser -Identity "i:0#.w|enterprisej.carter" -Web http://sharepoint/sites/ent -Group "Enterprise Owners"
Conclusion
Comme vous pouvez le voir, gérer et rapporter sur les sites SharePoint en utilisant des scripts PowerShell SharePoint n'est pas aussi difficile qu'il y paraît au premier abord. En fait, dans certains cas, il est beaucoup plus rapide d'exécuter un script plutôt que de générer un rapport à partir du journal d'audit administratif.
Pour assurer la sécurité et la haute disponibilité de votre environnement Microsoft SharePoint, vous devez également suivre attentivement les modifications qui y sont apportées. Netwrix Auditor for SharePoint peut facilement générer des rapports sur les changements dans SharePoint, vous offrant une visibilité complète sur qui a modifié quoi, quand et sur quelle ferme SharePoint. Vous pouvez également recevoir automatiquement des notifications concernant les modifications critiques. De plus, Netwrix Auditor for SharePoint vous fournira toutes les informations sur les permissions actuelles et la manière dont elles ont été accordées, ainsi que révéler toute rupture d'héritage dans votre environnement SharePoint.
Partager sur
En savoir plus
À propos de l'auteur
Jeff Melnick
Directeur de l'ingénierie des systèmes
Jeff est un ancien directeur de l'ingénierie des solutions mondiales chez Netwrix. Il est un blogueur, conférencier et présentateur de longue date chez Netwrix. Dans le blog Netwrix, Jeff partage des astuces et des conseils qui peuvent améliorer de manière significative votre expérience en administration système.
En savoir plus sur ce sujet
Supprimer le fichier avec Powershell s'il existe
PowerShell Write to File : "Out-File" et techniques de sortie de fichier
Comment créer de nouveaux utilisateurs Active Directory avec PowerShell
Comment exécuter un script PowerShell
Qu'est-ce que PowerShell ? Un guide complet de ses fonctionnalités et utilisations