すべてのWindowsイベントログカテゴリを高速でクリアする方法


17

Windows 7では、イベントビューアーを開いていくつかのカテゴリを参照します。右ペインの[ログのクリア... ]をクリックして、1つのカテゴリをクリアすることもできます。

すべてのカテゴリをクリアしたい場合、それらを1つずつクリックしてクリアする必要がありますか?
それらは何十もあります。もっと速い方法はありますか?たぶんPowerShellで?

ここに画像の説明を入力してください ここに画像の説明を入力してください

回答:


18

WEvtUtil.exeをお試しください

GUIを介してすべてのログを一度にクリアする方法はありません。少なくとも私が今までに見つけたことはありません。:)

中間ファイルでループして削除

WEVTUTIL.exeを使用してログをテキストファイルに一覧表示し、そのテキストファイルを使用して各ログを削除するバッチファイルを次に示します。

WEVTUTIL EL > .\LOGLIST.TXT
for /f %%a in ( .\LOGLIST.TXT ) do WEVTUTIL CL "%%a"
del .\LOGLIST.TXT
timeout 30

これをすべて1つのバッチファイルに入れて安全でないと感じる場合は、これを2つの個別のファイルに保存して、次々に実行できます
(「loglist.txt」が見つからない場合、「Nuke」バッチはエラーになります) 「現在のディレクトリにあります。)

Populate-LogList.cmd

@ECHO OFF
REM Source: /superuser//a/655185/389368
WEvtUtil.exe enum-logs > .\LOGLIST.TXT

Nuke-LogList.cmd

@ECHO OFF
REM Source: /superuser//a/655185/389368
for /f %%a in ( .\LOGLIST.TXT ) do WEvtUtil.exe clear-log "%%a"
del .\LOGLIST.TXT
timeout 30

ループして直接削除する

Logmanが答えで指摘したように、これは(% 's double for batch file)のようなものを使用することにより、さらに短縮(および中間テキストファイルの必要性を排除)できます。

for /f %%a in ('WEVTUTIL EL') do WEVTUTIL CL "%%a"
timeout 30

管理者として実行してください!

どちらの方法を選択した場合でも、必ず「管理者として実行」してください。

私が見つけた最も簡単な解決策。Vista以降で使用しています。:)


PythonスクリプトなどでWMIを使用することを検討していました。特定のシナリオでバッチがより簡単なソリューションになる方法の非常に良い例です。
ライルブラウン

CMD出力 + イベントビューアーの概要。バッチ経由で管理者として2番目の例を使用しました。一部のカテゴリをクリアできませんか?奇妙な。そしてPowershellカテゴリにはまだ11.511イベントがありますか?他のすべてはクリアされたようです
nixda

引用符の欠如によって台無しに。申し訳ありませんが、修正しました。:)
Ƭᴇcʜιᴇ007

このソリューションまたはWindows XPで@Logmanによって提案されたソリューションを使用することは可能ですか?私はそれがwevtutilシステムにあるとは思わない。
ソパラホデアリエレス14

1
@SopalajodeArrierez "wevtutil"はVista以降でのみ利用可能です... technet.microsoft.com/en-us/library/cc732848.aspx
Logman 14

19

cmdプロンプトを開くか、バッチスクリプトを作成して「管理者として実行」:

for /f %x in ('wevtutil el') do wevtutil cl "%x"

すべてのイベントログをクリアするためのPowerShellコード:

wevtutil el | Foreach-Object {Write-Host "Clearing $_"; wevtutil cl "$_"}

または、スクリプトで選択して選択します。

wevtutil.exe cl Analytic
wevtutil.exe cl Application
wevtutil.exe cl DirectShowFilterGraph
wevtutil.exe cl DirectShowPluginControl
wevtutil.exe cl EndpointMapper
wevtutil.exe cl ForwardedEvents
wevtutil.exe cl HardwareEvents
wevtutil.exe cl Internet Explorer
wevtutil.exe cl Key Management Service
wevtutil.exe cl MF_MediaFoundationDeviceProxy
wevtutil.exe cl "Media Center"
wevtutil.exe cl MediaFoundationDeviceProxy
wevtutil.exe cl MediaFoundationPerformance
wevtutil.exe cl MediaFoundationPipeline
wevtutil.exe cl MediaFoundationPlatform
wevtutil.exe cl Microsoft-IE/Diagnostic
wevtutil.exe cl Microsoft-IEFRAME/Diagnostic
wevtutil.exe cl Microsoft-PerfTrack-IEFRAME/Diagnostic
wevtutil.exe cl Microsoft-PerfTrack-MSHTML/Diagnostic

等...

cmdプロンプトまたはPowerShellで次を入力すると、すべてのイベントカテゴリ名の完全なリストを取得できます。

wevtutil el

詳細については、MS TechNetをご覧ください。例:

システムログからC:\ backup \ system0506.evtxにイベントをエクスポートします。

wevtutil epl System C:\backup\system0506.evtx

C:\ admin \ backups \ a10306.evtxに保存した後、アプリケーションログからすべてのイベントを消去します。

