SharePoint: Como borrar recursivamente los sitios de una colección mediante PowerShell!

En esta ocasión os dejo un script PowerShell que os permite borrar de forma recursiva los sitios de una colección de sitios. Como veis, se trata de hacer uso de Remove-SPWeb teniendo cuidado de no borrar el sitio raíz de la colección.

   1: If ((Get-PSSnapIn -Name Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue) -eq $null ) 

   2: { Add-PSSnapIn -Name Microsoft.SharePoint.PowerShell }

   3:  

   4: #Hacemos un buen uso de PowerShell para no penalizar el rendimiento

   5: $host.Runspace.ThreadOptions = "ReuseThread"# Se crea el la aplicación del portal

   6:  

   7: #Definición de la función

   8: function Delete-Sites([Microsoft.SharePoint.SPWeb] $spWeb)

   9: {   

  10:     

  11:     $spsubWebs = $spWeb.GetSubwebsForCurrentUser()

  12:     

  13:     foreach($spsubWeb in $spsubWebs)

  14:     {

  15:         Delete-Sites($spsubWeb)        

  16:         $spsubWeb.Dispose()

  17:     }    

  18:     

  19:     #Borra,os los subsitios mientras no estemos en el sitio raíz

  20:     if($spWeb.Url -ne $sSiteCollUrl)        

  21:     {

  22:         Write-Host -f blue "Eliminado el sitio ($($spWeb.Url))..." 

  23:         #Borramos el objeto SPWeb del último nivel    

  24:         Remove-SPWeb $spWeb -Confirm:$false

  25:     }

  26: }

  27:  

  28: Start-SPAssignment –Global

  29: #Parámetros necesarios y llamada a la función

  30: $sSiteCollUrl = “http://<UrlColeccion>”

  31: $spSite = Get-SPSite -Identity $sSiteCollUrl

  32: $spWeb = $spSite.OpenWeb()

  33:  

  34: #Llamada a la función

  35: if($spWeb -ne $null)

  36: {

  37:     Delete-Sites $spWeb

  38:     $spWeb.Dispose()

  39: }

  40:  

  41: $spSite.Dispose()

  42:  

  43: Stop-SPAssignment –Global

  44:  

Espero que este script os sirva de utilidad.

Anuncios

SharePoint Online: Aplicación “Web Analytics Integration” para estadísticas de sitios públicos!

Aunque parecía que en sitios públicos de SharePoint Online seguíamos un tanto cojos en lo que a estadísticas de sitios públicos se refiere, en la nueva generación no lo estamos tanto gracias al nuevo modelo de aplicaciones de SharePoint 2013 disponible también en SharePoint Online y que nos permite extender la plataforma en aquellos puntos dónde sea necesario. En este caso, Microsoft ha creado una aplicación denominada Web Analytics Integration que está pensada para cubrir el requerimiento de disponer de estadísticas de un sitio público utilizando para ello servicios conocidos como Google Analytics o Web Trends. En este enlace podéis ver un paso a paso sobre como adquirir y configurar la aplicación. Si queréis ver los detalles de la App antes de instalarla, la podéis localizar en el Office Store:

  • Desplegáis el menú de Apps en la página principal del Office Store para acceder a la sección de aplicaciones para SharePoint.
  • En la página de aplicaciones para SharePoint, buscáis por la palabra Analyticis. Entre los resultados encontraréis la App “Web Analytics Integration”
image image

image

SharePoint 2013 & SharePoint Online: Troubleshooting de problemas con OneDrive Pro (II)!

Siguiendo a vueltas con los problemas que puede dar OneDrive a la hora de sincronizar documentos en nuestro equipo local, os dejo algunas referencias adicionales que pueden ayudaros a su resolución:

SharePoint 2013: Disponible para descarga el Service Pack 1!

Con un poco de sorpresa, porque os puedo asegurar que se esperaba la disponibilidad del Service Pack (SP) 1 de SharePoint y Office 2013, Microsoft acaba de anunciar la disponibilidad para descarga del SP1 de SharePoint Foundation 2013, SharePoint Server 2013 y Office 2013. Los enlaces de descarga respectivos son los siguientes:

En cuanto a las novedades del SP1 y los correspondientes artículos de la Knowledge Base (KB) os recomiendo que reviséis el siguiente enlace del blog de Office Sustained Engineering: http://blogs.technet.com/b/office_sustained_engineering/archive/2014/02/25/announcing-the-release-of-service-pack-1-for-office-2013-and-sharepoint-2013.aspx. También podéis acceder a toda la lista de cambios y problemas solucionados en el siguiente documento Excel: http://download.microsoft.com/download/0/A/8/0A870358-D451-488E-BF54-9616292E19EC/Microsoft%20Office%20and%20SharePoint%202013%20Service%20Pack%201%20Changes.xlsx

Office 365: Como realizar el borrado masivo de usuarios mediante PowerShell!

