Запись нестандартного вывода Powershell CmdLet для управления потоком - PullRequest
2 голосов
/ 19 марта 2009

В настоящее время пытаюсь создать сценарий с использованием командлетов из выпущенного MS пакета «Team Foundation Server Power Tools».

Я пытаюсь передать командную логику из успешного или неудачного выполнения командлета " Update-TfsWorkspace ", однако я не могу получить код возврата из вызова и не могу получить выходные данные используя Out-String. Я использую Powershell v1.

update-tfsworkspace "C:\doesnotexist\" -recurse -version T

Выводит сообщение «Невозможно определить рабочее пространство». какую ошибку я пытаюсь уловить.

$ret = update-tfsworkspace "C:\doesnotexist\" -recurse -version T

Ожидается, что даст мне $ true / $ false, указывающее успех / неудачу, но не работает.

update-tfsworkspace "C:\doesnotexist\" -recurse -version T | Out-Null

Ожидается, что командлет не сможет написать сообщение, но не работает.

trap{echo "fail"}
update-tfsworkspace $workspace_path -recurse -version T

Ожидается, что перехватит ошибку и напишет "fail", но не работает.

$msg = update-tfsworkspace $workspace_path -recurse -version T | Out-String

Ожидается, что переменная $ msg заполняется выводом хоста, но не работает.

У меня совершенно нет идей здесь. Помощь будет оценена!

Ответы [ 3 ]

2 голосов
/ 22 марта 2009

Я бы сказал, что этот командлет написан неправильно. Во-первых, поскольку это не удалось, он должен был выдать объект ошибки, который вызвал бы $? вернуть ложь, которую вы могли бы проверить или поймать в ловушку. Во-вторых, вы не можете подавить сообщение об ошибке, используя -ea 0. Похоже, эта оснастка использует API-интерфейс хоста для записи строки ошибки в консоль хоста. Это изверг !! Пока вы можете делать то, что предлагает EBGreen:

$ msg = powershell.exe -nologo update-tfsworkspace "C: \ doesnotexist \" -recurse -version T 2> & 1

Просто следите за всем текстом, который выдает ваш профиль, когда запускается новый экземпляр PowerShell.

2 голосов
/ 25 марта 2009

Ваша проблема в том, что командлет пишет ошибку (Non-Terminating Error), но не выдает исключение (Terminating Error). Вы можете вызвать исключение, добавив параметр ErrorAction:

trap{echo "fail"}
update-tfsworkspace $workspace_path -recurse -version T -ErrorAction "Stop"

Это приведет к тому, что командлет завершит все ошибки (выбрасывает исключение, если записывает в поток ошибок).

2 голосов
/ 19 марта 2009

Немного хакерский, но так как у меня нет TFS, чтобы попытаться выяснить что-то еще, посмотрите, поможет ли этот .

...