Mostrando las entradas con la etiqueta Perfiles de Usuario. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Perfiles de Usuario. Mostrar todas las entradas

miércoles, 2 de noviembre de 2016

El Servicio de Perfiles de Usuario en Sharepoint Server 2016 Qué Paso?

El servicio de los perfiles de Usuario ha cambiado no es su estructura y funcionamiento sino en su configuración y dependencia.  Para explicarles mejor vamos hacer algo de historia desde su versión 2007.

La historía

Microsoft Office SharePoint Server 2007 o MOSS 2007 se configuraba un Servicio llamada Shared Service Provider y este incluía los siguientes Servicios:

1) Excel Services

2) Search Services
3) User Profile Services

El inconveniente de este proveedor de servicios compartidos es que si fallaba uno de los servicios afectaba el resto si se deseaba provisionar de nuevo, con lo que Microsoft en su próxima versión cambio la arquitectura de los servicios a una más flexible y escalable.


SharePoint Server 2010

Esta versión nos trabajo la novedad en la arquitectura introduciendo el concepto de Aplicaciones de Servicio donde cada servicio se configuraba independientemente del otro y aunque hay servicios que dependen de otros se configuran por separado.  Aquí nace el Apliciación de Servicio de Perfiles de Usuario o UPA.    

Para esta versión el Servicio UPA trabaja dependiente de un servicio de Windows llamado FIM o Forefront Identity Manager.  La configuración de este servicio por la clara dependencia con FIM traía siempre dificultades ya que requerie de permisos especiales en las cuentas de usuario creadas para ejecutar este servicio.  De hecho la sincronización con los perfiles de usuario con el Active Directory requiere utilizar la cuenta de servicio de la granja de SharePoint denominada usualmente SPFarm.


Esta dependencia no solo complicaba la configuración y el echarla andar dicho servicio  sino que cada vez que se actualizaba la granja de SharePoint con un Service Pack o Hot Fix el servicio que usualmente dejaba de funcionar era el UPA.


SharePoint Server 2013 no cambió mucho aún con la misma dependencia con FIM y con los mismas dificultades de su versión 2010.


SharePoint Server 2016

Microsoft ha estado en un cambio constante preparándonos para el futuro  y sus productos no son la excepción sino su caballo de fuerza para mostrarnos lo que esta aconteciendo.   Para esta versión Microsoft  y el equipo de SharePoint eliminó la dependencia de FIM de las versiones anteriores y nos brinda dos opciones:

1) Use SharePoint Active Directory Import 

2) External Identity Manager

Esto da paso a que SharePoint  utlice una Identidiad Externa como MIM 2016 o Microsoft Identity Manager 2016 que es la evolución de FIM con mayores capacidades de conexión hacia ambientes locales o en la nube evolución necesaria para ambientes híbridos y planes de Microsoft.


Es decir que en SharePoint Server 2016 ya no existe el servicio User Profile Syncronization Service y tampoco instala los servicios Forefront Identity Manager Service y Forefont Identity Manager Syncrhronization Services ( a menos que si instalé MIM 2016 sobre el servidor de SharePoint manualmente usted en ese servidor)

Ahora cuando deberíamos utilizar SharePoint Active Directory Import y cuando utilizar External Identity Manager como MIM 2016.  Bueno eso depende que se desee hacer.  A continuación una tabla comparativa que nos ayudará a tomar la mejor decisión:




Opción Pros Cons
SharePoint Active Directory Import
Fácil y rápido de Configurar
Controlado desde el servicio de Aplicación de los perfiles de Usuario
Timer Job de sincronización  desde SharePoint
No se pueden definir filtros
No se puede importar imágenes del AD
Solo se puede Importar del Ad hacia SharePoint
External Identity Manager / MIM 2016
Permite configurar Filtros
Permite importar fotografías desde el AD
Permite operaciones para actualizar los atributos del AD

Requiere más esfuerzo para instalar y configurar
Esta fuera de la interfaz del Central Administration
Hay que crear manualmente tareas de Windows para sincronizar usuarios periódicamente
* Para mas detalle sobre los Pros y Cons puede consultar la siguiente referencia: https://technet.microsoft.com/en-us/library/mt627723(v=office.16).aspx 


Prerequisitos
Tanto para SharePoint Active Directory Import y External Identity Manager se requiere que ya este Provisionado UPA o User Profile Service Application y que si esta en una granja de más de 2 servidores en el servidor de Aplicación donde esta el Central Administration tenga iniciado el servidor User Profile Service (Este es importante para que sincronice los usuarios del AD con UPA).



