设为首页 收藏本站
查看: 1513|回复: 0

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

[复制链接]

尚未签到

发表于 2015-9-24 10:56:50 | 显示全部楼层 |阅读模式
  由于项目需要,要把项目组成员中每天的工作整合到一起。每天手动部署很是费时费力。于是有了是否能利用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
  


DSC0000.gif DSC0001.gif 代码



#获取授权。密码如果要保存的话,注意加密,方法网上有很多“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结合起来。(未完)
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-118123-1-1.html 上篇帖子: SharePoint 2010 PowerShell 系列 下篇帖子: SharePoint自动化部署,利用PowerShell 导出/导入AD中的用户
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表