Windows: descubra quem está logado onde

Windows: descubra quem está logado onde
- Ah, nada funciona para mim, socorro!
- Não se preocupe, vamos consertar tudo agora. Dê o nome do seu computador...
(clássicos do gênero desde ligações até suporte técnico)

É bom se você tiver uma ferramenta à la BgInfo ou se seus usuários conhecerem o atalho Windows + Pause/Break e souberem como pressioná-lo. Existem até exemplares raros que conseguiram aprender o nome do seu carro. Mas muitas vezes, além do problema principal, o chamador tem um segundo problema: descobrir o nome/endereço IP do computador. E muitas vezes leva muito mais tempo para resolver esse segundo problema do que o primeiro (e você só precisava mudar o papel de parede ou devolver o atalho que faltava :).
Mas é muito melhor ouvir algo como:
- Tatyana Sergeevna, não se preocupe, já estou me conectando...


E você não precisa de muito para isso.
Um especialista de suporte técnico só precisa memorizar os nomes das máquinas e lembrar quem trabalha para quais.
Antes de descrever a solução que estamos usando atualmente, examinarei brevemente outras opções para poder criticá-las ao máximo e explicar minha escolha.

  1. BgInfo, Informações da área de trabalho e similar. Se há muito dinheiro, há dinheiro pago. A questão é que as 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é comprimir gráficos de desempenho em metade da tela.
    O que não gosto é que para o mesmo Bginfo, por exemplo, o usuário precise minimizar as janelas para ver os dados necessários. Meus colegas e eu também observamos mais de uma vez no BgInfo artefato característico, quando o novo texto é exibido sobre o antigo.
    Alguns usuários ficam incomodados com o fato de os administradores desenharem um assustador 192.168.0.123 no rosto de um gato esticado na área de trabalho, estragando a estética da imagem de fundo e, claro, isso é terrivelmente desmotivador e mata completamente o espírito de trabalho .
  2. Um rótulo como “Quem sou eu” (não tente adicionar um ponto de interrogação no final :). Um atalho clássico na área de trabalho, atrás do qual se esconde um script bacana ou não tão bacana que exibe as informações necessárias na forma de uma caixa de diálogo. Às vezes, em vez de um atalho, eles colocam o próprio script na área de trabalho, o que IMHO é falta de educação.
    A desvantagem é que para lançar o atalho, como no primeiro caso, é necessário minimizar todas as janelas abertas (não levamos em consideração aqueles queridinhos da fortuna que têm a única janela de paciência aberta em sua máquina de trabalho). A propósito, seus usuários sabem onde clicar para minimizar todas as janelas? Isso mesmo, um dedo no olho do administrador.

O limite também sugere que ambos os métodos descritos acima têm como principal desvantagem o envolvimento do usuário na obtenção de informações, que pode ser cego, estúpido ou até mentiroso.
Não considerarei a opção de aumentar a literacia informática, quando todos sabem onde no Windows procurar o nome da sua máquina: é uma causa nobre, mas muito difícil. E se a empresa tiver rotatividade de pessoal, então é completamente ruinoso. O que posso dizer, na maioria dos casos eles nem se lembram do login.

Eu derramei minha alma e agora vou direto ao ponto.
A ideia de um residente de Khabrov foi tomada como base mittel de este artigo.
A essência da ideia é que quando um usuário faz login no Windows, o script de logon insere as informações necessárias (hora e nome da máquina) em um determinado atributo da conta do usuário. E quando você sai do sistema, um script de logoff semelhante é executado.

Gostei da ideia em si, mas houve algumas coisas que não gostei na implementação.

  1. A política de grupo, que especifica scripts de logon e logoff para usuários, aplica-se a todo o domínio, portanto, os scripts serão executados em qualquer máquina na qual os usuários façam login. Se você usar soluções de terminal junto com estações de trabalho (por exemplo, produtos Microsoft RDS ou Citrix), essa abordagem será inconveniente.
  2. Os dados são inseridos no atributo Departamento da conta do usuário, ao qual o usuário médio tem acesso somente leitura. Além do atributo da conta do usuário, o script também faz alterações no atributo Departamento da conta do computador, que por padrão os usuários também não podem alterar. Portanto, para que a solução funcione, o autor sugere alterar os padrões de configurações de segurança dos objetos AD.
  3. O formato da data depende das configurações de localização na máquina de destino, portanto, de uma máquina podemos obter 10 de novembro de 2018 às 14h53 e de outra 11/10/18 às 2h53

