duckste
Goto Top

Powershell: Unterverzeichnis mehrerer Benutzer rekursiv löschen

Hallo zusammen,

ich habe ein Problem wo ich nicht weiter komme.

Ich habe ca. 700 Benutzerprofile, aus denen jeweils ein Unterordner samt Inhalt (Dateien und Ordner) gelöscht werden soll.
Da ich diese Möglichkeit häufiger verwenden möchte, habe ich ein Powershell-Script begonnen.
$userArray = @(gci "\\server\profile\upm-profile\*\xa\UPM_Profile\AppData\Local\Google\Chrome\User Data\Default\Extensions")  

for($i = 0; $i -lt $userArray.length; $i++)
{
    # Überprüfe, ob Ordner vorhanden
    if(Test-Path $userArray)
    {
        # Logdatei beschreiben
        # Dauer ca. 6 Sek.
        $anzahl = [System.IO.Directory]::GetFiles($userArray[$i],"*","AllDirectories").count  
        Write-Host $userArray[$i] $anzahl
        #$Path = $userArray[$i]
        Remove-Item $userArray[$i] -recurse -force
    }
}
Beim Ausführen erhalte ich allerdings für jeden Unterordner unter Extensions folgende Fehlermeldungen:
Temp 0
Remove-Item : Der Pfad "C:\WINDOWS\system32\WindowsPowerShell\v1.0\Temp" kann nicht gefunden werden, da er nicht vorhanden ist.  
Bei L:\Eigene Dateien\Powershell\Scripte\Citrixprofil aufräumen.ps1:15 Zeichen:20
+         Remove-Item <<<<  $userArray[$i] -recurse -force
    + CategoryInfo          : ObjectNotFound: (C:\WINDOWS\syst...Shell\v1.0\Temp:String) [Remove-Item], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand
 
Ausnahme beim Aufrufen von "GetFiles" mit 3 Argument(en):  "Ein Teil des Pfades "C:\WINDOWS\system32\WindowsPowerShell\v1.0\pjkljhegncpnkpknbcohdijeoejaedia" konnte nicht gefunden werden."  
Bei L:\Eigene Dateien\Powershell\Scripte\Citrixprofil aufräumen.ps1:12 Zeichen:50
+         $anzahl = [System.IO.Directory]::GetFiles <<<< ($userArray[$i],"*","AllDirectories").count  
    + CategoryInfo          : NotSpecified: (:) , MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException
Beim Debuggen kann ich erkennen das in der Schleifenvariablen $userArray[$i] der korrekte Pfad angezeigt wird.

Nachdem ich jetzt schon mehrere Stunden in die erfolglose Suche nach diesem Fehler gesteckt habe, wende ich mich nun an euch.

Vielen Dank für Eure Hilfe
Duckste
Kommentar vom Moderator Dani am Mar 12, 2015 um 22:14:09 Uhr
Formatierung hinzugefügt.

Content-Key: 266061

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

Printed on: April 20, 2024 at 13:04 o'clock

Member: colinardo
Solution colinardo Mar 12, 2015, updated at Mar 13, 2015 at 09:11:08 (UTC)
Goto Top
Hallo Duckste, Willkommen auf Administrator.de!
der Code lässt sich so eigentlich auf eine Zeile reduzieren face-wink:
remove-item "\\server\profile\upm-profile\*\xa\UPM_Profile\AppData\Local\Google\Chrome\User Data\Default\Extensions" -Recurse -Force -EA SilentlyContinue  
back-to-topZu dem Fehler deines Codes
Beim Debuggen kann ich erkennen das in der Schleifenvariablen $userArray[$i] der korrekte Pfad angezeigt wird.
Das scheint nur so, es ist aber in Wirklichkeit ein Objekt, was du dir mit $userArray[$i].getType() anzeigen lassen kannst!
$userArray[$i] enthält das Objekt nicht den Pfad den du für remove-item brauchst. Den erhältst du aber aus dem Objekt mit $userArray[$i].Fullname
Also
Remove-Item $userArray[$i].Fullname -Recurse -Force
oder alternativ auch so
$userArray[$i] | remove-item -recurse -force
back-to-topDann noch folgende Anmerkungen zu deinem Code:
In deiner ersten Zeile machst du um den gci-Befehl noch ein weiteres Array, das ist nicht nötig denn get-childitem gibt von sich aus schon ein Array oder $null zurück wenn es keine Files/Ordner gibt.
Dann zu folgender Zeile: if(Test-Path $userArray) => Das geht ebenfalls in die Hose weil du ein Array übergibst anstatt einen String. Und außerdem ist dieser Check unnötig denn du hast die Pfade ja im Array stehen, sie existieren also weil du sie via get-childItem schon ausgelesen hast.

Grüße Uwe

p.s. in Zukunft nutze bitte Code-Tags für deinen Quellcode: <code> Quellcode </code>. Du siehst ja selber wie er sonst verunstaltet wird. Merci.
Member: Duckste
Duckste Mar 13, 2015 at 09:12:32 (UTC)
Goto Top
Hallo colinardo,

da hab ich ja unnötig kompliziert gedacht. face-smile

Vielen Dank für die Hilfe. Mit dem Einzeiler klappt es wunderbar.

VG
Duckste