为什么执行PowerShell的自定义构建过程模板失败

Dew*_*ees 4 powershell tfs tfsbuild powershell-3.0 tfs2012

我已修改自定义构建过程模板以在构建服务器上执行Powershell.这样我就可以运行一些脚本来自动部署我们的SharePoint解决方案.一切都工作正常,直到我将构建服务器Powershell版本从2.0升级到3.0(这需要在我安装SCVMM Admin Console 2012时完成,而Powershell 3.0是先决条件).

在构建模板本身,我使用Microsoft.TeamFoundation.Build.Workflow.Activities.InvokeProcess工作流项来执行具有以下属性的PowerShell命令:

参数:String.Format("""&"{0}'-DropLocation'{1}'{2}""",ScriptFilename,BuildDetail.DropLocation,PostDropScript2Arguments)

FileName:"powershell"

OutputEncoding:System.Text.Encoding.GetEncoding(System.Globalization.CultureInfo.InstalledUICulture.TextInfo.OEMCodePage)

现在每次我尝试执行构建时,都会收到以下错误:

异常消息:找不到文件:PowerShell(类型FileNotFoundException)异常堆栈跟踪:服务器堆栈跟踪:
位于Microsoft.TeamFoundation.Build.Workflow.Activities.InvokeProcess的Microsoft.TeamFoundation.Build.Workflow.Activities.InvokeProcess.ProcessWrapper.Start() System.Runtime.Remoting.Messaging.StackBuilderSink.AsyncProcessMessage的System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md,Object [] args,Object server,Object []&outArgs)中的.InvokeProcessInternal.RunCommand(AsyncState state). (IMessage msg,IMessageSink replySink)

在[0]处重新抛出异常:在System.Run上的System.Runtime.Remoting.Proxies.RealProxy.EndInvokeHelper(Message reqMsg,Boolean bProxyCase),System.Runc上的System.Runtime.Remoting.Proxies.RemotingProxy.Invoke(Object NotUsed,MessageData&msgData)2.EndInvoke(IAsyncResult result) at System.Activities.AsyncCodeActivity1 System.Activities.AsyncCodeActivity.CompleteAsyncCodeActivityData.CompleteAsyncCodeActivityWorkItem.Execute(ActivityExecutor executor,BookmarkManager bookmarkManager)中的.System.Activities.IAsyncCodeActivity.FinishExecution(AsyncCodeActivityContext context,IAsyncResult result)

内部异常详情:

异常消息:系统找不到指定的文件(类型Win32Exception)异常堆栈跟踪:在Microsoft.TeamFoundation.Build.Workflow.Activities.InvokeProcess.ProcessWrapper.Start()的System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)中

似乎构建不再能够将"powershell"命令与实际的PowerShell文件链接起来.

我已经手动进入构建服务器并在命令行中键入"powershell",并按预期启动PowerShell.

还有其他人以前遇到过这个问题吗?

非常感谢

Bar*_*son 5

在工作流的invokeprocess步骤中将完整文件路径添加到powershell.exe,它应该始终有效(我不相信环境设置)并且知道,在您自己的帐户下登录服务器不等于构建在特定帐户下运行的服务器.

  • 谢谢你的回答.你提出了一些好处 - 有趣的是,我实际上已经设法让这个构建今天早上再次运行.我实际上唯一改变的是创建一个新的构建代理并获取构建定义以使用它然后它再次开始工作.我将尝试您明确定位工作流程中路径的建议,如果有效则将此标记为答案. (2认同)