Partager via


Tâches WMI : Journaux des événements

Les tâches WMI pour les journaux d’événements obtiennent des données d’événement à partir de fichiers journaux d’événements et effectuent des opérations telles que la sauvegarde ou l’effacement des fichiers journaux. Pour obtenir d’autres exemples, consultez TechNet ScriptCenter à https://www.microsoft.com/technet.

Les exemples de script présentés dans cette rubrique obtiennent des données uniquement à partir de l’ordinateur local. Pour plus d’informations sur l’utilisation du script pour obtenir des données à partir d’ordinateurs distants, consultez Connexion à WMI sur un ordinateur distant.

La procédure suivante décrit comment exécuter un script.

Pour exécuter un script

  1. Copiez le code et enregistrez-le dans un fichier avec une extension .vbs, telle que filename.vbs. Vérifiez que votre éditeur de texte n’ajoute pas d’extension .txt au fichier.
  2. Ouvrez une fenêtre d’invite de commandes et accédez au répertoire où vous avez enregistré le fichier.
  3. Tapez cscript filename.vbs à l’invite de commandes.
  4. Si vous ne pouvez pas accéder à un journal des événements, vérifiez si vous exécutez à partir d’une invite de commandes Avec élévation de privilèges. Certains journaux d’événements, tels que le journal des événements de sécurité, peuvent être protégés par les contrôles d’accès utilisateur (UAC).

Note

Par défaut, cscript affiche la sortie d’un script dans la fenêtre d’invite de commandes. Étant donné que les scripts WMI peuvent produire de grandes quantités de sortie, vous pouvez rediriger la sortie vers un fichier. Tapez cscript filename.vbs > outfile.txt à l’invite de commandes pour rediriger la sortie du script filename.vbs vers outfile.txt.

Le tableau suivant répertorie les exemples de script qui peuvent être utilisés pour obtenir différents types de données à partir de l’ordinateur local.

Comment faire... Classes ou méthodes WMI
... récupérer des informations sur le journal des événements de sécurité ? Incluez le privilège Sécurité lors de la connexion à la classe Win32_NTEventlogFile. Pour plus d’informations, consultez exécution d’opérations privilégiées à l’aide de VBScript.
VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate,(Security)}!\\" & _
        strComputer & "\root\cimv2")
Set colLogFiles = objWMIService.ExecQuery _
    ("Select * from Win32_NTEventLogFile " _
        & "Where LogFileName='Security'")
For Each objLogFile in colLogFiles
    Wscript.Echo objLogFile.NumberOfRecords
    Wscript.Echo "Maximum Size: " _
    &  objLogfile.MaxFileSize 
Next
PowerShell
$strComputer = "."
$colLogFiles = Get-WmiObject -Class Win32_NTEventLogFile -ComputerName $strComputer | Where-Object {$_.LogFileName -eq 'security'}
foreach ($objLogFile in $colLogFiles) 
{ 
    "Record Number: " + $objLogFile.NumberOfRecords
    "Maximum Size: " + $objLogFile.MaxFileSize
}
... sauvegarder un journal des événements ?

Utilisez la classe Win32_NTEventlogFile et la méthode BackupEventLog. Vous devrez peut-être inclure le privilège de sauvegarde lors de la connexion à WMI. Pour plus d’informations, consultez exécution d’opérations privilégiées à l’aide de VBScript.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate,(Backup)}!\\" & strComputer & "\root\cimv2")
Set colLogFiles = objWMIService.ExecQuery ("Select * from Win32_NTEventLogFile " & "Where LogFileName='Application'")
For Each objLogfile in colLogFiles
    errBackupLog = objLogFile.BackupEventLog("c:\scripts\application.evt")
    WScript.Echo "File saved as c:\scripts\applications.evt"
Next

PowerShell
              
              $strComputer = « . » $colLogFiles = Get-WmiObject -Class Win32_NTEventLogFile -ComputerName $strComputer | Where-Object {$_. LogFileName -eq 'Application'} 

foreach ($objLogFile in $colLogFiles) { [void]$objLogFile.BackupEventlog("c:\scripts\applications.evt") "File saved as c:\scripts\applications.evt" }

... sauvegarder un journal des événements plusieurs fois ?

Vérifiez que le fichier de sauvegarde a un nom unique avant d’utiliser le Win32_NTEventlogFile et la méthode BackupEventLog. Le système d’exploitation ne vous permet pas de remplacer un fichier de sauvegarde existant ; vous devez déplacer le fichier de sauvegarde ou le renommer avant de pouvoir réexécuter le script. Vous devrez peut-être inclure le privilège de sauvegarde lors de la connexion à WMI. Pour plus d’informations, consultez exécution d’opérations privilégiées à l’aide de VBScript.

