miércoles, 29 de febrero de 2012

Guía rápida para configurar Kerberos para los servicios de SharePoint 2010

En muchas ocasiones que se configura Kerberos para los servicios relacionados con SharePoint 2010 es necesario recordar los códigos de los servicios, y algunos otros detalles que pueden pasársenos por alto.  La siguiente guía es precisamente para recordarnos esos detalles:

image

Para purgar el cache de Kerberos podemos utilizar la línea de comando kplist /purge.

Es Importante conocer la delegación que es necesario hacer en el Directorio Activo.  Hay 3 escenarios a continuación los describo:

Delegación para SQL Server Services

image

Delegación para Reporting Services

image

Delegación para servicios que dependen de c2WTS

image

SharePoint4Fun!,

Juan Manuel Herrera

viernes, 24 de febrero de 2012

Cómo programar un script de PowerShell para SharePoint 2010 para que se ejecute periódicamente

El problema:

Necesitamos realizar una tarea de mantenimiento periódicamente en el portal de SharePoint 2010, sin requerir mucho esfuerzo administrativo y que sea automático.

Solución:

Realizar un script que ejecute de lado del servidor en el Front-End de SharePoint 2010 y se ejecute periódicamente asistido por el Task Scheduler de Windows.

Para ello vamos a crear una tarea de Windows que se ejecute periódicamente y para ello necesitamos crear un archivo de lotes con extensión .bat para que el Task Scheduler lo ejecute el contenido de este archivo de lotes debe ser el siguiente:

C:\Windows\System32\WindowsPowerShell\v1.0\PowerShell.exe  c:\Directorio\MiScriptSharePoint2010.ps1

El script debe de validar si tiene el snap-in de SharePoint habilitado para ello escriba dentro del archivo ps1 la siguiente instrucción:

$snapin = Get-PSSnapin | Where-Object {$_.Name -eq 'Microsoft.SharePoint.Powershell'}
if ($snapin -eq $null)
{
  Write-Host "Loading SharePoint Powershell Snapin"
  Add-PSSnapin "Microsoft.SharePoint.Powershell"
}

El procedimiento para crear una tarea en el Task Scheduler de Windows Server 2008 r2 es muy intuitivo y esta documentado por todas partes por lo que no lo voy a documentar en el artículo.  Aquí uno de estos enlaces: http://allcomputers.us/windows_server/windows-server-2008-r2--task-scheduler.aspx

Recomendación:

Para evidenciar que el script se ejecutó y realizó la operación requerida registre en un archivo log.  Para ello utilice Start-Transcript para iniciar el registro del log y Stop-Transcript para finalizarlo.  Para registrar cada evento utilice Write-Host.

Ejemplo:

Start-Transcript [ruta del archivo log]

Write-Host (“Mensaje”+Variable)

Stop-Transcript

El Script completo puede ver se de la siguiente forma:

image

Si quiere saber mas del propósito de este Script vea el siguiente artículo: http://jmhogua.blogspot.com/2012/02/script-de-power-shell-de-sharepoint.html .

La tarea en el Task Scheduler puede lucir similar a la siguiente imagen:

image

En esta ocasión revisamos el procedimiento para programar una tarea que se ejecuta periódicamente y nos apoya en una labor de mantenimiento para el servidor SharePoint 2010.

SharePointJust4Fun!,

Manolo Herrera

miércoles, 22 de febrero de 2012

Script de Power Shell de SharePoint 2010 para eliminar los elementos de una lista mayor a 60 días de antigüedad

Problema:

Hay una lista que constantemente crece debido a que guarda los usuarios que ha visitado el portal y es necesario depurar esta lista luego de 60 días de caducidad.  La lista actualmente esta en más de 50,000 elementos y debería de mantenerse alrededor de 7,000 elementos como máximo.

Solución:

Utilizar Power Shell para crear un script que realice esta tarea.  El Script consta de 4 Partes que a continuación describo:

1) Cargar en memoria la biblioteca de clases de SharePoint para poder ejecutar el script desde una tarea de Windows.

[void][System.reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")

2) Obtener el listado de elementos a eliminar.  Esto lo hacemos por medio del lenguaje de consultas de SharePoint llamado CAML.

