2017-02-03 3 views
1

Я столкнулся с проблемой с моим скриптом, всякий раз, когда я делаю удаление мусорной корзины, а на карте есть папка в папке с файлом, который необходимо удалить, он не будет Работа.Добавление recurse + silently continue to trashbin delete

Проблема заключается в том, что мне нужно добавить рекурсию и -ErrorAction молча продолжают. Но я не знаю, как это сделать, поскольку методы перемещения файлов в корзину для мусора довольно сложны, на мой взгляд.

Не могли бы вы, ребята, помочь мне?

Мой код:

## Top of the script 
    param(
    [Parameter(Mandatory=$true)] 
    [ValidateRange(0,99999)] 
    [int]$minutes, 

    [Parameter(Mandatory=$true)] 
    [ValidateScript({Test-Path $_})] 
    [string]$maplocation, 

    [Parameter(Mandatory=$true)] 
    [ValidateSet("Direct","TrashBin")] 
    [string]$consequence 
) 

    ## Variables 
$maxAge = (Get-Date).AddMinutes(-$minutes) 
$files = Get-ChildItem $maplocation -Recurse 
$time = get-date 
$fortrashbin = $maplocation + '\' + $file 

## 
foreach ($file in $files) 
{ 
    if ($file.lastwritetime -lt $maxage) 
    { 
     switch ($consequence) 
     { 
      "direct" 
      { 
       write-verbose "File Found $file" -verbose 
       remove-item $file.fullname -recurse -erroraction silentlycontinue 
       write-verbose "Deleting $file" -verbose 
      } 
      "trashbin" { 
       write-verbose "File Found $file" -verbose 
       write-verbose "moving $file to trashbin" -verbose 
       Add-Type -AssemblyName Microsoft.VisualBasic 
       [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile($fortrashbin,'OnlyErrorDialogs','SendToRecycleBin') 
      } 
     } 
     } 
} 

ответ

0

Я думаю, что вам не придется перебирать каждый файл, если вы удалите папку. Вместо этого, вы можете использовать DeleteDirectory метод:

if (Test-Path -Path $maplocation -PathType Container) 
{ 
    # delete directory 
    [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteDirectory(
     $maplocation,'OnlyErrorDialogs','SendToRecycleBin') 
} 
else 
{ 
    # delete folder 
    [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile(
     $maplocation,'OnlyErrorDialogs','SendToRecycleBin') 
} 

Просьба также рассмотреть возможность замены параметра $consequence с [switch] как:

param 
(
    [Parameter(Mandatory=$true)] 
    [ValidateRange(0,99999)] 
    [int]$minutes, 

    [Parameter(Mandatory=$true)] 
    [ValidateScript({Test-Path $_})] 
    [string]$maplocation, 

    [Parameter(Mandatory=$false)] 
    [switch]$Direct 
) 

Теперь вы можете вызвать скрипт без каких-либо параметров, чтобы удалить папку для trashbin или с переключателем -Direct для его окончательного удаления.