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
12
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
12
1 #Adding the Client OM Assemblies2
1 Add-Type -Path "<CSOM Path>\Microsoft.SharePoint.Client.dll"2
1 Add-Type -Path "<CSOM_Path>\Microsoft.SharePoint.Client.Runtime.dll"2
12
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
12
1 #Root Web Site2
1 $spoRootWebSite = $spoCtx.Web2
1 #Collecction of Sites under the Root Web Site2
1 $spoSites = $spoRootWebSite.Webs2
12
1 #Loading operations2
1 $spoCtx.Load($spoRootWebSite)2
1 $spoCtx.Load($spoSites)2
1 $spoCtx.ExecuteQuery()2
12
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
12
1#Required Parameters2
1$sSiteColUrl = "https://<YourSharePointSiteCollectionUrl>"2
1$sUsername = "<YourSPOUser>"2
1#$sPassword = Read-Host -Prompt "Enter your password: " -AsSecureString2
1$sPassword=convertto-securestring "<SPOUserPasswrod>" -asplaintext -force2
12
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