Получать-объект перестал работать с закрытой конвейерной ошибкой

Если у меня есть функция в качестве примера...

function foo() 
{
    # get a list of files matched pattern and timestamp
    $fs = Get-Item -Path "C:\Temp\*.txt" 
               | Where-Object {$_.lastwritetime -gt "11/01/2009"}
    if ( $fs -ne $null ) # $fs may be empty, check it first
    {
      foreach ($o in $fs)
      {
         # new bak file
         $fBack = "C:\Temp\test\" + $o.Name + ".bak"
         # Exception here Get-Item! See following msg
         # Exception thrown only Get-Item cannot find any files this time.
         # If there is any matched file there, it is OK
         $fs1 = Get-Item -Path $fBack
         ....
       }
     }
  }

Сообщение об исключении... The WriteObject and WriteError methods cannot be called after the pipeline has been closed. Please contact Microsoft Support Services.

В основном я не могу использовать Get-Item снова в функции или цикле для получения списка файлов в другой папке.

Какое-либо объяснение и что корректный путь состоит в том, чтобы зафиксировать его?

По тому, как я использую PS 1.0.

6
задан SteveC 1 December 2011 в 15:47
поделиться

2 ответа

Это всего лишь небольшая вариация того, что уже было предложено, но в нем используются некоторые методы, которые делают код немного проще ...

function foo() 
{    
    # Get a list of files matched pattern and timestamp    
    $fs = @(Get-Item C:\Temp\*.txt | Where {$_.lastwritetime -gt "11/01/2009"})
    foreach ($o in $fs) {
        # new bak file
        $fBack = "C:\Temp\test\$($o.Name).bak"
        if (!(Test-Path $fBack))
        {
            Copy-Item $fs.Fullname $fBack
        }

        $fs1 = Get-Item -Path $fBack
        ....
    }
}

Для получения дополнительной информации по проблеме с ] foreach и скалярные значения NULL см. это сообщение в блоге .

4
ответ дан 17 December 2019 в 04:48
поделиться

Я немного изменил приведенный выше код, чтобы создать файл резервной копии, но я могу использовать Get- Элемент в цикле успешно, без каких-либо исключений. Мой код:

 function foo() 
 {
     # get a list of files matched pattern and timestamp
     $files = Get-Item -Path "C:\Temp\*.*" | Where-Object {$_.lastwritetime -gt "11/01/2009"}
     foreach ($file in $files)
     {
        $fileBackup = [string]::Format("{0}{1}{2}", "C:\Temp\Test\", $file.Name , ".bak") 
        Copy-Item $file.FullName -destination $fileBackup
        # Test that backup file exists 
        if (!(Test-Path $fileBackup))
        {
             Write-Host "$fileBackup does not exist!"
        }
        else
        {
             $fs1 = Get-Item -Path $fileBackup
             ...
        }
     }
 }

Я также использую PowerShell 1.0.

1
ответ дан 17 December 2019 в 04:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: