Es muy común que cuando llamamos a un usuario desde nuestro cliente Lync/Skype4B lo hagamos como una llamada de cliente a cliente, por lo que no tendrá coste alguno. Pero si en alguna ocasión hemos llamado al usuario a través de tu número de teléfono, cuando volvamos a intentar llamarle de forma directa sin elegir el tipo de llamada lo haga directamente por el último método que hemos usado:

- ClickToCall: número de teléfono al que hemos llamado
 - Name: nombre de usuario al que hemos llamado
 
Esta información es la que utilizará nuestro cliente Lync/Skype4B para realizar la siguiente llamada, aquí os muestro una captura de una llamada (he borrado parte del número de mi móvil y en la captura de pantalla anterior lo he sustituido por XXXXXX, pero vamos, ahí tenéis un número de teléfono seguro)

Esto hará que hagamos una llamada a un usuario que tiene Lync/Skype4B y está disponible para llamarlo vía VoIP, pero sin embargo la llamada la enviaremos a su móvil (con el consiguiente coste que tendrá). Lo que queremos es que la llamada sea a su cliente Lync/Skype4B:

Esta llamada también queda reflejada en el registro del usuario y quedaría así:

Dicho todo esto, el problema que tenemos es claro, la última llamada que hagamos a un usuario será la que quede en caché para volver a utilizarla a menos que explícitamente elijamos el tipo de llamada. Tenemos varias soluciones para evitar esto y todas a nivel de cliente:
- Eliminar todas las claves que están dentro de ContactStateCacheU: podemos hacerlo con un script de powershell o cmd, pero el problema que tienes que una vez que el usuario vuelva a llamar volverá a crear dichas claves. Esto no nos sirve, porque tendríamos que tener el script de borrado de las claves ejecutándose cada minuto en la sesión del usuario
 - Cambiar los permisos de la clave ContactStateCacheU: con esto evitamos que el cliente Lync/Skype4B acceda y cree nuevas claves en cada llamada, esto si nos sirve. Para ello crearemos un script con POwerShell que busque la clave ContactStateCacheU y le quite los permisos al usuario que ha iniciado sesión, de esta forma el cliente Lync/Skupe4b siempre utilizará la configuración que hemos establecido a nivel de directiva de usuario (LLamar a Lync como opción por defecto)
 
Como creo que la segunda opción es la más acertada y la más fiable, aquí os dejo un script que hemos creado desde ASIR (gracias Amandio por tu ayuda!!)

Aquí os dejo el código del script para copiar – pegar:
# Buscar Claves que incluyan la palabra Contac dentro la clave HKCU:\SOFTWARE\Microsoft\Office\15.0\Lync
$keys = Get-ChildItem -Path HKCU:\SOFTWARE\Microsoft\Office\15.0\Lync -Include Contact* -Recurse | Select-Object Name 
foreach ($key in $keys){ 
    # Leemos el valor Name
    $keyRoot = $key.Name 
    # Reemplazamos el valor por HKCU 
    $PSKeyRoot = $keyRoot.Replace("HKEY_CURRENT_USER","HKCU:") 
    # Leemos los permisos actuales
    $acl = Get-Acl $PSKeyRoot
    # Creamos los permisos necesarios
    $ace = New-Object System.Security.AccessControl.RegistryAccessRule("$env:username","FullControl", "ContainerInherit", "None", "Deny")
            
    # Añadimos la regla a la ACL  
    $acl.AddAccessRule($ace) 
    # Establecemos los permisos sobre la clave de registro que habíamos puesto en la variable PSKeyRoot 
    Set-Acl -Path "$PSKeyRoot" -acl $acl 
}
El proceso del script es sencillo y aquí os lo dejo documentado por fases:
- Buscamos una clave de registro dentro de HKCU:\SOFTWARE\Microsoft\Office\15.0\Lync que empiece por Contact (solo existe la que buscamos: ContactStateCacheU) y tenemos su valor en una variable
 - El valor que nos devuelve comienza por HKEY_CURRENT_USER\SOFTWARE y debemos cambiarlo por HKCU: , y así lo hacemos
 - Establecemos los permisos que vamos a aplicar sobre el usuario que ha iniciado sesión ($env:username): queremos denegar el Control Total sobre la clave ContactStateCacheU y las subclaves (son las que representan a los usuarios llamados)
 - Establecemos el valor de dichos permisos sobre la clave de registro que habíamos capturado, puesto en un variable, cambiado el nombre y lo más importante
 
Esto lo que permitirá es que denegaremos el acceso a la clave HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\15.0\Lync\$env:username\ContactStateCacheU y subclaves al usuario que ha iniciado sesión:



    

Leave a Reply