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 ?
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 {
..
}