$site    =     new-object Microsoft.SharePoint.SPSite("Dirección url de mi colección de sitios")                                                       
$web     =    $site.rootweb                                                                                               
$list    =    $web.Lists["Nombre de la lista"]                                                                             
$DeleteBeforeDate = [Microsoft.SharePoint.Utilities.SPUtility]::CreateISO8601DateTimeFromSystemDateTime([DateTime]::Now.AddDays(-60))
$caml='
   <Where>
      <Lt>
         <FieldRef Name="CampoFechaAComparar" />
         <Value Type="DateTime">{0}</Value>
      </Lt>
   </Where>
' -f $DeleteBeforeDate
$query=new-object Microsoft.SharePoint.SPQuery
$query.Query=$caml

$col=$list.GetItems($query)

3) Copiar los Id’s de los elementos selccionados a un arreglo para evitar el error “Collection was modified; enumeration operation may not execute”

$items = New-Object System.Collections.ArrayList
#Obtiene los elementos a eliminar (No los elimina de una sola vez para evitar el error de elementos perdidos dentro del loop)
$col |  % {
$items.add($_.id)
}

4) Se eliminado los elementos de la lista por su ID.

# Procede a desplegar los elementos a borrar
$contador = 0
Foreach($item in $items)
{
$contador ++
$detalle = "No.: "+$contador+" |Id: "+$item
write-host $detalle
$col.DeleteItemById($item)
}
$mensaje = "total de elementos eliminados: "+$contador
write-host $mensaje
$web.Dispose()
$site.Dispose()  

Abajo todo el código.

image

Parte de la solución fue extraída del siguiente sitio:

http://blogs.flexnetconsult.co.uk/colinbyrne/2008/02/26/PowerShellSharePointThreeWaysToDeleteAListItemIDCAMLStringMatching.aspx

Mejoras:

En cuando a desempeño el realizar la operación DeleteItemById() demora 10 a 15 segundos en realizarla así que 40,000 elementos demorará aproximadamente 11 horas que no es muy eficiente, pero será solo una vez ya que no se permitirá luego crecer la lista con demasiados elementos para eliminar.

SharePoint4Fun,

Juan Manuel Herrera O.

martes, 21 de febrero de 2012

Sabias que en Project Server puedes mantener versiones de los proyectos

Esta funcionalidad esta disponible desde Project Server 2007, pero es poco conocida sin embargo es muy útil en casos donde necesitamos recuperar el proyecto antes de cambios que no fueron aceptados.

Para la versión 2007 la opción se llama “Schedule Backup”

image

En la versión 2010 la opción se llama acertadamente “Daily Schedule Backup”  (Algo que le hizo falta aclararlo en la versión 2007).

image

Ambas opciones despliegan la misma pantalla que permite definir el número de versiones que retendrá de los proyectos.  Es importante distinguir que la información es almacenada en la base de datos de archivo (Usualmente ProjectServer_Archive) y no la de publicación (ProjectServer_Published) la que usualmente se utiliza en el Centro de Proyectos y es mas de naturaleza transaccional.

clip_image002

Tome en cuenta que este número incrementará considerablemente el tamaño de la base de datos ProjectServer_Archive de Project Server.

Para realizar el respaldo “Administrativo” seleccione la opción “Administrative Backup”

image

Esta opción realizará la copia de respaldo hacia la base de datos ProjectServer_Archive en ese preciso momento cuando presione el botón “Backup”.

image

Para restaurar una versión anterior diríjase a la opción “Administrative Restore”

image

Seleccione la versión que desea restaurar (Esto trasladará la información del proyecto de la base de datos ProjectServer_Archive a la base de datos ProjectServer_Draft; donde están los proyectos borradores) y presione el botón Restore.

image

Nota: Para poder mover los proyectos restaurados de la base de datos de borradores ProjectServer_Draft es necesario ejecutar nuevamente el proceso de publicación.  Un usuario con suficientes permisos puede visualizar este proyecto en borrador desde el MS Project Professional y seleccionar la opción de publicación. Ojo que el que publique el proyecto será el nuevo administrador del mismo.

 

