ineedhelp 12 Geschrieben 23. November 2017 Melden Teilen Geschrieben 23. November 2017 @All. Endlich habe ich mir ein PowerShell-Skript gebastelt, welches meine Gruppenrichtlinien sichert. Damit mir mein Speicher nicht irgendwann ausgeht, soll das Skript alte Sicherungen löschen. Hierfür möchte ich doch gerne das CmdLet Remove-Item benutzen. Die Ausführung produziert viele Meldungen, dass der Zugriff verweigert ist. Wobei ich die Konsole mit administrativen Rechten gestartet habe und die Dateien auch im Datei-Explorer löschen kann. Ein Berechtigungsproblem ist also nicht. Die Betriebssystemfunktion [system.IO.Directory]::Delete(string path, boolean recursive) löscht leider auch nicht den gesamten Verzeichnisbaum. Den Verzeichnisbaum lässt sich nur mit der DeleteFolder-Methode des COM-Objects Scripting.FileSystemObject vollständig rekursiv löschen. Was muss ich tun, um den Verzeichnisbaum doch mit dem CmdLet zu löschen. param ( [System.String] $BackupDir = "C:\Backups\GPOs", [System.Int32] $DeleteAferDays = 30 ) [System.DateTime]$dateStamp = Get-Date [System.String]$backupLocation = Join-Path -Path $BackupDir -ChildPath $dateStamp.ToString("yyyy-MM-dd") if ( -not(Test-Path $backupLocation) ) { New-Item -Path $backupLocation -ItemType Directory Backup-GPO -All -Path $backupLocation } Get-ChildItem -Path $BackupDir -Directory | ForEach-Object { if($PSitem.CreationTime -le $dateStamp.AddDays(-$DeleteAferDays)) { # Löscht nicht alle Dateien. Zugriff verweigert! # Remove-Item -Path $PSitem.FullName -Recurse -Confirm:$false -ErrorAction SilentlyContinue # ... ebenfalls werden nicht alle Dateien gelöscht. Zugriff verweigert! # [System.IO.Directory]::Delete($PSitem.FullName, $true) # FSO ist mein Mann! (New-Object -ComObject Scripting.FileSystemObject).DeleteFolder($PSitem.FullName, $true) } } Danke im Voraus. Zitieren Link zu diesem Kommentar
MurdocX 949 Geschrieben 23. November 2017 Melden Teilen Geschrieben 23. November 2017 Hast du schon das "Besitzer"-Recht der gesicherten GPO und deren Zugriffsberechtigungen geprüft bei denen du "Zugriff verweigert" bekommst? Zitieren Link zu diesem Kommentar
ineedhelp 12 Geschrieben 23. November 2017 Autor Melden Teilen Geschrieben 23. November 2017 (bearbeitet) Anbei ein Screenshoot der Sicherheitseinstellungen. Die Dateien kann ich ja per Explorer oder skriptgesteuert per FSO löschen, nur nicht mit dem Remove-Item-Commandlet. bearbeitet 23. November 2017 von ineedhelp Zitieren Link zu diesem Kommentar
MurdocX 949 Geschrieben 23. November 2017 Melden Teilen Geschrieben 23. November 2017 Startest du die Powershell als Administrator? Zitieren Link zu diesem Kommentar
ineedhelp 12 Geschrieben 23. November 2017 Autor Melden Teilen Geschrieben 23. November 2017 Startest du die Powershell als Administrator? Jup. Es ist ein Rätsel, warum Remove-Item seine Probleme und das FSO-Objekt den Ordner ohne Probleme löscht. Zitieren Link zu diesem Kommentar
MurdocX 949 Geschrieben 23. November 2017 Melden Teilen Geschrieben 23. November 2017 Ich löse das bei uns so: # Lösche den Projektordner samt Inhalt Get-ChildItem -Path $ProjektPath -Recurse | Remove-Item -Force -Confirm:$false -Verbose -Recurse Get-Item -Path $ProjektPath | Remove-Item -Force -Confirm:$false -Verbose -Recurse Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 23. November 2017 Melden Teilen Geschrieben 23. November 2017 Ich nehme sehr gerne einen Einzeiler zum Löschen incl. Unterordner. :) rd /s /q Pfad Zitieren Link zu diesem Kommentar
MurdocX 949 Geschrieben 23. November 2017 Melden Teilen Geschrieben 23. November 2017 Angeber :P Zitieren Link zu diesem Kommentar
massaraksch 41 Geschrieben 23. November 2017 Melden Teilen Geschrieben 23. November 2017 Hi, ich denke, der fehlende Parameter -Force ist der Grund beim Delete-Item... -Force [<SwitchParameter>] Allows the cmdlet to remove items that cannot otherwise be changed, such as hidden or read-only files or read-only aliases or variables... Im Beispiel von Board Veteran steht's drin. Bei der DeleteFolder-Methode des Scripting.FileSystemObject erreichst du das mit dem zweiten Parameter "$true". Also funktioniert's damit im Gegensatz zu deinem Remove-Item. Zitieren Link zu diesem Kommentar
Beste Lösung ineedhelp 12 Geschrieben 24. November 2017 Autor Beste Lösung Melden Teilen Geschrieben 24. November 2017 ich denke, der fehlende Parameter -Force ist der Grund beim Delete-Item... Danke, das war entscheidende Paramter. Da hätte ich auch drauf kommen können. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.