joe2017
Goto Top

Select-string zeilenweise in einzelne variablen

Hallo zusammen,

wie bekomme ich einen String welcher mehrere Zeilen beinhaltet, Zeilenweise in einzelne Variablen geschrieben?

test1.txt
test2.txt
test3.txt

$var = select-string -path $folder\*.txt -AllMatches "suche Text" | select Line | ft -HideTableHeaders  

mit diesem Befehl bekomme ich meine Suche in eine Variable mit mehreren Zeilen. Jedoch benötige ich die Zeilen in einzelne Variablen damit ich das Ergebnis weiter verarbeiten kann. Komme hier irgendwie nicht weiter? Und woher weiß ich in welcher Datei das Ergebnis gefunden wurde? Kann ich dies in eine separate Variable schreiben lassen?

Content-Key: 360731

Url: https://administrator.de/contentid/360731

Ausgedruckt am: 28.03.2024 um 21:03 Uhr

Mitglied: colinardo
Lösung colinardo 11.01.2018 aktualisiert um 15:31:25 Uhr
Goto Top
Servus again,
hier nicht mit format CMDLets arbeiten, du bekommst ja schon ein sauberes Array geliefert!

Wenn du also alle Zeilen geliefert haben willst in denen dein String steht
$var = select-string -Path "$folder\*.txt" -Pattern "suche Text" -SimpleMatch -AllMatches | select -Expand Line  
# erstes Ergebnis
$var
# zweites Ergbnis 
$var[1]
# usw.
Über das Array kannst du auch problemlos eine Schleife bauen. du musst nicht extra Variablen zuweisen das ist in Powershell meist immer überflüssig.
$var | %{
   write-host $_
}
Grüße Uwe
Mitglied: joe2017
joe2017 11.01.2018 um 15:40:48 Uhr
Goto Top
Hallo colinardo,

du bist mal wieder meine Rettung! Ab und zu ist es so einfach. face-smile

Aber woher sehe ich jetzt aus welcher datei das Ergebnis kommt?
Mitglied: colinardo
Lösung colinardo 11.01.2018 aktualisiert um 15:49:12 Uhr
Goto Top
Dann machst du es einfach so
$var = select-string -Path "$folder\*.txt" -Pattern "suche Text" -SimpleMatch -AllMatches  
$var | %{
   "Gefunden in: '$($_.Filename)'"  
   write-host "Inhalt:"  
    write-host $_.Line
}
Denke immer daran. Powershell ist Objektorientiert. Select-String liefert dir ein Array aus Objekten dessen Eigenschaften du entweder über eine Schleife abrufen kannst oder den Array-Index direkt ansprichst. Es geht also auch so
$var = select-string -Path "$folder\*.txt" -Pattern "suche Text" -SimpleMatch -AllMatches  
$var.Filename
$var.Line
#usw.
Aber bei dieser Method musst du natürlich erst mal checken ob das Array überhaupt Inhalt hat.
Mitglied: joe2017
joe2017 11.01.2018 um 16:30:16 Uhr
Goto Top
Perfekt! Vielen Dank face-smile

Gruß Jochen