Para crear el servicio UPA siga el procedimiento Standard que ha utilizado por años con SP 2013 y 2010 no hay ninguna diferencia.  Puede hacerlo vía Central Administration o bien con PowerShell con el beneficio de este último que puede cambiar el nombre de la base de datos de sincronización que en esta versión no permite asignarlo a nivel del Central Administration.

Un recordatorio importante es la cuenta de sincronización deba de tener permisos de Replicación de los cambios de Directorio es el procedimiento usual abajo la referencia:


Como un dato adicional para configurar UPA en SharePoint Server 2016  utilicé la misma cuenta de sincronización como cuenta para ejecutar el Application Pool donde corre la aplicación de servicio UPA.  Normalmente se la denomina como SPSyncAD.

SharePoint Active Directory Import 
Para configurar SharePoint Active Directory Import debe de seguir los siguientes pasos:

  1. Asegurese que esta configurada la opción SharePoint Active Directory Import para ello dentro de Manage Profile Serice Seleccione la opción Configure Synchronization Settings
  2. Cree la(s) conexión(es) hacia los dominios del AD que desea sincronizar eso dentro de Manage Profile Serice la opción Configure Synchronization Connections (Necesita conocer el nombre del dominio, la contraseña de la cuenta de sincronización SPSyncAD y las UOs que desea sincronizar)
  3. Ejecute la sincronización completa, para ello vaya dentro de Manage Profile Service a la opcion Start Profile Sinchronization. 

Nota: Sino sincroniza nada, revise que el servicio de User Profile Service este levantado en el servidor de Central Administration y que la cuent de sincronización SPSyncAD tenga permisos.

External Identity Manager
Para Configurar External Identity Manager / MIM 2016 debe de seguir los siguientes pasos:

  1. Configurar en UPA que va utilizar una identidad externa
  2. Install Microsoft Identity Manager
  3. Implementar  MIM 2016 para SharePoint Server 2016
  4. Crear una tarea de windows para ejecutar sincronización del script completo y delta
Guía Oficial de Microsoft 


https://technet.microsoft.com/en-us/library/mt627723(v=office.16).aspx
https://technet.microsoft.com/en-us/library/mt637055(v=office.16).aspx

Guía gráfica
http://krossfarm.com/?p=145 
http://krossfarm.com/?p=148

Guía práctica para configurar MIM en SP 2016
https://thesharepointfarm.com/2016/03/automating-mim-user-profile-synchronization-with-sharepoint-2016/

Bueno amigos eso esto todo por este artículo
SharePoint4Fun!,

Juan Manuel Herrera Ocheita

jueves, 8 de enero de 2015

Script en PowerShell para actualizar correo y puesto del perfil de usuario

Con la tendencia mundial de migración hacia la nube y en especial a Office 365, la migración de dominios que estén listos para Office 365 es uno de los caminos a seguir, pero en este proceso de migración pueden salir las cosas mal, por ello he escrito un Script en PowerShell para que actualice la propiedad de WorkEmail y Title (o sea Puesto) en el servicio de Perfiles de Usuario, basado en un archivo CSV con el objetivo de corregir algún error que se haya efectuado o bien porque no se han migrado aún los correos al nuevo dominio pero es necesario que sigan funcionando las alertas de SharePoint con la cuenta de correo anterior… Bueno y lo del puesto no sería necesario si se sincroniza, pero si se desea hacer una rápida actualización de un puñado de usuarios de esta propiedad sin necesidad de sincronizar todos los usuarios, es una solución práctica.

Como el Script se basa en un archivo CSV vamos a describir el formato de este archivo.

Formato del Archivo CSV

El formato CSV es un archivo de texto que tiene en su primera línea contiene el nombre de cada columna como parte del encabezado y se separa por una coma. Luego cada línea siguiente representa una fila y se separa igualmente por comas

Los nombres de las columnas del archivo CSV deben de tener por lo menos las siguientes:

NewAccount: Es la cuenta de usuario. Ejemplo: DOMINIO\NOMBRE_USUARIO

Title: El Puesto del usuario. Ejemplo: NOMBRE DEL PUESTO

Email: EL correo del usuario. Ejemplo: nombre_usuario@dominio.com

Un ejemplo del contenido de un archivo es el siguiente

NewAccount,Title,Email

DOMINIO\NOMBRE_USUARIO,Nombre del Puesto,nombre_usuario@dominio.com

El Script

 

#Primera línea de archivo UpdateUPAProperties.ps1