A raíz de una pregunta que me han hecho esta tarde sobre como borrar de forma masiva varios usuarios (incluyendo sus licencias), me he puesto a hacer pruebas y este es el resultado al que he llegado (hay más formas de llegar al mismo): borrar los usuarios a partir de sus cuentas de usuario almacenadas en un csv. El script que se muestra a continuación simplemente:

  • Realiza una conexión a Office 365 mediante get-credential y connect-msolservice (Nota: Para ejecutar comandos contra Windows Azure Active Directory os recomiendo la siguiente referencia: http://technet.microsoft.com/en-us/library/jj151815.aspx)
  • Con Import-CSV imputamos el archivo .csv que contiene los usuarios a borrar.
  • En un bucle, nos recorremos los datos con los usuarios a borrar y mediante Get-MSolUser y Remove-MsolUser eliminamos los usuarios y nos aseguramos que no se queden almacenados en la papelera de reciclaje.
   1: #Hacemos un buen uso de PowerShell par ano penalizar el rendimiento

   2: $host.Runspace.ThreadOptions = "ReuseThread"

   3:  

   4: #Conexión a Office 365

   5: $msolcred = get-credential

   6: connect-msolservice -credential $msolcred

   7:  

   8: #Función para la carga de datos

   9: function Remove-Office365Users

  10: {

  11:         # Cogemos los datos del archivo CSV

  12:         $bFileExists = (Test-Path $sInputFile -PathType Leaf) 

  13:         if ($bFileExists) { 

  14:             "Cargando $InvFile para Procesado..." 

  15:             $tblDatos = Import-CSV $sInputFile            

  16:         } else { 

  17:             Write-HostNo se encuentra el archivo $sInputFile. Parando la importación!" -foregroundcolor Red

  18:             exit 

  19:         } 

  20:         

  21:         # Carga de los datos en las listas auxiliares

  22:         Write-Host "Borrando usuarios de Office 365 ..." -foregroundcolor Green    

  23:         foreach ($fila in $tblDatos) 

  24:         { 

  25:             "Borrando el usuario " + $fila.$sNombreColumna.ToString()            

  26:             Get-MsolUser -UserPrincipalName $fila.$sNombreColumna | Remove-MsolUser -Force -RemoveFromRecycleBin

  27:  

  28:         } 

  29:  

  30:         Write-Host "-------------------------------------------------------"  -foregroundcolor Blue

  31:         Write-Host "Borrado completado" -foregroundcolor Blue

  32:         Write-Host "-------------------------------------------------------"  -foregroundcolor Blue

  33: }

  34:  

  35: $ScriptDir = Split-Path -parent $MyInvocation.MyCommand.Path

  36: $sInputFile=$ScriptDir+ "\UsuariosABorrar.csv"

  37: $sNombreColumna="UserPrincipalName"

  38: Remove-Office365Users

  • En cuanto al archivo .csv, tiene que tener la siguiente estructura:

image

Office 365: Como eliminar licencias de usuario de una subscripción existente!

Otra pregunta “mítica” en los foros de Office 365 es la de como eliminar licencias de usuario en nuestras suscripciones porque no se van a usar más. En este punto, no hay mucha documentación al respecto y os dejo las referencias que he encontrado:

Como veis, las dos primeras referencias apuntan a que es necesario hacer una llamada a soporte para que se encarguen de las gestiones necesarias.

SharePoint: Como añadir nuevos campos a la User Information List (en Foundation) (II)!

Siguiendo con la serie de posts sobre como añadir campos a la User Information List en SharePoint Foundation, en esta ocasión os voy a mostrar como añadir esos campos por medio de PowerShell. Básicamente, añadir nuevos campos por medio de PowerShell a esta lista pasa por:

  • Acceder a la lista en cuestión a través del correspondiente objeto SPWeb. En primer lugar se comprueba si la columna a añadir ya existe mediante el método ContainsField() y si existe se borra.
  • A continuación definimos la columna a añadir que como podéis ver es de tipo Lookup, es decir, la información de la columna se recoge de otra lista del sitio (Países en el ejemplo). Para añadir una columna de tipo Lookup usamos el método AddLookup en el que especificamos el nombre para mostrar, el ID de la lista en el qué se basa el campo de lookup y si el campo es obligatorio (http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spfieldcollection.addlookup.aspx).
  • A continuación lo que hacemos es configurar el campo de lookup cambiando el nombre para mostrar por otro más amigable y permitiendo que se puedan escoger varios valores en tiempo de edición. Finalmente, mediante el método Update() actualizamos los cambios en la User Information List.
   1: If ((Get-PSSnapIn -Name Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue) -eq $null ) 

   2: { Add-PSSnapIn -Name Microsoft.SharePoint.PowerShell }

   3:  

   4: $host.Runspace.ThreadOptions = "ReuseThread"

   5:  

   6: $sSiteUrl = “http://sqlsrv2012/sites/RedSocial/”

   7: Start-SPAssignment –Global

   8:  

   9: $spSite = Get-SPSite -Identity $sSiteUrl

  10: $spWeb = $spSite.OpenWeb()

  11: $sUserInfoList="Lista de información del usuario"

  12: $lUserInformationList=$spWeb.Lists[$sUserInfoList] 

  13: $fieldDisplayName = "País"

  14:   

  15: # Comprobamos si la columna existe

  16: if($lUserInformationList.Fields.ContainsField($fieldDisplayName)){

  17:     Write-host "Borrando la columna de la lista..."

  18:     $lUserInformationList.Fields[$fieldDisplayName].Delete();

  19: }

  20:  

  21:  

  22: $fieldInternalName = "Pais"

  23: $sListaLookup="Países"

  24: $lListaLookup=$spWeb.Lists["Países"]

  25: $guidListaLookup=$lListaLookup.ID

  26:  

  27: $lUserInformationList.Fields.AddLookup($fieldInternalName ,$guidListaLookup,$false)

  28:  

  29: $lUserInformationList.Fields[$fieldInternalName].AllowMultipleValues=$True

  30: $lUserInformationList.Fields[$fieldInternalName].Title=$fieldDisplayName

  31: $lUserInformationList.Fields[$fieldInternalName].Update()

  32:  

  33: Stop-SPAssignment –Global

  • Tras ejecutar el script, veremos los resultados en la User Information List.

image