wevtutil cl Application /bu:C:\admin\backups\a10306.evtx

ニース短縮版。
Ƭᴇcʜιᴇ007

4
  • wevtutilは非常に遅く、特にすべてのログ(空のログを含む)をクリアした場合

  • 私が思いついた最速のソリューション:


ForEach ( $l in ( Get-WinEvent * ).LogName | sort | get-unique ) {[System.Diagnostics.Eventing.Reader.EventLogSession]::GlobalSession.ClearLog("$l")}


結果:「4つのログで16個のイベントをクリアしました:0.3684785秒」

各部:

  • イベントを含むログのみを取得します(LogNameが重複します)

    ForEach($ l in(Get-WinEvent *).LogName | sort | get-unique)

  • それぞれをクリアする

    System.Diagnostics.Eventing.Reader.EventLogSession] :: GlobalSession.ClearLog( "$ l")

全機能:

function Clear-EventLogs
{
    Begin
    {
        $t1          = ( Measure-Command -Expression{ $active = ( Get-WinEvent ).LogName } ).TotalSeconds
        $totalEvents = $active.Count
        $active      = $active | Sort | Get-Unique
        $totalLogs   = $active.Count
    }
    Process
    {
        $t2 = ( Measure-Command -Expression{
            ForEach ( $l in $active )
            {
                [System.Diagnostics.Eventing.Reader.EventLogSession]::GlobalSession.ClearLog( "$l" )
                # ForEach-Object { Wevtutil.exe cl "$l" }
            }
        } ).TotalSeconds
    }
    End     { $t3 = $t1 + $t2; Write-Output "Cleared $totalEvents events in $totalLogs logs: $t3 seconds" }
}

「Get-WinEvent:データが無効です」と表示された場合は、文書化されていない256ログというハード制限に達しました。最初にログをフィルタリングする必要がある場合があります。以下は、イベントのあるログのみを選択します(診断のためにhttp://www.powershellish.com/blog/2015/01/19/get-winevent-max-logs/にクレジット):

$logs = Get-WinEvent -ListLog * | Where-Object {$_.RecordCount} | Select-Object -ExpandProperty LogName
ForEach ( $l in ( Get-WinEvent $logs ).LogName | sort | get-unique ) {[System.Diagnostics.Eventing.Reader.EventLogSession]::GlobalSession.ClearLog("$l")}

2
この機能を再テストしました。168802イベントを消去するのに271秒かかりました
nixda

1
@nixda:169,000イベントの5分はそれほど高速ではありませんが、同じ数のイベントでwevtutilがどのように動作するのかわかりません(一部のイベントはスキップされることもあります)
paul bica

3

名前にスペースが含まれる場合は、delimオプションを使用することが重要です。

WEVTUTIL EL > .\LOGLIST.TXT
for /f "delims=" %%a in ( .\LOGLIST.TXT ) do WEVTUTIL CL "%%a"

イベントログサービスを停止せずに、すべてのイベントログを簡単に無効にすることもできます。

for /f "delims=" %%a in ('WEVTUTIL EL') do WEVTUTIL SL "%%a" /e:false

もちろん、これは実際にインストールされたソフトウェアイベントのみを無効にします。新しいソフトウェアをインストールすると、デフォルトでロギングが有効になります。ただし、タスクスケジューラを実行したままにしておくのは良いことなので、毎月実行するだけです;-)


2番目のコマンドを元に戻すには(SLと/ e:falseを使用)どうすればよいですか?または、すべてのイベントログプロパティをデフォルトに戻すにはどうすればよいですか?
PeterCo

親愛なるPeterCo。デフォルトではどういう意味かわかりません。WEVTUTILコマンドのドキュメントを確認してください。たとえばWEVTUTIL sl /?、コマンドラインで入力してみてください 。
ザンクンクラークデイビス

2

ところで、これはすべてのログファイルをクリアし、(以前の設定に応じて)かなりのスペースを解放できます

WEVTUTIL EL > .\LOGLIST.TXT
for /f "delims=" %%a in ( .\LOGLIST.TXT ) do WEVTUTIL CL "%%a"
del .\LOGLIST.TXT
timeout 10

1

.batファイルを使用して、ログファイルのクリアを少し簡単にしました。ここで簡単なスクリプトを選択しましたhttp://winaero.com/blog/how-to-clear-the-windows-event-log-from-the-command-line/

そのリンクからコピーされました。

@echo off
FOR /F "tokens=1,2*" %%V IN ('bcdedit') DO SET adminTest=%%V
IF (%adminTest%)==(Access) goto noAdmin
for /F "tokens=*" %%G in ('wevtutil.exe el') DO (call :do_clear "%%G")
echo.
echo Event Logs have been cleared!
goto theEnd
:do_clear
echo clearing %1
wevtutil.exe cl %1
goto :eof
:noAdmin
echo You must run this script as an Administrator!
echo.
:theEnd
  1. メモ帳を開き、そのテキストをコピーして貼り付けます。

  2. バッチファイルとして保存し、たとえばClEvtLog.batやClEvtLog.cmdなどの名前を付けます。

  3. 管理者権限で実行してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.