Microsoft Lync Server
Header

En muchas ocasiones tenemos la necesidad de habilitar en Lync todos los usuarios de una Unidad Organizativa de nuestro Directorio Activo, y además queremos automatizar dicho proceso. Esto podemos hacerlo de forma sencilla mediante PowerShell, primero debemos conocer el DN de la OU en la cual tenemos los usuarios que queremos habilitar en Lync. Para ello podemos hacerlo de varias formas, desde la consola de Usuarios y Equipos de Active Directory vamos al menu Ver y habilitamos la opción Características avanzadas

Habilitar_Usuarios_Lync_OU_2.png
Ahora pulsamos con el botón secundario del ratón encima de la OU en cuestión y vamos  propiedades, ahora nos vamos a la ficha Editor de atributos, buscamos el atributo distinguishedName y pulsamos en ver y nos mostrará el valor del DN que necesitaremos posteriormente, por lo que copiaremos el valor mostrado:
 
OU=Usuarios,OU=AsirLAB,DC=dominio,DC=com
Habilitar_Usuarios_Lync_OU_3.png 
Ahora que ya tenemos el DN, lo que debemos hacer es ejecutar el siguiente script de PowerShell en alguno de los servidores de Lync:
 
Get-CsAdUser -filter {Enabled -ne $True} -OU “DN_OU” | Enable-CsUser -RegistrarPool <fqdn_front-end_o_pool>-SipAddressType Emailaddress
 
Ejemplo:
 
Get-CsAdUser -filter {Enabled -ne $True} -OU “OU=Usuarios,OU=AsirLAB,DC=dominio,DC=com” | Enable-CsUser -RegistrarPool <fqdn_front-end_o_pool>-SipAddressType Emailaddress
Este script habilitará en Lync a todos los usuarios de la OU Usuarios dentro de la OU AsirLAB del dominio dominio.com, su dirección SIP se creará en base a su dirección de correo electrónico y no lo intentará con los usuarios que ya están habilitados en Lync (-filter {Enabled -ne $True}).
 
Podemos utilizar distintos filtros en función de nuestras necesidades, para ello podemos utilizar los siguientes modificadores:
 
SINTAXIS
    Get-CsAdUser [-Identity <UserIdParameter>] [-Credential <PSCredential>] [-DomainController <Fqdn>] [-Filter <String>] [-LDAPFilter <String>] [-OU    <OUIdParameter>] [-ResultSize <Unlimited>] [<CommonParameters>]
 
Ejemplo: Habilitar usuarios del departamento de Sistemas que no estén habilitados en Lync
 
Get-CsAdUser -LdapFilter "Department=Sistemas" -filter {Enabled -ne $True} | Enable-CsUser -RegistrarPool <fqdn_front-end_o_pool>-SipAddressType Emailaddress
 
Por último podemos listar los usuarios de nuestro AD que no ha sido habilitado en Lync en nuestro Active Directory, para ello tenemos el siguiente cmdlet:
 
Get-CsAdUser -Filter {Enabled -ne $True} | Select-Object DisplayName
 
Como todo ahora es cuestión de que configuréis vuestro propio script en función de vuestras necesidades.
 
Espero que osea de utilidad!!!

Una de las funciones interesantes de Lync, es la posibilidad de agregar nuevos comandos a los menús de Lync.  Esto resulta muy interesante, porque nos permite añadir nuevas opciones a los distintos menús del cliente Lync. Por ejemplo, en mi caso quiero agregar a todos los usuarios un enlace a la guía de Lync desde varios menús.

Lo primero comentar que todos estos cambios, se realizan directamente en el registro de los equipos en donde tenemos Lync instalado: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\15.0\Lync\SessionManager\Apps y como requisito comentaros que debemos tener la versión 15.0.4420.1017 de Lync. También comentarios que las claves SessionManager\Apps no existen, por lo que debéis crearlas vosotros

Ahora vamos a ver que claves de registro debemos crear y cual es su función:

