Los comandos de PowerShell más útiles para SharePoint
Nov 12, 2018
Los comandos de PowerShell de SharePoint más útiles permiten a los administradores gestionar sitios, objetos y permisos de manera más eficiente que las herramientas nativas. Cmdlets como Get-SPSite y Get-SPWeb proporcionan información detallada del sitio y de los archivos, mientras que New-SPSite, Remove-SPSite, y Set-SPUser agilizan la creación, eliminación y control de acceso de sitios. Al automatizar los informes, la gestión de permisos y las auditorías, los scripts de PowerShell de SharePoint mejoran la productividad, reducen errores y refuerzan la seguridad en los entornos.
SharePoint Server es una plataforma colaborativa basada en la web que se integra con Microsoft Office. Para configurar los ajustes del sitio de SharePoint, los administradores de sistemas a menudo utilizan SharePoint Management Shell que se instala con el producto SharePoint. Ejecutar SharePoint Management Shell llama al entorno de ejecución de Windows PowerShell y ejecuta un archivo de script llamado sharepoint.ps1, el cual carga el complemento de Windows PowerShell para SharePoint y ejecuta algunos comandos. Estos comandos no son muy importantes; incluyen elegir C:UsersUsername como la ubicación principal para la ejecución de comandos y ejecutar la última versión de PowerShell console.
Una mejor opción es utilizar el PowerShell ISE. No solo incluye muchos cmdlets creados especialmente para administrar SharePoint, sino que también ofrece código resaltado en color, un motor de depuración y un motor de búsqueda de cmdlets.
Para cargar el complemento de SharePoint, necesitamos ejecutar el siguiente comando:
Add-PSSnapin Microsoft.SharePoint.PowerShell
Después de eso, es prudente actualizar la ayuda de PowerShell para obtener la información más reciente sobre los cmdlets de PowerShell de Microsoft SharePoint:
Update-Help
Entonces, ¿qué cmdlets están disponibles en el snap-in de SharePoint? Aquí está el comando que los listará todos para ti:
Get-Command -Module "Microsoft.SharePoint.PowerShell"
Ahora echemos un vistazo más detallado a los cmdlets de SharePoint más útiles.
Contenido relacionado seleccionado:
Obteniendo información del sitio SharePoint
Get-SPSite cmdlet es el cmdlet principal para obtener información sobre sus colecciones de sitios SharePoint. Enumera las URL de sus sitios SharePoint y sus niveles de compatibilidad (versiones de SharePoint).
Usando el parámetro Select-Object con este cmdlet, podemos obtener propiedades específicas sobre un sitio, como el propietario del sitio, uso de almacenamiento, nivel máximo de cuota y la última fecha de modificación del contenido:
Get-SPSite "http://sharepoint/sites/ent" | Select-Object url, owner, @{Expression={$_.Usage.Storage}}, @{Expression={$_.Audit.AuditFlags}}, readonly, LastContentModifiedDate, @{Express={$_.QuotaStorageMaximumLevel}}
Además, podemos exportar información sobre todos los sitios en nuestro SharePoint farm a un archivo csv:
Get-SPWebApplication http://sharepoint/ | Get-SPSite -Limit All | Get-SPWeb -Limit All | Select Title, URL, ID, ParentWebID | Export-CSV C:rootsharepointinventory.csv -NoTypeInformation
También podemos usar el cmdlet Get-SPSite para crear un script de PowerShell de SharePoint que liste todos los grupos y sus miembros para un sitio de SharePoint en particular:
$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 necesita un informe completo de permisos para un sitio de SharePoint, ejecute el siguiente código, especificando la URL del sitio de SharePoint ($SPSiteURL) y la ruta para exportar los datos a un archivo 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();
Para encontrar un archivo específico en un sitio de SharePoint, necesitamos usar el cmdlet Get-SPWeb. Aquí hay un script que busca un archivo cuyo nombre contiene la palabra “readme” en el sitio “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
Ahora hagamos un informe que mostrará todos los archivos creados por un usuario específico. Este script puede ser útil, por ejemplo, cuando un empleado deja la empresa y necesitas transferir sus datos a otras personas.
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"]}
Nuestro último script utilizando el Get-SPWeb cmdlet informa sobre todos los archivos con una extensión especificada:
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}}
Usando PowerShell para gestionar sitios y objetos de SharePoint
Los nuevos sitios de SharePoint suelen crearse utilizando una plantilla. Para obtener una lista de todas las plantillas de sitio, ejecute el cmdlet Get-SPWebTemplate sin parámetros.
Utilizamos el cmdlet Get-SPWebTemplate con el cmdlet New-SPSite para crear un nuevo sitio de SharePoint basado en una plantilla. Aquí hay un ejemplo de un script para crear un sitio utilizando la plantilla “Team Site” (STS#0):
$template = Get-SPWebTemplate "STS#0"
New-SPSite -Url "http://sharepoint/sites/Netwrixteamsite" -OwnerAlias "enterpriset.simpson" -Template $template
Para eliminar un sitio, utilizamos el cmdlet Remove-SPSite:
Remove-SPSite -Identity "http://sharepoint/sites/Netwrixteamsite" -GradualDelete
A veces, puede ser necesario cambiar el administrador de la colección de sitios. Ejecute el siguiente script para agregar derechos de administrador al usuario especificado:
Set-SPSite -Identity "http://sharepoint/sites/Netwrixteamsite" -SecondaryOwnerAlias " i:0#.w|enterprisei.scur"
Ahora, veamos cómo gestionar los permisos de nuestras colecciones de sitios. Primero, añadamos ciertos derechos de acceso a una cuenta de usuario de Active Directory en particular. En este caso, al usuario “enterpriset.simpson” se le otorgarán derechos de “Colaborador” en el sitio “http://sharepoint/sites/ent”. Tenga en cuenta que antes de un nombre de cuenta de usuario regular como “enterpriset.simpson”, debe usar el prefijo “i:0#.w|”. De lo contrario, la ejecución fallará y el script generará un error.
Set-SPUser -Identity "i:0#.w|enterpriset.simpson" -Web http://sharepoint/sites/ent -AddPermissionLevel "Contributor"
Para agregar permisos a un cierto grupo de AD security, use el mismo script pero escriba el nombre del grupo en lugar del nombre de la cuenta de usuario.
Para agregar un usuario a un grupo, utilice este comando:
Set-SPUser -Identity "i:0#.w|enterprisej.carter" -Web http://sharepoint/sites/ent -Group "Enterprise Owners"
Conclusión
Como puede ver, administrar e informar sobre sitios de SharePoint usando scripts de SharePoint PowerShell no es tan difícil como podría parecer al principio. De hecho, en algunos casos, es mucho más rápido ejecutar un script que generar un informe desde el registro de auditoría de administración.
Para mantener su entorno de Microsoft SharePoint seguro y altamente disponible, también necesita rastrear cuidadosamente los cambios allí. Netwrix Auditor for SharePoint puede generar fácilmente informes sobre los cambios en SharePoint, brindándole una visibilidad completa de quién cambió qué, cuándo y en qué granja de SharePoint. También puede recibir notificaciones automáticas sobre cambios críticos. Además, Netwrix Auditor for SharePoint le proporcionará información completa sobre los permisos actuales y cómo se otorgaron, así como mostrar cualquier herencia rota en su entorno de SharePoint.
Compartir en
Aprende más
Acerca del autor
Jeff Melnick
Director de Ingeniería de Sistemas
Jeff es un ex Director de Ingeniería de Soluciones Globales en Netwrix. Es un bloguero, orador y presentador de Netwrix desde hace mucho tiempo. En el blog de Netwrix, Jeff comparte lifehacks, consejos y trucos que pueden mejorar drásticamente tu experiencia en la administración de sistemas.