Scopri a quali workstation è collegato un utente in un ambiente Windows AD?

4

Al momento ho un utente cattivo nel mio ambiente. Non vogliamo impostare alcun allarme (anche parlando agli amministratori AD) e desideriamo scoprire la workstation a cui l'utente è connesso nel nostro ambiente AD. A questo punto nel tempo tutto quello che so è il nome utente.

Come posso scoprire il nome della workstation a cui l'utente è connesso solo conoscendo il nome utente?

i) Potrei esportare il registro di sicurezza di AD e cercare l'evento di accesso degli utenti, poiché l'evento di accesso acquisisce il nome della workstation.

ii) Scansione di tutti gli IP nella mia rete e scrivere uno script come il seguente per ottenere il nome utente attualmente connesso a IP x

for /f %%a in (IP.txt) do WMIC /NODE:%%a computersystem GET name, username 

Grazie.

    
posta Teddy 28.11.2012 - 04:19
fonte

2 risposte

1

Scopri quali computer sono presenti in Active Directory a cui un utente ha effettuato l'accesso.

This will find the user if they're logged in using the console or remotely using terminal services by examining the explorer.exe processes on all active directory machines. This script requires the free Quest ActiveRoles Management Shell for Active Directory snap-in: Located http://www.quest.com/powershell/activeroles-server.aspx

trova l'articolo completo qui

Add-PSSnapin Quest.ActiveRoles.ADManagement -ErrorAction SilentlyContinue
$ErrorActionPreference = "SilentlyContinue"

# Retrieve Username to search for, error checks to make sure the username
# is not blank and that it exists in Active Directory

Function Get-Username {
$Global:Username = Read-Host "Enter username you want to search for"
if ($Username -eq $null){
    Write-Host "Username cannot be blank, please re-enter username!!!!!"
    Get-Username}
$UserCheck = Get-QADUser -SamAccountName $Username
if ($UserCheck -eq $null){
    Write-Host "Invalid username, please verify this is the logon id for the account"
    Get-Username}
}

get-username

$computers = Get-QADComputer | where {$_.accountisdisabled -eq $false}
foreach ($comp in $computers)
    {
    $Computer = $comp.Name
    $ping = new-object System.Net.NetworkInformation.Ping
    $Reply = $null
    $Reply = $ping.send($Computer)
    if($Reply.status -like 'Success'){
        #Get explorer.exe processes
        $proc = gwmi win32_process -computer $Computer -Filter "Name = 'explorer.exe'"
        #Search collection of processes for username
        ForEach ($p in $proc) {
            $temp = ($p.GetOwner()).User
            if ($temp -eq $Username){
            write-host "$Username is logged on $Computer"
        }}}}

Joe ha commentato lì:

Joe0126 - Dec 12, 2011 Replace: $computers = Get-QADComputer | where {$_.accountisdisabled -eq $false} With: $computers = Get-QADComputer -OSname 'Server' | where {$_.accountisdisabled -eq $false}

    
risposta data 29.11.2012 - 05:40
fonte
0

una cosa da notare è che "connesso" può significare una serie di cose nel sistema operativo Windows:

  1. potrebbe essere l'utente si è connesso a una condivisione SMB
  2. l'utente potrebbe eseguire un processo pianificato in quel momento, ma non ha effettuato l'accesso alla console / desktop reale ecc.
  3. l'utente potrebbe eseguire una patch / aggiornamento software da remoto
  4. o in effetti, hanno effettuato l'accesso.

Non sono un amministratore di Windows (quindi non ho visto tutti gli strumenti di amministrazione) ma in passato ho scritto script come il tuo, tranne che ho usato l'applicazione nbtstat.exe su un intervallo di indirizzi IP.

tenere presente che il SO virtualizzato (utilizzando Servizi terminal) dispone di strumenti cli aggiuntivi, in particolare il cmd della "query session", vedere articolo di TechNet di Windows

    
risposta data 28.11.2012 - 12:45
fonte

Leggi altre domande sui tag