Nombre Tipo Datos
Nombre
REG_SZ
Nombre de la aplicación tal como aparece en el menú.
ApplicationType
DWORD
0 = Ejecutable (valor predeterminado)
noteNota:
Requiere ApplicationInstallPath.
1 = Protocolo
ApplicationInstallPath
REG_SZ
Ruta de acceso completa del ejecutable.
noteNota:
Debe especificarse si ApplicationType es igual a 0 (ejecutable).
Ruta
REG_SZ
Ruta de acceso completa que debe iniciarse junto con cualquier parámetro, incluidos los parámetros predeterminados %user-id% y %contact-id%.
SessionType
DWORD
0 = Sesión local. La aplicación se inicia en el equipo local.
1 = Sesión entre dos participantes (valor predeterminado). Lync 2013 inicia la aplicación localmente y envía una notificación de escritorio al otro usuario. El otro usuario hace clic en la notificación para iniciar la aplicación en su equipo.
2 = Sesión de varios participantes. Lync 2013 inicia la aplicación localmente y envía notificaciones de escritorio al resto de usuarios. El resto de usuarios hacen en la notificación para iniciar la aplicación especificada en su equipo.
ExtensibleMenu
REG_SZ
Lista de menús en los que aparecerá este comando, separados por caracteres de punto y coma. Los valores posibles son:
MainWindowActions
MainWindowRightClick
ConversationWindowActions
ConversationWindowRightClick
ContactCardMenu
Si no se define ExtensibleMenu, se utilizan los valores predeterminados de MainWindowRightClick y ConversationWindowActions.

Aquí os muestro una entrada de registro, a partir del cual podeís crear vuestro fichero de registro .reg para automatizar la creación de los distintos menús: 

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\15.0\Lync\SessionManager\Apps\{1F9F07C6-7E0B-462B-AAD7-98C6DBEA8F69}]
"ApplicationType"=dword:00000001
"Name"="Guía de Lync"
"Path"="http://blog.asirsl.com/Paginas/guialync.aspx"
"ExtensibleMenu"="MainWindowActions;MainWindowRightClick;ContactCardMenu"
"SessionType"=dword:00000000
 
Fichero .reg con dos nuevas aplicaciones (Guía de Lync vía HTTP y Microsoft Word vía .exe): Menu_Comandos_Lync.rarMenu_Comandos_Lync.rar
 
Aquí lo único que debéis tener en cuenta es el GUID, ({1F9F07C6-7E0B-462B-AAD7-98C6DBEA8F69}), debéis utilizar uno diferente para cada menú que queráis crear. Partiendo de este, es cuestión de crear los siguientes con numeraciones diferentes (ejemplo: {1F9F07C6-7E0B-462B-AAD7-98C6DBEA8F70}). Una vez que hemos importado el fichero .reg en nuestro registro, debemos cerrar Lync  e iniciarlo de nuevo y ahora ya tenemos nuestro nuevo comando disponible. Si no especificamos la clave ExtensibleMenu por defecto lo tendremos disponible en todos los menús:
  • En el menú Herramientas, en la barra de menús en la ventana principal de Lync
  • En el menú contextual de contactos en la lista de contactos
  • En el menú Más opciones, en la ventana Conversación
  • En el menú contextual para las personas que aparecen en la lista de participantes de la ventana Conversación
  • En el menú de opciones de una tarjeta de contacto

Para comprobar que tenemos disponible el comando, abrimos Lync buscamos un usuario y pulsamos con el botón secundario encima del mismo

Agregar_comandos_menus_lync_2.png

En mi caso podemos apreciar que tengo la Guía de Lync y la aplicación Microsoft Word, porque previamente ya los había configurado en el registroAgregar_comandos_menus_lync_3.png

Cada aplicación tiene su GUID y sus configuraciones específicas en cuanto ApplicationType, SessionType, etc… de tal forma que podamos elegir como abrir cada una de las aplicaciones y en que menús se mostarán:

  • Menú de Herramientas

Agregar_comandos_menus_lync_1.png

  • Tareta de Contacto

Agregar_comandos_menus_lync_4.png

  • Menú Contextual

Agregar_comandos_menus_lync_5.png

  • Más Opciones en una conversación

Agregar_comandos_menus_lync_6.png

Sí nos fijamos en las siguientes claves SessionType y ApplicationType, son las que definirán como se abrirán las aplicaciones. Podemos ejecutarlas en local, compartiendo la misma con el usuarios sobre el cual hemos ejecutado la aplicación, etc.. mirad estos parámetros con anteción que son muy interesantes.

