由于项目需要,要把项目组成员中每天的工作整合到一起。每天手动部署很是费时费力。于是有了是否能利用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

PowerShell在SharePoint 2010自动化部署中的应用(1)--代码获取相关推荐

  1. PowerShell 在 SharePoint 2010 自动化部署中的应用(2)-编译打包

    上次说到通过PowerShell将项目代码从TFS服务器拿到本地,这次再说说编译和打包的经历 2 编译打包 我相信做过SharePoint2007的都有过打包时恶梦般的经历,Cabinet SDK,V ...

  2. SharePoint 2010 Webpart 部署 报错的解决方法

    用VS 2010  部署时候提示如下错误 部署步骤  激活功能   中出现错误 的功能未安装在此服务器场中,无法添加到该范围. 解决方法: 系统设置--解决方案管理 发现自己的webpart项目状态时 ...

  3. 在 SharePoint 2010 中访问数据

    数据访问的关键方法有哪些? | 使用查询类 | 使用 SPQuery | 使用 SPSiteDataQuery | 使用 LINQ to SharePoint | LINQ to SharePoint ...

  4. 在SharePoint 2010系统中安装RBS FILESTREAM Provider

    在SharePoint 2010系统中安装RBS FILESTREAM Provider 这两天在研究怎么写一个RBS Provider,可惜文档实在是很缺乏,基本上除了一篇Spec之外,就只有SQL ...

  5. 在SharePoint 2010中创建网站的权限级别

    转:http://www.360sps.com/Item/CreatePermissionLevels.aspx 权限级别是SharePoint 2010新增加的功能,使我们对权限的设置又提高了一个层 ...

  6. 在Sharepoint 2010中使用ReportViewer控件展示RDLC报表

    微软的Visual studio提供了ReportViewer控件以及RDLC报表设计工具.下文主要介绍如何在Sharepoint 2010项目开发中使用ReportViewer和RDLC生成项目报表 ...

  7. SharePoint 2010中的内容类型集线器 - 内容类型发布与订阅

    原文地址:http://www.chakkaradeep.com/post/SharePoint-2010-Content-Type-Hubs-e28093-Publish-and-Subscribe ...

  8. F5提高Microsoft SharePoint 2010平台的灵捷 度、性能和安全性

    Microsoft® SharePoint® Server 2010为全球各地的企业实现了创新的.智能的业务协作.企业采用Microsoft SharePoint无缝地连接用户.团队和知识.Share ...

  9. sharepoint 2010新功能预览2-Fast Search

    这次在微软的SharePoint 2010 Ignite培训中着重介绍了sharepoint 2010中的Fast Search功能,这是微软花了12亿美元收购了挪威OSLO搜索技术公司Fast Se ...

最新文章

  1. conj--复数的共轭值
  2. java合并整形_java中2个int合并成一个long
  3. Python简单前序创建二叉树及二叉树的遍历
  4. Git之变基方式Rebase的使用
  5. 字典树-01字典树基础
  6. python中random函数用法_random函数的用法
  7. 识别产品外观的合格软件_你还在犹豫?外观检测设备使用已成主流!
  8. 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串 (转)...
  9. python可变类型和不可变深浅拷贝类型_理解python可变类型vs不可变类型,深拷贝vs浅拷贝...
  10. 拓端tecdat|R语言时间序列数据指数平滑法分析交互式动态可视化
  11. indesign缩放图片被切割_InDesign怎么改变图片的大小
  12. 适合新手——MySQL中基于SQL语言增删改查等基础的练习大汇总
  13. 计算机控制系统与常规仪表控制系统的主要异同点,计算机控制技术复习资料-20210711112641.doc-原创力文档...
  14. JAVA类计算机专业毕业设计题目
  15. Serverless 极致弹性解构在线游戏行业痛点
  16. [Vmware]VCSA部署及遇到的问题
  17. Codeforces - DZY Loves Sequences
  18. a或b search vim_vim入门,进阶与折腾
  19. 思科模拟器EVE-NG如何导入镜像
  20. Fixcel电子表单——Excel导入

热门文章

  1. 正态分布的前世今生:最小二乘法
  2. 把图片隐藏起来的html代码,教你把图片、文档、影片等隐藏起来
  3. android 中的 gridview 的用法
  4. mysql innodb缓冲池_InnoDB 缓冲池
  5. C语言:计算器程序。用户输入运算数和四则运算符,输出计算结果
  6. mysql innodb monitor_mysql:innodb monitor(show engine innodb status)探秘
  7. PAT (Basic Level) Practice1003 我要通过!
  8. Dediprog EM100Pro-G2 安装与配置教程
  9. 境外WiFi市场持续升温2016年或迎普及元年
  10. 5.2使用select,poll