当在变量中捕获输出时,PowerShell会禁止TF命令UI

时间:2016-03-04 10:47:30

标签: powershell tfs tf-cli

当我执行PowerShell脚本时,我遇到了一种非常奇怪的行为。我想运行tf命令的子命令。此可执行文件通常用作控制台应用程序,但子命令tf resolve命令显示一个对话框,我想看到它。

有些PowerShell Guru可以解释一下,用例1b& 2B?或者你有一个暗示这里的问题是什么?

备注:如果找不到,请根据您的安装修改VS版本。我使用的是VS 2015,PowerShell 4,Windows 8.1。

用例1a: 显示对话框(一切正常)

$tfCommand = "${env:ProgramFiles(x86)}\Microsoft Visual Studio 14.0\Common7\IDE\tf.exe"
& $tfCommand resolve

用例1b: 不显示对话框(WTF?!)

更改: STDOUT保存在变量

$tfCommand = "${env:ProgramFiles(x86)}\Microsoft Visual Studio 14.0\Common7\IDE\tf.exe"
$someVariable = & $tfCommand resolve

用例2a: 显示对话框(一切正常)

$tfCommand = "${env:ProgramFiles(x86)}\Microsoft Visual Studio 14.0\Common7\IDE\tf.exe"

function callTfResolve($tfCommand) { 
   & $tfCommand resolve 
}

CallTfResolve $tfCommand

用例2b: 不显示对话框(WTF?!)

更改: CallTfResolve的返回值保存在变量

$tfCommand = "${env:ProgramFiles(x86)}\Microsoft Visual Studio 14.0\Common7\IDE\tf.exe"

function callTfResolve($tfCommand) { 
   & $tfCommand resolve 
}

$someVariable = CallTfResolve $tfCommand

2 个答案:

答案 0 :(得分:1)

尝试将 / prompt 添加到命令行。

使用对话框界面显示

$tfexe = "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\TF.exe"
$tfscollection = "http://tfs-isl01:8080/tfs/mepcollection"
$arglist = "workspaces /s:$tfscollection" 
Set-ExecutionPolicy Unrestricted
Start-Process $tfexe -ArgumentList $arglist   -RedirectStandardOutput C:\NewWS.log -RedirectStandardError c:\wserror.log -Wait
$arglist = "workspace /new /permission:Public /prompt"
Start-Process $tfexe -ArgumentList $arglist -RedirectStandardOutput C:\NewWS.log

不显示对话框UI

$tfexe = "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\TF.exe"
$tfscollection = "http://tfs-isl01:8080/tfs/mepcollection"
$arglist = "workspaces /s:$tfscollection" 
Set-ExecutionPolicy Unrestricted
Start-Process $tfexe -ArgumentList $arglist   -RedirectStandardOutput C:\NewWS.log -RedirectStandardError c:\wserror.log -Wait
$arglist = "workspace /new /permission:Public"
Start-Process $tfexe -ArgumentList $arglist -RedirectStandardOutput C:\NewWS.log

感谢http://www.wintellect.com/devcenter/jrobbins/working-offline-with-tfs

希望这能解决您的问题

答案 1 :(得分:0)

因此,当我使用ProcessStartInfo创建流程并将RedirectStandardError设置为$ true时,行为看起来是相同的。

我认为tf命令的实现非常奇怪。就像是: "如果重定向流是TTY,那么如果没有显示它就会压制对话框。"

我可能必须在没有得到命令输出的情况下找到解决方案。