Очистка временных каталогов средствами PowerShell

Жесткие диски на компьютерах пользователей могут со временем засоряться. Одна из причин — временные каталоги. Очистить Temp средствами PowerShell можно использовав следующую конструкцицю:

$cutoff = (Get-Date) - (New-TimeSpan -Days 30)
 
$before = (Get-ChildItem $env:temp | Measure-Object Length -Sum).Sum
 
Get-ChildItem $env:temp |                            
  Where-Object { $_.Length -ne $null } |             
  Where-Object { $_.LastWriteTime -lt $cutoff } |    
  Remove-Item -Force -ErrorAction SilentlyContinue -WhatIf  # удалить -whatif чтобы очистить каталоги
 
$after = (Get-ChildItem $env:temp | Measure-Object Length -Sum).Sum
 
'Freed {0:0.00} MB disk space' -f (($before-$after)/1MB)

Так как удаление файлов всегда связано с риском потери данных в коде оставлена конструкция -whatif, после того как убедитесь что все правильно, ее следует убрать.

Теги:

Понравилась статья? Оставьте комментарий или подпишитесь на RSS рассылку.

Комментарии

Спасибо. Вдохновился данным скриптом и написал скрипт, который перебирает все профили. Эффект от запуска на терминальном сервере — потрясающий 🙂
[code]
$OtherCleanPathsArr = «C:\Temp\*», «C:\Windows\Temp\*», «C:\swsetup»
#системные пути для очистки
$InProfilesCleanPathsArr = «\AppData\Local\Temp\*», «\AppData\Local\*.auc», «\AppData\Local\Microsoft\Terminal Server Client\Cache\*», «\AppData\Local\Microsoft\Windows\Temporary Internet Files\*», «\AppData\Local\Microsoft\Windows\WER\ReportQueue\*», «\AppData\Local\Microsoft\Windows\Explorer\*»
#пути в профилях для очистки
$Profiles = Get-ChildItem (Get-ItemProperty -path «HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList»).ProfilesDirectory -Exclude «Администратор», «Administrator», «Setup», «Public», «All Users», «Default User»
#извлекли из реестра местоположение профилей, сформировали список

ForEach ($Path in $OtherCleanPathsArr) {
Remove-Item -Path $Path -Recurse -Force -ErrorAction SilentlyContinue -WhatIf
}
ForEach ($Profile in $Profiles) {
ForEach ($Path in $InProfilesCleanPathsArr) {
Remove-Item -Path $Profile$Path -Recurse -Force -ErrorAction SilentlyContinue -WhatIf
}
}
[/code]

Оставить комментарий

(required)

(required)