CLI Konfig Textdatei auslesen und per Script in CSV umwandeln
Hallo zusammen,
ganz sicher bin ich nicht der erste mit dieser Anforderung, aber im Dschungel all der Beiträge hier, habe ich keinen passenden gefunden. Ich möchte gerne die Firewall-Regelwerke aus einer CLI Konfigigurationsdatei in eine übersichtliche Tabelle umwandeln. Dabei muss lediglich Zeile für Zeile des CLI Outputs analysiert und in in eine neue Datei umgeschrieben werden.
Die Quelldatei enthält mehrere Konfigblöcke in Form des folgenden Formats (Fortinet Firewall):
Auslesen ab hier:
Auslesen bis hier:
Das Script muss also in der Quelldatei lediglich nach den "edit" (neue Regel), "set" (Regel Parameter) und "next" (Regel Ende) Statements suchen, die Konfigurationsparameter auslesen und mit Semikolon getrennt in eine neue Datei geschrieben werden. Der Output sollte dann z.B. so aussehen:
ID;Name;SrcIntf; DstIntf;...
11;Internet_Access;OfficeLAN;Internet;...
15;File-Server_Access;OfficeLAN;DataCenter;...
[...]
Dabei sind WENN DANN Abfragen erforderlich, da nicht alle Konfigurationen einheitliche Konfigurationsparemeter haben. Ich suche also beispielsweise nach "set nat " und was dahinter steht ist der Wert den ich in der Spalte "NAT" der CSV Datei benötige. Ist kein "set nat " Statement vorhanden, bleibt die Zelle leer.
Ich hatte sowas früher schon mal mit VBS gemacht. Ist allerdings schon fast 20 Jahre her. Umsetzen würde ich es gerne mit einer möglichst simplen Script Sprache möglichst ohne zusätzliche Software auf Windows 10. Was würdet ihr empfehlen und könnt ihr mir ein Beispielscript zum selber Loslegen vorlegen?
Besten Dank im Voraus! VG, Hakan
ganz sicher bin ich nicht der erste mit dieser Anforderung, aber im Dschungel all der Beiträge hier, habe ich keinen passenden gefunden. Ich möchte gerne die Firewall-Regelwerke aus einer CLI Konfigigurationsdatei in eine übersichtliche Tabelle umwandeln. Dabei muss lediglich Zeile für Zeile des CLI Outputs analysiert und in in eine neue Datei umgeschrieben werden.
Die Quelldatei enthält mehrere Konfigblöcke in Form des folgenden Formats (Fortinet Firewall):
config firewall policy
Auslesen ab hier:
edit 11 set name "Internet_Access" set uuid frwe59sdf8we4wjfa set srcintf "OfficeLAN" set dstintf "Internet" set srcaddr "all" set dstaddr "all" set action accept set schedule "always" set service "HTTP" "HTTPS" set logtraffic all set fsso disable set nat enable next edit 15 set name "File-Server_Access" set uuid 9805efsfquqfsf set srcintf "OfficeLAN" set dstintf "DataCenter" [...] next
Auslesen bis hier:
end
Das Script muss also in der Quelldatei lediglich nach den "edit" (neue Regel), "set" (Regel Parameter) und "next" (Regel Ende) Statements suchen, die Konfigurationsparameter auslesen und mit Semikolon getrennt in eine neue Datei geschrieben werden. Der Output sollte dann z.B. so aussehen:
ID;Name;SrcIntf; DstIntf;...
11;Internet_Access;OfficeLAN;Internet;...
15;File-Server_Access;OfficeLAN;DataCenter;...
[...]
Dabei sind WENN DANN Abfragen erforderlich, da nicht alle Konfigurationen einheitliche Konfigurationsparemeter haben. Ich suche also beispielsweise nach "set nat " und was dahinter steht ist der Wert den ich in der Spalte "NAT" der CSV Datei benötige. Ist kein "set nat " Statement vorhanden, bleibt die Zelle leer.
Ich hatte sowas früher schon mal mit VBS gemacht. Ist allerdings schon fast 20 Jahre her. Umsetzen würde ich es gerne mit einer möglichst simplen Script Sprache möglichst ohne zusätzliche Software auf Windows 10. Was würdet ihr empfehlen und könnt ihr mir ein Beispielscript zum selber Loslegen vorlegen?
Besten Dank im Voraus! VG, Hakan
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 563420
Url: https://administrator.de/contentid/563420
Ausgedruckt am: 24.11.2024 um 07:11 Uhr
3 Kommentare
Neuester Kommentar
möglichst ohne zusätzliche Software auf Windows 10.
Powershell z.B., ist standardmäßig mit an Bord, für deinen Fall hier mal schnell den Code zusammen geworfen:Pfade anpassen, laufen lassen und über CSV freuen .
$file = 'D:\firewall.log'
$csv = 'D:\test.csv'
[regex]::matches(( gc $file -raw),'(?ism)^edit.*?^next').Captures | %{
$obj = [ordered]@{}
[regex]::matches($_.Value,'(?im)^set\s+([^\s]+)\s+([^\r\n]+)').Captures | %{
$obj.($_.Groups[1].Value) = $_.Groups[2].Value.replace('"','')
}
[pscustomobject]$obj
} | export-csv $csv -Delimiter ";" -NoType -Encoding UTF8