#Primero solicitaremos dos parámetros; $archivoEntrada = Que es la ruta de la ubicación del archivo csv y $misitioUrl que la URL de My Site. 

param (
    [string]$archivoEntrada , [string]$miSitioUrl
)

#Valida si fue ingresado el parámetro $archivoEntrada, sino le asigna un valor predeterminado para pruebas
if ($archivoEntrada -eq $null -or $archivoEntrada -eq "")
{
    $archivoEntrada = "E:\Infoware\Scripts\PruebaActualizaPropiedadesPerfilUsuario.csv"

    Write-Host "No ha recibido parametro archivoEntrada"
}

#Valida si fue ingresado el parámetro $miSitioUrl sino le asigna uno predeterminado
if ($miSitioUrl -eq $null -or $miSitioUrl -eq ""){
    $miSitioUrl = http://misitio.dominio.com
}

#Se Cargan las librerias de SharePoint para ejecutar la actualización de los perfiles de usuario

if((Get-PSSnapin | Where {$_.Name -eq "Microsoft.SharePoint.PowerShell"}) -eq $null) {
    Add-PSSnapin Microsoft.SharePoint.PowerShell;
}
[reflection.assembly]::Loadwithpartialname("Microsoft.Office.Server.Search") | out-null
[reflection.assembly]::Loadwithpartialname("Microsoft.Office.Server") | out-null

#Se Carga en memoria el Administrador de Perfiles de Usuario para ello es necesario la url que solicitamos en el parámetro e instanciar en memoria la colección de sitios y el sitio principal de MySite.
$site=Get-SPSite $miSitioUrl
$web=$site.RootWeb
$serverContext=[Microsoft.Office.Server.ServerContext]::GetContext($site)
$upm=New-Object Microsoft.Office.Server.UserProfiles.UserProfileManager($serverContext)


# Ahora cargaremos en memoria como una tabla el archivo CSV
$FileExists = (Test-Path $archivoEntrada -PathType Leaf)
if ($FileExists) {
   "Loading $archivoEntrada for processing..."
   $listadoUsuarios = Import-CSV $archivoEntrada
} else {
   "$archivoEntrada not found - stopping import!"
   exit
}

#El objetivo de esta función es actualizar el valor de la propiedad del perfil de usuario en cuestión

function set-SPProfileProperty([string]$propertyName, [string]$val, $up)
{

        #Validamos que no venga el perfil de usuario nulo
         if($up -ne $null)
        {

            #Obtenemos la propiedad por su nombre
            $property = $up.Properties.GetPropertyByName($propertyName)

     #Validamos que no si hayamos obtenido la propiedad


            if (-not [System.String]::IsNullOrEmpty($property))
            {
                $up[$propertyName].value = $val;
                $up.Commit();
                write-host "Actualizo la propiedad " $propertyName " con el valor" $val -ForegroundColor yellow
            }
        }
 
    Write-Host "Done" -foregroundcolor green
}

#Recorremos la tabla en memoria del archivo CSV

foreach ($row in $listadoUsuarios)
{
   $loginName = $row.NewAccount

   #Validamos que obtuvimos la columna NewAccount que trae la cuenta del usuario
   if( $loginName)
   {
        #validamos que el usuario exista en los perfiles de usuario
        if($upm.UserExists($loginName)){

            #Obtenemos el Perfil del Usuario
            $up = $upm.GetUserProfile($loginName);

            #Validamos que hayamos obtenido el perfil del usuario
            if($up) {
                $Puesto = $row.Title
                $Correo = $row.email       

                    #Si la columna Title trae valor invocamos la función para que modifique la propiedad en UPA
                    if($Puesto) {
                        set-SPProfileProperty -propertyName "Title" -val $Puesto -up $up
                
                    }

                   #Si la columna Corre trae valor invocamos la función para que modifique la propiedad en UPA

                    if($Correo) {
                        set-SPProfileProperty -propertyName "WorkEmail" -val $Correo -up $up
                    }
            }    
        }else
        {
            Write-Host "Usuario no existe " $loginName -ForegroundColor Red
        }
   }
}


Write-Host "End of file"
# Fin del archivo ps1

Procedimiento de Ejecución

Para ejecutar el Script puede utilizar PowerShell de Windows 3.0 o bien la consola de administración de SharePoint 2013.  Abajo una imagen que muestra como ejecutar el Script desde una ubicación predeterminada.

image

Bueno amigos espero les sirva el Scrip como lo hizo conmigo.

Hasta la próxima!… SharePoint4Fun!,

Juan Manuel Herrera Ocheita