SharePoint Latin Rotating Header Image

PowerShell

Como recuperar una colección de sitio que ha sido eliminada por error en SharePoint

Caballero si por alguna razón usted borró una colección de sitio por error y necesitas recuperarla inmediatamente, es mi deber informarle que hay una solución. Existe el comando Get-SPDeletedSite que fue introducido con el Service Pack 1 de SharePoint 2010 con el cual usted puede desplegar una lista de colecciones de sitio eliminadas y con base en la información presentada en este caso el SiteId usted puede ejecutar otro comando Restore-SPDeletedSite para recuperarla inmediatamente.


Mire usted:



 

Configurar cuenta de usuario para administrar granja SharePoint

Para efectos de ser granular y especifico en cuanto a los permisos y privilegios de aquellos que pueden realizar operaciones de administración de una granja SharePoint, normalmente hacemos uso de distintas cuentas de usuario dedicadas solo a la administración de este producto. En este post te quiero compartir los pasos para configurar de forma apropiada cuentas de administración SharePoint y así delegar a otros de una manera administrada y gestionable la administración de SharePoint.

Los pasos son:

  • Crear una nueva cuenta de directorio activo
  • Agregar la nueva cuenta como miembro al grupo de administradores locales
  • Agregar la nueva cuenta como miembro al grupo de WSS_Admin_WPG
  • Agregar la nueva cuenta a la lista de Administradores de Granja en la Herramienta Central de Administracion de SharePoint
  • Ejecutar comando PowerShell para asignar el rol de SQL Shell Access Admin sobre la bases de datos a las que la nueva cuenta puede administrar

Crear una nueva cuenta de directorio activo

Se recomienda que creemos una nueva cuenta de directorio active dedicada solo para el administrador en cuestión, esto para efecto de separar justamente las cuenta típica del empleado que realiza las operaciones de administrador de la gestión de la plataforma. Adicional, no queremos que la cuenta de usuario de uso diario de nuestro administrador sea la que tiene permisos sobre toda la granja, recordemos que el también es un usuario de SharePoint y no hay razón alguna para usar su identidad de empleado como la identidad del administrador de este servicio. Por ello, recomendamos crear una nueva cuenta y además usar una nomenclatura que claramente especifique la naturaleza de la función. Ejemplo adm.hgonzalez en donde adm. refiere que es una cuenta de administración.

Agregar la nueva cuenta como miembro al grupo de administradores locales

Otro consejo es crear un grupo de dominio y agregar este grupo de dominio al grupo de administradores locales en el servidor en cuestión, de esta forma simplemente agregamos nuestras cuentas de administradores SharePoint sobre el grupo de dominio el cual a su vez es miembro del grupo de administradores locales. Un nombre sugerido para este grupo puede ser “SharePointLocalAdmins”.

Agregar la nueva cuenta de administrador al grupo local WSS_ADMIN_WPG

También se requiere agregar nuestra nueva cuenta como miembro del grupo local WSS_ADMIN_WPG o simplemente agregar el grupo de dominio “SharePointLocalAdmins” como miembro al grupo local WSS_ADMIN_WPG.

Agregar la nueva cuenta a la lista de Administradores de Granja en la Herramienta Central de Administracion de SharePoint

Se requiere que nuestra cuenta de administrador se registre en la lista de administradores de granja de la herramienta central de Administracion SharePoint.

Ejecutar comando PowerShell para asignar el rol de SQL Shell Access Admin sobre la bases de datos a las que la nueva cuenta puede administrar

La cuenta en cuestión debe de contar con el rol SharePoint Shell Access sobre las bases de datos tanto de configuración como de contenido a fin de tener los permisos y privilegios para hacer operaciones de administración mediante PowerShell sobre esas bases de datos. Para poder asignar dicho rol usamos el comando Add-SPShellAdmin DOMINIO\adm.hgonzalez otorgando permisos a la base de datos de configuración. Sin embargo, si quisiéramos otorgar privilegios para manipular otras bases de datos de SharePoint como de contenido o de configuración de aplicaciones de servicio usamos el comando Get-SPDatabase | Add-SPShellAdmin DOMAIN\adm.hgonzalez para otorgar dichos privilegios en todas las bases de datos de la granja.

 

Configurando correo de salida en SharePoint usando PowerShell

