无法将* .bak文件作为单个对象收集

时间:2013-07-02 21:23:22

标签: powershell-v2.0

我是PowerShell的新手。 我想编写一个简单的程序来列出所有* .bak文件,然后我可以按日期或大小排序,如下所示。

$Drives = Get-WMIObject -class win32_logicaldisk -filter "DriveType = 3" ;
foreach ($d in $Drives){
    If (($d.deviceId -ne "C:") -and ($d.VolumeName -ne "PAGEFILE")) {
        $backups += Get-ChildItem -Path $d.deviceID -Recurse -filter *.bak
  }

这通常可以正常工作,除非例如说D:drive只有一个* .bak文件。 在那种情况下,我得到一个错误。

Method invocation failed because [System.IO.FileInfo] doesn't contain a method named 'op_Addition'.
At F:\work\PowerShell\DiskSpace\generate-disk-report-v2.ps1:39 char:13
+     $backups += <<<<  Get-ChildItem -Path $d.deviceID -Recurse -filter *.bak
    + CategoryInfo          : InvalidOperation: (op_Addition:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

如果我向该驱动器添加一个额外的junk.bak,它可以正常工作。

1 个答案:

答案 0 :(得分:0)

在我的例子中,我发现变量需要初始化为数组,并且Get-ChildItem需要作为数组返回,特别是,如果它只返回一个文件。

在你的情况下:

$backups = @() - (Before calling Get-ChildItem)

$backups = @(Get-ChildItem -Path $d.deviceID -Recurse -filter *.bak) - (Cast as an array)