h41msh1c0r
Goto Top

Powershell Remove-Item löscht nicht

Aloa in die Runde,

das soll wirklich keine Fr Frage sein, aber irgendwie löscht er meine zusammengesammelten Dateien nicht.

Win 2012R2, PS4.0

$quellpfad = "c:\test\"  
$ext = "*.log"  
gci $quellpfad -include $ext -recurse | % { remove-item "$_.Fullname" -force}  

Selbst wenn ich mir $_.FullName ausgeben lasse stimmen die gelisteten Pfade/Dateien die gelöscht werden sollen.
Der Nutzer ist Administrator und hat auf dem Test Verzeichnis Vollzugriff.
Die ISE ist als elevated gestartet.
Ich bekomme auch keinen Fehler geworfen, es werden einfach keine der betroffenen Dateien gelöscht.
Manuelles Löschen in normaler PS Shell funktioniert.

Wo klemmt es hier?

VG

Content-ID: 523759

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

Ausgedruckt am: 04.12.2024 um 08:12 Uhr

colinardo
Lösung colinardo 10.12.2019 aktualisiert um 17:57:08 Uhr
Goto Top
Servus,
Dein Fehler liegt im Ansprechen der Property innerhalb der doppelten Anführungszeichen. Sowas
"$_.Fullname"
geht nicht. Wenn du innerhalb von Anführungszeichen eine statt nur einer Variablen eine Property einer Variablen ansprechen willst musst du das so ausschreiben "$($_.Fullname)", also mit einer Subexpression innerhalb der Anführungszeichen.

Entweder du lässt sie weg, sind ja hier sowieso überflüssig
gci $quellpfad -include $ext -File -recurse | % { remove-item $_.Fullname -force}
Schreibst es so wenn du das unbedingt so haben willst
gci $quellpfad -include $ext -File -recurse | % { remove-item "$($_.Fullname)" -force}  
Oder am besten lässt du gleich die ganze Foreach-Schleife weg, denn die ist hier sowieso absolut überflüssig

Nehme also der Einfachheit gleich diese Variante
gci $quellpfad -include $ext -File -recurse | remove-item -force
Grüße Uwe

p.s. Der Dienstags Absacker geht auf mich face-wink. Prost!
H41mSh1C0R
H41mSh1C0R 10.12.2019 um 17:22:24 Uhr
Goto Top
Danköö =)

Doch wieder so trivial. Aber meine Schicht geht ja noch 4,5h. ;(

*Prost kommt später*
colinardo
colinardo 10.12.2019 aktualisiert um 17:26:03 Uhr
Goto Top
Na dann kann ja noch ein Kaffee nicht schaden face-smile. Hier geht's noch max. 12 Stunden weiter, auch nicht besser ... Hängematte aufhäng.

Bittö.
H41mSh1C0R
H41mSh1C0R 10.12.2019 um 17:30:40 Uhr
Goto Top
ui 12h dann auch noch eine ruhige Nachtschicht. =)
Fennek11
Fennek11 10.12.2019 um 17:53:13 Uhr
Goto Top
Warum nicht einfach so?
remove-item -Path C:\test -Filter *.log -Recourse -Force 
colinardo
colinardo 10.12.2019 aktualisiert um 18:13:42 Uhr
Goto Top
Zitat von @Fennek11:

Warum nicht einfach so?
remove-item -Path C:\test -Filter *.log -Recourse-Force 
Erstens weil das schon syntaktisch (typo mal ausgenommen) fehlerhaft ist (würde den Ordner C:\test selbst löschen und Filter wird hier nicht beachtet) und remove-item außerdem beim Durchsuchen nur die erste Ebene behandelt, zweitens gibt einen weiteren guten Grund warum so nicht! Weil das unter Umständen, wenn vorhanden, auch ganze Ordner inkl. deren Inhalt löscht die z.B. "OrdnerABC.log" benannt sind face-wink.


Immer wieder lesenswert:
Because the Recurse parameter in Remove-Item has a known issue, the command in this example uses Get-ChildItem to get the desired files, and then uses the pipeline operator to pass them to Remove-Item.