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 {

    }
}