Com o Powershell 3, a instrução foreach
não itera sobre $null
e o problema descrito pelo OP não ocorre mais.
No Blog do Windows PowerShell , poste Novos recursos de idioma V3 :
ForEach statement does not iterate over $null
In PowerShell V2.0, people were often surprised by:
PS> foreach ($i in $null) { 'got here' }
got here
This situation often comes up when a cmdlet doesn’t return any objects. In PowerShell V3.0, you don’t need to add an if statement to avoid iterating over $null. We take care of that for you.
Para o PowerShell, $PSVersionTable.PSVersion.Major -le 2
, consulte o seguinte para obter uma resposta original.
Você tem duas opções, eu uso principalmente o segundo.
Verifique $backups
para não $null
. Um simples If
ao redor do loop pode verificar por não $null
if ( $backups -ne $null ) {
foreach ($file in $backups) {
Remove-Item $file.FullName;
}
}
Ou
Inicialize $backups
como uma matriz nula. Isso evita a ambigüidade do problema da "matriz vazia iterada" que você fez em seu último pergunta .
$backups = @()
# $backups is now a null value array
foreach ( $file in $backups ) {
# this is not reached.
Remove-Item $file.FullName
}
Desculpe, deixei de fornecer um exemplo para integrar seu código. Observe o cmdlet Get-ChildItem
envolto na matriz. Isso também funcionaria com funções que poderiam retornar um $null
.
$backups = @(
Get-ChildItem -Path $Backuppath |
Where-Object { ($_.lastwritetime -lt (Get-Date).addDays(-$DaysKeep)) -and (-not $_.PSIsContainer) -and ($_.Name -like "backup*") }
)
foreach ($file in $backups) {
Remove-Item $file.FullName
}