El soporte para el funcionamiento correcto y correcto de las computadoras y el software de los usuarios comunes es una rutina de empleados y / o administradores de soporte técnico. Si la empresa es pequeña y todos están en una o dos habitaciones, generalmente es fácil ir usted mismo y resolver el problema o verificar lo que necesita.
Pero, ¿qué sucede si la empresa es grande y el usuario está en un sitio diferente / en otra ciudad / país?

Una de las herramientas clásicas para dicho trabajo es una conexión remota (usando RDP, software como TeamViewer / Skype con una demostración de escritorio, etc.). Sin embargo, no está exento de fallas fundamentales:
- en cualquier caso, el usuario final se distraerá de su trabajo (en algunos casos, sin siquiera ver su escritorio)
- estas herramientas no siempre funcionarán si hay errores en la computadora remota
- la instalación de software de terceros (incluido el propietario, en el caso de TeamViewer) está lejos de ser siempre bienvenida por la política de la compañía
- el método prácticamente no está automatizado
Finalmente, este enfoque se usa cuando el incidente ya ha ocurrido (es difícil imaginar que el administrador de vez en cuando se conecte "preventivamente" a cada usuario). Es por eso que el mecanismo de control (monitoreo) de las computadoras remotas es importante.
Una posible solución es utilizar el acceso remoto al registro de Windows. Almacena datos en forma de una base de datos jerárquica, que le permite recibirlos rápidamente y almacenarlos de manera compacta. Utilizan el registro para almacenar su propia configuración y parámetros, tanto el sistema operativo como los servicios integrados, así como la mayoría de los programas de terceros. Por lo tanto, el contenido del registro de muchas maneras afecta el funcionamiento del sistema.
En base a esto, el registro bien puede usarse como un "indicador" para el monitoreo (puede detectar un error si está asociado con parámetros incorrectos en el registro o simular una situación problemática).
Otra posibilidad que ofrece esta solución es la posibilidad de control administrativo de los usuarios (por ejemplo, la lectura remota le permite ver los hechos de instalar programas no deseados y realizar cambios en la configuración), no se olvide de la influencia del "factor humano" en el sistema. En la práctica, esto fue útil en el marco del proyecto SkypeTime , donde era necesario realizar un seguimiento de la corrección de la configuración en Skype for Business.

Pero el registro contiene miles de entradas; es extremadamente difícil controlarlas todas. Por lo tanto, en primer lugar, es necesario limitar el tema de control, para determinar qué parámetros son de interés para nosotros y descubrir en qué ramas de registro en particular se ubican los valores correspondientes. Como regla general, esto último no es difícil de encontrar en la documentación / Internet, o determinar de forma independiente en función de los nombres de las claves.
Una vez decidido el tema del control, puede proceder a la configuración directa del acceso remoto. Para hacer esto, debe activar el servicio de Llamada a procedimiento remoto en computadoras remotas y configurar el firewall según sea necesario, lo cual se hace convenientemente mediante políticas grupales. Teniendo en cuenta los requisitos de seguridad, el acceso requiere los derechos de un administrador de dominio o administrador local en cada uno de los dispositivos.
Configurar acceso remotoPara activar el servicio en sí, en la sección Configuración del equipo> Preferencias> Configuración del panel de control> Servicios, configure los parámetros para el servicio RpcSs, como en una captura de pantalla

Queda por agregar las excepciones de Firewall apropiadas. En la misma política, en Configuración del equipo> Políticas> Configuración de Windows> Configuración de seguridad> Firewall de Windows con seguridad avanzada> Reglas de entrada, cree una nueva regla:
Tipo de regla: personalizada

Especifique la ruta del programa -% SystemRoot% \ system32 \ svchost.exe
Desde la configuración adicional en la sección Servicios, configure Aplicar al servicio con el siguiente nombre corto: Winmgmt

En las siguientes páginas especificamos TCP sin especificar puertos específicos y para todas las direcciones


y permitir la conexión ( Permitir la conexión ) para el perfil de dominio


