Visualizzazione post con etichetta Visualizzatore eventi. Mostra tutti i post
Visualizzazione post con etichetta Visualizzatore eventi. Mostra tutti i post

lunedì 18 settembre 2023

PowerShell: Diagnostica delle prestazioni di avvio/spegnimento/standby/ripresa di Windows

Da Sistemista ci si trova spesso a dover analizzare problemi di prestazioni legati ai processi di avvio/arresto/ibernazione/ripresa di una workstation/Server. Microsoft fornisce una serie di registri eventi di sistema per diversi scopi che possono essere utili in tali analisi. Nel Visualizzatore eventi di Windows, questi registri si trovano in un ramo speciale chiamato "Registri applicazioni e servizi". Windows registra gli eventi di diagnostica delle prestazioni nel registro eventi Microsoft-Windows-Diagnostics-Performance/Operational. Per aprire questo registro in Visualizzatore eventi di Windows (eventvwr), espandere il ramo Registri applicazioni e servizi -> Microsoft -> Windows -> Diagnostics-Performance ->Operativo.
Visualizzatore eventi, Diagnostics-Performance
FIG 1 - Visualizzatore eventi, Diagnostics-Performance

Dal registro è possibile visualizzare un elenco di diversi eventi diagnostici. Come si può notare dalla FIG 1, gli eventi con lo stesso ID possono essere di tipi (livelli) diversi (Avviso, Errore e Critico) che dipendono dalla durata del processo di avvio/arresto. Questi eventi contengono internamente molti parametri importanti, ma non sono visibili nella descrizione dell'evento (anche il Visualizzatore eventi di Windows non li visualizza). L'unico modo per visualizzare questi parametri è fare doppio clic sull'evento per visualizzarne le proprietà, passare alla scheda  Dettagli e selezionare XML.
Proprietà evento, XML
FIG 2 - Proprietà evento, XML


Nella seguente tabella sono riportati le descrizioni degli Event ID.
Event ID Descrizione
Monitoraggio delle prestazioni di avvio
100
Avvio di Windows
101
L'avvio dell'applicazione ha richiesto più tempo del consueto, determinando una riduzione del livello delle prestazioni del processo di avvio del sistema
102
L'inizializzazione del driver ha richiesto più tempo del previsto, determinando una riduzione del livello delle prestazioni del processo di avvio del sistema
103
L'avvio di questo servizio di avvio ha richiesto più tempo del previsto, determinando una riduzione del livello delle prestazioni del processo di avvio del sistema
104
L'inizializzazione del sistema Core ha richiesto più tempo, con conseguente riduzione delle prestazioni nel processo di avvio del sistema.
105
Le ottimizzazioni in primo piano (prefetching) hanno richiesto più tempo per essere completate, con un conseguente calo delle prestazioni nel processo di avvio del sistema.
106
Le ottimizzazioni in background (prefetching) hanno richiesto più tempo per essere completate, con conseguente riduzione delle prestazioni nel processo di avvio del sistema.
107
L'applicazione dei criteri computer ha causato un rallentamento nel processo di avvio del sistema
108
L'applicazione dei criteri utente ha causato un rallentamento nel processo di avvio del sistema
109
L'inizializzazione del dispositivo ha richiesto più tempo del previsto, determinando una riduzione del livello delle prestazioni del processo di avvio del sistema
110
L'inizializzazione della gestione delle sessioni ha causato il rallentamento del processo di avvio
Monitoraggio delle prestazioni di arresto del sistema
200
Arresto di Windows
201
Questa applicazione ha causato un ritardo nel processo di spegnimento del sistema.
202
Questo dispositivo ha causato un ritardo nel processo di spegnimento del sistema
203
Il servizio ha causato un rallentamento nel processo di arresto del sistema
Monitoraggio delle prestazioni in standby
300
Windows ha ripreso dallo standby
301
Questa applicazione ha causato un ritardo durante lo standby
302
Questo driver ha causato un ritardo durante lo standby durante la manutenzione di un dispositivo
303
Questo servizio ha causato un ritardo durante la sospensione ibrida
304
La creazione del file hiber è stata più lenta del previsto
305
La permanenza delle cache del disco è stata più lenta del previsto
306
La preparazione del sottosistema video per la sospensione è stata più lenta del previsto
307
La preparazione di Winlogon per la sospensione era più lenta del previsto
308
La preparazione della memoria di sistema per la sospensione è stata più lenta del previsto
309
La preparazione del sistema principale per la sospensione è stata più lenta del previsto
310
La preparazione dei thread di lavoro del sistema per la sospensione è stata più lenta del previsto
350
Il tempo di inizializzazione del BIOS è stato superiore a 250 ms (requisito del logo) durante il ripristino del sistema
351
Questo driver ha risposto più lentamente del previsto alla richiesta di ripristino durante la manutenzione di questo dispositivo
352
La lettura del file hiber è stata più lenta del previsto
Monitoraggio delle prestazioni del sistema
400
Informazioni sull'evento di monitoraggio delle prestazioni del sistema
401
Questo processo utilizza il tempo del processore e influisce sulle prestazioni di Windows
402
Questo processo sta eseguendo attività eccessive del disco e ha un impatto sulle prestazioni di Windows
403
Questo driver utilizza troppe risorse e influisce sulle prestazioni di Windows
404
Questo driver attende più del previsto su un dispositivo
405
Questo file è frammentato e influisce sulle prestazioni di Windows
406
L'I/O del disco su questo file sta richiedendo più tempo del previsto
407
Questo processo utilizza troppa memoria di sistema
408
Molti processi utilizzano troppa memoria di sistema
Monitoraggio delle prestazioni del sistema
500
Il Desktop Window Manager sta riscontrando un forte conflitto di risorse
501
Il Desktop Window Manager sta riscontrando un forte conflitto di risorse


