Búsqueda de sitios web

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.PowerShell

Despué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-Help

Entonces, ¿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 -NoTypeInformation

Tambié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 $template

Para eliminar un sitio, utilizamos el cmdlet Remove-SPSite:

Remove-SPSite -Identity "http://sharepoint/sites/Netwrixteamsite" -GradualDelete

En 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.

Artículos relacionados