Respostas:
não é uma GUI, mas:
for /L %x in (2,1,254) do psloggedon \\172.21.0.%x
fará uma varredura de 172.21.0.2-254. Você também pode aninhar:
for /L %z in (16,1,31) do for /L %x in (1,1,254) do psloggedon \\172.21.%y.%x
Isso examinará as sub-redes 172.21. {16-31} .x.
Eu encontrei esse script . Ele verifica um domínio inteiro e fornece uma boa saída (nome do computador e nome do usuário).
whoisloggedinwhere.bat> users.txt
@echo off setlocal para / f "Tokens = 1" %% c in ('exibição / domínio líquido: "% USERDOMAIN%" ^ | Findstr / L / C: "\\"') do ( para / f "Tokens = *" %% u em ('PsLoggedOn -L %% c ^ | find / i "% USERDOMAIN% \"') do ( chamada: relatório %% c "%% u" ) ) endlocal ir para: EOF :relatório definir trabalho =% 1 definir comp =% trabalho: ~ 2% definir usuário =% 2 definir usuário =% usuário: "=% usuário do conjunto de chamadas = %% user: *% USERDOMAIN% \ = %% @echo% comp%% user%
Este script usa PsLoggedOn .
Tentar nbtstat -a <computername>
Escrevo o nome do usuário na propriedade de descrição do computador usando um script de logon, que permite ver tudo em Usuários e Computadores do AD, fazer pesquisas nele e assim por diante. Muito conveniente.
Se os servidores estiverem executando os Serviços de Terminal, você poderá usar o Gerenciador de Serviços de Terminal para exibir os servidores em um domínio e quem está conectado a eles. É GUI e pode ser encontrado em
Start -> Administrative Tools -> Terminal Services Manager
Você pode detectar um usuário conectado localmente a uma estação de trabalho consultando o WMI por meio do seguinte script do PowerShell. Retorna o nome de quem está conectado localmente ou a sequência vazia.
function logged_in($host_name) {
(get-wmiobject -class Win32_ComputerSystem -computername $host_name `
-namespace "root\CIMV2").UserName
}
Não tenho certeza de onde consegui, mas tenho esse código que mostra os usuários em uma máquina. Você pode agrupar isso em um loop para cada loop para varrer várias máquinas. Eu diria que, se você quiser saber quem está conectado a um sistema, a maneira mais simples é ativar a auditoria de login e examinar (ou consultar) o log de segurança. Aqui está o código para ver quem está a qualquer momento:
' PARAMETERS
'
strComputer = "machineName" ' use "." for local computer
strUser = "domain\user" ' comment this line for current user
strPassword = "password" ' comment this line for current user
' CONSTANTS
'
wbemImpersonationLevelImpersonate = 3
wbemAuthenticationLevelPktPrivacy = 6
'=======================================================================
' MAIN
'=======================================================================
' Connect to machine
'
If Not strUser = "" Then
' Connect using user and password
'
Set objLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMI = objLocator.ConnectServer _
(strComputer, "root\cimv2", strUser, strPassword)
objWMI.Security_.ImpersonationLevel = wbemImpersonationLevelImpersonate
objWMI.Security_.AuthenticationLevel = wbemAuthenticationLevelPktPrivacy
Else
' Connect using current user
'
Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
End If
' Get OS name
'
Set colOS = objWMI.InstancesOf ("Win32_OperatingSystem")
For Each objOS in colOS
strName = objOS.Name
Next
If Instr(strName, "Windows 2000") > 0 Then
'-------------------------------------------------------------------
' Code for Windows 2000
'-------------------------------------------------------------------
' Get user name
'
Set colComputer = objWMI.ExecQuery("Select * from Win32_ComputerSystem")
For Each objComputer in colComputer
Wscript.Echo "User: " & objComputer.UserName
Next
' ------------------------------------------------------------------
Else
' ------------------------------------------------------------------
' Code for Windows XP or later
' ------------------------------------------------------------------
' Get interactive session
'
Set colSessions = objWMI.ExecQuery _
("Select * from Win32_LogonSession Where LogonType = 2")
If colSessions.Count = 0 Then
' No interactive session found
'
Wscript.Echo "No interactive user found"
Else
'Interactive session found
'
For Each objSession in colSessions
Set colList = objWMI.ExecQuery("Associators of " _
& "{Win32_LogonSession.LogonId=" & objSession.LogonId & "} " _
& "Where AssocClass=Win32_LoggedOnUser Role=Dependent" )
' Show user info
'
For Each objItem in colList
WScript.Echo "User: " & objItem.Name
WScript.Echo "FullName: " & objItem.FullName
WScript.Echo "Domain: " & objItem.Domain
Next
' Show session start time
'
Wscript.Echo "Start Time: " & objSession.StartTime
Next
End If
' ------------------------------------------------------------------
End If
'=======================================================================
Estou surpreso que ninguém tenha mencionado o logon2 ainda, o que venho usando há alguns anos. É a implementação da GUI que você solicitou e está disponível aqui .