Подтвердить что ты не робот

Как перенести файл в корзину с помощью PowerShell?

По умолчанию при удалении файла с помощью PowerShell он удаляется навсегда.

Я бы хотел, чтобы удаленный элемент попал в корзину, как если бы я мог произойти с помощью оболочки delete.

Как вы можете сделать это в PowerShell в файловом объекте?

4b9b3361

Ответ 1

Вот более короткая версия, которая уменьшает часть работы

$path = "<path to file>"
$shell = new-object -comobject "Shell.Application"
$item = $shell.Namespace(0).ParseName("$path")
$item.InvokeVerb("delete")

Ответ 2

Если вы не хотите всегда видеть приглашение на подтверждение, используйте следующее:

Add-Type -AssemblyName Microsoft.VisualBasic
[Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile('d:\foo.txt','OnlyErrorDialogs','SendToRecycleBin')

(решение любезно предоставлено Шей Леви)

Ответ 3

Он работает в PowerShell почти так же, как решение Chris Ballance в JScript:

 $shell = new-object -comobject "Shell.Application"
 $folder = $shell.Namespace("<path to file>")
 $item = $folder.ParseName("<name of file>")
 $item.InvokeVerb("delete")

Ответ 4

2017 ответ: используйте Recycle module

Install-Module -Name Recycle

Затем запустите:

Remove-ItemSafely file

Ответ 5

Здесь улучшенная функция, которая поддерживает каталоги, а также файлы как входные данные:

Add-Type -AssemblyName Microsoft.VisualBasic

function Remove-Item-ToRecycleBin($Path) {
    $item = Get-Item -Path $Path -ErrorAction SilentlyContinue
    if ($item -eq $null)
    {
        Write-Error("'{0}' not found" -f $Path)
    }
    else
    {
        $fullpath=$item.FullName
        Write-Verbose ("Moving '{0}' to the Recycle Bin" -f $fullpath)
        if (Test-Path -Path $fullpath -PathType Container)
        {
            [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteDirectory($fullpath,'OnlyErrorDialogs','SendToRecycleBin')
        }
        else
        {
            [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile($fullpath,'OnlyErrorDialogs','SendToRecycleBin')
        }
    }
}

Ответ 6

Вот полное решение, которое можно добавить в свой профиль пользователя, чтобы "rm" отправил файлы в Корзину. В моем ограниченном тестировании он обрабатывает относительные пути лучше, чем предыдущие.

Add-Type -AssemblyName Microsoft.VisualBasic

function Remove-Item-toRecycle($item) {
    Get-Item -Path $item | %{ $fullpath = $_.FullName}
    [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile($fullpath,'OnlyErrorDialogs','SendToRecycleBin')
}

Set-Alias rm Remove-Item-toRecycle -Option AllScope

Ответ 7

Удалить файл в RecycleBin
Add-Type -AssemblyName Microsoft.VisualBasic [Microsoft.VisualBasic.FileIO.FileSystem]:: DeleteFile ('e:\test\test.txt', 'OnlyErrorDialogs', 'SendToRecycleBin')

Удалить папку в RecycleBin
Add-Type -AssemblyName Microsoft.VisualBasic [Microsoft.VisualBasic.FileIO.FileSystem]:: Deletedirectory ('e:\test\testfolder', 'OnlyErrorDialogs', 'SendToRecycleBin')