Spróbuj WEvtUtil.exe
Za pomocą GUI nie można wyczyścić wszystkich dzienników jednocześnie. Przynajmniej nie to, że kiedykolwiek znalazłem. :)
Zapętlaj i usuwaj z plikiem pośrednim
Oto plik wsadowy, który używa WEVTUTIL.exe do wyświetlenia dzienników w pliku tekstowym, a następnie użyj tego pliku tekstowego do usunięcia każdego z dzienników.
WEVTUTIL EL > .\LOGLIST.TXT
for /f %%a in ( .\LOGLIST.TXT ) do WEVTUTIL CL "%%a"
del .\LOGLIST.TXT
timeout 30
Jeśli czujesz się niepewnie, mając to wszystko w jednym pliku wsadowym, możesz zapisać to w dwóch osobnych plikach, a następnie uruchamiać jeden po drugim:
(partia „Nuke” po prostu wyskoczy, jeśli nie znajdzie loglog.txt „w bieżącym katalogu).
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
Pętla i usuwanie bezpośrednio
Jak zauważył Logman w swojej odpowiedzi , można to jeszcze bardziej skrócić (i wyeliminować potrzebę pośredniego pliku tekstowego), używając czegoś w rodzaju (podwójna% dla pliku wsadowego):
for /f %%a in ('WEVTUTIL EL') do WEVTUTIL CL "%%a"
timeout 30
Uruchom jako administrator!
Niezależnie od wybranego sposobu upewnij się, że „Uruchom jako administrator”.
Najłatwiejsze rozwiązanie, jakie znalazłem. Używam go od Visty. :)
wevtutil
w systemie.Otwórz wiersz polecenia cmd lub utwórz skrypt wsadowy i „uruchom jako administrator”:
Kod programu PowerShell do czyszczenia wszystkich dzienników zdarzeń:
lub wybierz i wybierz w skrypcie:
itp...
Możesz uzyskać pełną listę wszystkich nazw kategorii zdarzeń, wpisując następujące polecenie cmd lub PowerShell:
Więcej informacji można znaleźć na stronie MS TechNet . Przykłady:
Eksportuj zdarzenia z dziennika systemu do C: \ backup \ system0506.evtx:
Wyczyść wszystkie zdarzenia z dziennika aplikacji po zapisaniu ich w C: \ admin \ backups \ a10306.evtx:
źródło
wevtutil działa dość wolno, szczególnie po wyczyszczeniu wszystkich dzienników (w tym pustych)
najszybsze rozwiązanie, jakie wymyśliłem:
ForEach ( $l in ( Get-WinEvent * ).LogName | sort | get-unique ) {[System.Diagnostics.Eventing.Reader.EventLogSession]::GlobalSession.ClearLog("$l")}
Rezultat: „Usunięto 16 zdarzeń w 4 logach: 0,3684785 sekund”
Każda część:
pobiera tylko logi zawierające zdarzenia (będą zduplikowane LogNames)
ForEach ($ lw (Get-WinEvent *) .LogName | sort | get-unique)
wyczyść każdy
System.Diagnostics.Eventing.Reader.EventLogSession] :: GlobalSession.ClearLog („$ l”)
Pełna funkcja:
Jeśli zobaczysz „Get-WinEvent: Dane są nieprawidłowe”, osiągnąłeś nieudokumentowany twardy limit 256 logów. Konieczne może być najpierw przefiltrowanie dzienników. Poniższe spowoduje wybranie tylko dzienników, które mają zdarzenia (kredyt na http://www.powershellish.com/blog/2015/01/19/get-winevent-max-logs/ do diagnozy):
źródło
Ważne jest, aby użyć opcji delim, jeśli masz spacje w nazwach:
Możesz także łatwo wyłączyć rejestrowanie wszystkich zdarzeń bez zatrzymywania usługi dziennika zdarzeń:
Oczywiście spowoduje to wyłączenie faktycznie zainstalowanych zdarzeń oprogramowania, jeśli zainstalujesz nowe oprogramowanie, domyślnie włączone będzie rejestrowanie. Ale dobrze, że możesz zostawić uruchomiony Harmonogram zadań, więc rób to co miesiąc ;-)
źródło
WEVTUTIL sl /?
w wierszu polecenia.BTW, to usuwa wszystkie pliki dziennika, które mogą (w zależności od poprzednich ustawień) zwolnić sporo miejsca
źródło
Użyłem plików .bat, aby trochę łatwiej było wyczyścić pliki dziennika. Właśnie wybrałem prosty skrypt tutaj
http://winaero.com/blog/how-to-clear-the-windows-event-log-from-the-command-line/
Skopiowano z tego linku.
Otwórz Notatnik i wklej do niego ten tekst.
Zapisz go jako plik wsadowy i nadaj mu dowolną nazwę, na przykład: ClEvtLog.bat lub ClEvtLog.cmd.
Uruchom go z uprawnieniami administratora.
źródło