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: ドライブに *.bak ファイルが 1 つしかない場合を除いて、通常は正常に機能します。その場合、エラーが発生します。

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

そのドライブに追加の jump.bak を追加すると、正常に動作します。

4

1 に答える 1

0

私の場合、変数を配列として初期化する必要があり、Get-ChildItem配列として返す必要があることがわかりました。特に、1 つのファイルのみを返す場合はそうです。

あなたの場合:

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

$backups = @(Get-ChildItem -Path $d.deviceID -Recurse -filter *.bak) - (Cast as an array)
于 2013-10-10T18:29:11.113 に答える