Powershell entra em loop foreach com objeto nulo

3

Estou listando todos os backups em um determinado diretório:

$backups = Get-ChildItem -Path $zipFilepath | 
Where-Object {($_.lastwritetime -lt (Get-Date).addDays(-7)) -and 
(-not $_.PSIsContainer) -and ($_.Name -like "backup*")}

Se eu configurá-lo para retornar deliberadamente nenhum arquivo (.addDays (-600), as seguintes impressões serão exibidas como "Empty" (como esperado):

if (!$backups)
{
    "Empty"
}

Se eu tentar listar os nomes com uma variável vazia $ backups:

foreach ($file in $backups)
{
    $file.FullName;
}

Eu não recebo nada (como esperado), se eu mudar isso para:

"test"+ $file.FullName;

então eu recebo um único "teste" sob o "Vazio". Como isso é possível se $ backups estiver vazio?

    
por SteB 11.12.2012 / 18:03

1 resposta

4

Este é um "recurso" do Powershell. Seu $backups pode conter vários $null valores, além de não nulos, portanto, o Powershell deve iterar o objeto para processar o foreach . O fato de nós dois vermos $backup como um escalar de valor único ( $null neste caso) não importa, para MS pelo menos ...:)

Veja este Relatório de Bug do Microsoft Connect para obter mais detalhes - É" corrigido "no Powershell v3.

Na v2:

PS H:\> foreach ( $i in $null ) { "Hi" }
Hi

Na v3:

PS H:\> foreach ( $i in $null ) { "Hi" }

(sem saída)

    
por 11.12.2012 / 18:12

Tags