En este artÃculo veremos algunas de las posibilidades de administración de SharePoint Online a través de la interfaz de lÃnea de comandos y el uso de PowerShell. Como se verá en el artÃculo, a pesar de las "aparentes" limitaciones que el reducido número de comandos PowerShell disponibles para SharePoint Online supone, estas se pueden superar por medio del uso del modelo de objetos en cliente (CSOM) desde PowerShell.
Preparando el entorno para administrar SharePoint Online con PowerShell
Para poder administrar SharePoint Online por medio de PowerShell necesitamos cumplir una serie de pre-requisitos que pasan por:
Una vez que tenemos listo el entorno de Administración de SharePoint Online con PowerShell, el siguiente paso consiste en elegir la herramienta de Administración que se va a utilizar. Las posibilidades son dos:
A tÃtulo particular, os recomiendo utilizar PowerShell ISE. En cualquier caso, elijáis la herramienta que elijáis para poder administrar SharePoint Online tendréis que escribir y ejecutar una secuencia mÃnima de comandos PowerShell que os permitirán conectaros a un tenant particular de SharePoint Online:
1$sUserName="<YourOffice365Account>"2
1$sMessage="Introduce your SPO Credentials"2
1$sSPOAdminCenterUrl="https://<YourDomain>-admin.sharepoint.com/"2
1$msolcred = get-credential -UserName $sUserName -Message $sMessage2
1Connect-SPOService -Url $sSPOAdminCenterUrl -Credential $msolcred2
La ejecución de la secuencia anterior produce como resultado la petición de credenciales de acceso al tenant de SharePoint Online en Office 365:
A partir de aquÃ, ya estamos listos para poder hacer uso de los comandos PowerShell disponibles para SharePoint Online. Pero antes, os recomiendo obtener un listado rápido de los mismos mediante la siguiente secuencia PowerShell:
1$spoCmdlets=Get-Command | where {$_.ModuleName -eq "Microsoft.Online.SharePoint.PowerShell"}2
1Write-Host "There are " $spoCmdlets.Count " Cmdlets in SharePoint Online"2
1$spoCmdlets2
Si ejecutáis el script anterior, obtendréis que se dispone de un total de 30 comandos PowerShell para SharePoint Online.
Notas:
Uso de los comandos PowerShell por defecto para SharePoint Online
Como se puede deducir del listado de comandos PowerShell disponibles por defecto para SharePoint Online, con los mismos se pueden hacer actividades como por ejemplo:
Listar todas las colecciones de sitios disponibles en un tenant de SharePoint Online y su información detallada:
1Â Â Â Â Â Â Â $spoSites=Get-SPOSite | Select *2
1Â Â Â Â Â Â Â foreach($spoSite in $spoSites)2
1Â Â Â Â Â Â Â {2
1Â Â Â Â Â Â Â Â Â Â Â $spoSite2
1Â Â Â Â Â Â Â }2
La salida correspondiente por pantalla releva el tipo de información que nos proporciona el comando Get-SPOSite para cada colección de sitios:
1Â Â Â Â Â Â Â $spoSites=Get-SPOSite | Select *2
1Â Â Â Â Â Â Â foreach($spoSite in $spoSites)2
1Â Â Â Â Â Â Â {2
1Â Â Â Â Â Â Â Â Â Â Â Write-Host "Users for " $spoSite.Url -foregroundcolor Blue2
1Â Â Â Â Â Â Â Â Â Â Â Get-SPOUser -Site $spoSite.Url2
1Â Â Â Â Â Â Â Â Â Â Â Write-Host2
1Â Â Â Â Â Â Â }Â Â Â Â2
En este caso, para cada sitio disponible en el tenant de SharePoint Online se visualiza el nombre para mostrar del usuario, el login de usuario y el grupo de SharePoint al que pertenece:
1Â Â Â Â Â Â Â $sSiteColTitle="SPO PowerShell Site Col"2
1Â Â Â Â Â Â Â $sSiteColUrl="https://<Office365Domain>.sharepoint.com/sites/SPOPowerShellSiteC"2
1Â Â Â Â Â Â Â $sOwner="<Office365UserLogin>@<Office365Domain>.onmicrosoft.com"2
1Â Â Â Â Â Â Â $sLocaleID=30822
1Â Â Â Â Â Â Â $iTemplateID="STS#0"2
1Â Â Â Â Â Â Â $iStorageQuota=10242
1Â Â Â Â Â Â Â New-SPOSite -Title $sSiteColTitle -Url $sSiteColUrl -Owner $sOwner -LocaleId $sLocaleID -Template $iTemplateID -StorageQuota $iStorageQuota2
Uso del modelo de objetos en cliente desde PowerShell
Más allá de lo que podemos hacer con los comandos PowerShell disponibles por defecto para SharePoint Online, podemos hacer uso del Modelo de Objetos en Cliente lo que incrementa notablemente las posibilidades de administrar y operar SharePoint Online desde la interfaz de lÃnea de comandos. Para poder hacer uso del Modelo de Objetos en Cliente en PowerShell tenemos que seguir las siguientes pautas:
1Â Â Â Â Â Â Â Add-Type -Path "<CSOM Path>\Microsoft.SharePoint.Client.dll"2
1Â Â Â Â Â Â Â Add-Type -Path "<CSOM_Path>\Microsoft.SharePoint.Client.Runtime.dll"2
1- Definir en primer lugar un objeto de tipo ClientContext a partir de la Url de una Colección de Sitios de SharePoint Online.2- Indicar unas credenciales de conexión validas a la Colección en cuestión.3- Comenzar a realizar operaciones en la Colección teniendo en cuenta que en primer lugar hay que inicializar las operaciones mediante el método Load() de ClientContext para a continuación proceder a ejecutar dicha operación con el método ExecuteQuery().4
Por ejemplo, el siguiente script PowerShell muestra como listar todos los sitios bajo una Colección de Sitios en SharePoint Online:
1$host.Runspace.ThreadOptions = "ReuseThread"2
1Â2
1#Definition of the function that gets all the site collections information in a SharePoint Online tenant2
1function Get-SPOSitesInSC2
1{2
1Â Â Â param ($sSiteColUrl,$sUsername,$sPassword)2
1Â Â Â try2
1Â Â Â {Â Â Â2
1Â Â Â Â Â Â Â Write-Host "----------------------------------------------------------------------------"Â -foregroundcolor Green2
1Â Â Â Â Â Â Â Write-Host "Getting all the sites in a SharePoint Online Site Collection" -foregroundcolor Green2
1Â Â Â Â Â Â Â Write-Host "----------------------------------------------------------------------------"Â -foregroundcolor Green2
1Â Â Â Â2
1       #Adding the Client OM Assemblies      Â2
1Â Â Â Â Â Â Â Add-Type -Path "<CSOM Path>\Microsoft.SharePoint.Client.dll"2
1Â Â Â Â Â Â Â Add-Type -Path "<CSOM_Path>\Microsoft.SharePoint.Client.Runtime.dll"2
1Â2
1Â Â Â Â Â Â Â #SPO Client Object Model Context2
1Â Â Â Â Â Â Â $spoCtx = New-Object Microsoft.SharePoint.Client.ClientContext($sSiteColUrl)2
1Â Â Â Â Â Â Â $spoCredentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($sUsername, $sPassword)Â2
1Â Â Â Â Â Â Â $spoCtx.Credentials = $spoCredentials2
1Â2
1Â Â Â Â Â Â Â #Root Web Site2
1Â Â Â Â Â Â Â $spoRootWebSite = $spoCtx.Web2
1Â Â Â Â Â Â Â #Collecction of Sites under the Root Web Site2
1Â Â Â Â Â Â Â $spoSites = $spoRootWebSite.Webs2
1Â2
1       #Loading operations      Â2
1Â Â Â Â Â Â Â $spoCtx.Load($spoRootWebSite)2
1Â Â Â Â Â Â Â $spoCtx.Load($spoSites)2
1Â Â Â Â Â Â Â $spoCtx.ExecuteQuery()2
1Â2
1Â Â Â Â Â Â Â #We need to iterate through the $spoSites Object in order to get individual sites information2
1Â Â Â Â Â Â Â foreach($spoSite in $spoSites){2
1Â Â Â Â Â Â Â Â Â Â Â $spoCtx.Load($spoSite)2
1Â Â Â Â Â Â Â Â Â Â Â $spoCtx.ExecuteQuery()2
1Â Â Â Â Â Â Â Â Â Â Â Write-Host $spoSite.Title " - " $spoSite.Url -ForegroundColor Blue2
1Â Â Â Â Â Â Â }2
1Â Â Â Â Â Â Â $spoCtx.Dispose()2
1Â Â Â }2
1Â Â Â catch [System.Exception]2
1Â Â Â {2
1Â Â Â Â Â Â Â write-host -f red $_.Exception.ToString()Â Â2
1Â Â Â }Â Â Â2
1}2
1Â2
1#Required Parameters2
1$sSiteColUrl = "https://<YourSharePointSiteCollectionUrl>"2
1$sUsername = "<YourSPOUser>"2
1#$sPassword = Read-Host -Prompt "Enter your password: " -AsSecureStringÂ2
1$sPassword=convertto-securestring "<SPOUserPasswrod>" -asplaintext -force2
1Â2
1Get-SPOSitesInSC -sSiteColUrl $sSiteColUrl -sUsername $sUsername -sPassword $sPassword2
La salida por pantalla correspondiente es la que se muestra a continuación:
Conclusiones
El uso de PowerShell para administrar y trabajar con SharePoint Online es posible no sólo a través de los comandos PowerShell proporcionados por defecto, sino también a partir de las posibilidades del uso del Modelo de Objetos en Cliente desde scripts y funciones PowerShell. De esta forma se habilitan escenarios interesantes en el trabajo con SharePoint Online ya que se pueden automatizar tareas como la creación de contenedores de información (Colecciones de Sitios, Sitios, Listas, Bibliotecas de Documentos), carga masiva de documentación, migración desde SharePoint On-Premise, y finalmente el despliegue de soluciones personalizadas.
Juan Carlos González MartÃn MVP de SharePoint Server | Arquitecto de Soluciones en LKS jcgonzalezmartin1978@hotmail.com | jc.gonzalez@lks.es @jcgm1978 http://geeks.ms/blogs/jcgonzalez