Powershell: CSV Zeilen mit bestimmten Anfangswert löschen

Das_B

Newbie
Registriert
Mai 2022
Beiträge
4
Hallo,

ich benötige mal eure Hilfe. Ich habe ein Script erstellt das mir aus einen Windows DNS Server per WMI Abfrage
alle doppelten A Records in eine CSV Exportiert. Nun möchte ich in der erstellten CSV in Spalte 1 (Hostname)
alle Hosts die mit 'WKS' und 'THN' beginnen samt Zeile per Powershell löschen und die CSV neu erstellen. Leider habe ich hier komplett keinen Ansatz wie ich das umgesetzt bekomme.
 
Zuletzt bearbeitet:
Hast du schon mal danach gesucht wie man in Powershell über Zeilen iteriert, filtert und falls der Filter nicht zutrifft die Zeile an eine neue Datei anfügt? Ich kann mir nicht vorstellen dass du dazu nix findest
 
CSV mit Excel öffnen, Änderungen durchführen, als CSV speichern.

Alternativ mit einem TextEditor mit RegEx-Unterstützung - zB Notepad++ - öffnen und mit einem passenden regulären Ausdruck suchen/ersetzen.
 
abcddcba schrieb:
Hast du schon mal danach gesucht wie man in Powershell über Zeilen iteriert, filtert und falls der Filter nicht zutrifft die Zeile an eine neue Datei anfügt? Ich kann mir nicht vorstellen dass du dazu nix findest
Ja aber bekomme es nicht umgesetzt das er nur die filtert bzw löscht die mit XXX beginnen.
Ergänzung ()

Raijin schrieb:
CSV mit Excel öffnen, Änderungen durchführen, als CSV speichern.

Alternativ mit einem TextEditor mit RegEx-Unterstützung - zB Notepad++ - öffnen und mit einem passenden regulären Ausdruck suchen/ersetzen.
Bringt mich nicht weiter soll täglich automatisch per Script laufen
 
Das_B schrieb:
Bringt mich nicht weiter soll täglich automatisch per Script laufen
Dann gehört diese Information in #1.


Code:
type bla.csv | findstr /B /V /C:"WKS" /C:"THN" > blubb.csv
Ergänzung ()

Zur Eklärung:

findstr filtert den Inhalt von bla.csv und das Ergebnis wird in blubb.csv geschrieben.


/bEntspricht dem Textmuster, wenn es sich am Anfang einer Zeile befindet.
/vDruckt nur Zeilen, die keine Übereinstimmung enthalten.
/c:<string>Verwendet den angegebenen Text als literale Suchzeichenfolge.

Quelle: Microsoft Docs

Ohne type geht's auch, war nur mein erster Schuss aus der Hüfte:

Code:
findstr /b /v /c:"WKS" /c:"THN" bla.csv > blubb.csv
 
Zuletzt bearbeitet:
Um bei Powershell zu bleiben:
Code:
 Get-Content C:\new\original.csv| Select-String -pattern "WKS|THN" -notmatch | Out-File C:\new\newfile.csv

Oder können die Suchbegriffe auch in anderen Spalten vorkommen?
 
  • Gefällt mir
Reaktionen: Das_B
kartoffelpü schrieb:
Um bei Powershell zu bleiben:
Code:
 Get-Content C:\new\original.csv| Select-String -pattern "WKS|THN" -notmatch | Out-File C:\new\newfile.csv

Oder können die Suchbegriffe auch in anderen Spalten vorkommen?
Das wars! Danke! Where{$_ -notmatch "WKS|THN"}
 
Nur FYI, das sind NICHT die Hosts, die damit beginnen.

Für "Begin" wird noch ein Anker benötigt:
PowerShell:
 '^(WKS|THN)'

Und zur Sicherheit, auch wenn es vielleicht bekannt ist, sehe ich es hier grad nirgendwo:

-- CSV ist natürlich CSV und kein unstrukturierter Text. Dafür nimmt man selbstverständlich Import-CSV, bei Bedarf mit -Header und -Delimiter je nachdem wie der Input aussieht, und hat dann seine Zeilen als Objekte und seine Spalten als Eigenschaften zu diesem Objekt.
 
  • Gefällt mir
Reaktionen: Art Vandelay
Doch unsere Clients beginnen so. Das Problem konnte aber gelöst werden. Vor den Export konnte ich nun die gewünschten Hosts rausfiltern. Der Export wurde mit Delimiter etc Versehen das Ganze stellte ja kein Problem da sondern nur die Filterung.
 
Zurück
Oben