Comandos de PowerShell más útiles para SharePoint
SharePoint Server es una plataforma colaborativa basada en web que se integra con Microsoft Office. Para configurar los ajustes del sitio de SharePoint, los administradores del sistema suelen utilizar el Shell de administración de SharePoint que se instala con el producto SharePoint. La ejecución de SharePoint Management Shell llama al entorno de ejecución de Windows PowerShell y ejecuta un archivo de script denominado sharepoint.ps1, que carga el complemento de Windows PowerShell para SharePoint y ejecuta algunos comandos. Estos comandos no son muy importantes; incluyen elegir C:UsersUsername como ubicación de inicio para la ejecución del comando y ejecutar la última versión de la consola PowerShell.
Una mejor opción es utilizar PowerShell ISE. No sólo incluye muchos cmdlets creados especialmente para administrar SharePoint, sino que también ofrece código resaltado por colores, un motor de depuración y un motor de búsqueda de cmdlets.
Para cargar el complemento de SharePoint, debemos ejecutar el siguiente comando:
Add-PSSnapin Microsoft.SharePoint.PowerShellDespués de eso, es prudente actualizar la ayuda de PowerShell para obtener la información más reciente sobre los cmdlets de Microsoft SharePoint PowerShell:
Update-HelpEntonces, ¿qué cmdlets están disponibles en el complemento de SharePoint? Aquí está el comando que los enumerará todos:
Get-Command -Module "Microsoft.SharePoint.PowerShell"
Ahora echemos un vistazo más de cerca a los cmdlets de SharePoint más útiles.
Obtener información del sitio de SharePoint
El cmdlet Get-SPSite es el cmdlet principal para obtener información sobre sus colecciones de sitios de SharePoint. Enumera las URL de sus sitios de 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, el uso de almacenamiento, el nivel de cuota máximo y la fecha de la última 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 de nuestra granja de SharePoint 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 -NoTypeInformationTambién podemos usar el cmdlet Get-SPSite para crear un script de SharePoint PowerShell que enumere 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 de permisos completo 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 determinado en un sitio de SharePoint, necesitamos usar el cmdlet Get-SPWeb. Aquí hay un script que busca un archivo cuyo nombre contenga la palabra "léame" 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 generará todos los archivos creados por un determinado usuario. Este script puede resultar ú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 que utiliza el cmdlet Get-SPWeb 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}}Uso de PowerShell para administrar sitios y objetos de SharePoint
Los nuevos sitios de SharePoint normalmente se crean utilizando una plantilla. Para obtener una lista de todas las plantillas del sitio, ejecute el cmdlet Get-SPWebTemplate sin parámetros.
Usamos el cmdlet Get-SPWebTemplate con el cmdlet New-SPSite para crear un nuevo sitio de SharePoint basado en una plantilla. A continuación se muestra un ejemplo de una secuencia de comandos para crear un sitio utilizando la plantilla "Sitio de equipo" (STS#0):
$template = Get-SPWebTemplate "STS#0"
New-SPSite -Url "http://sharepoint/sites/Netwrixteamsite" -OwnerAlias "enterpriset.simpson" -Template $templatePara eliminar un sitio, utilizamos el cmdlet Remove-SPSite:
Remove-SPSite -Identity "http://sharepoint/sites/Netwrixteamsite" -GradualDeleteEn ocasiones, es posible que necesite 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 administrar los permisos para nuestras colecciones de sitios. Primero, agreguemos 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" del sitio "http://sharepoint/sites/ent". Tenga en cuenta que antes de un nombre de cuenta de usuario normal como “enterpriset.simpson”, debe utilizar 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 determinado grupo de seguridad de AD, 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, use 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 utilizando 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 a partir del registro de auditoría del administrador.
Para mantener su entorno de Microsoft SharePoint seguro y con alta disponibilidad, también debe realizar un seguimiento cuidadoso de los cambios allí. Netwrix Auditor para SharePoint puede generar fácilmente informes sobre los cambios de SharePoint, brindándole una visibilidad completa de quién cambió qué, cuándo y en qué granja de SharePoint. También puede recibir notificaciones sobre cambios críticos automáticamente. Además, Netwrix Auditor para SharePoint le brindará información completa sobre los permisos actuales y cómo se otorgaron, así como también le mostrará cualquier herencia rota en su entorno de SharePoint.


