热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PowerShell在SharePoint2010自动化部署中的应用(1)代码获取

由于项目需要,要把项目组成员中每天的工作整合到一起。每天手动部署很是费时费力。于是有了是否能利用PowerShell进行自动化部署的想法,正好也有机会学

由于项目需要,要把项目组成员中每天的工作整合到一起。每天手动部署很是费时费力。于是有了是否能利用PowerShell进行自动化部署的想法,正好也有机会学习一下PowerShell。

 

先交代一下项目背景,这个项目是SharePoint 2010的项目,所有功能都是通过VS2010 生成的wsp包部署到服务器的。项目的代码由公司TFS管理,咱一小程序员,没有任何管理权限(只能check in/out)。

 

初步想法是代码获取到开发服务器,编译,执行更新脚本更新开发服务器上的当前版本。以后可以扩展为本地获取,编译,上传,远程执行(PowerShell2的新功能)。按照这个逻辑将功能细化为:代码获取、代码编译打包、项目部署、整合。

 

下面我就按照这个细化的逻辑逐条说明:

1. 代码获取

     根据网上找到的资料,可以有3种途径

     A.VS2010 U版集成了访问TFS的命令行工具。功能的实现是通过TF.exe命令行程序提供,没有提供PowerShell编程接口,虽说PowerShell也可以调用,但在异常处理和信息的交互上不好处理。    

   B.微软官方提供的TFS管理工具包Team Foundation Server Power Tools September 2010,目前最新的版本是September2010(下载)

          这个应该是官方推荐的方法,值得一提的是该工具包不光提供了命令行程序,还通过PowerShell的Cmdlets提供了基本的版本控制命令。

     C.通过PowerShell直接调用TFS的对象。这个属于终极方法了,这个要是都不能实现你的功能,就给微软的产品组发信吧,呵呵。 

 

这3种方法中方法A是通过命令行程序实现的,没有提供PowerShell编程接口。方法B是微软提供的管理工具包,应该是官方推荐的方法,这里有一篇介绍http://archive.cnblogs.com/a/1841403/,不多说。我这里说说方法C。

 

下面列出了一些基本方法,更多的说明可以查MSDN 

 

代码

#获取授权。密码如果要保存的话,注意加密,方法网上有很多“http://www.brangle.com/wordpress/2009/08/pass-credentials-via-powershell/”
$cer = Get-Credential

#Team Project Collection全路径,注意不光要提供TFS Server的URL还要包括Project Collection的名称
$srv = "http://TFSServer/tfs/ProjectCollection"

#创建TFS 对象模型
$tfs = New-Object Microsoft.TeamFoundation.Client.TeamFoundationServer($srv, $cer);

#加载客户端Workspace的相关assembly
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.VersionControl.Client")

#获取workspace客户端服务对象
$vs = $srv.GetService("Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer");

#获取工作区
$ws = $vs.GetWorkspace("[工作区名称]","工作区所有者");

#项目路径
$projectPath="$/Projects/ProjectA”

#获取项目类型
$request = New-Object Microsoft.TeamFoundation.VersionControl.Client.GetRequest($projectPath,[Microsoft.TeamFoundation.VersionControl.Client.RecursionType]::Full,[Microsoft.TeamFoundation.VersionControl.Client.VersionSpec]::Latest);

#获取项目
$getStatus = $ws.Get($request,([Microsoft.TeamFoundation.VersionControl.Client.GetOptions]::GetAll));

 

除了上面这样的调用方法,网上还有人利用PowerShell脚本语言的动态特性,把VersionControl,WorkitemTracking动态的添加到自定义对象上,方便以后调用。

 

代码

#function defination
function get-tfs (
[string]
$serverName = $(Throw 'serverName is required')
)
{
# load the required dll
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Client")

$propertiesToAdd = (
('VCS', 'Microsoft.TeamFoundation.VersionControl.Client', 'Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer'),
('WIT', 'Microsoft.TeamFoundation.WorkItemTracking.Client', 'Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore'),
('BS', 'Microsoft.TeamFoundation.Build.Common', 'Microsoft.TeamFoundation.Build.Proxy.BuildStore'),
('CSS', 'Microsoft.TeamFoundation', 'Microsoft.TeamFoundation.Server.ICommonStructureService'),
('GSS', 'Microsoft.TeamFoundation', 'Microsoft.TeamFoundation.Server.IGroupSecurityService')
)

# fetch the TFS instance, but add some useful properties to make life easier
# Make sure to "promote" it to a psobject now to make later modification easier
[psobject] $tfs = New-Object Microsoft.TeamFoundation.Client.TeamFoundationServer([String]$serverName, (New-Object Microsoft.TeamFoundation.Client.UICredentialsProvider));
$tfs.EnsureAuthenticated();
foreach ($entry in $propertiesToAdd) {
$scriptBlock = '
[System.Reflection.Assembly]
::LoadWithPartialName("{0}") > $null
$this.GetService([{1}])
'
-f $entry[1],$entry[2]
$tfs | add-member scriptproperty $entry[0] $ExecutionContext.InvokeCommand.NewScriptBlock($scriptBlock)
}
return $tfs
}

#variable

#Team Project Collection全路径,注意不光要提供TFS Server的URL还要包括Project Collection的名称
$srv = "http://TFSServer/tfs/ProjectCollection"

#创建TFS 对象模型
$tfs = get-tfs("http://TFSServer/tfs/ProjectCollection")

#直接获取Workspace对象
$ws = $tfs.VCS.GetWorkspace("[工作区名称]","工作区所有者");

  

代码获取这一部分其实很通用,只要是去TFS里面抓代码都能用到,后面我们讲的自动化编译和打包会逐渐的和SharePoint结合起来。(未完)

 


转载于:https://www.cnblogs.com/crazysharepoint/archive/2010/11/12/autodeployment1.html


推荐阅读
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • MVC设计模式的介绍和演化过程
    本文介绍了MVC设计模式的基本概念和原理,以及在实际项目中的演化过程。通过分离视图、模型和控制器,实现了代码的解耦和重用,提高了项目的可维护性和可扩展性。详细讲解了分离视图、分离模型和分离控制器的具体步骤和规则,以及它们在项目中的应用。同时,还介绍了基础模型的封装和控制器的命名规则。该文章适合对MVC设计模式感兴趣的读者阅读和学习。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
author-avatar
空空空空轨
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有