Ловушка ошибок Powershell для Get-ChildItem -Filter и Robocopy (ErrorAction) - PullRequest
0 голосов
/ 05 января 2012

Я пишу сценарий powershell для резервного копирования некоторых контроллеров домена вручную. Резервные копии необходимо переместить из одной папки в другую, и я использую Get-ChildItem -Filter «Backup *» для выбора файлов резервных копий, а затем robocopy для их перемещения.

Это работает, но я хотел бы добавить в ловушку и пользовательское сообщение об ошибке «Ошибка копирования локальной резервной копии из XX в SystemStateBackup», если исходный или целевой путь неверен. Я также хотел бы передать любые ошибки в файл журнала.

Оригинал без ловушки

 Get-ChildItem f:\WindowsImageBackup\ITUPW-PRODDC7 -Filter "Backup*" -Name | ForEach-Object { 
 robocopy "f:\WindowsImageBackup\ITUPW-PRODDC7\$_" "f:\WindowsImageBackup\ITUPW-PRODDC7\SystemStateBackup\$_" /Z /S /MOVE /njh /njs /ndl /nc /ns /np /nfl}

Ловушка сработает, если я использую только часть кода

Trap {"Error Copying Local Backup from XX to SystemStateBackup";Continue} Get-ChildItem f:\WindowsImageBackup\ITUPW-PRODDC7 -Filter "Backup*" -Name -ea "Stop"

Но так работать не будет

Trap {"Error Copying Local Backup from XX to SystemStateBackup";Continue} Get-ChildItem f:\WindowsImageBackup\ITUPW-PRODDC7 -Filter "Backup*" -Name | ForEach-Object { 
robocopy "f:\WindowsImageBackup\ITUPW-PRODDC7\$_" "f:\WindowsImageBackup\ITUPW-PRODDC7\SystemStateBackup\$_" /Z /S /MOVE /njh /njs /ndl /nc /ns /np /nfl} -ea "Stop"

Это приводит к следующей ошибке powershell

Get-ChildItem: Невозможно найти путь 'F: \ WindowsImageBackup \ ITUPW-PRODDC', так как он не существует. В строке: 1 символ: 88 + Trap {"Ошибка копирования локальной резервной копии из XX в SystemStateBackup"; Продолжить} Get-ChildItem <<<< f: \ WindowsImageBackup \ I TUPW-PRODDC -Фильтр "Резервное копирование *" -Название | ForEach-Object {robocopy "f: \ WindowsImageBackup \ ITUPW-PRODDC7 \ $ <em>" "f: \ WindowsIma geBackup \ ITUPW-PRODDC7 \ SystemStateBackup \ $"/ Z / S / MOVE / njh / njs / ndl / nc / ns / np / nfl} -ea" Стоп " + CategoryInfo: ObjectNotFound: (F: \ WindowsImageBackup \ ITUPW-PRODDC: String) [Get-ChildItem], ItemNotFoun dException + FullyQualifiedErrorId: PathNotFound, Microsoft.PowerShell.Commands.GetChildItemCommand

Любой совет будет принят с благодарностью.

Спасибо, что уделили время.

Амелия - системный администратор, который нарисовал короткую соломинку

1 Ответ

0 голосов
/ 05 января 2012

Вы применяете -ea "Stop" к foreach, а не к Get-ChildItem.Переместите его перед конвейером |

Для робокопии вы можете использовать $? или $lastexitcode (внутри объекта foreach), чтобы проверить, нормально ли он работает.

...