Com o Powershell 3, a foreachinstrução não repete $nulle o problema descrito pelo OP não ocorre mais.
Na postagem do blog do Windows PowerShell, novos recursos de idioma da V3 :
A instrução ForEach não itera mais de $ null
No PowerShell V2.0, as pessoas costumavam se surpreender com:
PS> foreach ($i in $null) { 'got here' }
got here
Essa situação geralmente ocorre quando um cmdlet não retorna nenhum objeto. No PowerShell V3.0, você não precisa adicionar uma instrução if para evitar a iteração acima de $ null. Nós cuidamos disso para você.
Para o PowerShell, $PSVersionTable.PSVersion.Major -le 2consulte o seguinte para obter a resposta original.
Você tem duas opções, eu uso principalmente a segunda.
Verifique se $backupsnão $null. Um simples Ifpasso a passo pode verificar se não há$null
if ( $backups -ne $null ) {
foreach ($file in $backups) {
Remove-Item $file.FullName;
}
}
Ou
Inicialize $backupscomo uma matriz nula. Isso evita a ambiguidade do problema "iterar matriz vazia" sobre a qual você perguntou na sua última pergunta .
$backups = @()
# $backups is now a null value array
foreach ( $file in $backups ) {
# this is not reached.
Remove-Item $file.FullName
}
Não foi possível fornecer um exemplo de integração do seu código. Observe o Get-ChildItemcmdlet agrupado na matriz. Isso também funcionaria com funções que poderiam retornar a $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
}