Windows: como saber quem está logado onde

Windows: como saber quem está logado onde
— Oh, nada está funcionando, me ajude!
— Não se preocupe, vamos corrigir isso agora. Diga-me o nome do computador...
(clássico de chamadas de suporte técnico)

É bom se você tiver uma ferramenta como o BgInfo ou se seus usuários souberem sobre o atalho Windows+Pause/Break e souberem usá-lo. Há até exemplares raros que conseguiram aprender o nome da máquina. Mas muitas vezes, além de seu problema principal, a pessoa que liga enfrenta um segundo: descobrir o nome/o endereço IP do computador. E muitas vezes, resolver esse segundo problema leva muito mais tempo do que o primeiro (e tudo o que precisava ser feito era trocar o papel de parede ou recuperar um atalho perdido :).
E é muito mais agradável ouvir algo como:
— Tatyana Sergeevna, não se preocupe, já estou me conectando...


E não é necessário muito para isso.
Para um especialista em suporte técnico, basta memorizar os nomes das máquinas e lembrar quem trabalha com o quê.
Antes de descrever a solução que usamos agora, vou brevemente considerar outras opções, para criticar suas limitações explicar minha escolha.

  1. BgInfo, Desktop Info e similares. Se houver muito dinheiro, existem também opções pagas. A essência é que informações técnicas são exibidas na área de trabalho: nome da máquina, endereço IP, login, etc. No Desktop Info, você pode até adicionar gráficos de desempenho na metade da tela.
    O que não agrada é que, para o mesmo BgInfo, por exemplo, o usuário precisa minimizar janelas para ver os dados necessários. Além disso, nós, colegas, já observamos várias vezes que o BgInfo produz um artefato característico, onde o novo texto é exibido sobre o antigo.
    Alguns usuários ficam irritados com o fato de que os administradores desenham um assustador 192.168.0.123 na cara de um gato estendido na área de trabalho, arruinando a estética do papel de parede, e, claro, isso desmotiva horrivelmente e mata completamente o ânimo de trabalhar.
  2. Um atalho como "Quem sou eu" (não tente adicionar um signo de interrogação no final :). Um atalho clássico na área de trabalho, que esconde um script limpo ou nem tão limpo, que exibe as informações necessárias em forma de janela de diálogo. Às vezes, em vez de um atalho na área de trabalho, o próprio script é colocado, o que, na minha opinião, é de mau gosto.
    A desvantagem é que, para iniciar o atalho, assim como no primeiro caso, é necessário minimizar todas as janelas abertas (não estamos considerando os sortudos cuja única janela aberta na máquina de trabalho é um jogo de paciência). A propósito, seus usuários sabem onde clicar para minimizar todas as janelas? Certamente, na cara do administrador.

Além disso, o capitão menciona que ambos os métodos descritos acima têm a desvantagem principal de envolver o usuário na obtenção das informações, que pode ser distraído, não muito inteligente e, em geral, mentir.
Não vou considerar a opção de aumentar a alfabetização digital, em que todos sabem onde procurar o nome do seu computador no Windows: é uma nobre causa, mas muito difícil. E se a empresa tem alta rotatividade de pessoal, torna-se um trabalho ainda mais ingrato. Afinal, na maioria dos casos, muitos nem se lembram do próprio login.

Desabafei, agora vamos ao assunto.
A ideia foi baseada no conceito de um membro da comunidade Habr. mittel do este artigo.
A essência da ideia é que, ao fazer login no Windows, um script de logon registra as informações necessárias (hora e nome do computador) em um atributo específico da conta do usuário. E ao sair do sistema, um script de logoff correspondente é executado.

Gostei da ideia, mas na implementação algumas coisas não me agradaram.

  1. A política de grupo, na qual estão escritos os scripts de logon e logoff para os usuários, aplica-se a todo o domínio, portanto os scripts serão executados em qualquer máquina na qual os usuários fizerem login. Se você usa soluções de terminal junto com estações de trabalho (por exemplo, Microsoft RDS ou produtos Citrix), essa abordagem pode ser inconveniente.
  2. Os dados são registrados no atributo Department da conta do usuário, que o usuário comum pode acessar apenas em modo de leitura. Além do atributo da conta do usuário, o script também faz alterações no atributo Department da conta do computador, que por padrão os usuários não podem alterar. Portanto, para que a solução funcione, o autor sugere modificar as configurações padrão de segurança para objetos AD.
  3. O formato da data depende das configurações de localização na máquina final, portanto de uma máquina podemos obter 10 de novembro de 2018 14:53, e de outra 11/10/18 14:53.

