IT-Wolf 0 Geschrieben 22. März 2021 Melden Geschrieben 22. März 2021 (bearbeitet) Hallo zusammen. Ich habe gerade ein kleines Problem und hänge etwas in den Seilen. Ich würde gerne eine Powershell-Abfrage machen, die nach dem Inhalt einer Datei sucht und diese dann anschließend in eine txt-Datei ausgibt. $datei = Get-content $env:USERPROFILE\Desktop\such_nach.txt Get-ChildItem -Path "D:\daten\*" -Recurse | Where-Object {$_.Name -like NAME AUS DATEI} | Select-Object FullName | Export-Csv -Path $home\desktop\ergebnis.txt -NoTypeInformation Wenn ich NAME AUS DATEI durch den Begriff ersetze, findet er alles. Wenn ich aber an die STelle $datei setze, findet er nichts. Kann mir da jemand helfen? bearbeitet 22. März 2021 von IT-Wolf Zitieren
BOfH_666 583 Geschrieben 22. März 2021 Melden Geschrieben 22. März 2021 (bearbeitet) Es ist möglich (wahrscheinlich), dass Du in der Variable $datei etwas mehr drin hast, als Du denkst ... z.B. mehrere Zeilen oder wenigstens einen Zeilenumbruch. Was bekommst Du denn angezeigt, wenn Du Dir $datei.count ausgeben läßt? bearbeitet 22. März 2021 von BOfH_666 Zitieren
NilsK 2.978 Geschrieben 22. März 2021 Melden Geschrieben 22. März 2021 Moin, $Datei enthält den gesamten Inhalt der Datei. Sicher, dass dies der Suchbegriff ist? Wenn ja: Lass dir $Datei mal ausgeben mit Begrenzern drumrum. Ein Zeilenumbruch am Ende etwa dürfte den Vergleich scheitern lassen. Gruß, Nils Zitieren
testperson 1.758 Geschrieben 22. März 2021 Melden Geschrieben 22. März 2021 Hi, das wird daran liegen, dass "$datei" ein Array ist. Sofern in "suche_nach.txt" immer nur eine Zeile steht, könntest du es mit "$datei[0]" testen oder eben mit "foreach" den Inhalt aus "$datei" zeilenweise verarbeiten. Ansonsten solltest du so weit links wie möglich filtern. Get-Childitem kennt dafür bspw. "-Filter". Gruß Jan Zitieren
MurdocX 965 Geschrieben 22. März 2021 Melden Geschrieben 22. März 2021 Man muss das Rad ja nicht mehrmals erfinden Suchen & Ersetzen von Dateiinhalten - Powershell - IT Explorations (it-explorations.de) https://www.it-explorations.de/suchen-ersetzen-powershell/ Suchen & Umbenennen von Dateinamen mit Powershell - IT Explorations (it-explorations.de) https://www.it-explorations.de/suchen-umbenennen-von-dateinamen-mit-powershell/ Zitieren
IT-Wolf 0 Geschrieben 22. März 2021 Autor Melden Geschrieben 22. März 2021 vor 23 Minuten schrieb testperson: Hi, das wird daran liegen, dass "$datei" ein Array ist. Sofern in "suche_nach.txt" immer nur eine Zeile steht, könntest du es mit "$datei[0]" testen oder eben mit "foreach" den Inhalt aus "$datei" zeilenweise verarbeiten. Ansonsten solltest du so weit links wie möglich filtern. Get-Childitem kennt dafür bspw. "-Filter". Gruß Jan Also mit Where-Object {$_.Name -like $datei[0]} gehts jetzt. Allerdings sucht er nur nach der ersten Datei und macht dann schluss wenn er die gefunden hat. Zitieren
BOfH_666 583 Geschrieben 22. März 2021 Melden Geschrieben 22. März 2021 (bearbeitet) vor 3 Minuten schrieb IT-Wolf: Allerdings sucht er nur nach der ersten Datei und macht dann schluss wenn er die gefunden hat. Was ist denn der Inhalt der Datei "such_nach.txt"? Sollten es mehrere Zeilen mit jeweils einem Dateinamen sein, dann brauchst Du eine Schleife. bearbeitet 22. März 2021 von BOfH_666 Zitieren
IT-Wolf 0 Geschrieben 22. März 2021 Autor Melden Geschrieben 22. März 2021 vor 2 Minuten schrieb BOfH_666: Was ist denn der Inhalt der Datei "such_nach.txt"? Achja Sry. Pic20210320 Pic20210322 Pic2021032221 Log_212521 usw. Zitieren
testperson 1.758 Geschrieben 22. März 2021 Melden Geschrieben 22. März 2021 vor 5 Minuten schrieb IT-Wolf: Also mit Where-Object {$_.Name -like $datei[0]} gehts jetzt. Allerdings sucht er nur nach der ersten Datei und macht dann schluss wenn er die gefunden hat. Dann lies doch ab dem "oder eben mit" mal weiter und schau dir "foreach" an. Zitieren
BOfH_666 583 Geschrieben 22. März 2021 Melden Geschrieben 22. März 2021 (bearbeitet) Versuch ma das hier: $dateiInhalt = Get-content $env:USERPROFILE\Desktop\such_nach.txt $Result = foreach ($DateiName in $dateiInhalt) { Get-ChildItem -Path "D:\daten\*" -Recurse | Where-Object { $_.Name -like "$DateiName*" } | Select-Object FullName } $Result | Export-Csv -Path $home\desktop\ergebnis.csv -NoTypeInformation bearbeitet 22. März 2021 von BOfH_666 Zitieren
IT-Wolf 0 Geschrieben 22. März 2021 Autor Melden Geschrieben 22. März 2021 vor 24 Minuten schrieb MurdocX: Man muss das Rad ja nicht mehrmals erfinden Suchen & Ersetzen von Dateiinhalten - Powershell - IT Explorations (it-explorations.de) https://www.it-explorations.de/suchen-ersetzen-powershell/ Suchen & Umbenennen von Dateinamen mit Powershell - IT Explorations (it-explorations.de) https://www.it-explorations.de/suchen-umbenennen-von-dateinamen-mit-powershell/ Schaue ich mir mal an. Danke :) vor 5 Minuten schrieb BOfH_666: Versuch ma das hier: $dateiInhalt = Get-content $env:USERPROFILE\Desktop\such_nach.txt $Result = foreach ($DateiName in $dateiInhalt) { Get-ChildItem -Path "D:\daten\*" -Recurse | Where-Object { $_.Name -like "$DateiName*" } | Select-Object FullName } $Result | Export-Csv -Path $home\desktop\ergebnis.csv -NoTypeInformation Vielen, VIELEN Dank. Jetzt gehts ... Ich hätte gleich ne Schleife bauen sollen ... Zitieren
BOfH_666 583 Geschrieben 22. März 2021 Melden Geschrieben 22. März 2021 vor 18 Minuten schrieb IT-Wolf: Vielen, VIELEN Dank. Jetzt gehts ... Ich hätte gleich ne Schleife bauen sollen ... ... sonderlich effizient ist das aber nicht. Du suchst für jede einzelne Zeile in der Eingabe-Datei wieder und wieder das gesamte Verzeichnis ab. Wenn die Datei und auch das abzusuchende Verzeichnis deutlich größer werden, sollte man sich eine effizientere Strategie überlegen. z.B. könntest Du mit Get-ChildItem die komplette Liste der Dateien im Verzeichnis erstellen und diese dann mit der Liste an Dateinamen vergleichen. Zitieren
NilsK 2.978 Geschrieben 22. März 2021 Melden Geschrieben 22. März 2021 Moin, oder wir fangen von vorn an und klären, was denn eigentlich die Aufgabe ist ... offenbar befinden wir uns ja wieder mal mitten in irgendwas. Also: Was ist denn das Szenario und was ist das gewünschte Ergebnis? Was soll mit diesem Ergebnis dann geschehen? Gruß, Nils 1 Zitieren
IT-Wolf 0 Geschrieben 22. März 2021 Autor Melden Geschrieben 22. März 2021 Für meinen Zweck ist das vollkommen ausreichend. Ist eigentlich nur eine kleine Spielerei um nach diversen Dateien zu suchen die in der Liste definiert sind. Ich habe da jemanden in Verdacht, der ständig Dateien löscht. Ausversehen oder absichtlich, keine Ahnung. Angeblich ausversehen… Diese Dateien werden dann wiederhergestellt um zu hören, dass ne Woche später diese wieder verschwunden sind. Auf den Bereich haben auch nur 3 Leute Zugriff. Da es meistens die gleichen Inhalte sind, reicht mir das Auslesen der Liste. Zitieren
tesso 377 Geschrieben 22. März 2021 Melden Geschrieben 22. März 2021 Mir fällt da die erweiterte Überwachung im AD ein. Dort siehst du dann auch wer löscht. Vorsicht, das könnte auch Personalüberwachung werden. Zitieren
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.