— ¡Oh, nada funciona, ayúdame!
— No te preocupes, lo solucionaremos ahora. Dime el nombre de tu computadora...
(un clásico de las llamadas al soporte técnico)
Bueno, es más fácil si tienes una herramienta como BgInfo o si tus usuarios saben sobre el atajo de Windows+Pause/Break y pueden presionarlo. Hay incluso raras excepciones que han aprendido el nombre de su máquina. Pero a menudo, además de su problema principal, el que llama tiene un segundo: averiguar el nombre/dirección IP de la computadora. Y a menudo, resolver este segundo problema toma mucho más tiempo que el primero (cuando solo necesitaba cambiar el fondo de pantalla o recuperar un acceso directo perdido :)).
Y es mucho más agradable escuchar algo como:
— Tatyana Sergeyevna, no se preocupe, ya me estoy conectando...
Y para esto no se necesita tanto.
A un especialista de soporte técnico solo le basta con memorizar los nombres de las máquinas y recordar quién trabaja con cuál.
Antes de describir la solución que utilizamos actualmente, revisaré brevemente otras opciones para criticar explicar mi elección.
- , y similares. Si hay mucho dinero, también hay opciones de pago. La esencia es que se muestra información técnica en el escritorio: nombre de la máquina, dirección IP, inicio de sesión, etc. En Desktop Info incluso puedes incluir gráficos de rendimiento en la mitad de la pantalla.
No gusta que para el mismo Bginfo, por ejemplo, el usuario tiene que minimizar ventanas para ver los datos necesarios. Además, mis colegas y yo hemos notado varias veces en BgInfo , donde el nuevo texto se muestra sobre el antiguo.
A algunos usuarios les molesta el hecho de que los administradores dibujen un aterrador 192.168.0.123 en la cara de un gato estirado en el escritorio, arruinando la estética del fondo, y, por supuesto, esto desmotiva y aniquila completamente el estado de ánimo laboral. - Un acceso directo como '¿Quién soy yo?' (no intentes añadirle un signo de interrogación al final :). Un acceso directo clásico en el escritorio, que oculta un script ordenado o no tan ordenado que muestra la información necesaria en forma de ventana de diálogo. A veces, en lugar del acceso directo en el escritorio, se coloca el script mismo, lo cual, en mi opinión, es de mal gusto.
El inconveniente es que para ejecutar el acceso directo, al igual que en el primer caso, es necesario minimizar todas las ventanas abiertas (no contamos a los afortunados que solo tienen una ventana de solitario abierta en su máquina de trabajo). Por cierto, ¿sus usuarios saben dónde deben hacer clic para minimizar todas las ventanas? Correcto, en el ojo del administrador.
Además, el capitán sugiere que ambos métodos descritos anteriormente tienen como principal desventaja el hecho de que la obtención de información implica al usuario, quien puede ser un poco miope, tonto y, en general, mentir.
No consideraré la opción de aumentar la alfabetización informática, donde todos saben dónde buscar el nombre de su máquina en Windows: es una buena causa, pero muy difícil. Y si en la empresa hay una alta rotación de personal, es aún más complicado. Para qué hablar, en la mayoría de los casos ni siquiera recuerdan su propio inicio de sesión.
He expresado mi alma, ahora vamos al grano.
Se tomó como base la idea de un habitante de Habr. de .
La esencia de la idea es que al iniciar sesión en Windows, el script de inicio de sesión registra la información necesaria (hora y nombre de la máquina) en un atributo específico de la cuenta del usuario. Y al salir del sistema, se ejecuta un script de cierre de sesión similar.
Me gustó la idea en sí, pero en la implementación hay algunas cosas que no me convencieron.
- La política de grupo, donde se especifican los scripts de inicio y cierre de sesión para los usuarios, se aplica a todo el dominio, por lo que los scripts se ejecutarán en cualquier máquina a la que inicien sesión los usuarios. Si además de estaciones de trabajo se utilizan soluciones terminales (por ejemplo, Microsoft RDS o productos Citrix), este enfoque resultará inconveniente.
- Los datos se registran en el atributo Departamento de la cuenta del usuario, al cual el usuario común solo tiene acceso de 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 por defecto los usuarios tampoco pueden modificar. Por lo tanto, para que la solución funcione, el autor sugiere cambiar la configuración de seguridad predeterminada para los objetos AD.
- El formato de la fecha depende de la configuración de localización en la máquina final, por lo que desde una máquina podemos obtener 10 de noviembre de 2018 14:53, y desde otra 11/10/18 2:53 p.m.
Para solucionar estas desventajas se realizó lo siguiente.
- GPO se vincula no a un dominio, sino a una OU con máquinas (yo separo a los usuarios y las máquinas en diferentes OU y también se lo aconsejo a otros). Sin embargo, para se ha establecido el modo merge.
- El script solo introducirá datos en la cuenta de usuario en el atributo Info, que el usuario puede cambiar por sí mismo para su cuenta.
- Se ha modificado la parte del código que genera el valor del atributo
Ahora los scripts se ven así:
SaveLogonInfoToAdUserAttrib.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 & " " & " @ " & strComputerName
oUser.Setinfo
SaveLogoffInfoToAdUserAttrib.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 & " " & " @ " & strComputerName
oUser.Setinfo
Quien primero encuentre todas las diferencias entre el script de inicio de sesión y el de cierre de sesión, tendrá un bonus en su karma. 🙂
También se ha creado un pequeño script de PS para obtener información visual:
Get-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 "Información sobre inicios de sesión" -Wait
En total, se configura en un abrir y cerrar de ojos:
- creamos una GPO con las configuraciones necesarias y la vinculamos a la unidad organizativa con las estaciones de trabajo de los usuarios:
- vamos a tomar un té (si AD tiene un gran número de usuarios, se necesita mucho té 🙂
- ejecutamos el script de PS y obtenemos el resultado:

En la parte superior de la ventana, hay un filtro conveniente donde se pueden filtrar los datos por los valores de uno o más campos. Hacer clic en las columnas de la tabla ordena las entradas por los valores de los campos correspondientes.
Podemos empaquetar nuestra solución de manera atractiva.

Para esto, añadiremos un acceso directo para ejecutar el script a los especialistas de soporte técnico, que en el campo "objeto" tendrá algo así:
powershell.exe -NoLogo -ExecutionPolicy Bypass -File "servershareScriptsGet-UsersByPCsInfo.ps1"
Si hay muchos empleados en el soporte técnico, se puede distribuir un acceso directo mediante .
Algunas observaciones finales.
- En la máquina desde la cual se ejecuta el script de PowerShell, debe estar instalado el módulo de Active Directory para PowerShell (para esto, es suficiente con agregar las herramientas de administración de AD en los componentes de Windows).
- La mayor parte de los atributos de su cuenta el usuario, por defecto, no puede editarlos. Tenga esto en cuenta si decide usar un atributo diferente de Info.
- Informe a todos los colegas involucrados sobre qué atributo va a utilizar. Por ejemplo, el mismo Info se utiliza para agregar notas interactivas a la bandeja del usuario en el panel de administración de Exchange Server y alguien podría borrarlo fácilmente, o se sentiría apenado si la información que ellos agregaron es sobreescrita por su script.
- Si tiene varios sitios de Active Directory, ajuste por los retrasos de replicación. Por ejemplo, si desea obtener información actual sobre usuarios desde el sitio AD A, y ejecuta el script desde una máquina en el sitio AD B, puede hacerlo así:
Get-ADUser -Server DCfromSiteA -SearchBase $OU -Properties * -Filter * | Select-Object DisplayName, SamAccountName, info | Sort DisplayName | Out-GridView -Title "Información sobre los logones" -Wait
DCfromSiteA — el nombre del controlador de dominio del sitio A (por defecto, el cmdlet Get-AdUser se conecta al controlador de dominio más cercano)

Agradecería si completara la breve encuesta a continuación.
Solo los usuarios registrados pueden participar en la encuesta. , por favor.
¿Qué está utilizando?
bginfo, Desktop info, etc. (software gratuito)
análogos de pago de bginfo
lo haré como se indica en el artículo
no es relevante, ya que utilizo VDI/RDS, etc.
todavía no utilizo nada, pero estoy considerando
no necesito recopilar esos datos
otro (comparta en los comentarios)
112 usuarios votaron. 39 usuarios se abstuvieron.
Fuente: habr.com

