Windows: descubra quién ha iniciado sesión y dónde

Windows: descubra quién ha iniciado sesión y dónde
- Ay, a mí no me funciona nada, ¡ayuda!
- No te preocupes, arreglaremos todo ahora. Dale el nombre de tu computadora...
(clásicos del género desde llamadas a soporte técnico)

Es bueno si tiene una herramienta como BgInfo o si sus usuarios conocen el acceso directo de Windows+Pausa/Interrupción y saben cómo presionarlo. Incluso hay ejemplares raros que han logrado aprender el nombre de su coche. Pero a menudo la persona que llama, además del problema principal, tiene un segundo: averiguar el nombre/dirección IP del ordenador. Y, a menudo, se necesita mucho más tiempo para resolver este segundo problema que el primero (y solo necesitabas cambiar el fondo de pantalla o devolver el acceso directo que falta :).
Pero es mucho más agradable escuchar algo como:
- Tatyana Sergeevna, no te preocupes, ya me estoy conectando...


Y no necesitas mucho para esto.
Un especialista en soporte técnico sólo necesita memorizar los nombres de las máquinas y recordar quién trabaja para cuál.
Antes de describir la solución que estamos utilizando actualmente, analizaré brevemente otras opciones para poder criticarlas hasta el fondo y explicar mi elección.

  1. BgInfo, Información de escritorio y similares. Si hay mucho dinero, los hay pagados. El caso es que la información técnica se muestra en el escritorio: nombre de la máquina, dirección IP, inicio de sesión, etc. En Desktop Info puedes incluso recortar los gráficos de rendimiento a la mitad de la pantalla.
    Lo que no me gusta es que para el mismo Bginfo, por ejemplo, el usuario necesita minimizar las ventanas para ver los datos necesarios. Mis colegas y yo también hemos observado más de una vez en BgInfo artefacto característico, cuando se muestra texto nuevo encima del anterior.
    A algunos usuarios les molesta el hecho de que los administradores dibujen un aterrador 192.168.0.123 en la cara de un gato tendido en el escritorio, estropeando la estética de la imagen de fondo y, por supuesto, esto es terriblemente desmotivador y mata por completo el espíritu de trabajo. .
  2. Una etiqueta al estilo “¿Quién soy yo” (no intentes agregarle un signo de interrogación al final :). Un acceso directo clásico en el escritorio, detrás del cual se esconde un script ordenado o no tan ordenado que muestra la información necesaria en forma de cuadro de diálogo. A veces, en lugar de un acceso directo, colocan el script en el escritorio, lo cual, en mi humilde opinión, es de mala educación.
    La desventaja es que para ejecutar el acceso directo, como en el primer caso, es necesario minimizar todas las ventanas abiertas (no tenemos en cuenta a aquellos afortunados que tienen la única ventana del solitario abierta en su máquina de trabajo). Por cierto, ¿saben sus usuarios dónde hacer clic para minimizar todas las ventanas? Así es, un dedo en el ojo del administrador.

El límite también sugiere que ambos métodos descritos anteriormente tienen el principal inconveniente de que en la obtención de información interviene el usuario, que puede ser ciego, estúpido o incluso mentir.
No consideraré la opción de aumentar los conocimientos informáticos, cuando todo el mundo sabe en qué lugar de Windows buscar el nombre de su máquina: es una causa noble, pero muy difícil. Y si la empresa tiene rotación de personal, entonces es completamente ruinoso. Qué puedo decir, en la mayoría de los casos ni siquiera recuerdan su inicio de sesión.

Derramé mi alma, y ​​ahora al grano.
Se tomó como base la idea de un residente de Khabrov. medio de este artículo.
La esencia de la idea es que cuando un usuario inicia sesión en Windows, el script de inicio de sesión ingresa la información necesaria (hora y nombre de la máquina) en un determinado atributo de la cuenta de usuario. Y cuando cierra sesión en el sistema, se ejecuta un script de cierre de sesión similar.

Me gustó la idea en sí, pero hubo algunas cosas con las que no estaba contento en la implementación.

  1. La política de grupo, que especifica secuencias de comandos de inicio y cierre de sesión para los usuarios, se aplica a todo el dominio, por lo que las secuencias de comandos se ejecutarán en cualquier máquina en la que los usuarios inicien sesión. Si utiliza soluciones de terminal junto con estaciones de trabajo (por ejemplo, productos Microsoft RDS o Citrix), este enfoque será un inconveniente.
  2. Los datos se ingresan en el atributo Departamento de la cuenta de usuario, al que el usuario promedio tiene acceso de solo lectura. Además del atributo de la cuenta de usuario, el script también realiza cambios en el atributo Departamento de la cuenta de la computadora, que de forma predeterminada los usuarios tampoco pueden cambiar. Por lo tanto, para que la solución funcione, el autor sugiere cambiar los estándares de configuración de seguridad para los objetos AD.
  3. El formato de fecha depende de la configuración de localización en la máquina de destino, por lo que desde una máquina podemos obtener el 10 de noviembre de 2018 a las 14:53 y desde otra el 11/10/18 a las 2:53 p.m.

Para eliminar estas deficiencias, se hizo lo siguiente.

  1. GPO no está vinculado a un dominio, sino a una unidad organizativa con máquinas (separo usuarios y máquinas en diferentes unidades organizativas y aconsejo a otros). Además, para modo de procesamiento de política de bucle invertido el modo está configurado unir.
  2. El script solo escribirá datos en la cuenta de usuario en el atributo Info, que el usuario puede cambiar de forma independiente para su cuenta.
  3. Cambió el fragmento de código que genera el valor del atributo.

