Powershell CleanTemp Script
Hallo,
nachdem mir killpid sehr geholfen hat, ein entsprechendes Script als Batch-Datei zu erstellen,
(Meine Frage)
folge ich nun seiner Empfehlung, das Ganze in der Powershell umzusetzen.
Das funktioniert auch, aber es zählt alle Löschversuche - auch die gescheiterten.
Wie interveniere ich "Remove-Item", um auch die nicht gelöschten (gesperrten) Dateien und Ordner zu zählen?
In den Microsoft Docs steht: This cmdlet does not return any output.
Gruß
Peter
nachdem mir killpid sehr geholfen hat, ein entsprechendes Script als Batch-Datei zu erstellen,
(Meine Frage)
folge ich nun seiner Empfehlung, das Ganze in der Powershell umzusetzen.
$SysTemp =[environment]::GetEnvironmentVariable('TEMP','Machine')
$TempFileLocation = "$SysTemp","$env:TEMP"
$TempFile = Get-ChildItem $TempFileLocation -Recurse
$TempFileCount = ($TempFile).count
if($TempFileCount -eq "0") {
Write-Host "Keine Dateien in den Ordnern $TempFileLocation" -ForegroundColor Green
}
Else {
$TempFile | Remove-Item -Confirm:$false -Recurse -Force -WarningAction SilentlyContinue -ErrorAction SilentlyContinue
Write-Host "$TempFileCount Dateien in den Ordnern $TempFileLocation gelöscht" -ForegroundColor Green
}
Das funktioniert auch, aber es zählt alle Löschversuche - auch die gescheiterten.
Wie interveniere ich "Remove-Item", um auch die nicht gelöschten (gesperrten) Dateien und Ordner zu zählen?
In den Microsoft Docs steht: This cmdlet does not return any output.
Gruß
Peter
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 579101
Url: https://administrator.de/forum/powershell-cleantemp-script-579101.html
Ausgedruckt am: 11.04.2025 um 05:04 Uhr
12 Kommentare
Neuester Kommentar

Hier mal mit als Beispiel mit noch etwas mehr Details:
p.s. der Vertipper im Titel lässt sich auch nachträglich korrigieren.
function Clean-Temp(){
$usertmp = $env:TEMP
$systmp = [environment]::GetEnvironmentVariable("TEMP","Machine")
$dirs = $usertmp,$(if($systmp -ne $usertmp){$systmp})
$dirs | %{
gci $_ -File -Force -Recurse -EA SilentlyContinue -PipelineVariable file | %{
$obj = [pscustomobject]@{Path=$file.Fullname;Size = $file.Length;Result=''}
try{
remove-item $file.FullName -Force -EA Stop
$obj.Result = "OK"
}catch{
$obj.Result = $_.Exception.Message
}
$obj
}
gci $_ -Directory -Recurse -Force -EA SilentlyContinue -PipelineVariable folder | sort {$_.FullName.Length} -Descending | %{
$obj = [pscustomobject]@{Path=$folder.Fullname;Size = 0;Result=''}
try{
remove-item $folder.FullName -Force -Recurse -EA Stop
$obj.Result = "OK"
}catch{
$obj.Result = $_.Exception.Message
}
$obj
}
}
}
$result = Clean-Temp
[array]$success = $result | ?{$_.Result -eq 'OK'}
[array]$failed = $result | ?{$_.Result -ne 'OK'}
write-host "Overall statistics for deleted files/folders:`n$('='*40)" -F Green
write-host "Success: $($success.count) / Total size: $('{0:F3}MB' -f (($success | measure Size -Sum -EA SilentlyContinue).Sum / 1MB))"
write-host "Failed: $($failed.count) / Total size: $('{0:F3}MB' -f (($failed | measure Size -Sum -EA SilentlyContinue).Sum / 1MB))" -F Yellow
write-host "`nDetails for failed files:`n$('='*40)" -F Green
$failed | ft -AutoSize -Wrap
p.s. der Vertipper im Titel lässt sich auch nachträglich korrigieren.

My fault, ein Tippfehler beim Erweitern, ist korrigiert.

ich würde gern noch die Größensumme der erfolgreich gelöschten Dateien einbauen.
s.o.Noch ein paar Kekse oder einen heißen Kaffee dazu ...

Könnte es tatsächlich "Length" heißen?
Nein ist im custom object in "Size" umbenannt. War nur der Fall nicht berücksichtigt wenn der Failed-Teil leer ist. (hab hier immer "gelockte" files PS: Hast Du eine Wunschliste oder ähnliches?
Amazon Gutschein ist immer willkommen falls du das meinst 
Musst du wohl nochmal den Code kopieren, geht hier einwandfrei

Btw. Es kann auch Files geben die in Wirklichkeit keine Größe haben (Temporäre-Dateien bedingt) ...

Btw. Es kann auch Files geben die in Wirklichkeit keine Größe haben (Temporäre-Dateien bedingt) ...
Für den Gutschein brauche ich Deine E-Mail oder geht das auch anders?
Schick dir ne PN.