イベント ログの WMI タスクは、イベント ログ ファイルからイベント データを取得し、ログ ファイルのバックアップやクリアなどの操作を実行します。 その他の例については、https://www.microsoft.com/technetの TechNet ScriptCenter を参照してください。
このトピックに示すスクリプトの例では、ローカル コンピューターからのみデータを取得します。 スクリプトを使用してリモート コンピューターからデータを取得する方法の詳細については、「リモート コンピューター上の WMI への接続」を参照してください。
次の手順では、スクリプトを実行する方法について説明します。
スクリプト を実行するには
- コードをコピーし、拡張子が .vbs のファイル (filename.vbs など)保存します。 テキスト エディターでファイルに .txt 拡張子が追加されていないことを確認します。
- コマンド プロンプト ウィンドウを開き、ファイルを保存したディレクトリに移動します。
- コマンド プロンプト cscript filename.vbs を入力します。
- イベント ログにアクセスできない場合は、管理者特権でのコマンド プロンプトから実行しているかどうかを確認します。 セキュリティ イベント ログなどの一部のイベント ログは、ユーザー アクセス制御 (UAC) によって保護される場合があります。
手記
既定では、cscript はコマンド プロンプト ウィンドウにスクリプトの出力を表示します。 WMI スクリプトでは大量の出力が生成される可能性があるため、出力をファイルにリダイレクトすることが必要になる場合があります。 コマンド プロンプト cscript filename.vbs > outfile.txt を入力して、filename.vbs スクリプトの出力を outfile.txtにリダイレクトします。
次の表に、ローカル コンピューターからさまざまな種類のデータを取得するために使用できるスクリプトの例を示します。
...セキュリティ イベント ログに関する情報を取得しますか? |
Win32_NTEventlogFile クラスに接続するときに、Security 特権を含めます。 詳細については、「VBScriptを使用した特権操作の実行」を参照してください。
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
|
$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
}
|
|
...イベント ログをバックアップしますか? |
Win32_NTEventlogFile クラスと BackupEventLog メソッドを使用します。 WMI に接続するときに、Backup 特権を含める必要がある場合があります。 詳細については、「VBScriptを使用した特権操作の実行」を参照してください。
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
|
$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"
}
|
|
...イベント ログを複数回バックアップしますか? |
Win32_NTEventlogFile と BackupEventLog メソッドを使用する前に、バックアップ ファイルの名前が一意であることを確認します。 オペレーティング システムでは、既存のバックアップ ファイルを上書きすることはできません。スクリプトを再実行する前に、バックアップ ファイルを移動するか、名前を変更する必要があります。 WMI に接続するときに、Backup 特権を含める必要がある場合があります。 詳細については、「VBScriptを使用した特権操作の実行」を参照してください。
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
|
$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"
}
|
|
...イベント ログ内のレコードの数を決定しますか? |
Win32_NTEventlogFile クラスを使用し、NumberOfRecords プロパティの値を確認します。
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
|
$strComputer = "." $colLogFiles = Get-WmiObject -Class Win32_NTEventLogFile -ComputerName $strComputer |{$_を Where-Object します。LogFileName -eq 'System'} foreach ($objLogFile in $colLogFiles)
{
$objLogFile.NumberOfRecords
}
|
|
...イベント ログをクリアしますか? |
Win32_NTEventlogFile クラスと ClearEventLog メソッドを使用します。
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
|
$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"
}
|
|
...イベント ログからイベントを読み取りますか? |
Win32_NTLogEvent クラスを使用します。
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
|
$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
}
|
|
-
スクリプトとアプリケーションの WMI タスクの
-
WMI C++ アプリケーションの例
-
TechNet ScriptCenter