campino86
Goto Top

Powershell Script - Pfade aus anderer Datei auslesen und nutzen

Hallo zusammen,

als Newbie in dem Bereich komme ich hier nicht so ganz voran und weiss auch nicht wo ansetzen. Hat vielleicht jemand einen Tip oder gar die Lösung zum Abschauen?

Wir haben Ordner, deren Inhalt ( Unterorder & Dateien) wir regelmäig löschen möchten, die Überordner müssen aber aufgrund von Freigaben bestehen bleiben.

Das löschen selbst ist kein Problem mit

Get-ChildItem [Pfad] | Remove-Item -Force -Recurse

Nun haben wir aber mehrere Ordner ca 50 Stk, die sich auch öfters mal ändern.

Ich könnte hier den Befehl natürlich auf alle Pfade anwenden und immer anpassen. Dann liegt die Arbeit aber bei mir.

Mein Wunsch wäre daher, das es z.b. eine Excel oder Editor datei gibt, in der die Pfade stehen und durch einen MA gepflegt werden können, das Script dann die Pfade aus der Datei ausliest und in Schleife ausführt.

Hat mir hier jemand eine Lösung oder einen Ansatz?

Vielen Dank vorab

Content-ID: 668839

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

Ausgedruckt am: 19.11.2024 um 09:11 Uhr

150704
Lösung 150704 17.10.2024 aktualisiert um 17:53:25 Uhr
Goto Top
D:\pfade.txt
D:\Ordner\Test1
D:\Ordner\Test2
script.ps1
foreach ($pfad in Get-Content 'D:\pfade.txt' | ?{$_.trim() -ne ''}){  
    if(Test-Path $pfad){
        remove-item -Path "$pfad\*" -Recurse -Force -verbose  
    }else{
        write-warning "Pfad '$pfad' existiert nicht!"  
    }
}
und durch einen MA gepflegt werden können
Kann man nur hoffen das der vertrauenswürdig ist und das Backup in Reichweite ist face-big-smile.
Campino86
Campino86 17.10.2024 um 18:10:14 Uhr
Goto Top
Hallo,

vielen Dank schonmal für den Input, damit bin ich schonmal so weit, dass ich Pfade direkt aus einer Datei abrufen kann.

Hatte dies auch mal mut einer CSV über Import gemacht.

Ergebnis ist hier allerdings auch, dass nicht nur die Dateien und Unterordner, sondern auch das Hauptverzeichnis welches angegeben ist gelöscht wird.
Campino86
Lösung Campino86 17.10.2024 um 18:29:31 Uhr
Goto Top
Hallo Ted,

ok ich habe es. Vielen Dank.

foreach ($pfad in Get-Content 'C:\Scripts\Pfade.txt' | ?{$_.trim() -ne ''}){
if(Test-Path $pfad){
Get-ChildItem -Path "$pfad\*" | remove-item -Recurse -Force -verbose
}else{
write-warning "Pfad '$pfad' existiert nicht!"
}
}


Was ich aber nicht so ganz verstehe ist der Teil if(Test-Path

Was bedeutet hier Test-Path?
150704
150704 17.10.2024 aktualisiert um 19:47:01 Uhr
Goto Top
Zitat von @Campino86:
Ergebnis ist hier allerdings auch, dass nicht nur die Dateien und Unterordner, sondern auch das Hauptverzeichnis welches angegeben ist gelöscht wird.
Hatte ich übersehen und hatte es nachträglich noch angepasst, ein Get-ChildItem davor ist übrigens nicht nötig ...
Was ich aber nicht so ganz verstehe ist der Teil if(Test-Path

Was bedeutet hier Test-Path?
Einfach mal lesen ... Überprüfen ob der angegebene Pfad überhaupt existiert, ansonsten hagelt es eine Fehlermeldungen wenn du diese nicht unterdrückst. Muss man nicht zwingend machen ist aber schöner und sagt dem User, dass er sich evt. mit dem Pfad vertippt hat.
em-pie
em-pie 17.10.2024 um 19:59:54 Uhr
Goto Top
Moin,

Ich würde auch noch einbauen, dass nur innerhalb von „D:\Ordner“ gelöscht werden kann.

Ansonsten trägt da jemand mal schnell C:\users\* ein und macht alles platt.
Oder \\myFileServer\GroupShare und dann ist da alles futsch…
SachsenHessi
SachsenHessi 18.10.2024 um 08:37:57 Uhr
Goto Top
Guten Morgen,

wir haben das so gelöst, das Ordner die NICHT gelöscht werden dürfen eine Kennung am Anhang haben (zBsp. x:\ordner\@ordner --> hier ein @)
Im Script wird geprüft, und wenn kein @ als erstes steht, fliegt der Ordner raus.