我的脚本中实现了直接删除功能(直接删除文件)和垃圾桶删除功能(首先将其移至垃圾箱)。
问题是垃圾箱删除不起作用。我已经尝试了this suggested post,但它似乎无效。
我的完整剧本:
## 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
)
## error notifications
## Variables
$file = Get-ChildItem -Path $maplocation | Get-Date
$time = Get-Date
$minutesconvert = (New-Timespan -Start $file -End $time).TotalMinutes
foreach ($file in $files)
{
if ($minutes -lt $minutesconvert -and $consequence -eq "direct")
{
Write-Verbose "File Found $file" -Verbose
Write-Verbose "Deleting $file" -Verbose
Remove-Item $file.FullName
}
elseif ($minutes -lt $minutesconvert -and $consequence -eq "trashbin")
{
Add-Type -AssemblyName Microsoft.VisualBasic
Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile($maplocation, 'OnlyErrorDialogs', 'SendToRecycleBin')
}
else
{
Write-Verbose -message "txt" -verbose
}
}
Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile($maplocation, 'OnlyErrorDialogs', 'SendToRecycleBin')
PowerShell控制台中的错误代码:
New-TimeSpan : Cannot convert 'System.Object[]' to the type 'System.DateTime' required by parameter 'Start'. The method is not supported. At C:\Users\david\Desktop\nieuw.ps1:21 char:39 + $minutesconvert = (New-TimeSpan -Start <<<< $file -End $time).TotalMinutes + CategoryInfo : InvalidArgument: (:) [New-TimeSpan], ParameterBindingException + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.NewTimeSpanCommand
答案 0 :(得分:2)
这是你的罪魁祸首:
$file = Get-ChildItem -Path $maplocation | Get-Date
上述声明将为您提供$maplocation
中每个文件和文件夹的当前日期和时间。如果$maplocation
不是单个文件,则结果是一个数组,New-TimeSpan
不准备处理。该程序也不太可能是您实际想要的。您可能想要$maplocation
(或其内容?)的最后修改(创建)日期之间的时差。此外,不是计算时间跨度,而是从当前时间戳中减去分钟数并将其用作参考日期。
此外,根据您在$maplocation
是文件夹的情况下的操作,您可能需要以不同的方式处理该项目:
$maplocation
是一个文件夹,您想删除该文件夹及其中的所有内容,或$maplocation
是一个文件:
$maxAge = (Get-Date).AddMinutes(-$minutes)
$file = Get-Item $maplocation
if ($file.LastWriteTime -lt $maxAge) {
switch ($consequence) {
'direct' { ... }
'trashbin' { ... }
}
}
$maplocation
是一个文件夹,您只想从中删除早于参考日期的项目:
$maxAge = (Get-Date).AddMinutes(-$minutes)
$files = Get-ChildItem $maplocation -Recurse
foreach ($file in $files) {
if ($file.LastWriteTime -lt $maxAge) {
switch ($consequence) {
'direct' { ... }
'trashbin' { ... }
}
}
}
由于您问题的示例代码不完整,可能需要进一步调整。