PDA

Показать полную графическую версию : Очистка корзины пользователей.


buratin
05-05-2017, 14:03
Добрый день!
прошу помочь со скриптом для очистки корзины.
Рабочий стол и папка мои документы у всех пользователей переадресованы на файловый серевер, соответственно корзина тоже,
задача очистить корзину от файлов старше 30 дней.

Kazun
05-05-2017, 15:06
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)

buratin
05-05-2017, 15:32
Прошу прошения, неверно сформулировал, нужно чтобы скрипт удалял файлы перемещённые в корзину более 30 дней назад.

Iska
05-05-2017, 16:43
На 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, для других ОС надо смотреть: а) есть ли в Проводнике в Корзине столбец Дата удаления, и под каким номером он числится в данной конкретной ОС, б) что именно и в каком формате возвращает этот столбец (для меня, например, была несколько неожиданной картина, что внутри строки с датой удаления есть некие «разделители»). И соответствующим образом учитывать и обрабатывать в коде.

Iska
05-05-2017, 18:04
На 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