当我执行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
答案 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,那么如果没有显示它就会压制对话框。"
我可能必须在没有得到命令输出的情况下找到解决方案。