Para eliminar essas deficiências, foi feito o seguinte.

  1. O GPO não está vinculado a um domínio, mas a uma UO com máquinas (separo usuários e máquinas em UOs diferentes e aconselho outras pessoas). Além disso, para modo de processamento de política de loopback modo está definido fundir.
  2. O script gravará dados apenas na conta do usuário no atributo Info, que o usuário pode alterar de forma independente para sua conta.
  3. Alterado o trecho de código que gera o valor do atributo

Agora os scripts ficam 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 & " <logon>" & " @ " & 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 & " <logoff>" & " @ " & strComputerName
oUser.Setinfo

Quem for o primeiro a encontrar todas as diferenças entre os scripts de Logon e Logoff receberá um bônus de carma. 🙂
Além disso, para obter informações visuais, foi criado o seguinte 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 "Информация по логонам" -Wait

No total, tudo está configurado um-dois-três:

  1. crie um GPO com as configurações necessárias e vincule-o ao departamento com estações de trabalho dos usuários:
    Windows: descubra quem está logado onde
  2. vamos tomar um chá (se o AD tem um grande número de usuários, então você precisa de muito chá :)
  3. execute o script PS e obtenha o resultado:
    Windows: descubra quem está logado onde
    Na parte superior da janela há um filtro conveniente no qual você pode selecionar dados com base nos valores de um ou mais campos. Clicar nas colunas da tabela classifica os registros pelos valores dos campos correspondentes.

Podemos “embalar” lindamente nossa solução.
Windows: descubra quem está logado onde
Para isso, adicionaremos um atalho para lançar o script para especialistas de suporte técnico, que terão algo assim no campo “objeto”:
powershell.exe -NoLogo -ExecutionPolicy Bypass -File "servershareScriptsGet-UsersByPCsInfo.ps1"

Se houver muitos funcionários de suporte técnico, você poderá distribuir um atalho usando GP extensão.

Alguns comentários finais.

  • O módulo Active Directory para PowerShell deve ser instalado na máquina a partir da qual o script PS é iniciado (para isso, basta adicionar ferramentas de administração do AD nos componentes do Windows).
  • Por padrão, o usuário não pode editar a maioria dos atributos de sua conta. Tenha isso em mente se você decidir usar um atributo diferente de Info.
  • Informe a todos os colegas envolvidos qual atributo você utilizará. Por exemplo, o mesmo Info é usado para adicionar notas interativamente à caixa de correio de um usuário no painel de administração do Exchange Server e alguém pode substituí-las facilmente ou ficar triste quando as informações adicionadas são substituídas pelo seu script.
  • Se você tiver vários sites do Active Directory, leve em consideração atrasos na replicação. Por exemplo, se quiser obter informações atualizadas sobre os usuários do site A do AD e executar o script em uma máquina do site B do AD, você pode fazer o seguinte:
    Get-ADUser -Server DCfromSiteA -SearchBase $OU -Properties * -Filter * | Select-Object DisplayName, SamAccountName, info | Sort DisplayName | Out-GridView -Title "Информация по логонам" -Wait

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

Windows: descubra quem está logado onde

Fonte da imagem

Eu ficaria muito grato se você pudesse responder à breve pesquisa abaixo.

Apenas usuários registrados podem participar da pesquisa. Entrarpor favor

O que você usa?

  • bginfo, informações da área de trabalho etc. (freeware)

  • análogos pagos do bginfo

  • Vou fazer como no artigo

  • não é relevante, porque Eu uso VDI/RDS etc.

  • Ainda não uso nada, mas estou pensando nisso

  • Não preciso coletar esses dados

  • outro (compartilhe nos comentários)

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

Fonte: habr.com

Adicionar um comentário