抑制PowerShell输出信息

6

我有一个 TFS 2013 Update 2 的构建服务器。当我构建一个项目时,我会检出一些文件,修改一些内容,然后再次将其提交。这很好用。

唯一的问题是,当有人检出了其中的某个文件时,构建服务器将把它视为错误,导致构建部分成功。实际上,它只是一个信息消息,但构建将其视为错误。如何抑制这些消息?

我有以下 Powershell 命令:

Add-TfsPendingChange -Edit -Item $PathToFolderToCheckout -Recurse

这个命令来自TFS 2013 Power Tools。
我尝试了以下方法,但它不起作用:
- 添加带有Igonore和SilentlyContinue的-ErrorAction - 添加-Out-Null - 尝试一个空的Catch
每个文件抛出的消息是: 文件路径:在Workspace;Ralph Jansen中打开以进行编辑
谢谢
4个回答

1

经过一些努力,我成功为我们的Tfs构建获取了它! \o/

你必须以 *>&1 | out-null 结束命令行。

例如:

Add-TfsPendingChange -Edit -Item $PathToFolderToCheckout -Recurse *>&1 | out-null

副作用是导致所有引起错误的消息都会丢失。

1

我认为它需要在标准输出流中才能被发送到null。试试这个:

$Null = Add-TfsPendingChange -Edit -Item $PathToFolderToCheckout -Recurse *>&1 

*>&1将所有输出重定向到标准输出,$null是用于此目的的保留变量。它比管道输出到out-null更有效。

另一种选择是设置错误的操作偏好设置。我之前见过命令不承认-ErrorAction常见参数的情况。

$ErrorActionPreference = 'SilentlyContinue'
Add-TfsPendingChange -Edit -Item $PathToFolderToCheckout -Recurse
$ErrorActionPreference = 'Continue'

你能发一下你所说的内容的截图吗?这会很有帮助。 - Noah Sparks

0

试试以下方法之一:

Add-TfsPendingChange -Edit -Item $PathToFolderToCheckout -Recurse -ErrorAction SilentlyContinue -wa 0 | Out-null

或者

[void](Add-TfsPendingChange -Edit -Item $PathToFolderToCheckout -Recurse -ErrorAction SilentlyContinue -wa 0)

你也可以将 cmdlet 的结果分配给一个变量(并且不对其进行任何操作):

$throwaway = Add-TfsPendingChange -Edit -Item $PathToFolderToCheckout -Recurse -ErrorAction SilentlyContinue -wa 0

虚假输出是什么样子的?如果这是一个警告,您可以在上述命令中添加“-wa 0”开关,然后再试一次。 - Raf
输出只是我在上面问题中说的那个消息...我猜这是与在Visual Studio中检出已被其他人检出的文件时出现的输出窗口中相同的消息...只是信息/警告消息... - LockTar
尝试使用 -wa 开关修改后的答案。 - Raf

0

试试这个:

Add-TfsPendingChange -Edit -Item $PathToFolderToCheckout -Recurse 2>&1 >$null

2>&1参数将stderr重定向到stdout,而>$null参数将stdout重定向到空,因此不会显示任何内容。

或者,如果您只想隐藏发送到stderr的数据,请仅重定向它:

Add-TfsPendingChange -Edit -Item $PathToFolderToCheckout -Recurse 2>$null

我不使用TFS,所以无法直接测试您的命令。您能否向我们展示一张屏幕截图来说明情况? - aphoria

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接