Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 添加递归+;silentlycontinue到垃圾箱删除_Powershell_Recursion - Fatal编程技术网

Powershell 添加递归+;silentlycontinue到垃圾箱删除

Powershell 添加递归+;silentlycontinue到垃圾箱删除,powershell,recursion,Powershell,Recursion,我的脚本遇到了一个问题,每当我删除垃圾箱时,如果地图位置的文件夹中有一个必须删除的文件,那么它将无法工作 问题是,我需要添加一个递归和-erroraction,然后继续。但我不知道我该怎么做,因为在我看来,将文件移动到垃圾箱的方法相当困难 你们能帮帮我吗 我的代码: ## Top of the script param( [Parameter(Mandatory=$true)] [ValidateRange(0,99999)] [int]$minutes, [Pa

我的脚本遇到了一个问题,每当我删除垃圾箱时,如果地图位置的文件夹中有一个必须删除的文件,那么它将无法工作

问题是,我需要添加一个递归和-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') 
            }
         }
       }
}

我认为如果你删除了一个文件夹,你不必遍历每个文件。相反,您可以使用
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')
}

也请考虑用<代码> > [开关] < /代码>替换< <代码> $后果>代码>参数:

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

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

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

现在,您可以在不使用任何参数的情况下调用脚本来删除垃圾桶的位置,或者使用
-Direct
开关来永久删除它。

我认为如果删除文件夹,您不必迭代每个文件。相反,您可以使用
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')
}

也请考虑用<代码> > [开关] < /代码>替换< <代码> $后果>代码>参数:

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

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

   [Parameter(Mandatory=$false)]
   [switch]$Direct
)
现在,您可以在不使用任何参数的情况下调用脚本来删除垃圾桶的位置,或者使用
-Direct
开关来永久删除它