Una de las primeras características del producto SharePoint es la de permitir a los usuarios a suscribirse a las alertas. Las alertas son un mecanismo de notificación de cambios vía correo electrónico en listas o bibliotecas de documentos permitiendo al usuario enterarse de cualquier cambio que suceda. Para que esta funcionalidad trabaje adecuadamente se debe de especificar en la configuración de la granja SharePoint la dirección SMTP del servidor que mandara los correos electrónicos y también la dirección de correo electrónico usada para enviar las notificaciones. Normalmente especificamos esos valores de forma manual usando la herramienta central de administración, sin embargo, el día de hoy quiero mostrar como especificar esta configuración usando un script de PowerShell.


$webApp = Get-SPWebApplication –IncludeCentralAdministration – Identity http://splapp1:5555


$webApp.UpdateMailSettings(“smtp.splatin.com”,”collaboration@splatin.com”, “collaboration@splatin.com”,65001)


$webApp.Update()

Ejecutando PowerShell 2.0 para comandos SharePoint 2010

Te ha pasado que de pronto en tu servidor SharePoint al cargar el SharePoint 2010 Management Shell te sale un error como este Microsoft SharePoint is not supported with version 4.0.30319.296 of the Microsoft .Net Runtime. Aun no estoy totalmente seguro de la causa pero algunos blogs dicen que hay que desinstalar los KB como KB2506143 y KB2506146, al parecer las actualizaciones de Microsoft Management Framework 3.0 son las que están causando este problema. También he de mencionar que Microsoft Management Framework 3.0 es un componente esencial para poder administrar SharePoint Online de Office 365 usando PowerShell así que cuidado como lo mencioné aquí.


Entonces, debido a que reiniciar el servidor después de desinstalar una actualización es algo requerido para resolver este problema, no es una opción viable en mi muy particular escenario. Además remover el KB solo causara que de nuevo se vuelva a descargar de forma automática.


Así que me di a la tarea de buscar como ejecutar PowerShell usando la versión 2.0 la cual es la soportada por SharePoint 2010 y el resultado fue el siguiente script, cargamos powershell.exe como administrador local y ejecutamos:


 cd\
cd windows
cd system32
cd windowspowershell
cd v1.0
powershell.exe -v 2
Add-PSSnapin Microsoft.SharePoint.PowerShell
 


Y listo! Ahora puedo ejecutar mis comandos de SharePoint. Ahora, en mí casi cuento con ciertas tareas del Windows Task Scheduler que ejecutan comandos PowerShell y también tuve que editarlos para usar la versión soportada como se muestra a continuación:


 


 

Administrando una instancia de Office 365 con PowerShell

Pues tengo la necesidad de crear un gran número de colecciones de sitio sobre una instancia de Office 365 y con el objetivo de reducir el marco de error por hacerlo mediante una intervención manual he decidido incrementar la consistencia y reducir el riesgo de fallo mediante la automatización del procedimiento en un script de PowerShell. Ademas de que son otras las personas que terminarán haciendo esta clase de operación.

Los pasos para poder conectarnos a Office 365 mediante PowerShell son:

  1. Instalamos Windows PowerShell 3.0 descargando Windows Management Framework 3.0.
  2. Instalamos el SharePoint Online Management Shell descargándolo del Microsoft Download Center
  3. Ejecutamos de Inicio > Programas > SharePoint Online Management Shell
  4. Ejecutamos el comando Connect-SPOService y proporcionamos la ruta de nuestro Central Administration de Office 365 así como también nuestro usuario y password de administrador.
  5. Ahora sí, puedes hacer lo que quieras usando los comandos de PowerShell para SharePoint Online o usando esta aplicación.

image

PD. Trata de NO utilizar algún servidor de tu ambiente SharePoint On Premise para  administrar una instancia de Office 365 o SharePoint Online.

Sin capacidad de almacenamiento suficiente durante proceso de Exportacion/Importacion en SharePoint

En esta semana nos encontramos con un escenario muy particular relacionado con comandos Import/Export SPWeb en SharePoint 2010. Al correr Export-SPWeb o Import-SPWeb el proceso en algún punto marcaba error y la razón fue porque la unidad C: llegaba a su capacidad máxima de almacenamiento.

Es increíble, ya que es bien sabido que debemos contar con volúmenes de disco duro adicionales para guardar los LOGS de SharePoint y en el caso de la base de datos los LOGS y MDFs de SQL. Además, la unidad C: solo es para guardar los archivos del sistema y debemos tener libre el doble equivalente de memoria RAM en capacidad de almacenamiento en disco duro. En otras palabras, si tengo 8GB de RAM, siempre debería tener por lo menos 16GB de espacio almacenamiento libre en C:

