For Schleife mit der Variable im Dateinamen
Guten Morgen,
ich habe das unten genannte Problem und bekomme es nicht gelöst. Ich würde mich über einen Denkanstoß sehr freuen
Das Problem ist, dass ich eine Batch Datei schreiben möchte, die mir automatisch die ereignissanzeige komplett protokolliert und dann löscht.
Nun benötige ich ja variable Dateinamen für den Log und diesen möchte ich mit Hilfe der FOR Variable anlegen.
Beispiel:
Die Schleife soll also jeden Log-Type durchgehen und dann diesen mit dem entsprechenden Namen ablegen. Sprich, er archiviert den Log-Typ SYSTEM unter C:\Ablage\Temp\System.evtx".
Wie geht das?
Vielen lieben Dank!
Gruß,
Hleix
ich habe das unten genannte Problem und bekomme es nicht gelöst. Ich würde mich über einen Denkanstoß sehr freuen
Das Problem ist, dass ich eine Batch Datei schreiben möchte, die mir automatisch die ereignissanzeige komplett protokolliert und dann löscht.
Nun benötige ich ja variable Dateinamen für den Log und diesen möchte ich mit Hilfe der FOR Variable anlegen.
Beispiel:
@ECHO OFF
ECHO Protokolliere Ereignissanzeige-Protokoll...
FOR /F "USEBACKQ DELIMS=" %%l IN (`WEVTUTIL EL`) DO WEVTUTIL EPL "%%l" "C:\Ablage\Temp\Wevtutil\" && "%%l" && ".evtx"
ECHO Loesche Ereignissanzeige-Protokoll...
FOR /F "USEBACKQ DELIMS=" %%l IN (`WEVTUTIL EL`) DO WEVTUTIL CL "%%l"
@ECHO ON
Die Schleife soll also jeden Log-Type durchgehen und dann diesen mit dem entsprechenden Namen ablegen. Sprich, er archiviert den Log-Typ SYSTEM unter C:\Ablage\Temp\System.evtx".
Wie geht das?
Vielen lieben Dank!
Gruß,
Hleix
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 165454
Url: https://administrator.de/contentid/165454
Ausgedruckt am: 24.11.2024 um 04:11 Uhr
7 Kommentare
Neuester Kommentar
Aloha,
nun es scheint mir fast, als hättest du sonst mit VisualBasic zu tun *gg*
könnte dein Problem eventuell lösen ;)
mit deinen genutzen Befehlen kann ich sonst nichts anfangen, daher gehe ich davon aus, dass die sonstige Reihenfolge in der Abarbeitung korrekt sein wird, sollte dem nicht so sein ... dann wäre da noch Platz für einen Wurm der mir ohne Frühstück verborgen bleibt
oh noch etwas: was machen die accent graves dort in der Schleife? Das sollten doch eigentlich Apostrophe werden ... ?
greetz André
P.S.: alles nach
nun es scheint mir fast, als hättest du sonst mit VisualBasic zu tun *gg*
FOR /F "USEBACKQ DELIMS=" %%l IN (`WEVTUTIL EL`) DO WEVTUTIL EPL "%%l" "C:\Ablage\Temp\Wevtutil\%%l.evtx"
mit deinen genutzen Befehlen kann ich sonst nichts anfangen, daher gehe ich davon aus, dass die sonstige Reihenfolge in der Abarbeitung korrekt sein wird, sollte dem nicht so sein ... dann wäre da noch Platz für einen Wurm der mir ohne Frühstück verborgen bleibt
oh noch etwas: was machen die accent graves dort in der Schleife? Das sollten doch eigentlich Apostrophe werden ... ?
greetz André
P.S.: alles nach
&&
wird als zusätzlicher Befehl ausgeführt
Moin,
falscher Ansatz, daher gelöscht
Was dein Tool WEVTUtil anstellt,weiß wusste ich leider nicht, jetzt weiß ich es.
Gruß
falscher Ansatz, daher gelöscht
Was dein Tool WEVTUtil anstellt,
Gruß
Hallo Helix2648!
Vielleicht solltest Du die Ausgabe von "
Falls aber tatsächlich alle angeboteten Logs gespeichert werdem sollen, müssten die in den Namen enthaltenen "/" in etwas "Dateinamentauglicheres" umgewandelt werden.
BTW:
Grüße
bastla
[Edit] "Escapen" von "/" nachgetragen und Anzahl der "'" auf 2 reduziert [/Edit]
Vielleicht solltest Du die Ausgabe von "
wevtutil el
" (einmal genauer betrachten und dann) etwas einschränken (dann natürlich auch in Zeile 5) - ungetestet:FOR /F "DELIMS=" %%I IN ('WEVTUTIL EL^|FINDSTR /V "\/"') DO WEVTUTIL EPL "%%I" "C:\Ablage\Temp\Wevtutil\%%I.evtx"
BTW:
Die Accent Graves brauchst du, damit die FOR Schleife "wevtutil epl" als Befehl ausführt (usebackq).
... aber da Du hier "usebackq
" nicht benötigst ...Grüße
bastla
[Edit] "Escapen" von "/" nachgetragen und Anzahl der "'" auf 2 reduziert [/Edit]
Zitat von @Helix2648:
Die Accent Graves brauchst du, damit die FOR Schleife "wevtutil epl" als Befehl ausführt (usebackq).
Die Accent Graves brauchst du, damit die FOR Schleife "wevtutil epl" als Befehl ausführt (usebackq).
Aloha,
ich seh schon: Vor dem Frühstück arbeitet mein Hirn nur auf Standby ... ich habe doch allen Ernstes
usebackq
völlig ausgeblendet beim Denken *pfeif* - Sonntagvormittag eben *gg*greetz André
Hallo Helix2648,
wie bastla schon bemerkt hat, müssen die Namen der Event Channels, die das Zeichen / enthalten, angepasst werden, da Datei- und Verzeichnisnamen dieses Zeichen nicht enthalten dürfen. Hier mein Vorschlag, der das umsetzt:
Kurze Erläuterung:
Für jeden Channel, der das Zeichen
Das ganze wird durch die Stringersetzungen in Zeile 26 und 27 erreicht. Zeile 26 schreibt in die Variable
Zeile 29 ist praktisch eine
Das ganze funktioniert nur, wenn, wie bei meinen Eventprotokollen, das Zeichen
Die
Gruß
Friemler
wie bastla schon bemerkt hat, müssen die Namen der Event Channels, die das Zeichen / enthalten, angepasst werden, da Datei- und Verzeichnisnamen dieses Zeichen nicht enthalten dürfen. Hier mein Vorschlag, der das umsetzt:
@echo off
setlocal
set "OutputPath=C:\Ablage\Temp\Wevtutil"
echo Protokolliere Ereignissanzeige-Protokoll...
for /f "delims=" %%l in ('wevtutil el') do (
call :ProcessChannel "%%l"
)
echo Loesche Ereignissanzeige-Protokoll...
for /f "delims=" %%l in ('wevtutil el') do (
echo wevtutil cl "%%l"
)
exit /b
:ProcessChannel
set "Param=%~1"
set "SubChannel=%Param:*/=%"
call set "Channel=%%Param:/%SubChannel%=%%"
if "%SubChannel%" neq "" if "%SubChannel%" neq "%Channel%" (
echo md "%OutputPath%\%Channel%"
echo wevtutil epl "%~1" "%OutputPath%\%Channel%\%SubChannel%.evtx"
) else (
echo wevtutil epl "%~1" "%OutputPath%\%Channel%.evtx"
)
exit /b
Kurze Erläuterung:
Für jeden Channel, der das Zeichen
/
enthält, wird im Zielverzeichnis ein Unterverzeichnis erstellt. Der eigentliche Eventprotokoll-Export wird dann nach dem benannt, was nach dem /
kommt.Das ganze wird durch die Stringersetzungen in Zeile 26 und 27 erreicht. Zeile 26 schreibt in die Variable
SubChannel
alles, was hinter dem /
kommt. Zeile 26 maskiert in der Variablen Param
den Teil, der der Variablen SubChannel
mit voranstehendem /
entspricht und weist den Rest der Variablen Channel
zu. Siehe dazu auch die Hilfe zum SET
-Befehl.Zeile 29 ist praktisch eine
AND
-Operation auf die zwei IF
-Befehle.Das ganze funktioniert nur, wenn, wie bei meinen Eventprotokollen, das Zeichen
/
nur einmal im Namen eines Channels vorkommt.Die
ECHO
-Befehle in den Zeilen 17, 30, 31 und 33 dienen nur zur Ausgabe dessen, was passieren würde und müssen entfernt werden, damit das Script seinen Job macht.Gruß
Friemler
@Friemler
Wenn wirklich sämtliche Logs gespeichert werden sollen, würde ich einfach "/" durch zB "_" ersetzen (dann spielt auch die Anzahl enthaltener "/" keine Rolle) und mir damit auch die Unterordner ersparen ...
Grüße
bastla
Wenn wirklich sämtliche Logs gespeichert werden sollen, würde ich einfach "/" durch zB "_" ersetzen (dann spielt auch die Anzahl enthaltener "/" keine Rolle) und mir damit auch die Unterordner ersparen ...
Grüße
bastla