Cómo vemos es muy sencilo, y seguro que muy práctico para publicar aplicaciones, guías, etc… ahora ya cada uno que le de la utilidad que considere oportuno. Ahora para podemos crear una GPO que permita crear la distintas claves en el registro de los equipos del dominio,  aquí os dejo algunos artículos que podéis utilizar como referencia para crear claves en el registro de los equipos:

Espero que os sea de utilidad!!!

Una de las novedades de Lync Server 2013, es la posibilidad  de centralizar los distintos registros de todos los servidores de la implementación y de forma simultánea. Esto nos permite desde un único servidor, analizar los ficheros de registro que el resto de servidor nos envían a través del Agente del Servicio de Registro Centralizado (ClsAgent.exe).

Arquitectura  del Servicio de Registro Centralizado

Lync_Servicio_Registro_Centralizado_1.jpg

Como comentaba, todos los equipos de vuestra implementación de Lync tienen un servicio con el nombre Lync Server Centralized Logging Service Agent

Lync_Servicio_Registro_Centralizado_2.jpg

Como vemos su estado es En ejecución, el tipo de inicio por defecto es Automático (inicio retrasado) y si vamos a las propiedades del servicio vemos que nos ofrecer información detalla del mismo

Lync_Servicio_Registro_Centralizado_3.jpg

Explicación de MSFT sobre los agentes y servicios del registro centralizado:
Agente del servicio de registro centralizado   ClsAgent.exe es el archivo ejecutable del servicio que se comunica con el controlador y recibe los comandos que el administrador ejecuta para el controlador. El agente se ejecuta como un servicio en cada equipo de Lync Server. Cuando el agente recibe un comando, lo ejecuta, envía mensajes a los componentes definidos para seguimiento y escribe los registros de seguimiento en el disco. También lee los registros de seguimiento de su equipo y envía los datos de seguimiento de nuevo al controlador cuando se solicitan. ClsAgent escucha los comandos en los siguientes puertos: TCP 50001, TCP 50002 y TCP 50003.
Controlador del servicio de registro centralizado   ClsControllerLib.dll es el motor de ejecución de comandos del Shell de administración de Lync Server y de ClsController.exe. CLSControllerLib.dll envía los comandos Start, Stop, Flush y Search a ClsAgent. Cuando se envían comandos de búsqueda, los registros resultantes se devuelven a ClsControllerLib.dll y se agregan. El controlador es responsable de enviar comandos al agente, de recibir el estado de dichos comandos y de administrar los datos del archivo de registro que devuelven todos los agentes sobre cualquier equipo del ámbito de búsqueda, y de agregar los datos de registro en un conjunto de resultados significativo y ordenado. La información de los temas siguientes se centra en el uso del Shell de administración de Lync Server. ClsController.exe se limita a un subconjunto de las características y funciones que están disponibles en el Shell de administración de Lync Server. Puede obtener ayuda para ClsController.exe en la línea de comandos; para ello, escriba ClsController en el directorio predeterminado C:\Archivos de programa\Archivos comunes\Microsoft Lync Server 2013\ClsAgent

Como vemos los puertos que se utilizan para este serivicio son en TCP el rango 50001-50003. Esto es algo que debemos tener muy en cuenta si tenemos VLAN filtradas por ACL o servidores EDGE en la DMZ, puesto que en la interface interna del EDGE debemos permitir la comunicación con el controlador a dichos puertos (esquema de un EDGE).

Lync_Servicio_Registro_Centralizado_4.png

Si queremos comprobar que estos puertos están a la «escucha» podemos comprobarlo primero con netstat -an | find «.5000» y vemos que el estado es LISTENING
Lync_Servicio_Registro_Centralizado_5.png
Sí ahora queremos verificar que controlador puede conectarse a alguno de estos puertos, podemos lanzar un telnet hacia el servidor con el puerto 50001 por ejemplo: telnet fqdn-controlador 50001. Una vez que lancemos el telnet podemos comprobar directamente en la pantalla de telnet si se ha conectado, puesto que nos aparece el cursor en la parte superior izquierda parpadeando

 

Lync_Servicio_Registro_Centralizado_7.png

