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

时间:2013-02-07 10:29:31

标签: powershell tfs tfsbuild tfs2012 powershell-v3.0

我修改了自定义构建流程模板,以便在构建服务器上执行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.ProcessWrapper.Start()   在   Microsoft.TeamFoundation.Build.Workflow.Activities.InvokeProcess.InvokeProcessInternal.RunCommand(AsyncState   国家)   System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr的   md,Object [] args,Object server,Object []& outArgs)at   System.Runtime.Remoting.Messaging.StackBuilderSink.AsyncProcessMessage(即时聊天   msg,IMessageSink replySink)

     

在[0]处重新抛出异常:at   System.Runtime.Remoting.Proxies.RealProxy.EndInvokeHelper(消息   reqMsg,Boolean bProxyCase)at   System.Runtime.Remoting.Proxies.RemotingProxy.Invoke(Object NotUsed,   MessageData&安培; msgData)at System.Func 2.EndInvoke(IAsyncResult result) at System.Activities.AsyncCodeActivity 1.System.Activities.IAsyncCodeActivity.FinishExecution(AsyncCodeActivityContext)   context,IAsyncResult result)at   System.Activities.AsyncCodeActivity.CompleteAsyncCodeActivityData.CompleteAsyncCodeActivityWorkItem.Execute(ActivityExecutor   执行者,BookmarkManager bookmarkManager)

     

内部异常详情:

     

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

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

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

之前有其他人遇到过此问题吗?

非常感谢

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:0)

在我的情况下,在部署Windows Management Framework 3.0后发生了同样的错误。 它是通过重新启动构建控制器和代理来解决的。