Ottenere l'utente attualmente connesso a un sistema Windows XP Pro

Abbiamo una macchina XP che esegue le attività pianificate presto al mattino e, purtroppo, deve essere registrato nel desktop di un determinato utente per far funzionare. Purtroppo, questo utente viene a volte scollegato – sia da un amministratore che accede (e dimentica di eseguire il login nell'utilizzatore corretto), oppure da quello che viene riavviato per applicare gli aggiornamenti della protezione, ecc.

Vorrei che Nagios controllasse l'utente attualmente connesso, per confermare quello giusto. Nagios è in esecuzione su Linux.

Finora, ho cercato una variabile SNMP con l'utente corrente; Non ho avuto fortuna. Ho provato la snmpbulkwalk -m all -v2c -c community machine e lo ho inserito per il nome utente, e ho fatto anche un login prima e dopo il login, e ho controllato il diff, e non ho trovato niente utile.

Ho controllato il command net (da Samba), ma non vedo niente, anche se ammetto che è ansible che mi sia mancato qualcosa. Le varie opzioni di session sembrano visualizzare la session net (anche quando utilizzo il mio account amministratore di dominio).

  • Eliminare una directory con pipe (|) nel suo nome?
  • Spingere le informazioni in un file Excel di sola lettura in networking / condiviso utilizzato da più persone
  • Il Task Scheduler in Windows XP è affidabile abbastanza per avere fiducia con compiti importnti?
  • Permessi di reindirizzamento delle cartelle di Windows
  • Equivalente del command Linux `hostname --fqdn` in Windows XP?
  • Come dare IP statico all'ufficio e utilizzare DHCP a casa
  • Norton Ghost EBAB03F1: Il nome della networking specificato non è più disponibile
  • Montaggio di Webdav su XP
  • 2 Solutions collect form web for “Ottenere l'utente attualmente connesso a un sistema Windows XP Pro”

    %WINDIR%\System32\dllcache\query.exe session vi darà un elenco di tutti gli utenti attualmente connessi su WinXP.

    Per qualche motivo query.exe non era nella variabile d'ambiente del path sulla mia macchina di prova WinXP, per cui ho specificato l'integer path.

    domanda

    Se hai bisogno di qualcosa che sia in grado di get queste informazioni in remoto su RPC / DCOM, allora guarda un paio di cose che ho scritto:

    http://myotherpcisacloud.com/post/2013/01/16/Usersexe-v1003.aspx

    http://www.myotherpcisacloud.com/post/2013/01/13/Getting-RDP-Sessions-with-Client-Computer-Name.aspx

    A proposito, è necessario scendere da XP ASAP. È molto vecchio.

    Modifica: OK, ti darò un'altra alternativa perché nessuno di questi ti ha ancora aiutato. Volete interrogare questa macchina WinXP attraverso la networking utilizzando la vostra macchina Linux. Si desidera utilizzare WMI. Hai trovato un client WMI per Linux. Fin qui tutto bene.

    In questo modo verranno triggersti ​​utenti di una macchina locale o remota tramite query WMI WQL. Ho scritto questo in Powershell. Spiacente, non posso convertirlo in Perl o Bash per te, ma il concetto è quello che è ancora la stessa per quanto le query WQL possono essere:

     $Sessions = Get-WMIObject -Query "SELECT * FROM Win32_LogonSession WHERE LogonType=2 OR LogonType=10" Foreach($Session In $Sessions) { If($Session -AND $Session.PSObject.Properties.Match('LogonId').Count) { Get-WMIObject -Query "Associators Of {Win32_LogonSession.LogonId=$($Session.LogonId)} WHERE AssocClass=Win32_LoggedOnUser Role=Dependent" } } 

    LogonTypes di 2 e 10 coprono le sessioni interattive locali e remote, ma non gli accessi di servizio, gli accessi di networking o gli accoppiamenti batch.

    Sì, hai bisogno delle autorizzazioni per accedere alla macchina WinXP. Non solo per tossire tutti questi dati per un process di networking anonimo. I gruppi locali su WinXP non sono molto granuli, perché WinXP è molto vecchio e la sua sicurezza è molto inferiore a quella delle versioni moderne di Windows … il mio punto è che mettere l'utente di monitoraggio della networking nel gruppo Admins locale della macchina WinXP può essere la tua scelta migliore. Ma ti prego, se vuoi ancora andare con il principio del minore privilegio, in questo caso, puoi utilizzare la console di controllo WMI, wmimgmt.msc, e impostare le autorizzazioni esattamente a qualunque account desideri assegnare le autorizzazioni.

    Grazie yo @Ryan Ries, ecco lo script reale di Perl che sto usando. Speriamo che sia utile a qualcun altro. Sembra che stia lavorando, non esitate a segnalare eventuali bug. Cercherò di ricordare di aggiornarlo se trovo.

    Inoltre, non sono riuscito a trovare alcun modo per fare questo lavoro su XP, tranne che mettere l'utente di monitoraggio in Amministratori. Penso che questo è l'unico modo per farlo su XP.

     #!/usr/bin/perl -w use 5.010; use IPC::Run qw(run); use Nagios::Plugin; use strict; my $np = Nagios::Plugin->new( shortname => 'check_windows_user', version => '0.01', license => 'Copyright 2013 Customer Relationship Metrics, LC. Based on a Powerhell program by Ryan Ries. CC-BY-SA http://creativecommons.org/licenses/by-sa/3.0/', usage => 'Usage: %s -H <host> -A <authfile> -u <user>|-s <sid> -w <threshold> -c <threshold>', extra => <<EXTRA Thresholds are in session counts. See http://nagiosplug.sourceforge.net/developer-guidelines.html for a description of the threshold format. EXTRA ); $np->add_arg( spec => 'host|H=s', help => '-H, --host=hostname', required => 1, ); $np->add_arg( spec => 'user|u=s', help => '-u, --user=username', required => 0, ); $np->add_arg( spec => 'sid|s=s', help => '-s, --sid=sid', required => 0, ); $np->add_arg( spec => 'authentication_file|authentication-file|A=s', help => '-A, --authentication-file=FILE', required => 1, ); $np->add_arg( spec => 'warning|w=s', help => '-w, --warning=INTEGER:INTEGER', required => 1, ); $np->add_arg( spec => 'critical|c=s', help => '-c, --critical=INTEGER:INTEGER', required => 1, ); $np->getopts; $np->set_thresholds( warning => $np->opts->warning, critical => $np->opts->critical ); # setup local $SIG{ALRM} = sub { die "alarm timed out\n" }; alarm 30; my $target_user = defined $np->opts->user ? lc $np->opts->user : undef; my $target_sid = defined $np->opts->sid ? lc $np->opts->sid : undef; my @wmic = ( 'wmic', -A => $np->opts->authentication_file, ('//' . $np->opts->host)); my $wmic_out; # get all logon ids my @all_logon_ids; run [ @wmic, q{SELECT LogonId FROM Win32_LogonSession WHERE LogonType = 2 or LogonType = 10} ], \undef, \$wmic_out; @all_logon_ids = split("\n", $wmic_out); $all_logon_ids[0] =~ /^CLASS: Win32_LogonSession$/ or die "Unexpected wmic result: $wmic_out"; $all_logon_ids[1] =~ /^LogonId$/ or die "Unexpected wmic result: $wmic_out"; splice @all_logon_ids, 0, 2; # get user of each logon, check if matches my $session_count = 0; foreach my $logon_id (@all_logon_ids) { # does not seem to be a way to specify which fields we want, or # their order :-( # # also, it only seems to do delimited data — pick a character that # isn't going to occur in the data. And unit separator is even for # that purpose! run [ @wmic, '--delimiter' => "\x1F", qq{Associators Of {Win32_LogonSession.LogonId=$logon_id} WHERE AssocClass=Win32_LoggedOnUser Role=Dependent} ], \undef, \$wmic_out; # sessions get left in Win32_LogonSession after log out (sometimes). next if '' eq $wmic_out; my @tmp = split("\n", $wmic_out); 3 == @tmp && $tmp[0] =~ /^CLASS: Win32_UserAccount$/ or die "Unexpected associator: $wmic_out"; my %record; @record{map lc, split("\x1F", $tmp[1])} = map lc, split("\x1F", $tmp[2]); # try to disqualify defined $target_user && $target_user ne $record{caption} and next; defined $target_sid && $target_sid ne $record{sid} and next; # qualified ++$session_count; } $np->add_message($np->check_threshold($session_count), "$session_count sessions"); $np->nagios_exit($np->check_messages); 

    changelog

    • Apparentemente, se si esegue una session tramite un desktop remoto e non si registra in un altro utente, la session viene lasciata in Win32_LogonSession ma con niente associato. Lo stato è sempre nullo, quindi non è ansible filtrare in questo modo. Filtra per mancanza di associazioni. Senza questa correzione a due righe, il plugin muore (e quindi restituisce sconosciuto).
    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.