Para eliminar essas desvantagens, foram feitas as seguintes alterações.

  1. GPO não se vincula ao domínio, mas à OU com máquinas (eu separo usuários e máquinas em diferentes OUs e recomendo isso para outros). Dessa forma, para modo de processamento de política de loopback o modo está configurado como mesclar.
  2. O script irá registrar dados apenas na conta do usuário no atributo Info, que o usuário pode alterar por conta própria.
  3. Uma parte do código que gera o valor do atributo foi alterada

Agora os scripts estão assim:
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

Quem encontrar primeiro todas as diferenças entre o script de logon e o de logoff ganhará pontos na karma. 🙂
Além disso, para obter informações visuais, foi criado um pequeno script PS:
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 "Informação sobre logons" -Wait

No total, tudo é configurado rapidamente:

  1. criamos um GPO com as configurações necessárias e o vinculamos à unidade com as estações de trabalho dos usuários:
    Windows: como saber quem está logado onde
  2. vamos tomar um chá (se a AD tem um grande número de usuários, então precisamos de muito chá 🙂
  3. executamos o script PS e obtemos o resultado:
    Windows: como saber quem está logado onde
    Na parte superior da janela, há um filtro conveniente que permite filtrar dados por valores de um ou vários campos. Clicar nas colunas da tabela classifica os registros pelos valores dos respectivos campos.

Podemos embalar nossa solução de forma bonita.
Windows: como saber quem está logado onde
Para isso, adicionaremos um atalho para executar o script para a equipe de suporte técnico, que terá algo como no campo "objeto":
powershell.exe -NoLogo -ExecutionPolicy Bypass -File "servershareScriptsGet-UsersByPCsInfo.ps1"

Se houver muitos funcionários no suporte técnico, você pode distribuir o atalho usando GPP.

Algumas observações finais.

  • Na máquina de onde o script PS é executado, o módulo Active Directory para PowerShell deve estar instalado (basta adicionar as ferramentas de administração do AD nos componentes do Windows).
  • A maior parte dos atributos da sua conta o usuário, por padrão, não pode editar. Tenha isso em mente se você decidir usar um atributo diferente de Info.
  • Informe a todos os colegas envolvidos sobre qual atributo você estará utilizando. Por exemplo, o mesmo Info é usado para adicionar notas interativas à caixa de usuário no painel de administração do Exchange Server e alguém pode facilmente sobrescrevê-lo, ou ficou chateado quando as informações que ele adicionou foram apagadas pelo seu script.
  • Se você tiver vários sites Active Directory, considere os atrasos de replicação. Por exemplo, se você deseja obter informações atualizadas sobre usuários do site AD A, mas executa o script a partir de uma máquina do site AD B, você pode fazer assim:
    Get-ADUser -Server DCfromSiteA -SearchBase $OU -Properties * -Filter * | Select-Object DisplayName, SamAccountName, info | Sort DisplayName | Out-GridView -Title "Informações sobre logons" -Wait

    DCfromSiteA — nome do controlador de domínio do site A (por padrão, o cmdlet Get-AdUser conecta-se ao controlador de domínio mais próximo)

Windows: como saber quem está logado onde

Fonte das imagens

Agradeço se você passar por uma breve pesquisa abaixo.

Apenas usuários registrados podem participar da pesquisa. Entre, por favor.

De que você utiliza?

  • bginfo, Desktop info etc. (software gratuito)

  • análogos pagos do bginfo

  • farei como no artigo

  • não é relevante, pois utilizo VDI/RDS etc.

  • ainda não estou utilizando nada, mas estou pensando

  • não preciso coletar esses dados

  • outro (compartilhe nos comentários)

112 usuários votaram. 39 usuários se abstiveram.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster