답변:
GUI를 통해 모든 로그를 한 번에 지우는 방법은 없습니다. 적어도 내가 찾은 것은 아닙니다. :)
WEVTUTIL.exe 를 사용 하여 로그를 텍스트 파일로 나열한 다음 해당 텍스트 파일을 사용하여 각 로그를 삭제 하는 배치 파일이 있습니다.
WEVTUTIL EL > .\LOGLIST.TXT
for /f %%a in ( .\LOGLIST.TXT ) do WEVTUTIL CL "%%a"
del .\LOGLIST.TXT
timeout 30
하나의 배치 파일에이 모든 것이 안전하지 않다고 느끼면이 파일을 두 개의 개별 파일로 저장 한 다음 하나씩 실행할 수 있습니다
. ""Nuke "배치는"loglist.txt를 찾지 못하면 오류가 발생합니다 "현재 디렉토리에 있습니다.)
@ECHO OFF
REM Source: /superuser//a/655185/389368
WEvtUtil.exe enum-logs > .\LOGLIST.TXT
@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 /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")}
Resul : "4 개의 로그에 16 개의 이벤트가 발생했습니다 : 0.3684785 초"
각 부분:
이벤트가 포함 된 로그 만 가져옵니다 (중복 된 LogName이 있음)
ForEach ((Get-WinEvent * ..LogName | sort | get-unique에서 $ l)
각각 클리어
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 /?
명령 행 에 입력하십시오) .
BTW, 이것은 모든 로그 파일을 지우며 (이전 설정에 따라) 상당한 공간을 확보 할 수 있습니다
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)을 지정하십시오.
관리자 권한으로 실행하십시오.