Answers:
GUI无法一次清除所有日志。至少不是我找到过的。:)
这是一个批处理文件,它使用WEVTUTIL.exe将日志列出到文本文件中,然后使用该文本文件删除每个日志。
WEVTUTIL EL > .\LOGLIST.TXT
for /f %%a in ( .\LOGLIST.TXT ) do WEVTUTIL CL "%%a"
del .\LOGLIST.TXT
timeout 30
如果您觉得将这一切都放在一个批处理文件中是不安全的,那么您可以将其保存到两个单独的文件中,然后一个接一个地运行:(
如果没有找到“loglist.txt”,“Nuke”批处理将会出错“在其当前目录中。)
@ECHO OFF
REM Source: https://superuser.com/a/655185/389368
WEvtUtil.exe enum-logs > .\LOGLIST.TXT
@ECHO OFF
REM Source: https://superuser.com/a/655185/389368
for /f %%a in ( .\LOGLIST.TXT ) do WEvtUtil.exe clear-log "%%a"
del .\LOGLIST.TXT
timeout 30
正如Logman在他的回答中所指出的那样,可以通过使用类似(批处理文件的%)的内容来进一步缩短(并消除对中间文本文件的需要):
for /f %%a in ('WEVTUTIL EL') do WEVTUTIL CL "%%a"
timeout 30
无论您选择哪种方式,请确保“以管理员身份运行”。
我找到的最简单的解决方案。从Vista开始使用它。:)
wevtutil
在系统中看到它。
打开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
wevtutil非常慢,特别是在清除所有日志(包括空日志)时
我提出的最快解决方案:
ForEach ( $l in ( Get-WinEvent * ).LogName | sort | get-unique ) {[System.Diagnostics.Eventing.Reader.EventLogSession]::GlobalSession.ClearLog("$l")}
结果:“清除了4个日志中的16个事件:0.3684785秒”
每个部分:
只获取包含事件的日志(会有重复的LogNames)
ForEach($ get 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")}
如果名称中包含空格,则使用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
当然这只会禁用实际安装的软件事件,如果安装新软件,它将默认启用日志记录。但是好的,你可以让任务计划程序运行,所以每个月都要这样做;-)
WEVTUTIL sl /?
在命令行输入 。
顺便说一句,这会清除所有日志文件,这可以(取决于以前的设置)释放相当大的空间
WEVTUTIL EL > .\LOGLIST.TXT
for /f "delims=" %%a in ( .\LOGLIST.TXT ) do WEVTUTIL CL "%%a"
del .\LOGLIST.TXT
timeout 10
我使用.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
打开记事本并将该文本复制粘贴到其中。
将其另存为批处理文件,并为其指定任何名称,例如:ClEvtLog.bat或ClEvtLog.cmd。
使用管理员权限运行它。