Показать полную графическую версию : Очистка корзины пользователей.
Добрый день!
прошу помочь со скриптом для очистки корзины.
Рабочий стол и папка мои документы у всех пользователей переадресованы на файловый серевер, соответственно корзина тоже,
задача очистить корзину от файлов старше 30 дней.
PowerShell:
(New-Object -Com Shell.Application).NameSpace(10).Items() | ? {$_.ModifyDate -lt (Get-Date).AddDays(-30) -and $_.IsFolder -eq $false} | % { Remove-Item -LiteralPath $_.Path -Force}
VBScript адаптировать скрипт - Empty Recycle Bin Script (https://community.spiceworks.com/scripts/show/108-empty-recycle-bin-script)
Прошу прошения, неверно сформулировал, нужно чтобы скрипт удалял файлы перемещённые в корзину более 30 дней назад.
На WSH:
Option Explicit
Dim objFSO
Dim objShell
Dim objFolder
Dim objFolderItem
Dim dtDeleteDate
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
With WScript.CreateObject("Shell.Application")
Set objFolder = .NameSpace("Shell:RecycleBinFolder")
If Not objFolder Is Nothing Then
For Each objFolderItem In objFolder.Items
dtDeleteDate = CDate(Replace(Replace(objFolder.GetDetailsOf(objFolderItem, 2), ChrW(&H200E), ""), ChrW(&H200F), ""))
If DateDiff("d", dtDeleteDate, Now()) > 30 Then
If objFolderItem.IsFolder And objFolderItem.IsFileSystem And (StrComp(objFolderItem.Type, "Папка с файлами", vbTextCompare) = 0) Then
objFSO.DeleteFolder objFolderItem.Path, True
Else
objFSO.DeleteFile objFolderItem.Path, True
End If
End If
Next
Else
WScript.Echo "Can't connect to RecycleBin folder"
WScript.Quit 1
End If
End With
Set objFSO = Nothing
WScript.Quit 0
Проверялось на Windows 7 SP1 x64, для других ОС надо смотреть: а) есть ли в Проводнике в Корзине столбец Дата удаления, и под каким номером он числится в данной конкретной ОС, б) что именно и в каком формате возвращает этот столбец (для меня, например, была несколько неожиданной картина, что внутри строки с датой удаления есть некие «разделители»). И соответствующим образом учитывать и обрабатывать в коде.
На PowerShell:
(New-Object -ComObject Shell.Application).NameSpace('Shell:RecycleBinFolder').Items() | Where-Object -FilterScript {
([System.DateTime]::Parse($oFolder.GetDetailsOf($_, 2).Replace(([System.Char]0x200E).ToString(), '').Replace(([System.Char]0x200F).ToString(), ''), [System.Globalization.CultureInfo]::CurrentCulture)).AddDays(30) -le (Get-Date)
} | ForEach-Object -Process {
Remove-Item -LiteralPath $_.Path -Force
}
Замечания ровно те же.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.