VB
dtmThisDay = Day(Date)
dtmThisMonth = Month(Date)
dtmThisYear = Year(Date)
strBackupName = dtmThisYear & "_" & dtmThisMonth & "_" & dtmThisDay
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate,(Backup)}!\\" & strComputer & "\root\cimv2")
Set colLogFiles = objWMIService.ExecQuery ("Select * from Win32_NTEventLogFile " & "Where LogFileName='Application'")
For Each objLogfile in colLogFiles
    objLogFile.BackupEventLog("c:\scripts\" & strBackupName & "_application.evt")
    objLogFile.ClearEventLog()
    WScript.Echo "File saved: " & strBackupName & "_application.evt"
Next

PowerShell
              
              $CurDate = Get-Date $strBackupName = $curDate.Year.ToString() + « _ » + $curDate.Month.ToString() + « _ » + $CurDate.Day.ToString() 

$strComputer = "." $colLogFiles = Get-WmiObject -Class Win32_NTEventLogFile -ComputerName $strComputer | Where-Object {$_.LogFileName -eq 'Application'} foreach ($objLogFile in $colLogFiles) { $BackupFile = $objLogFile.BackupEventlog("c:\scripts" + $strBackupName + "_application.evt") "File saved: c:\scripts" + $strBackupName + "_application.evt" }

... déterminer le nombre d’enregistrements dans un journal des événements ?

Utilisez la classe Win32_NTEventlogFile et vérifiez la valeur de la propriété NumberOfRecords.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colLogFiles = objWMIService.ExecQuery ("Select * from Win32_NTEventLogFile " & "Where LogFileName='System'")
For Each objLogFile in colLogFiles
    Wscript.Echo objLogFile.NumberOfRecords
Next

PowerShell
              
              $strComputer = « . » $colLogFiles = Get-WmiObject -Class Win32_NTEventLogFile -ComputerName $strComputer | Where-Object {$_. LogFileName -eq 'System'} 

foreach ($objLogFile in $colLogFiles) { $objLogFile.NumberOfRecords }

... effacer mes journaux d’événements ?

Utilisez la classe Win32_NTEventlogFile et la méthode ClearEventLog.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate,(Backup, Security)}!\\" & strComputer & "\root\cimv2")
Set colLogFiles = objWMIService.ExecQuery ("Select * from Win32_NTEventLogFile " & "Where LogFileName='Application'")
For Each objLogfile in colLogFiles
    objLogFile.ClearEventLog()
    WScript.Echo "Cleared application event log file"
Next

PowerShell
              
              $strComputer = « . » $colLogFiles = Get-WmiObject -Class Win32_NTEventLogFile -ComputerName $strComputer | Where-Object {$_. LogFileName -eq 'System'} 

foreach ($objLogFile in $colLogFiles) { [void]$objLogFile.ClearEventlog() "Cleared application event log file" }

... lire les événements des journaux d’événements ?

Utilisez la classe Win32_NTLogEvent.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & strComputer & "\root\cimv2")
Set colLoggedEvents = objWMIService.ExecQuery _
    ("Select * from Win32_NTLogEvent " _
        & "Where Logfile = 'System'")
For Each objEvent in colLoggedEvents
    Wscript.Echo "Category: " & objEvent.Category & VBNewLine _
    & "Computer Name: " & objEvent.ComputerName & VBNewLine _
    & "Event Code: " & objEvent.EventCode & VBNewLine _
    & "Message: " & objEvent.Message & VBNewLine _
    & "Record Number: " & objEvent.RecordNumber & VBNewLine _
    & "Source Name: " & objEvent.SourceName & VBNewLine _
    & "Time Written: " & objEvent.TimeWritten & VBNewLine _
    & "Event Type: " & objEvent.Type & VBNewLine _
    & "User: " & objEvent.User
Next

PowerShell
              
              $strComputer = « . » $colLogFiles = Get-WmiObject -Class Win32_NTLogEvent -ComputerName $strComputer | Where-Object {$_. LogFile -eq 'System'} 

foreach ($objEvent in $colLoggedEvents) { "Category: " + $objEvent.Category "Computer Name: " + $objEvent.ComputerName "Event Code: " + $objEvent.EventCode "Message: " + $objEvent.Message "Record Number: " + $objEvent.RecordNumber "Source Name: " + $objEvent.SourceName "Time Written: " + $objEvent.TimeWritten "Event Type: " + $objEvent.Type "User: " + $objEvent.Use }

tâches WMI pour les scripts et les applications

exemples d’applications WMI C++

TechNet ScriptCenter