Mit PowerShell Wörter in String vergleichen und Gleiche Wörter speichern

Wiener452

Cadet 3rd Year
Registriert
Juni 2014
Beiträge
39
Hallo Ihr lieben CB´ler,

erstmal zum Problem. Ich habe kaum Ahnung von PS und soll ein Script schreiben das aus einer Liste mit Benutzern und Gruppen(und Pfaden etc) diese Rausfiltern und in eine seperate Datei schreiben, um dann damit weiter zu arbeiten.

Ich hänge nun leider an dem Punkt, wo es darum geht die gefundenen Strings zu splitten und die Benutzer und Gruppen rauszufiltern. Ich hatte es mit Split() und Substring() versucht, allerdings kommt dann diese Fehlermeldung:

"Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "Substring" enthält."

Ohne diese beiden Methoden gehts,. allerdings Bekomme ich dann nur die ganze Zeile wo ein Wort gestimmt hatt.

Code:
$Outputfile = "E:\Pfad\zur\Datei.txt"
$SearchList = gc E:\Pfad\zur\Datei.txt
Write-Host $SearchList
$Selek =  gc E:\Pfad\zur\Datei.txt | Select-String  $SearchList | set-content $Outputfile

Deshalb war mein Ansatz:

Code:
$Outputfile = "E:\Pfad\zur\Datei.txt"
$SearchList = E:\Pfad\zur\Datei.txt
Write-Host $SearchList
$Selek =  gc E:\Pfad\zur\Datei.txt   
$SortLI = $Selek.Substring($SearchList)
Write-Host $SortLI
allerdings ist das dann der Teil mit der Fehlermeldung.

Hoffe das reicht an vorab Infos und hoffentlich könnt ihr mir helfen :)
 
Ich bin jetzt auch kein PS Entwickler, aber ist $Selek nicht ein Stream/Bytearray o.ä.? Die Methode Substring sollte schon deutlich machen, dass es eine Methode eines Strings ist. Falls ich völlig falsch liege, ignoriere den post einfach.
 
Das mit dem Array hat mich etwas weiter gebracht(jede Zeile ist jetzt ein Objekt im Array), danke :)
Allerdings hab ich immernoch Probleme, das Wort das ich suche aus dem String "rauszuziehen" und in einer Variable oder Datei abzulegen...

Wiener
 
Zuletzt bearbeitet:
Scythe1988 hat Recht. Du hast nach Einlesen der Datei ein Array von Zeilen.
Deshalb brauchst du zuerst eine Schleife um das aufzudröseln:
Code:
Foreach($line in $Selek){
..}
Beachte auch, das Substring Positionen erwartet. Gutes Tutorial: https://technet.microsoft.com/en-us/library/ee692804.aspx
.Contains() könnte ein Anfang sein. Hängt allerdings davon ab, wie deine $Searchlist aufgebaut ist.
 
Zuletzt bearbeitet:
Werd ich mir mal anschauen, danke.
Und die Schleife soll machen das ich pro Durchlauf dann eine Zeile durchsuche ?
$Searchlist -> die Datei enthält nur untereinanderstehende eintzelne Wörter dh ein Wort pro Zeile)

Gruss Wiener
 
Du hast pro Durchlauf eine Zeile in $line.
Mit der kannst du dann anstellen, was du willst. ;)
Zum Beispiel mit .Contains() bestimmen, ob ein bestimmter String darin vorkommt.

Mir ist noch etwas unklar, was die gewünschte Funktion ist.
Kannst du eine Beispiel-Datei posten und erklären, was genau rausgefiltert werden soll?
 
Zuletzt bearbeitet:
Anhang anzeigen Durchsuchen.txt Anhang anzeigen DamitSuchen.txt
Durchsuchen ist in dem Fall dann $Selek und DurchSuchen ist $Searchlist

Bin euch echt dankbar, da ich ein ScripteNoob bin aber alle anderen sind im Urlaub man kennts ja :D

Wiener
Ergänzung ()

Bin jetzt soweit:
Code:
$Outputfile = "E:\BerrAbf\out.txt"
$SearchList = @(gc E:\BerrAbf\GruppenNamen.txt)
$Selek =  @(gc E:\BerrAbf\accenum-read2.txt)

Foreach($line in $Selek){
  ($Grouplist = $line -match($SearchList[0]))
  Write-Host $GroupList -contains($SearchList)
  }

Er gibt nun zu jeder Zeile True/False aus und leider die ganze $Searchlist.
Kann man das noch abändern das ich nur der Eintrag der auch stimmt hinter True/False steht ?

Edit: Hab grad gemerkt das ich so Ja immernur nach dem ersten Eintrag meines Arrays suche, ne Idee wie ich das umgehe ?

Gruss Wiener
 
Zuletzt bearbeitet:
Code:
Foreach($line in $Selek){
	Foreach($searchStr in $SearchList){
		if($line -match($searchStr){
			Write-Host "Found $searchStr in $line"
		}
	}
}
 
Ich danke vielmals !

Das ist das was ich Suche, jetzt versuch ich noch die Wörter zu Separieren und hoffe dann mit der Powershell meinen Frieden zu finden :D

Wiener
 
Zuletzt bearbeitet:
Zurück
Oben