Dovendo effettuare l'analisi sulle prestazioni di avvio/spegnimento/standby/ripresa, dovremmo prestare attenzione agli eventi 1xx, 2xx e 3xx. Come visibile in tabella e in FIG 1, gli eventi 100, 200 e 300 sono eventi di base seguiti da 1xx, 2xx e 3xx che forniscono informazioni aggiuntive sul problema.

Supponiamo di voler individuare l'applicazione che rallenta l'avvio di Windows. Windows registra l'ora di avvio e i tempi di riduzione prestazioni (in millisecondi) per ogni servizio e sottosistema avviato. Grazie a questi dati, è possibile identificare potenziali problemi con i servizi che richiedono troppo tempo per essere avviati. In questo caso l'Event ID che ci interessa è il 101 e i livelli Critico/Errore (livelli 1 e 2).

PowerShell può esserci d'aiuto in tali contesti. Tramite questo semplice script, da eseguire come amministratore, vengono evidenziati tutti gli eventi con Event ID 101 e di livello 1 e 2 degli ultimi 60 giorni.
 $Days = 60  
   
 $machineName = @{  
   Name = 'Nome PC'  
   Expression = { $env:COMPUTERNAME }  
 }  
   
 $FileName = @{  
     Name = 'Nome File';  
     Expression = { $_.properties[2].value }  
 }  
   
 $Name = @{  
     Name = 'Nome';  
     Expression = { $_.properties[4].value }  
 }  
   
 $Version = @{  
     Name = 'Versione'  
     Expression = { $_.properties[6].value }  
 }  
   
 $TotalTime = @{  
     Name = 'Tempo Totale'  
     Expression = { $_.properties[7].value }  
 }  
   
 $DegradationTime = @{  
     Name = 'Tempo riduzione prestazioni'  
     Expression = { $_.properties[8].value }  
 }  
   
 Get-WinEvent -FilterHashtable @{  
   LogName='Microsoft-Windows-Diagnostics-Performance/Operational'  
   Id=101  
   StartTime = (Get-Date).AddDays(-$Days)  
   Level = 1,2  
 } |  
 Select-Object -Property $MachineName, TimeCreated, $FileName, $Name, $Version, $TotalTime, $DegradationTime, Message | Out-GridView  

Script PowerShell, Get-WinEvent
FIG 3 - Script PowerShell, Get-WinEvent







sabato 30 ottobre 2021

Windows 10: Visualizzare i processi eseguiti da un utente sul PC

