Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Очистка корзины пользователей. (http://forum.oszone.net/showthread.php?t=326525)

buratin 05-05-2017 14:03 2734376

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

Kazun 05-05-2017 15:06 2734400

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

buratin 05-05-2017 15:32 2734409

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

Iska 05-05-2017 16:43 2734423

На 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 2734440

На 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
}

Замечания ровно те же.


Время: 22:44.

Время: 22:44.
© OSzone.net 2001-