Командлет C# — передача кодов возврата в конвейер

Мне нужно преобразовать небольшое приложение C#, которое используется в качестве интерфейса между двумя системами, в командлет PowerShell. Первая система вызывает приложение с некоторыми параметрами и возвращает один из нескольких кодов возврата, таких как 0 в случае успеха или 1000 или 1001 в случае определенных ошибок. В настоящее время командлет, который я написал, передает коды возврата обратно в конвейер с помощью WriteObject(). Мой вопрос: есть ли лучший способ сделать это, особенно если код возврата не равен 0 и произошла ошибка?

Спасибо заранее за любые предложения!


person sevi    schedule 20.06.2013    source источник
comment


Ответы (1)


Я не уверен, что вы ищете под «лучше». Сказанное здесь является предложением.

Пусть ваш командлет записывает в поток ошибок, если возникает ошибка. Вы бы использовали WriteError вместо WriteObject. Затем сценарий powershell может выполнить ваш командлет в попытке/отлове и таким образом отловить ошибки. Вы также можете преобразовать коды ошибок в предупреждения, если это имеет смысл для вашего приложения. Используйте предупреждение о записи. И, наконец, есть ThrowTerminatingError, если вы хотите завершить скрипт. ThrowTerminatingError также может быть перехвачен, но в противном случае сценарий завершается, тогда как, если Write-Error не перехватывается, сценарий продолжается.

Вот целый раздел в MSDN, посвященный командлетам и отчетам об ошибках: http://msdn.microsoft.com/en-us/library/windows/desktop/dd878251(v=vs.85).aspx

person Χpẘ    schedule 22.06.2013