Esta opción nos permitirá depurar los proyectos muy antiguos sin desaparecerlos del todo.  Si deseamos consultarlos podemos utilizar Reporting Services que viene integrado con SharePoint para mostrar la información de estos proyecto que ya no estarán en la base de datos de publicación pero si en la de Archivo.

Hasta la próxima,

Juan Manuel Herrera O.

lunes, 6 de febrero de 2012

Desarrollo en SharePoint 2010: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible

 

Escenario:

Una Solución de granja o Farm solution, realizaba una conexión hacia el mismo servidor de SQL Server 2008 R2 donde estaban las bases de datos de SharePoint 2010, pero reportaba el siguiente mensaje:

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)    at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)     at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)     at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)     at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)     at System.Da...      8b06f50c-8cdf-49aa-a527-63b636efc09d

Lo extraño de esto es que si se ingresaba al servidor WFE de SharePoint 2010 y se ingresaba a la´solución desde el navegador habilitaba la conexión al servidor de SQL Server 2008 y desplegaba al información  y luego los demás usuarios podían acceder a la solución sin problemas.

La solución:

Aunque al final fue obvia al principio no fue así, fuimos validando y descartando los problemas uno a uno. De la siguiente forma:

1) Se revisó el código línea por línea registrando en el visor de eventos cada paso para validar que si obtuviera la conexión y se determino que al momento de ejecutar el Query reportaba el error de arriba.

2) Se verificó que no estuvieran habilitados los Firewall de Windows Server 2008 r2 en ambos servidores.

3) Se verificó que la cuenta de SQL Server tuviese acceso a la base de datos.

4) No se verificó si los servicios de SQL Server estuviesen levantados ya que eran los mismos que usaba SharePoint y el portal estaba arriba y funcionando correctamente.

5) La conexión hacia la base de datos parecía correcta ya que era la instancia predeterminada es decir el nombre del servidor.  El detalle estaba que este servidor de SQL Server tenía un alias porque no se conectaba por el puerto predeterminado de SQL Server 1433 sino uno personalizado 4050 por ejemplo y esto era todo el problema la conexión debía hacerse a través del alias.

En conclusión algo que debemos de verificar siempre es si la base de datos utiliza un alias y la rezón de porque lo hace ya que esto puede afectar nuestra conexión hacia la misma.

SharePoint4Fun!,

Juan Manuel Herrera O.

lunes, 30 de enero de 2012

Un caso práctico: Instalando Project Server 2007 sobre Windows Server 2008 R2

Project Server 2010 fue elevado a un producto de primera clase en Microsoft por lo que ya no se instala sobre la versión incluida de SharePoint en las versiones de servidor si no que debe de instalarse sobre SharePoint Server 2010 Edición Enterprise para aprovechar el soporte de inteligencia de negocios que tiene este producto.  Pero el tema es que el licenciamiento se eleva ya que hay que adquirir la licencia de SharePoint Server Enterprise y la licencia de Project Server 2010 adicional esto eleva los costes para las empresas que solo desean utilizar la parte de seguimiento y control de proyectos que tiene Project Server 2007.

Por la razón anterior empresas que inician en el proceso de administración de proyectos están seleccionando la opción de realizar un downgrade a Project Server 2007 pero utilizando los productos mas recientes en Sistema Operativo de Servidor y Base de Datos.

En este Caso vamos a ver los requerimientos de Hardware y Software necesario para mezclar tecnologías anteriores con actuales.  El problema radica en los cubos de Project Server 2007 que por mantener compatibilidad con SQL Server 2000 requiere que ciertos add-ons necesarios para desplegar los cubo deben de mantenerse en SQL Server 2005 aunque se esta utilizando bases de datos y los servicios de análisis de SQL Server 2008 R2.

A continuación el detalle:

Prepararemos dos servidores con Windows Server 2008 R2 Standard (La versión R2 solo viene para 64 bits).  Un servidor cubrirá el rol de Front-End y de Aplicación y el segundo de Servidor de base de datos.

En el servidor B para base de datos deberemos instalar de SQL Server 2008 R2 Edición Estándar.