Y además si ejecutamos en el servidor al cual le hemos lanzado la conexión de telnet hacia el puerto 50001 un netstat -an | find «.50001» podemos la dirección IP desde la cual nos hemos conectado y el estado a ESTABLISHEDLync_Servicio_Registro_Centralizado_6.png

 

En caso contrario, debéis revisar las reglas de vuestros Firewalls puesto que en el Firewall de Windows ya vienen habilitadas las excepciones por defecto. Para verificarlo debéis acceder a la administración avanzada del Firewall, filtramos por Grupos en este caso el CS y vemos que tenemos los puertos 50001-50003 disponibles para conectarse desde cualquier origen
Lync_Servicio_Registro_Centralizado_8.png

Una vez que hemos verificado que tenemos nuestra configuración del agente disponible, vamos a ver como podemos configurar la centralización de los registros en un servidor que hará las funciones de controlador. Lo primero que vamos a hacer, es revisar la configuración inicial del servicio. Para ello utilizaremos el siguiente cmdlet: Get-CsClsConfiguration  (Información ampliada: http://technet.microsoft.com/es-es/library/jj619179.aspx). Vemos que se aplica a nivel global y distintas configuraciones en cuanto al tamaño de los ficheros (.ETL y .CACHE), su ubicación predeterminada (%temp%\Tracing), el % máximo de utilización de espacio en disco de los ficheros .CACHE (80), además del periodo de retención (14 días) entre otras opciones.

Lync_Servicio_Registro_Centralizado_9.png

Estos son todos los cmdlets para configurar y gestionar el servicio de centralización de registros:

Abarcar todo en un solo artículo cómo podéis apreciar es inviable, pero  vamos a ver como podemos configurar un escenario simple. Primero comentaros que todo se hace vía línea de comandos y para poder manejar los agentes podemos hacerlo mediante ClsController.exe ubicado en C:\Program Files\Common Files\Microsoft Lync Server 2013\ClsAgent. Si ejecutamos el ClsController.exe sin parámetros nos creará automáticamente la carpeta Tracing en «%TEMP%\Tracing» y «C:\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp\Tracing». Las distintas ubicaciones vienen dadas por que en función del usuario que ejecute el comando le creará su carpeta Tracing, y la segunda carpeta Tracing es porque el servicio Lync Server Centralized Logging Service Agent se inicia como Servicio de Red

Lync_Servicio_Registro_Centralizado_10.png

Una vez ejecutamos el comando sin modificadores nos mostrará en pantalla las distintas opciones disponibles:

USO:
——————–
ClsController (COMANDO) [(OPCIONES)] [(ÁMBITO)]
COMANDO:
——————–
-start :        Inicia la sesión de seguimiento de un escenario determinado. Opción obligatoria: scenario. Otra opción válida: duration
-stop : Detiene la sesión de seguimiento de un escenario determinado. Opción obligatoria y única válida: scenario
-query :        Lista de consulta de escenarios que se están siguiendo. Opciones válidas: ninguna
-flush :        Vacíe los registros y haga que estén disponibles para buscar de inmediato. Opciones válidas: ninguna
-update :       Actualice la duración activa (no predeterminada) en la que debe seguirse el escenario. Opción obligatoria y única válida: duration
-search :       Registros de búsqueda. Los resultados se devuelven en un archivo de texto. Opciones válidas: matchall, matchany, skipnetworklogs, keepcache, sta
rttime, endtime, loglevel, components, correlationids, uri, callid, confid, phone, ip, sipcontents
Opciones:
——————–
-scenario: nombre del escenario. Nombres de escenarios válidos según lo especificado al final
-duration: duración (minutos) en la que realizar el seguimiento del escenario determinado. Duración predeterminada: 4 horas
-matchall: especifique esto para requerir que la búsqueda cumpla todos los criterios especificados.
-matchany: especifique esto para requerir que la búsqueda cumpla alguno de los criterios especificados. Esta opción es la predeterminada.
-skipnetworklogs: si se omiten los registros especificados en el uso compartido de red (si está configurado). Esto mejora el rendimiento de la búsqueda si no ne
cesita datos de registros de red
-keepcache : si se especifica, el archivo .cache intermedio, junto con los resultados de búsqueda, se crea en el directorio actual
-starttime: (marca de tiempo) marca de tiempo desde la que buscar las entradas del registro
-endtime: (marca de tiempo) marca de tiempo para buscar las entradas del registro
-loglevel: (fatal|error|warn|info|verbose|noise): nivel de registro menos grave en el que buscar. Por ejemplo, si se especifica ‘advertencia’, la búsqueda se limitará a ‘warn’, ‘error’ y ‘fatal’
-components: lista de nombres de componentes separados por comas para restringir el ámbito de la búsqueda
-correlationids : lista de ids. separada por comas para restringir el ámbito de búsqueda
-uri: ámbito de uri para el comando de búsqueda. Debe ser una coincidencia exacta
-callid: ámbito de Id. de llamada para el comando de búsqueda. Debe ser una coincidencia exacta
-confid: ámbito de Id. de conferencia para el comando de búsqueda. Debe ser una coincidencia exacta
-phone: ámbito de número de teléfono para el comando de búsqueda. Debe ser una coincidencia exacta
-ip: ámbito de dirección ip para el comando de búsqueda. Debe ser una coincidencia exacta
ÁMBITO:
——————–
-Pools: lista separada por comas de fqdn de grupos
-Computers : lista separada por comas de fqdn de PC
Nombres de escenarios válidos:
  AlwaysOn
  MediaConnectivity
  ApplicationSharing
  AudioVideoConferencingIssue
  HybridVoice
  IncomingAndOutgoingCall
  VoiceMail
  IMAndPresence
  AddressBook
  DeviceUpdate
  LYSSAndUCS
  CLS
  SP
  WAC
  UserReplicator
  HostedMigration
  MonitoringAndArchiving
  LILRLegacy
  LILRLYSS
  MeetingJoin
  RGS
  CPS
  XMPP
  CAA
  ACPMCU
  Authentication
  HADR
  Powershell
  FilterApps

Los comandos más comunes son los siguientes:

  • ClsController.exe -start –scenario <scenario> –pools <pool fqdn>
  • ClsController.exe -stop –scenario <scenario> –pools <pool fqdn>
  • ClsController.exe  -flush –pools <pool fqdn>
  • ClsController.exe  -search –pools <pool fqdn> –components <component> –loglevel <loglevel>

Ejemplo: ClsController.exe -start -scenario MediaConnectivity -computers srv-lync02.asirsl.com

Lync_Servicio_Registro_Centralizado_11.png
Si accemos al servidor SRV-LYNC02.ASIRSL.COM vemos que en la ubicación de la carpeta Tracing del servicio de red que ya tenemos nuestro fichero .ETL
Lync_Servicio_Registro_Centralizado_12.png
Como he habilitado -scenario MediaConnectivity lanzo una llamada desde mi cliente Lync y compruebo que el tamaño del fichero de Log ha aumentado de 64KB a 2.112KB
Lync_Servicio_Registro_Centralizado_13.png
Ahora pararé el registro también desde el servidor remoto con el comando:  ClsController.exe –stop-scenario MediaConnectivity -computers srv-lync02.asirsl.com

 

Lync_Servicio_Registro_Centralizado_14.png

 

Sí ahora tratamos de acceder nuevamente a la carpeta en donde teníamos los ficheros .ETL veremos que ahora tenemos dos ficheros: .CACHE y .HDR
Lync_Servicio_Registro_Centralizado_15.png
Mientras que la captura está iniciada el fichero es el .ETL pero una vez finalizada se convierten en .CACHE y HDR. Si abrimos el fichero .HDR podremos ver la información sobre la captura realizada:
Lync_Servicio_Registro_Centralizado_16.png
El fichero de la captura es el .CACHE, pero al ser un binario no podemos abrirlo directamente con el Snooper (Microsoft Lync Server 2013 Debugging Tools), para ello primero debemos ejecutar Search-CsClsLogging para exportar el registro a txt. Para ello debemos ejecutar el siguiente cmdlet: Search-CsClsLogging -Computers fqdn_servidor -OutputFilePath <ruta_fichero_exportado>

 

Lync_Servicio_Registro_Centralizado_17.png

 

Si ahora vamos a la carpeta C:\Temp tendremos el fichero de registro exportado a .txt el cual podremos abrir ahora desde Snooper que será más sencillo de analizar
Lync_Servicio_Registro_Centralizado_18.png
Vamos a File – Open File (Ctrl + O) y luego desde el mini explorar buscar el fichero exportado a txt anteriormente con Search-CsClsLogging
Lync_Servicio_Registro_Centralizado_19.png

 

Ahora podremos analizarlo con más facilidad
Lync_Servicio_Registro_Centralizado_20.png
Como podemos apreciar es una herramienta muy pontente, y nos da infinidad de posiblidades. En el listado de cmdlets expuestos tenéis las URL que os llevarán a la página oficial de MSFT para explicar cada uno de ellos con más nivel de detalle. Todas las opciones las tenemos disponibles con ClsController.exe pero también comos os había comentado anteriormente mediante cmdlets PowerShell. Claramente con PowerShell tenemos más flexibilidad y potencia, ahora ya es cuestión de cada uno de sus necesidades y con lo que se sienta más cómodo. Lo que yo había hecho con ClsController.exe -start se puede hacer y más amplicado con Start-CsClsLogging.

 

Como resumen yo lo que había hecho es primero iniciar y parar la captura, para posteriormente con Search-CsClsLogging exportar el fichero a .txt para abrirlo con Snooper de forma gráfica. Podemos iniciar el registro de un servidor o de toda la implementación, filtrarlo por fechas, sesiones, etc.. súper útil.

Espero que os sea de utilidad!!


MSFT ha publicado una nueva actualización de Lync Mobile para Windows Phone, una vez actualizado el cliente móvil tenemos novedades muy interesantes. Solo tenemos que ir a la tienda, buscar Lync y pulsar en actualizar

wp_ss_20130718_0001.pngwp_ss_20130718_0003.png

 Voy a mostraros con capturas de pantalla las distintas novedades de esta versión (5.1.1015.0):

  • Vea contenido compartido de reuniones durante una conferencia en su dispositivo móvil: Ahora podemos ver contenido compartido en nuestro móvil, yo he compartido una aplicación (Word) y ha funcionado perfectamente y en tiempo real, una maravilla

wp_ss_20130718_0024.png

wp_ss_20130718_0005.png

  • Invite a otros participantes a una conversación o conferencia: Ahora tenemos la posibilidad desde el móvil de agregar más participantes a nuevas conferencias o conversaciones
    • Conferencia

wp_ss_20130718_0006.png

    • Conversación

wp_ss_20130718_0013.png

  • Volver a unirse a una conferencia en curso después de haberla abandonado: Interesante opción para volver a unirnos a las conferencias

wp_ss_20130718_0022.png

  • Controle la participación de los asistentes silenciándolos o eliminándolos si es necesario: Permite silenciar o reactivar el audio de los asistentes a la reunión siempre y cuando tengamos permisos para ello

wp_ss_20130718_0012.pngwp_ss_20130718_0011.png

  • Transfiera sus llamadas a otro número de teléfono u otro contacto: Esta personalmente la estaba esperando con impaciencia, nos permite transferir nuestras llamadas recibidas a un número de teléfono o contacto

wp_ss_20130718_0008.pngwp_ss_20130718_0009.png

  • Retome sus conversaciones en el punto que las finalizó: permite retomar las conversaciones desde el punto en que la hemos finalizado. Esto también se agradece, porque en la versión anterior para cada conversación teníamos una conversación en el histórico de conversaciones. Ahora es mucho más cómodo, si continuamos con la conversación se almacena en la misma

wp_ss_20130718_0026.jpgwp_ss_20130718_0025.jpg

  • Opción de borrar todo el historial de conversaciones: Otra de las novedades que estaba esperando, nos permite borrar el historial de conversaciones de una sola vez no como antes

wp_ss_20130718_0007.png
Por último también tenemos una opción en las opciones de configuración: Req. Wi-Fi para contenido

wp_ss_20130718_0002.png

A mi personalmente me han encantado las novedades, espero que sigan avanzando en la mejora del cliente móvil para ofrecernos nuevas novedades (Call Park, Desvío de LLamadas al Buzón de Voz, etc…)

Espero que os sea de utilidad!!!