По умолчанию при удалении файла с помощью PowerShell он удаляется навсегда.
Я бы хотел, чтобы удаленный элемент попал в корзину, как если бы я мог произойти с помощью оболочки delete.
Как вы можете сделать это в PowerShell в файловом объекте?
По умолчанию при удалении файла с помощью PowerShell он удаляется навсегда.
Я бы хотел, чтобы удаленный элемент попал в корзину, как если бы я мог произойти с помощью оболочки delete.
Как вы можете сделать это в PowerShell в файловом объекте?
Вот более короткая версия, которая уменьшает часть работы
$path = "<path to file>"
$shell = new-object -comobject "Shell.Application"
$item = $shell.Namespace(0).ParseName("$path")
$item.InvokeVerb("delete")
Если вы не хотите всегда видеть приглашение на подтверждение, используйте следующее:
Add-Type -AssemblyName Microsoft.VisualBasic
[Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile('d:\foo.txt','OnlyErrorDialogs','SendToRecycleBin')
(решение любезно предоставлено Шей Леви)
Он работает в 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")
2017 ответ: используйте Recycle module
Install-Module -Name Recycle
Затем запустите:
Remove-ItemSafely file
Здесь улучшенная функция, которая поддерживает каталоги, а также файлы как входные данные:
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')
}
}
}
Вот полное решение, которое можно добавить в свой профиль пользователя, чтобы "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
Удалить файл в 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')