Tramite il registro eventi di sistema è possibile monitorare i programmi eseguiti da un utente sulla macchina. Per permettere a Windows di tenere traccia di tali eventi nei log è necessario procedere all'attivazione dell'audit (si veda l'articolo Windows 10: Attivazione audit). 
Dato che verranno tracciati un numero elevato di eventi è consigliabile incrementare le dimensioni del registro eventi come indicato nell'articolo Windows 10: Aumentare la dimensione dei registri eventi.

Visualizzare i processi mandati in esecuzione

Per analizzare i log ed individuare i programmi eseguiti è possibile procedere come indicato di seguito:
  • Avviare il Visualizzatore eventi (WIN+R e digitare eventvwr.msc seguito da invio).
  • Nel riquadro sinistro espandere Registri di Windows e selezionare il registro Sicurezza. Cliccare su Filtro registro corrente.
    Visualizzatore eventi
    FIG 1 - Visualizzatore eventi

  • Nella casella contrassegnata dall'etichetta <Tutti gli ID evento> digitare l'ID 4688 (l'ID corrisponde all'evento: È stato creato un nuovo processo) e cliccare su OK.
    Filtro registro corrente
    FIG 2 - Filtro registro corrente

  • Verranno visualizzati tutti gli eventi relativi all'esecuzione di un processo.
    Eventi ID 4688
    FIG 3 - Eventi ID 4688


Ricerca per programma tramite PowerShell

Se si intende filtrare i risultati in base al programma avviato è possibile utilizzare PowerShell. Supponiamo di voler visualizzare tutti gli avvii del Prompt dei comandi (cmd.exe):
  • Una volta avviato PowerShell come amministratore digitare il seguente comando
    Get-WinEvent -FilterHashtable @{LogName='Security'; id=4688;data='C:\windows\system32\cmd.exe'} 
    verranno visualizzati tutti gli eventi relativi all'avvio del prompt dei comandi. Per maggiori dettagli possiamo aggiungere Format-List come indicato di seguito
    Get-WinEvent -FilterHashtable @{LogName='Security'; id=4688;data='C:\windows\system32\cmd.exe'} |Format-List
    Sostituendo la stringa in data= possiamo personalizzare la ricerca indicando altri processi di nostro interesse.
    PowerShell, ricerca eventi avvio Prompt dei comandi
    FIG 4 - PowerShell, ricerca eventi avvio Prompt dei comandi

    PowerShell, dettagli eventi avvio Prompt dei comandi
    FIG 5 - PowerShell, dettagli eventi avvio Prompt dei comandi

  • Per visualizzare quante volte un processo è stato eseguito, digitare il seguente comando nella finestra PowerShell 
    Get-WinEvent -FilterHashtable @{LogName='Security'; id=4688;data='C:\windows\system32\cmd.exe'} | Measure-Object 
    PowerShell, numero di avvii del Prompt dei comandi
    FIG 6 - PowerShell, numero di avvii del Prompt dei comandi


Ricercare gli eventi tramite XPath

XPath è un linguaggio che permette di individuare i nodi all'interno di un documento XML. Un sottoinsieme della versione 1.0 è supportato dal sistema di log di Windows.
Gli eventi di Windows vengono conservati in formato XML. Per verificarlo, aprire un qualsiasi evento all'interno del registro tramite doppio click, selezionare la scheda Dettagli e quindi selezionare l'opzione XML. Viene riportata la rappresentazione XML nativa dell'evento, meno leggibile rispetto a quella a cui siamo abituati.
Proprietà evento in formato XML
FIG 7 - Proprietà evento in formato XML


Per ricercare gli eventi tramite XPath:
  • Da Visualizzatore eventi cliccare su Filtro registro corrente e nella casella <Tutti gli ID evento> digitare nuovamente l'ID 4688
  • Spostarsi sulla scheda XML. Verrà visualizzata la query XPath con i criteri di filtro inseriti. Per modificare la query manualmente selezionare la casella Modifica query manualmente e rispondere affermativamente alla successiva finestra di dialogo.
    Filtro registro corrente, Query in XML
    FIG 8 - Filtro registro corrente, Query in XML

    Visualizzatore eventi, modifica manuale query
    FIG 9 - Visualizzatore eventi, modifica manuale query

  • Per ricercare solo le occorrenze relative ad un determinato utente, modificare la query come indicato di seguito in modo
    <QueryList>
      <Query Id="0" Path="Security">
        <Select Path="Security">*[System[(EventID=4688)]]and
        *[EventData[Data[@Name='SubjectUserName']='utente']]
        </Select>
      </Query>
    </QueryList>
    Dove al posto di utente va specificato l'account utente per il quale si intende effettuare la ricerca. Cliccando su OK verrà eseguita la query con le condizioni specificate.
  • È possibile aggiungere ulteriori condizioni alla ricerca. Ad esempio, per ricercare tutti i processi cmd.exe eseguiti dall'utente Virtual la query sarà analoga a
    <QueryList>
      <Query Id="0" Path="Security">
        <Select Path="Security">*[System[(EventID=4688)]]and
         *[EventData[Data[@Name='SubjectUserName']='Virtual'
    	 and Data[@Name='NewProcessName']='C:\Windows\System32\cmd.exe']]
    	</Select>
      </Query>
    </QueryList>

    Visualizzatore eventi, query XPath
    FIG 10 - Visualizzatore eventi, query XPath






lunedì 16 agosto 2021

Windows 10: Bloccare l'account dopo tentativi di accesso falliti e verifica registro eventi

Per proteggere il nostro sistema è buona norma impostare l’Account lockout policy, ovvero un criterio di gruppo che prevede il blocco temporaneo di un account a seguito di diversi tentativi di accesso con credenziali errate (indice di un attacco da parte di un malintenzionato). Generalmente si tratta di una protezione che viene attivata sulle macchine appartenenti ad un dominio (Windows Server 2019: Usare le Group Policy per impostare le password e blocco account) ma utilizzando l'Editor Criteri di gruppo locali e un'utenza amministrativa può essere attivata anche su una postazione standalone.

Attivare il criterio di blocco account
  • Avviare il l'Editor Criteri di gruppo locali (WIN+R e digitare gpedit.msc seguito da invio).
  • Posizionarsi su Configurazione computer -> Impostazioni di Windows -> Impostazioni sicurezza -> Criteri account -> Criterio di blocco account
    Criterio di blocco account
    FIG 1 - Criterio di blocco account

  • Eseguire un doppio click sul criterio Soglia di blocchi dell'account.
  • All'interno della casella L'account verrà bloccato dopo, specificare il numero di tentativi di accesso non riusciti dopo il quale l'account verrà bloccato (ad es. 3) e cliccare su OK.
    Proprietà Soglia di blocchi dell'account
    FIG 2 - Proprietà Soglia di blocchi dell'account

  • Subito dopo aver cliccato su OK, una finestra di dialogo ci avvisa che sono stati modificati automaticamente anche gli altri due criteri: Blocca account per ( criterio che specifica il numero di minuti per cui un account bloccato deve rimanere bloccato prima di essere sbloccato automaticamente) e Reimposta contatore blocco account dopo (criterio che specifica il numero di minuti che deve trascorrere dopo un tentativo di accesso non riuscito prima che il contatore dei tentativi di accesso non riusciti venga azzerato). Per entrambi i criteri viene impostato un tempo di 30 minuti che può essere modificato attraverso le loro proprietà. Cliccare su OK.
    Cambiamenti ai valori suggeriti
    FIG 3 - Cambiamenti ai valori suggeriti
Da questo momento, al terzo tentativo di accesso non riuscito, l'account verrà bloccato per 30 minuti complicando la vita ad un eventuale malintenzionato che sta tentando un attacco brute force.


Verificare account bloccati (Evento ID 4740)
  • Avviare il Visualizzatore eventi (WIN+R e digitare eventvwr.msc seguito da invio).
  • Nel riquadro sinistro espandere Registri di Windows e selezionare il registro Sicurezza. Cliccare su Filtro registro corrente.
    Registro eventi Sicurezza
    FIG 4 - Registro eventi Sicurezza

  • Nella casella contrassegnata dall'etichetta <Tutti gli ID evento> digitare l'ID 4740 (l'ID corrisponde all'evento: Un account utente è stato bloccato) e cliccare su OK.
    Filtro registro corrente
    FIG 5 - Filtro registro corrente

  • L'evento riporta l'account bloccato (sezione Soggetto, Nome Account: Test2), la data e l'ora dell'evento.
    Account bloccato
    FIG 6 - Account bloccato

  • Se intendiamo utilizzare PowerShell per ricercare tutti gli eventi con ID 4740 basta eseguire il comando
    Get-WinEvent -FilterHashtable @{LogName='Security'; id=4740;} | Format-List
    PowerShell, ricerca eventi ID 4740
    FIG 7 PowerShell, ricerca eventi ID 4740

  • Se intendiamo ricercare gli eventi ID 4740 relativi ad uno specifico utente il comando da eseguire è
    Get-WinEvent -FilterHashtable @{LogName='Security'; id=4740; data='account_bloccato'} | Format-List
    ovviamente sostituendo account_bloccato con l'account di nostro interesse.
    PowerShell, ricerca eventi ID 4740 di un account specifico
    FIG 8 - PowerShell, ricerca eventi ID 4740 di un account specifico


Sbloccare un account bloccato
L'account bloccato verrà automaticamente sbloccato trascorso l'intervallo di tempo impostato. Se si intende affrettare i tempi e sbloccare subito l'account basta procedere come indicato di seguito:
  • Eseguire il logon con un utente amministratore e avviare il tool Utenti e gruppi locali (WIN+R e digitare lusrmgr.msc seguito da invio).
  • Nel riquadro sinistro, selezionare utenti quindi cliccare, con il tasto destro del mouse, sull'account che si intende sbloccare e selezionare Proprietà dal menu contestuale.
    Utenti e gruppi locali
    FIG 9 - Utenti e gruppi locali

  • Rimuovere la spunta alla voce Account bloccato e cliccare su OK.
    Proprietà Account bloccato
    FIG 10 - Proprietà Account bloccato







lunedì 19 luglio 2021

Windows 10: Aumentare la dimensione dei registri eventi

Un'impostazione che viene spesso trascurata in ambiente Windows è quella della dimensione dei registri eventi. In Windows 10 la dimensione massima dei registri eventi come Applicazione, Sicurezza, Sistema è impostata di default a 20 MB. Tale dimensione, in alcuni contesti, potrebbe rivelarsi insufficiente portando alla sovrascrittura prematura degli eventi più vecchi e, di conseguenza, alla perdita di informazioni. Per incrementare le dimensioni dei registri eventi è possibile procedere in diversi modi.

Metodo 1 - Tramite GUI

Questo è il metodo più semplice e consiste nel procedere tramite l'interfaccia grafica di Windows:
  • Avviare il Visualizzatore eventi (WIN+R e digitare eventvwr seguito da invio); 
  • Espandere la voce Registri di Windows quindi cliccare, con il tasto destro del mouse, sul registro su cui si intende intervenire e selezionare Proprietà dal menu contestuale;
    Visualizzatore eventi
    FIG 1 - Visualizzatore eventi

  • Nella finestra delle proprietà possiamo modificare il percorso del registro, impostare la dimensione massima (in KB) e decidere cosa fare al raggiungimento della dimensione massima scegliendo tra una delle 3 opzioni messe a disposizione:
      1. Sovrascrivi eventi se necessario (dal più vecchio),
      2. Archivia il registro quando è pieno (non sovrascrive gli eventi),
      3. Non sovrascrivere gli eventi (cancella i registri manualmente).
    Cliccando sul pulsante Cancella registro il contenuto del registro corrente verrà eliminato. Prima, però, ci verrà richiesto se salvare una copia.
    Proprietà registro
    FIG 2 - Proprietà registro


Metodo 2 - Tramite registro di sistema

  • Avviare l'Editor del registro di sistema (WIN+R e digitare regedit seguito da invio);
  • Posizionarsi su
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog
    ed espandere l'alberatura in modo da visualizzare le sottochiavi.
  • All'interno della chiave EventLog troviamo altre sottochiavi relative ai registri eventi. Supponiamo di voler ridimensionare il registro eventi Sistema. Selezionare la sottochiave System ed eseguire un doppio click sul valore DWORD con nome MaxSize. Selezionare la base decimale e specificare, in byte, la dimensione massima che si intende impostare.
    Editor del Registro di sistema, Eventlog
    FIG 3 - Editor del Registro di sistema, Eventlog


Metodo 3 - Tramite group policy

Questo metodo prevede l'utilizzo dell'Editor di Criteri di gruppo locali pertanto può essere eseguito solo sulle versioni Professional e Enterprise di Windows 10:
  • Avviare l'Editor Criteri di gruppo locali (WIN+R e digitare gpedit.msc seguito da invio);
  • Posizionarsi su Criteri Computer locale -> Configurazione computer -> Modelli amministrativi -> Componenti di Windows -> Servizio Registro eventi. All'interno di quest'ultima voce troviamo i registri eventi principali.
  • Selezionare il registro eventi su cui si intende operare (ad es. Sistema) quindi eseguire un doppio click su Specifica dimensione massima file di registro (KB)
    Editor Criteri di gruppo locali
    FIG 4 - Editor Criteri di gruppo locali

  • Selezionare l'opzione Attivata quindi, nell'apposita casella, specificare la dimensione massima desiderata in KB. Terminata la modifica cliccare su Applica.
    Specifica dimensione massima file di registro (KB)
    FIG 5 - Specifica dimensione massima file di registro (KB)