Скрипт Powershell - gci

Я пытаюсь разделить вывод на два файла с помощью следующего скрипта:

try {
    gci C:\Windows\System32 -r -Force | % {
        if (!$_.PsIsContainer) {
            $_.FullName;
            $file = $_.FullName
        }
    } > paths.txt
} catch [System.UnauthorizedAccessException] {
    $file > errors.txt
}

Я знаю, что вы не можете поймать не завершающие сценарии с catch [System.UnauthorizedAccessException]но я не хочу использовать -ErrorAction Stop с catch [System.Management.Automation.ActionPreferenceStopException] либо (как здесь), потому что я не получу все пути к файлам.

1 ответ

Решение

Это сработало для меня

$epath2 = $null

Get-ChildItem -Path C:\Windows\System32 -Recurse -Force -Directory -ErrorVariable epath2 |
foreach {
     if ($?) {
       Out-File -InputObject $_.FullName -FilePath c:\test\paths.txt -Append
    } 
}

if ($epath2) {
  $epath2 | 
  foreach {
     ($_.Exception -split "'")[1] | Out-File -FilePath c:\test\errors.txt -Append
  }
}

перехватите ошибки в переменной -ErrorAction и отправьте в error.txt в качестве второго прохода. Могут быть и другие ошибки, кроме отказа в доступе, но вы будете знать, в каких папках были проблемы

Другие вопросы по тегам