捕获流量控制的非标准Powershell CmdLet输出

时间:2009-03-18 23:50:42

标签: version-control tfs powershell

目前正在尝试使用MS发布的“Team Foundation Server Power Tools”软件包中的cmdlet构建脚本。

我正在尝试从“ Update-TfsWorkspace ”cmdlet的成功或失败中流出命令逻辑但是我似乎无法从调用中获取返回代码,也无法捕获使用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

预计会阻止cmdlet编写邮件但不起作用。

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

预计会收到错误并写入“失败”但不起作用。

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

预计会使用主机输出填充$ msg变量但不起作用。

我完全没有想法。帮助将不胜感激!

3 个答案:

答案 0 :(得分:2)

小hacky,但由于我没有TFS试图找出其他东西,看看this是否有帮助。

答案 1 :(得分:2)

我会说这个cmdlet编写不正确。首先,因为它没有成功,它应该发出一个错误对象,这将导致$?返回false,你可以检查或困住。其次,你不能使用-ea 0来抑制错误消息。看起来这个snapin正在使用Host api将错误字符串写入主机控制台。那是一个喷出!!现在,你可以做EBGreen建议的那样:

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

当PowerShell的新实例启动时,请注意您的配置文件脚本吐出的所有文本。

答案 2 :(得分:2)

您的问题是cmdlet正在写入错误(非终止错误),但不会抛出异常(终止错误)。您可以通过添加ErrorAction参数使其抛出异常:

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

这将导致cmdlet终止所有错误(如果写入错误流,则抛出异常)。