添加递归+静默继续垃圾桶删除

时间:2017-02-03 13:16:58

标签: powershell recursion

我的脚本遇到了问题,每当我删除垃圾箱并且地图位置在文件夹中有一个文件夹,该文件夹中有一个必须删除的文件时,它就无法使用。

问题是我需要添加 recurse -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') 
            }
         }
       }
}

1 个答案:

答案 0 :(得分: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
)

现在,您可以调用没有任何参数的脚本来删除垃圾箱的位置,或使用-Direct开关将其永久删除。