Public/Clear-UserRecycleBin.ps1
function Clear-UserRecycleBin { <# .SYNOPSIS Удаляет файлы из Корзины пользователя. .DESCRIPTION Удаляет файлы из Корзины, которы были удалены более, чем $DaysAgo. .Parameter DaysAgo Количество дней, которое должно было пройти с момента помещения в Коризну. .EXAMPLE PS C:\> Clear-UserRecycleBin -DaysAgo 7 Удаляет все файлы, которые в Коризне не менее семи дней. .INPUTS Количество дней. Если не указано - тогда 3. .NOTES Функцию подготовил levin@corp.atmd.ru. Функция очищаем Корзину текущего пользователя, удаляя из нее все файлы, котореы помещены туда более, чем DaysAgo дней назад. #> [CmdletBinding()] param ( [Parameter(Mandatory = $false, ValueFromPipeline = $true, Position = 0)] [System.Int32] $DaysAgo = 3 ) begin { } process { try { if (-not($IsLinux)) { $Shell = New-Object -ComObject Shell.Application # О значении 0xA см тут: https://docs.microsoft.com/en-us/windows/win32/api/shldisp/ne-shldisp-shellspecialfolderconstants $Recycler = $Shell.NameSpace(0xA) # $Recycler.Items() возвращает все элементы, содержащиеся в Коризине на данный момент. foreach ($Item in $Recycler.Items()) { # О магических "\u200f|\u200e" можно поискать в Google. Если в двух словах - это символы LEFT-TO-RIGHT-MARK и RIGHT-TO-LEFT-MARK для Unicode. $DeletedDate = Get-Date $($Recycler.GetDetailsOf($Item, 2) -replace "\u200f|\u200e", "") If ($DeletedDate -lt (Get-Date).AddDays(-$DaysAgo)) { Write-Verbose -Message "<Clear-UserRecycleBin> Удаляем из Коризны $($Item.Path)." Remove-Item -Path $Item.Path -Confirm:$false -Force -Recurse } } } else { throw [System.Configuration.ConfigurationException]::New('This operation system does not supported.') } } catch { #$PSCmdlet.ThrowTerminatingError($PSItem) Write-Error -Exception $PSItem.Exeception } } end { } } |