Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于生成TFS定义的PowerShell脚本_Powershell_Tfs_Tfsbuild_Tfs Sdk_Tfs 2010 - Fatal编程技术网

用于生成TFS定义的PowerShell脚本

用于生成TFS定义的PowerShell脚本,powershell,tfs,tfsbuild,tfs-sdk,tfs-2010,Powershell,Tfs,Tfsbuild,Tfs Sdk,Tfs 2010,我正在尝试创建一个PS脚本来创建TFS生成定义文件。我发现下面的例子。但是,它不能正常工作。我试着按照这个例子创建一个脚本,但没有成功。感谢您提供任何帮助,以确定以下脚本不起作用的原因,并提供有关如何创建PS脚本或示例的指导 param( [Parameter(Mandatory=$true)] [string] $buildName, [string] $serverName="http://tfs:80/",

我正在尝试创建一个PS脚本来创建TFS生成定义文件。我发现下面的例子。但是,它不能正常工作。我试着按照这个例子创建一个脚本,但没有成功。感谢您提供任何帮助,以确定以下脚本不起作用的原因,并提供有关如何创建PS脚本或示例的指导

param(
             [Parameter(Mandatory=$true)]
             [string] $buildName,
        [string] $serverName="http://tfs:80/",
        [string] $teamProject="MyProject"
)

# VS 2010
# $tfsClientVersion = ", Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
# VS 2008
$tfsClientVersion = ", Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"

[void][System.Reflection.Assembly]::Load("Microsoft.TeamFoundation.Client"+$tfsClientVersion)
[void][System.Reflection.Assembly]::Load("Microsoft.TeamFoundation.Build.Client"+$tfsClientVersion)
[void][System.Reflection.Assembly]::Load("Microsoft.TeamFoundation.VersionControl.Client"+$tfsClientVersion)

$tfs = [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory]::GetServer($serverName) 
$versionControl = $tfs.GetService([Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer]) 
$buildserver = $tfs.GetService([Microsoft.TeamFoundation.Build.Client.IBuildServer])

$def = $buildserver.CreateBuildDefinition($teamProject)
$def.Name = "$buildName"
$def.Description = "Created by Powershell script "
$agentSpec = $buildServer.CreateBuildAgentSpec($teamProject)
$agentSpec.Name = "build"
$agent = $buildServer.QueryBuildAgents($agentSpec).Agents[0]
$def.DefaultBuildAgent = $agent
$def.DefaultDropLocation = "\\build\PrivateDrops"
$def.RetentionPolicies.Item('Failed').NumberToKeep = 5
$def.RetentionPolicies.Item('Stopped').NumberToKeep = 0 #None
$def.RetentionPolicies.Item('PartiallySucceeded').NumberToKeep = 5
$def.RetentionPolicies.Item('Succeeded').NumberToKeep = 5
$def.Save()

您似乎试图使用2008 assembly和aproach在tfs 2010上创建构建定义,如果没有提供输出或错误,很难说出确切的问题,但很少有什么突出的:

  • 使用与tfs服务器匹配的程序集版本(如您标记问题tfs2010)
  • 对于2010年,使用api的建议方法是从uri创建TfsTeamProjectCollection对象,从那个里您将像现在一样使用get服务
  • 您的代码建议用于2008年,tfs构建在2010年的工作方式发生了重大变化,特别是DefaultBuildAgent属性已过时且未使用,代理由构建控制器分配,请使用以下内容作为脚本的参考

我从基于示例的PS脚本开始$process=$def.ProcessParameters$def.ProcessParameters=$process$def.RetentionPolicyList.Clear()$def.Save()这给了我一个错误,用“0”参数说“调用“Save”时出现异常:”TF42073:该值不能为null(参数名称:process)“我在这里遗漏了什么?您是否获得并分配了我链接的文章中定义的流程模板?您可能需要做更多的工作才能获得自定义模板//获取默认模板var defaultTemplate=buildServer.QueryProcessTemplates(teamProject).Where(p=>p.TemplateType==ProcessTemplateType.default).First();buildDefinition.Process=defaultTemplate;是的,我能让它工作。我还有几个问题,下面的帖子回答了。