Jump to content

Powershell Suchabfrage mit Variable


Recommended Posts

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?

Edited by IT-Wolf
Link to post

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?

Edited by BOfH_666
Link to post

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

 

Link to post

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

Link to post
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.

Link to post
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.

Edited by BOfH_666
Link to post
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.

Link to post

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

 

Edited by BOfH_666
Link to post
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 ...

Link to post
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.

Link to post

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

 

  • Like 1
Link to post

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.

 

Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...