En el servidor A  instalaremos la versión de Project Server 2007 con Service Pack 2.0 ó 3.0 incluido para evitar el error de incompatibilidad que muestra por ser ediciones desarrolladas en años diferentes.  Para ello es necesario crear un Create an installation source that includes software updates (Office SharePoint Server 2007)

Luego de instalar los bits de Project Server 2007 (El cual incluye WSS 3.0 automáticamente) le solicitará ejecutar el asistente de configuración de productos y tecnologías de SharePoint Services 3.0.  Esto creará la aplicación Web para la Administración Central de la granja o Central Administration.

Luego preparación de los paquetes de idioma a instalar con el service pack 3.0 incluído.  También es necesario crear un slipstreamed.

Información de Service Packs and Language Packs en:

http://blogs.technet.com/b/office_sustained_engineering/archive/2011/10/25/office-2007-and-sharepoint-2007-service-pack-3-availability.aspx

Deberá ejecutar el asistente de configuración de productos y tecnologías de SharePoint Services 3.0. tanto para el paquete de idioma de Wss 3.0 como el paquete de idiomas para Servidores Microsoft Office 2007 ya que ambos productos están instalados en el servidor.

Luego de configurar WSS 3.0 (levantar los servicios de WSS 3.0), el correo saliente y aprovisionar Project Server 2007.

Ahora es necesario configurar los cubos de Project Server para ello es necesario seguir la siguiente guía.

Requirements for using SQL Server 2008 Analysis Services with the Project Server 2007 Cube Building Service

Por ultimo vamos a instalar Reporting Services de SQL Server 2008 R2 Edición Estándar.

Luego instalaremos el Add-in de Reporting Services SQL Server 2008 SP2 para WSS 3.0.  (La versión Microsoft® SQL Server® 2008 R2 Service Pack 1 (SP1) Reporting Services Add-in for Microsoft SharePoint® Technologies 2010 aunque lo instaló error no mostró las características que se instalan en WSS 3.0 para integrar con SSRS).

Luego es necesario configurar la integración de Reporting Services con WSS 3.0 y viceversa para ello puede consultar el siguiente artículo que aunque es para SharePoint 2010 es el mismo procedimiento: http://jmhogua.blogspot.com/2010/08/sintesis-de-debe-de-tomar-en-cuenta.html .

Para resolver algunos problemas que surgen por la coexistencia entre SSRS 2008 R2 y los cubos de Project Server 2007 puede dirigirse a las siguientes direcciones:

http://social.msdn.microsoft.com/Forums/en/sqlsetupandupgrade/thread/d8daadc5-14bd-4670-ae23-af6a6b7177eb

http://support.microsoft.com/hotfix/KBHotfix.aspx?kbnum=972511&kbln=en

Esto es una guía para la instalación de Project Server 2007 sobre Servidores Windows Server 2008 R2 y SQL Server 2008 R2 ambos en su edición Estándar.

Hasta la próxima,

Juan Manuel Herrera

domingo, 29 de enero de 2012

Como cambiar la visualización de un hito en MS Office Project 2007 para que respete la duración de la tarea

Existen dos formas de mostrar hitos en MS Office Project 2007, una es ingresando una tarea con duración cero y otra es habilitando la opción marcar como Hito dentro de las opciones avanzadas de la tarea.  Pero Si la tarea tiene una duración mayor a cero días en el diagrama de Gantt solo nos mostrará un pequeño rombo image.

Para modificar esta forma predeterminada de visualización debemos de hacer lo siguiente:

1) Presionamos el botón derecho del ratón sobre el diagrama de Gantt y seleccionamos la opción “Estilos de barra…”

image

2) Seleccionamos la fila del Hito, luego en las columna “Parte Inicial” en Forma: seleccionamos la opción en blanco, en la parte Central en la columna Forma: seleccionamos una barra, en Trama una barra azul y en la sección “Parte final” seleccionamos un símbolo para el hito como es un punto dentro de un circulo con línea negra.  Para finalizar presione el botón Aceptar.

image

El resultado final será que el hito mostrará la duración de la tarea e indicará que es un hito también.

image

Hasta la próxima,

Juan Manuel Herrera