Search code examples
powershellget-childitem

How can Get-ChildItem be tested for no results (zero files)?


I'm stumped here on what seems to be a simple problem; so sorry for any bone-headed-ness over here.

I have script that cleans up defunct backup files. After identifying the files I loop over and print out what's being dumped. My problem arises trying to provide feedback/testing when there are zero defunct files. The script looks like...

$Files = Get-ChildItem $BackupPath_Root -include *.bak -recurse 
           | where {$_.CreationTime  -le $DelDate_Backup }  

if ( $Files -eq "" -or $Files.Count  -eq 0 ) {
    write-host "   no files to delete."    #<-- this doesn't print when no files
} else {
   foreach ($File in $Files) {
      write-host “$File” 
      Remove-Item $File | out-null
   } 
}

The if checking for no files doesn't catch the no file condition. What is the appropriate way to test $Files for no results ?


Solution

  • Try wrapping in @(..). It creates always an array:

    $Files = @(Get-ChildItem $BackupPath_Root -include *.bak -recurse 
               | where {$_.CreationTime  -le $DelDate_Backup })
    if ($Files.length -eq 0) {
      write-host "   no files to delete." 
    } else {
      ..
    }