Entonces si tengo el almacenamiento de mi servidor de aplicaciones debidamente configurado con diversos volúmenes e incluso con cierto nivel de RAID, ¿porque se llena el disco duro al ejecutar comandos Import-SPWeb y Export-SPWeb?

Resulta que estos comandos son la alternativa disponible para mover sitios web de SharePoint entre colecciones de sitio, son capaces de mover permisos, contenido, versiones, workflows, etc. En estos tiempos donde muchas empresas carecen de gobernabilidad y planeación de un servicio SharePoint es común ver sitios web de SharePoint realmente grandes con una jerarquía de sitios muy profunda y desde la perspectiva de almacenamiento realmente enormes y esto tiene una implicación importante a considerar cuando trabajamos con Import-SPweb y Export-SPWeb.  En realidad y de forma interna estos comandos hacen uso de una funcionalidad pre-construida en SharePoint llamada Content Deployment.

Content Deployment ofrece una alternativa para mover contenido de un lugar a otro y cuenta con todo un proceso para realizarlo. Este proceso es invocado tanto por los comandos Import-SPWeb, Export-SPWeb, Content Deployment del Central Administracion, los respaldos granulares y el modelo de objetos de SharePoint entre otros. En primer instancia este proceso requiere de varios atributos como tipo de exportación (full o incremental), sitios o contenido que será incluido, rutas y paths de archivos donde se exporta el contenido y los logs de los procesos, entre otras opciones de configuración. El caso es que en algún punto, este proceso construye un archivo XML que describe todas las instrucciones detalladas de exportación o importación que proceso deberá seguir y por consiguiente si el sitio a exportar es muy grande, este archivo y algunos otros temporales que genera lo será también. Y bueno, ¿En dónde crees que estos archivos tras bambalinas se almacenan de forma temporal? Pues en el TEMP del usuario firmado y ¿En dónde se almacena el TEMP del usuario firmado? Pues en el disco duro C: y he ahí la razón.

Una alternativa de solución a esto es modificar la variable de entorno TEMP para que su ruta de almacenamiento apunte a una unidad que si tenga la capacidad de almacenamiento necesaria para soportar nuestros procesos de importación y exportación.

clip_image001

También si estás trabajando con PowerShell puedes usar $env:temp para obtener la ruta del TEMP y modificarla usando set-item -path env:temp -value "F:\TEMP".

Cosas de la vida! Saludos

UPDATE: Existe el switch NoFileCompression que podemos utilizar para evitar que de forma temporal se generen los archivos adicionales que se comentaron durante el post. Por default, NoFileCompression es False y esto genera en la carpeta TEMP los archivos temporales previos a los que genera el proceso. Este switch lo deberas especificar tanto en Export-SPWeb como Import-SPWeb.

PowerShell Command Builder para SharePoint 2010 y Office 365

Encontré por ahí una aplicación para generar comandos de PowerShell llamada PowerShell Command Builder la cual encuentro muy útil. La dirección para acceder es http://www.microsoft.com/resources/TechNet/en-us/Office/media/WindowsPowerShell/WindowsPowerShellCommandBuilder.html y requieres contar con el plugin Silverlight en tu navegador.

image

Aqui mas informacion: http://www.microsoft.com/download/en/details.aspx?id=27588

Instalando Granja de Servidores SharePoint 2010 Small Farm (3-Tier)

Para un programador SharePoint es importante conocer la arquitectura de la plataforma y en ese sentido realizar un proceso de instalación de una granja SharePoint es un deber. En esta ocasión quiero compartir como lograr en una topología llamada Small Farm (Three Tier).


clip_image001


Básicamente tenemos un software (Network Load Balancing) para balancear y distribuir la carga entre dos servidores Web Front End (litwarewfe1 y litwarewfe2) y tendremos un solo servidor de aplicaciones (litwareapp) con la mayoría de las aplicaciones de servicio y la herramienta central de administración configurada, todo el contenido y la configuración será almacenada sobre un solo servidor de base de datos SQL Server (litwaredb).


Network Load Balancing en Windows Server 2008 R2 para WFE de SharePoint 2010



Configurando Granja de Servidores SharePoint 2010



Configurando Granja de Servidores SharePoint 2010 con PowerShell


Descargando las PPTs de SharePoint Conference 2011

Para los que fueron o han adquirido el acceso a MySPC del sitio http://www.mssharepointconference.com encontré en internet un script de PowerShell para descargar las presentaciones de SharePoint Conference 2011 de forma automática, solo que al ejecutarlo, PowerShell marcaba el siguiente error:

