我的脚本遇到了问题,每当我删除垃圾箱并且地图位置在文件夹中有一个文件夹,该文件夹中有一个必须删除的文件时,它就无法使用。
问题是我需要添加 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')
}
}
}
}
答案 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
开关将其永久删除。