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.

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

SharePoint: Cómo enviar correos electrónicos haciendo uso del correo electrónico saliente!

Si en nuestros desarrollos para SharePoint (Nota: Esta aproximación no vale para soluciones de tipo Sandbox y para Aplicaciones) necesitamos enviar correo electrónico y queremos aprovecharnos de tener configurado el correo saliente en SharePoint, basta con:

  • Añadir una directiva using a Microsoft.SharePoint.Administration.
  • A través de la propiedad OutboundMailServerInstance de SPAdministrationWebApplication obtener los datos relativos al servidor que tenemos configurado en la sección de correo saliente de SharePoint.
  • Y listo, a partir de aquí a hacer uso de los objetos específicos para enviar correos electrónicos :-), es decir, MailMessage y SmtpClient.
   1: string host = SPAdministrationWebApplication.Local.OutboundMailServiceInstance.Server.Address;            

   2:  

   3: MailMessage msg = new MailMessage();

   4: SmtpClient c = new SmtpClient();

   5: c.Host = host;

   6: msg.From = new MailAddress("someone@someone.es", "Someone");

   7: msg.To.Add(new MailAddress("someone2@someone.es", "Someone2"));

   8:  

   9: msg.Subject = "Test de correo";

  10: msg.Body = "Test de correo";

  11: msg.IsBodyHtml = true;

  12: msg.Priority = MailPriority.High;

  13: c.Send(msg);

Office 365: Mapeo de usuarios de Office 365 y Yammer para facilitar el acceso desde SharePoint Online!

Como sabéis, esta semana Microsoft ha hecho el anuncio de una nueva actualización para Office 365 que simplifica el acceso a Yammer desde el portal de Office 365 para aquellos casos en los que la capa social se realice por medio de Yammer y no por medio de SharePoint Online:

  • Lo primero que tenemos que hacer es configurar la capa social de SharePoint Online para que haga uso del feed de actividad de Yammer en lugar del suministro de noticias de SharePoint Online. Esto lo podemos comprobar desde la administración de SharePoint Online en la sección “Configuración” y luego en la sección “Colaboración social para la empresa”. Aquí tendremos que marcar la opción “Utilizar el servicio Yammer.com”.
  • Lo siguiente que veremos en Office 365 es qué los cambios se están haciendo de forma silenciosa puesto que de disponer del acceso directo “Suministro de noticas” en la barra de navegación superior vamos a pasar a tener “Yammer”.
image image
  • Si hacemos clic en “Yammer”, se abre otra página intermedia en la que se nos pide que hagamos efectivo el paso a Yammer.
  • Y es aquí cuando la magia aparece, porque de forma directa apareceremos en Yammer sin tener que especificar de nuevo las credenciales de acceso.
image image

[Eventos]: Volvemos a hablar de metodologías ágiles en Santander…te esperamos!

Pues eso, qué gracias a Rodrigo Corral y José Ramón Díaz el próximo 20 de marzo volveremos a hablar de metodologías ágiles en Santander. El evento comandado por estos dos cracks ha sido posible gracias  al apoyo de la Universidad de Cantabria y de LKS. Espero veros a muchos ese día. Los detalles del evento son los siguientes:

Enlace de inscripción, lugar y hora:

Universidad de Cantabria
Facultad de Ciencias, Aula Magna
Avenida de los castros s/n
39005 Santander
España

Detalle del evento:

LKS S. COOP

LKS y la Universidad de Cantabria (Vicerrectorado de Relaciones Institucionales y Coordinación de CCI) organizan en colaboración con Plain Concepts y Agilar una jornada sobre las metodologías ágiles desde la perspectiva de su aplicabilidad en las organizaciones. Veremos cuáles son los fundamentos de las metodologías ágiles y nos introduciremos en dos de sus implementaciones más populares, Scrum y Kanban. Profundizaremos en prácticas y técnicas comunes en los equipos ágiles. La experiencia de los ponentes en el apoyo a equipos en su camino por las metodologías ágiles permitirá aportar un enfoque práctico y realista a la jornada.

  • Audiencia:

Directores Sistemas, Directores de Ingeniería, Directores de Proyecto, Responsables de Producto, Equipos de Desarrollo, Equipos de Procesos, Profesorado, Estudiantes.

  • Agenda
    • Principios y valores ágiles
    • Los pilares y claves de Scrum
    • Kanban y su aplicación en el desarrollo de SW
    • Prácticas ágiles: buenas prácticas y experiencias
    • Preguntas y cierre del evento
  • Ponentes
    • Rodrigo Corral: Llevo desarrollando software profesionalmente desde los diecisiete años, primero como desarrollador independiente y, a continuación, para empresas como Sisteplant, líder en software de MES y GMAO y Panda Security, uno entre los líderes internacionales en el software de seguridad. Soy uno de los propietarios de Plain Concepts donde trabajo como desarrollado, consultor, mentor y formador en empresas de primera de línea en una amplia gama de temas como la gestión de proyectos, metodologías ágiles, Team System, patrones de software y arquitectura, gestión de configuración de software. Soy, además, uno de los miembros del Debbuging & Optimization Team de Plain Concepts, un grupo de profesionales altamente cualificados y experimentados especializados en localizar y solucionar problema de estabilidad y de rendimiento. He sido reconocido como Most Valuable Profesional de Microsoft en dos categorías diferentes, Visual C++ y Team System, 12 años consecutivos. También soy Microsoft Certified Trainer y Certified Scrum Master. También administro Geeks.ms, un popular sitio de comunidad en español para los desarrolladores de tecnologías de Microsoft. Escribo un blog muy popular alojado en Geeks.ms. Me encanta todo lo relacionado con el desarrollo de software. A parte de mis actividades profesionales, mis principales aficiones son jugar a pelota mano, andar en bici, el cine, la historia, y pasar el tiempo con mi familia y mis amigos.
    • Jose Ramón Diaz: Agile Coach y programador vocacional y apasionado, es un estudioso de todas las disciplinas que rodean a la construcción de software. Constructor de equipos altamente productivos, invierte el tiempo y esfuerzos necesarios en ayudar a que cada miembro de un equipo alcance la mejor versión de sí mismo. Siempre coloca a las personas en el centro de atención. Más información: http://www.linkedin.com/in/joseramondiaz Con más de 12 años de experiencia, ahora, trabajando en Agilar (www.agilar.es) se dedica a ayudar a las organizaciones a mejorar trabajando en la implantación de metodologías ágiles. Y no solo trabaja con empresas de desarrollo de software -donde se centra su experiencia técnica y de gestión-, sino que investiga cómo mover los principios ágiles a otros tipos de proyecto.

Plain Concepts

Nuberos.NET