File C:\spc2011\GetAllPPTs.ps1 cannot be loaded because the execution of scripts is disabled on this system. Please see “get-help about_signing” for more details

Para solucionarlo:

1. Ejecutamos el script Set-ExecutionPolicy RemoteSigned

2. Posteriormente, en las propiedades del archivo GetAllPPTs.ps1 damos clic en el botón Unblock.

clip_image001

3. Ejecutamos de nuevo y listo.

Aun no se si este script nos sirve para descargar los videos.

Saludos

Como restablecer el sitio web de IIS “SharePoint Web Services” cuando éste es eliminado por error en SharePoint 2010

Algo que me gusta de trabajar como ingeniero de soporte freelance es el orgullo que te da ganar esas pequeñas batallas contra la ignorancia.


Problema


El problema fue que se extendió una aplicación web de SharePoint usando el sitio web de IIS “SharePoint Web Services”. Antes que cualquier otra cosa, este sitio web de IIS hospeda algunos servicios WCF de sistema los cuales se configuran en todos los WFE de la granja y son utilizados por algunas aplicaciones de servicio, el asistente de configuración de SharePoint es el encargado de aprovisionar este sitio web en tiempo de instalación y configuración de la granja. 


image


Lo que sucedió es que al extenderse esta aplicación web en este caso “MySite” se detuvieron aplicaciones de servicio y quedo totalmente inoperable. El resultado fue desastroso para la granja ya que se detuvieron las aplicaciones de servicio Manage Metadata, User Profile y en este caso el portal de MySite de todo el corporativo. El mensaje de error al intentar acceder al portal fue Could not load user profile, adicional el visor de eventos empezó a regitrar An exception occurred when trying to issue security token: The server did not provide a meaningful reply; this might be caused by a contract mismatch, a premature session shutdown or an internal server error.


Como primera reacción de cualquier ser humano es la de des extender el portal.


image


Inyectando con esto un problema mayor ya que al remover vía herramienta de administración SharePoint el sitio web de IIS causa que las carpetas asociadas en el sitio web sean eliminadas de la ruta a la que apunta, en este caso C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\WebServices\Root.


La solución


La solución a este escenario fue ejecutar el script mencionado en el post How to get back the SharePoint WebServices application in IIS if deleted, SharePoint 2010   para regenerar el sitio web de IIS “SharePoint Web Services”,  este proceso en efecto si aprovisiono de nuevo el sitio web de IIS, sin embargo, al dar clic sobre el marcaba un error indicando que no existía la ruta de los archivos lo cual es totalmente correcto ya que al des extender se elimino todos los archivos de la ruta a donde apuntaba.


image


Lo que se decidió fue buscar la carpeta Root de otra granja y copiarla sobre la carpeta en cuestión. Posteriormente se ejecuto de nuevo el siguiente codigo encontrado aqui: How to get back the SharePoint WebServices application in IIS if deleted, SharePoint 2010. Basicamente lo que el procedimiento hace es cargar una instancia de la place SPIisWebServiceInstanceSettings e invoca un par de metodos para realizar el aprovisionamiento del sitio web de IIS sobre el servidor. Una vez que es aprovisionado se procede a realizar un ciclo donde por cada aplicacion de servicio es aprovionado el nuevo sitio web de IIS restableciendo con esto la vinculacion y la dependencia al mismo.


$webservice = [System.Type]::GetType(“Microsoft.SharePoint.Administration.SPIisWebServiceSettings, Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c”)


$Instance = $webservice::Default


$Method = $webservice.GetMethod(“ProvisionLocal”, “Instance, NonPublic”, $null, @(), $null)


$Method.Invoke($Instance, $null)


$Method = $webservice.GetMethod(“Provision”, “Instance, Public”, $null, @(), $null)


$Method.Invoke($Instance, $null)


Get-SPServiceApplication | ForEach-Object {$_.Provision()}


En resumen


Cuando inicias con una nueva plataforma  y estas en proceso de aprendizaje es comun o normal que sucedan detalles, errores, situaciones de configuracion por error, la recomendacion es revisar cualquier procedimiento en una granja de pruebas para validar el proceso y los resultados previamente.  Aqui dos enlaces donde platico algunas consideraciones al respecto: Que se necesita para ser consultor y/o desarrollador SharePoint y Consideraciones para poner en marcha soluciones personalizadas SharePoint en ambientes de producción de nuestros clientes.


Saludos