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