将文件移至垃圾箱

时间:2017-02-02 11:37:47

标签: powershell

我的脚本中实现了直接删除功能(直接删除文件)和垃圾桶删除功能(首先将其移至垃圾箱)。

问题是垃圾箱删除不起作用。我已经尝试了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

1 个答案:

答案 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' { ... }
        }
      }
    }
    

由于您问题的示例代码不完整,可能需要进一步调整。