Как переместить файл в корзину с помощью PowerShell? - PullRequest
37 голосов
/ 02 февраля 2009

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

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

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

Ответы [ 7 ]

27 голосов
/ 14 января 2014

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

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

(решение предоставлено Shay Levy)

18 голосов
/ 02 февраля 2009

Он работает в PowerShell почти так же, как и решение Криса Балланса в JScript:

 $shell = new-object -comobject "Shell.Application"
 $folder = $shell.Namespace("<path to file>")
 $item = $folder.ParseName("<name of file>")
 $item.InvokeVerb("delete")
17 голосов
/ 02 февраля 2009

Вот более короткая версия, которая немного сокращает объем работы

$path = "<path to file>"
$shell = new-object -comobject "Shell.Application"
$item = $shell.Namespace(0).ParseName("$path")
$item.InvokeVerb("delete")
12 голосов
/ 01 февраля 2017

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

Install-Module -Name Recycle

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

Remove-ItemSafely file

Мне нравится создавать для этого псевдоним trash.

9 голосов
/ 29 ноября 2015

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

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')
        }
    }
}
2 голосов
/ 17 января 2017

Удалить файл в корзину:

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

Удалить папку для корзины:

Add-Type -AssemblyName Microsoft.VisualBasic
[Microsoft.VisualBasic.FileIO.FileSystem]::Deletedirectory('e:\test\testfolder','OnlyErrorDialogs','SendToRecycleBin')
0 голосов
/ 15 октября 2015

Вот полное решение, которое можно добавить в свой профиль пользователя, чтобы «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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...