Powershell 3 ile foreach
ifade yinelenmez $null
ve OP tarafından açıklanan sorun artık oluşmaz.
Gönderen Windows PowerShell blog yazı Yeni V3 Dil Özellikleri :
ForEach deyimi $ null değerinin üzerinde yineleme yapmıyor
PowerShell V2.0'da insanlar genellikle şunlara şaşırdılar:
PS> foreach ($i in $null) { 'got here' }
got here
Bu durum genellikle bir cmdlet herhangi bir nesne döndürmediğinde ortaya çıkar. PowerShell V3.0'da, $ null değerini yinelemekten kaçınmak için bir if ifadesi eklemenize gerek yoktur. Sizin için bununla ilgileniyoruz.
PowerShell $PSVersionTable.PSVersion.Major -le 2
için orijinal yanıt için aşağıdakilere bakın.
İki seçeneğiniz var, çoğunlukla ikincisini kullanıyorum.
Kontrol $backups
için değil $null
. If
Döngünün etrafındaki basit bir$null
if ( $backups -ne $null ) {
foreach ($file in $backups) {
Remove-Item $file.FullName;
}
}
Veya
$backups
Boş bir dizi olarak başlat . Bu , son sorunuzda sorduğunuz "yinelenen boş dizi" sorununun belirsizliğini önler .
$backups = @()
# $backups is now a null value array
foreach ( $file in $backups ) {
# this is not reached.
Remove-Item $file.FullName
}
Üzgünüz, kodunuzu entegre eden bir örnek vermeyi ihmal ettim. Get-ChildItem
Diziye sarılmış cmdlet'i not edin . Bu aynı zamanda dönebilen işlevlerle de çalışır $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
}