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 12.03.2015 um 23:14:09 Uhr
Formatierung hinzugefügt.

Content-ID: 266061

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

Ausgedruckt am: 23.11.2024 um 04:11 Uhr

colinardo
Lösung colinardo 12.03.2015, aktualisiert am 13.03.2015 um 10:11:08 Uhr
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.
Duckste
Duckste 13.03.2015 um 10:12:32 Uhr
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