Ahora los scripts se ven así:
GuardarLogonInfoToAdUserAttrib.vbs

On Error Resume Next
Set wshShell = CreateObject("WScript.Shell")
strComputerName = wshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")
Set adsinfo = CreateObject("ADSystemInfo")
Set oUser = GetObject("LDAP://" & adsinfo.UserName)
strMonth = Month(Now())
If Len(strMonth) < 2 then
  strMonth = "0" & strMonth
End If
strDay = Day(Now())
If Len(strDay) < 2 then
  strDay = "0" & strDay
End If
strTime = FormatDateTime(Now(),vbLongTime)
If Len(strTime) < 8 then
  strTime = "0" & strTime
End If
strTimeStamp = Year(Now()) & "/" & strMonth & "/" & strDay & " " & strTime
oUser.put "info", strTimeStamp & " <logon>" & " @ " & strComputerName
oUser.Setinfo

GuardarLogoffInfoToAdUserAttrib.vbs

On Error Resume Next
Set wshShell = CreateObject("WScript.Shell")
strComputerName = wshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")
Set adsinfo = CreateObject("ADSystemInfo")
Set oUser = GetObject("LDAP://" & adsinfo.UserName)
strMonth = Month(Now())
If Len(strMonth) < 2 then
  strMonth = "0" & strMonth
End If
strDay = Day(Now())
If Len(strDay) < 2 then
  strDay = "0" & strDay
End If
strTime = FormatDateTime(Now(),vbLongTime)
If Len(strTime) < 8 then
  strTime = "0" & strTime
End If
strTimeStamp = Year(Now()) & "/" & strMonth & "/" & strDay & " " & strTime
oUser.put "info", strTimeStamp & " <logoff>" & " @ " & strComputerName
oUser.Setinfo

Quien sea el primero en encontrar todas las diferencias entre los scripts de inicio y cierre de sesión obtendrá una ventaja de karma. 🙂
Además, para obtener información visual, se creó el siguiente pequeño script PS:
Obtener-UsersByPCsInfo.ps1

$OU = "OU=MyUsers,DC=mydomain,DC=com"
Get-ADUser -SearchBase $OU -Properties * -Filter * | Select-Object DisplayName, SamAccountName, info | Sort DisplayName | Out-GridView -Title "Информация по логонам" -Wait

En total, todo está configurado uno-dos-tres:

  1. cree un GPO con la configuración necesaria y vincúlelo al departamento con las estaciones de trabajo de los usuarios:
    Windows: descubra quién ha iniciado sesión y dónde
  2. vamos a tomar té (si AD tiene una gran cantidad de usuarios, entonces necesitas mucho té :)
  3. ejecute el script PS y obtenga el resultado:
    Windows: descubra quién ha iniciado sesión y dónde
    En la parte superior de la ventana hay un filtro conveniente en el que puede seleccionar datos según los valores de uno o más campos. Al hacer clic en las columnas de la tabla, se ordenan los registros según los valores de los campos correspondientes.

Podemos "empaquetar" maravillosamente nuestra solución.
Windows: descubra quién ha iniciado sesión y dónde
Para hacer esto, agregaremos un acceso directo para iniciar el script para los especialistas de soporte técnico, quienes tendrán algo como esto en el campo "objeto":
powershell.exe -NoLogo -ExecutionPolicy Bypass -File "servershareScriptsGet-UsersByPCsInfo.ps1"

Si hay muchos empleados de soporte técnico, puede distribuir un acceso directo usando GPP.

Algunos comentarios finales.

  • El módulo Active Directory para PowerShell debe estar instalado en la máquina desde la que se inicia el script PS (para ello, basta con agregar herramientas de administración de AD en los componentes de Windows).
  • De forma predeterminada, el usuario no puede editar la mayoría de los atributos de su cuenta. Tenga esto en cuenta si decide utilizar un atributo que no sea Info.
  • Informe a todos los colegas involucrados qué atributo utilizará. Por ejemplo, lo mismo Info se utiliza para agregar notas de forma interactiva al buzón de un usuario en el panel de administración de Exchange Server y alguien puede sobrescribirlas fácilmente o entristecerse cuando su secuencia de comandos sobrescribe la información que agregaron.
  • Si tiene varios sitios de Active Directory, tenga en cuenta los retrasos en la replicación. Por ejemplo, si desea obtener información actualizada sobre los usuarios del sitio A de AD y ejecutar el script desde una máquina del sitio B de AD, puede hacer esto:
    Get-ADUser -Server DCfromSiteA -SearchBase $OU -Properties * -Filter * | Select-Object DisplayName, SamAccountName, info | Sort DisplayName | Out-GridView -Title "Информация по логонам" -Wait

    DCdesdeSitioA — el nombre del controlador de dominio del sitio A (de forma predeterminada, el cmdlet Get-AdUser se conecta al controlador de dominio más cercano)

Windows: descubra quién ha iniciado sesión y dónde

Fuente de imagen

Le agradecería que pudiera responder la breve encuesta a continuación.

Solo los usuarios registrados pueden participar en la encuesta. Registrarsepor favor

¿Que usas?

  • bginfo, información de escritorio, etc. (programa gratuito)

  • análogos pagados de bginfo

  • Lo haré como en el artículo.

  • no es relevante porque Yo uso VDI/RDS, etc.

  • Aún no uso nada pero lo estoy pensando

  • No necesito recopilar esos datos

  • otro (compartir en los comentarios)

112 usuarios votaron. 39 usuarios se abstuvieron.

Fuente: habr.com

Añadir un comentario