Sin embargo, controlar manualmente el registro de docenas y cientos de computadoras "manualmente" (incluso con algunas entradas) es una tarea desagradecida y sin sentido. Afortunadamente, este proceso es bastante simple de automatizar usando scripts. Por ejemplo, el siguiente script de PowerShell le permite averiguar qué usuario ha cambiado los parámetros AwayThreshold e IdleThreshold (hora de cambiar al estado "Fuera de lugar" e "Inactivo") para Skype Empresarial.
Código de scriptParam ( [alias("c")] [string]$FromFileComputers, [alias("r")] [string]$OutputRPCErrorsFile, [alias("u")] [string]$FromFileUsers, [alias("o")] [string]$OutputFile="output.csv", [alias("a")] [int]$MinAway, [alias("i")] [int]$MinIdle ) $RPCErrorsArray = @() $result = @() $HKU = 2147483651 $RegistryForCheckArray = "SOFTWARE\Microsoft\Office\13.0\Lync","SOFTWARE\Microsoft\Office\14.0\Lync","SOFTWARE\Microsoft\Office\15.0\Lync","SOFTWARE\Microsoft\Office\16.0\Lync","SOFTWARE\Microsoft\Communicator" $CurrentComputerNumber = 0; if(![string]::IsNullOrEmpty($FromFileUsers)) { $Users = Get-Content $FromFileUsers; } if(![string]::IsNullOrEmpty($FromFileComputers)) { $Comps = Get-Content $FromFileComputers; } else { $date = (get-date).AddMonths(-1) $Comps = Get-ADComputer -filter { lastlogontimestamp -ge $date } | select name | ForEach-Object {$_.name} #$Comps = "NB_CY" } $ServersCount = ($Comps).Count; Foreach ($Comp in $Comps) { $CurrentComputerNumber++ try { Write-Host "Checking: $Comp [$CurrentComputerNumber/$ServersCount]"; $profiles = Get-WmiObject Win32_UserProfile -filter "Loaded=$true and special=$false" -ComputerName $Comp -ErrorAction Stop $reg = [wmiclass]"\\$Comp\root\default:stdregprov" Foreach ($profile in $profiles) { $username = Split-Path $profile.LocalPath -Leaf if(![string]::IsNullOrEmpty($FromFileUsers)) { if(!$Users.Contains($username)) { continue; } } Foreach( $registry in $RegistryForCheckArray) { $hkey = "$($profile.sid)\$registry" #Write-Host "KEY: $hkey" $away = $reg.GetDWORDValue($hku,$hkey,"AwayThreshold").uValue $idle = $reg.GetDWORDValue($hku,$hkey,"IdleThreshold").uValue $sip = $reg.GetStringValue($hku,$hkey,"ServerSipUri").sValue if([string]::IsNullOrEmpty($away) -and [string]::IsNullOrEmpty($idle)) { continue; } if(($MinAway -gt 0 -and $away -lt $MinAway) -or ($MinIdle -gt 0 -and $idle -lt $MinIdle)) { continue; } $result += New-Object PsObject -Property @{ "PC" = $Comp "Username" = $username "SIP" = $sip "SFB_Away" = $away "SFB_Idle" = $idle } } } } catch { if ($_.Exception.GetType().Name -eq "COMException") { $RPCErrorsArray += $Comp; } Write-Host "Error: ($_.Exception.GetType().Name)"; $_.Exception } } $result | Export-csv -Path $OutputFile $result | Format-Table -Property PC,Username,SIP,SFB_Away,SFB_Idle -AutoSize Write-Host "Saved to: $OutputFile" if(![string]::IsNullOrEmpty($OutputRPCErrorsFile)) { $RPCErrorsArray | out-file $OutputRPCErrorsFile Write-Host "RPC errors saved to: $OutputRPCErrorsFile" }
Para mayor comodidad, el script se puede ejecutar con los parámetros:
-c ruta al archivo con una lista de computadoras con nombre de host para verificar, si no se especifica, obtenga computadoras de AD con una actividad de 30 días.
-r ruta al archivo en el que se escribirá el nombre de host de las computadoras que tenían un error RPC.
-u ruta al archivo con una lista de usuarios (inicio de sesión), si no se especifica, verifica todos.
-o ruta al archivo en el que se ejecutará el resultado del script, el valor predeterminado es output.csv.
-un valor mínimo para el parámetro AwayThreshold, los registros con un valor inferior al valor especificado no obtendrán el resultado de la ejecución del script.
-i el valor mínimo para el parámetro IdleThreshold, los registros con un valor inferior al valor especificado no obtendrán el resultado del script.
Además, la secuencia de comandos se puede automatizar agregando al Programador de tareas de Windows (Programador de tareas) o mediante la funcionalidad Trabajo programado en PowerShell.