Powershell&TFS_Part 1

目录

  • 目录
  • 前言
  • TFS
    • 对象模型
  • Powershell
    • Powershell面向对象
    • Powershell默认会在PC中设置执行脚本权限
    • 调试脚本
      • 断点
      • Step
  • Microsoft Visual Studio Team Foundation Server 2012 Power Tools
    • 程序集
  • 连接到TFS
    • 获取TPCList
    • 获取TPC中的team project
    • 获取workspace
    • 获取workItemStore
    • 访问workitem
    • 获取workItem中的项目
    • 获取指定TPC的更改集
    • URIURLURN的区别
  • 最后

前言

憋了这么久,Powershell主题终于开搞了。因为工作需要,Powershell可以说是半路出家边学边卖,所以这个主题可能没有Python和Linux那样分类、归纳得太好。而且我们跳过语法,直接应用开搞。语法什么的,就在一个个脚本中稍带介绍吧。

TFS

Team Fundation Server:是一种为Microsoft产品提供源代码管理、数据收集、报告和项目跟踪,和为协作软件开发的项目。 可作为独立的软件,或Visual Studio Team System(VSTS)服务器端。
TFS包含
1. 团队项目集合:Team Foundation Server中所有数据的主要组织单位。集合可以包含一个或多个团队项目。
2. 团队项目:团队用于共享开发特定软件技术或产品所需的团队活动的中心点。
3. 应用层、数据层、客户端层:组成Team Foundation Server的逻辑层。这些层可能全部部署在同一台物理计算机上,也可能安装在多台计算机上。

对象模型

通过Team Foundation Server的对象模型,Team Foundation的逻辑层可以进行通信交互,软件集成商及其他公司可以自定义和扩展Team Foundation Server功能。
Team Foundation Server对象模型是一组包含下列接口的托管 API
▲Team Foundation Framework 服务
◆管理服务
◆事件服务
◆团队项目集合服务
◆注册服务
◆安全性服务
◆位置服务
◆标识管理服务
◆目录服务
◆作业服务
◆属性服务
▲版本控制对象模型
▲工作项跟踪对象模型
▲Team Foundation Build 对象模型
API的动态链接库存放路径
D:\Visual Studio 2012\Microsoft Visual Studio 11.0\Common7\IDE\ReferenceAssemblies\v2.0

Powershell

Windows PowerShell是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用.NET Framework的强大功能。PowerShell v3采用新的cmdlet让管理员能够更深入到系统进程中,这些进程可以制作成可执行的文件或脚本(script)。一条cmdlet是一条轻量命令,Windows PowerShell运行时间在自动化脚本的环境里调用它。Cmdlet包括显示当前目录的Get-Location,访问文件内容的Get-Content和结束运行进程的Stop-Process。
一些Cmdlet的例子
查看可以指令get-command *-service
查看指令帮助手册get-help [commands]
查看对象的成员信息get-service | get-member

Powershell面向对象

Powershell命令的输出即为对象。可以将输出对象发送给另一条命令以作为其输入。因此,Windows PowerShell为曾使用过其他外壳程序的人员提供了熟悉的界面,同时引入了新的、功能强大的命令行范例。通过允许发送对象(而不是文本),它扩展了在命令之间发送数据的概念。

Powershell默认会在PC中设置执行脚本权限

为防止恶意脚本的执行,PowerShell有一个执行策略,默认情况下,这个执行策略被设为受限的(Restricted),意味着PowerShell脚本无法执行,你可以使用下面的cmdlet命令获取当前的执行策略:
Get-ExecutionPolicy
你可以选择使用的执行策略有
Restricted (脚本不能运行)
RemoteSigned (本地创建的脚本可以运行,但从网上下载的脚本不能运行,除非它们拥有由受信任的发布者签署的数字签名)
AllSigned (仅当脚本由受信任的发布者签名才能运行)
Unrestricted (脚本执行不受限制,不管来自哪里,也不管它们是否有签名都能执行)。
你可以使用下面的cmdlet命令设置PowerShell的执行策略
Set-ExecutionPolicy <PolicyName>

调试脚本

断点

运行一个可能有BUG的PowerShell脚本时,保护自己的方法就是在脚本的关键位置插入断点,插入断点最简单的方法是根据行号插入。
插入断点

New-PSBreakpoint -Script C:\Scripts\a.ps1 -Line 10 

你也可以将断点绑定到变量上,如果你希望你的脚本任何时候都可以修改a$的内容,可以使用下面的命令:

New-PSBreakpoint -Script C:\scripts\a.ps1 -variables a #注意,我在变量名后并没有包括美元符号。

可以和PSBreakpoint一起使用的动词包括New,Get,Enable,Disable和Remove。

Step

调试一个脚本时,有时可能需要逐行运行脚本,这时你可以使用Step-Into cmdlet命令,它会使脚本一行一行地执行,不管有没有设置断点,如果你想从这种步进式运行模式退出来,使用Step-Out cmdlet命令即可,但需要注意的是,使用Step-Out cmdlet命令后,断点仍然有效。
顺便说一句,如果你的脚本使用了函数,你可能对Step-Out cmdlet更感兴趣,Step-Out的工作方式和Step-Into一样,不过,如果Step-Out调用了一个函数,Windows不会逐步执行,整个函数将会一次性执行。

Microsoft Visual Studio Team Foundation Server 2012 Power Tools

Power Tools可以使用Powershell来管理TFS,是连接TFS的必备工具。
下载地址:https://visualstudiogallery.msdn.microsoft.com/b1ef7eb2-e084-4cb8-9bc7-06c3bad9148f
Windows PowerShell Cmdlets:
This tool provides a Windows PowerShell interface that supports basic version control commands and a pipeline and glue to enable scripting.
Work Item Templates:
A plug-in to Visual Studio, this tool provides an add-in to the Team menu and a new section on the Work Items page in Team Explorer. Use this tool to create new work items with default values, or to easily apply values to existing work items.
Power Tools支持的指令集

Command Description
addprojectportal Add or move portal for an existing team project
addprojectreports Add or overwrite reports for an existing team project
annotate Display line-by-line change information for a file
bind Convert VSS-bound solutions into TFS-bound solutions
branches Convert, reparent, list, and update branches
builddefinition Clone, Diff or Dump build definitions
buildprocesstemplate Manage build process templates
connections Modifies Team Explorer client connection settings
createteamproject Create a team project
getcs Get only the changes in a particular changeset
online Pend adds, edits, deletes to writable files
query Query for work items
review Review (diff/view) workspace changes
scorch Ensure source control and the local disk are identical
searchcs Search for changesets matching specific criteria
treeclean Delete files and folders not under version control
unshelve Unshelve into workspace with pending changes
uu Undo changes to unchanged files in the workspace
workitem Create, update, or view work items

安装Power Tools后添加Snapin
Snapin是一组.NET程序集,或者程序集集合,其中包含了Cmdlets、提供程序、类型扩展和格式元数据。

Add-PSSnapin Microsoft.TeamFoundation.PowerShell 

查看Snapin指令集

Get-Command -Module Microsoft.TeamFoundation.PowerShell 

程序集

程序集是 .NET Framework编程的基本组成部分,类似于API、动态链接库。
1. 程序集(assembly)是一个或多个托管模块,以及一些资源文件的逻辑组合。
2. 程序集是组件复用,以及实施安全策略和版本策略的最小单位。
3. 程序集是包含一个或者多个类型定义文件和资源文件的集合。在程序集包含的所有文件中,有一个文件用于保存清单。(清单是元数据部分中一组数据表的集合,其中包含了程序集中一部分文件的名称,描述了程序集的版本,语言文化,发布者,共有导出类型,以及组成该程序集的所有文件)。
4. 作为一个单元进行版本控制和部署的一个或多个文件的集合。程序集是 .NET Framework应用程序的主要构造块。所有托管类型和资源都包含在某个程序集内,并被标记为只能在该程序集的内部访问,或者被标记为可以从其他程序集中的代码访问。程序集在安全方面也起着重要作用。代码访问安全系统使用程序集信息来确定为程序集中的代码授予的权限集。

连接到TFS

在安装了Power Tools之后,只需要执行两条指令:TFS2012修复了64位机加注册表的BUG。

PS C:\Users\JMilk.fan> $serverUrl = '[TFSURL]'
PS C:\Users\JMilk.fan> Get-TfsServer -Name $serverUrl

Team Project Collections:团队项目集合(connect to ream foundation server),一个Team Project Collection可以包含很多个Team Project,类似于VS解决方案与项目之间的一对多关系。

获取TPCList

Team Project Collections:团队项目集合(connect to ream foundation server),一个Team Project Collection可以包含很多个Team Project,类似于VS解决方案与项目之间的一对多关系。

[Reflection.Assembly]::Load("Microsoft.TeamFoundation.Client, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
$instanceBaseUrl = "TFSURL";

$tfsServer = New-Object Microsoft.TeamFoundation.Client.TfsConfigurationServer $instanceBaseUrl;

# 调用 ITeamProjectCollectionService
$tpcSvc = $tfsServer.GetService([Microsoft.TeamFoundation.Framework.Client.ITeamProjectCollectionService]);

foreach($co in $tpcSvc.GetCollections())
{
    Write-Host $co.Name    #打印TPC内的项目名称
} 

获取TPC中的team project

[Reflection.Assembly]::Load("Microsoft.TeamFoundation.Client, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");

$url = New-Object -TypeName Uri -ArgumentList "TFSURL"

$project = New-Object -TypeName Microsoft.TeamFoundation.Client.TfsTeamProjectCollection -ArgumentList $url

Get-TfsChildItem -Server $project | Select ServerItem, CheckinDate 

获取workspace

加载对象模型程序集:类似一般项目添加引用,不加载无法使用程序集的属性和方法。
LoadWithPartialName(”)函数,需要传入程序集的dll文件名字或文件全路径。如果传入的是dll文件名字,则会先在当前启动路径当中查找。

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Client")

创建对象

$url = New-Object -TypeName Uri -ArgumentList "TFSURL"
$project = New-Object -TypeName Microsoft.TeamFoundation.Client.TfsTeamProjectCollection -ArgumentList $url
Get-TfsWorkspace -Server $project 

获取workItemStore

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Client")
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.WorkItemTracking.Client")
$teamProjectCollection = [Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection("TFSURL")
$ws = $teamProjectCollection.GetService([type]"Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore")

访问workitem

使用TFS API编程访问TFS服务器中workitem,首先要明确TFS服务器的URL,TFS服务器访问就像访问网站。需要通过一个网络地址。
workitem相关程序集的组织结构

Microsoft.TeamFoundation.Client.TfsTeamProjectCollection;
Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore;
Microsoft.TeamFoundation.WorkItemTracking.Client.Project;
Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemType;
Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItem;

TfsTeamProjectCollection像是一座物理建筑,它有门牌编号,我们通过门牌号码找到该建筑。
WorkItemStore像是图书馆,里边存放各种类别,各种年级的书籍。
Project像是年级的概念,每个年级是隔离的,每个年级也都有不同类别的书,比如各年级都有语文,数学,英语等类别的书籍。
WorkItemType是类别的概念,比如数学,英语。每个Project有不同WorkItemType的工作项。如一年纪有语文学习的书籍,数学学习的书籍;二年级也有语文类的书籍,数学类的书籍。

获取workItem中的项目

查询TFS中的工作项是通过SQL语句Query出来的,返回结果是Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemCollection.

$incidents = $ws.Query(@"
SELECT [System.Id]
FROM WorkItems
WHERE
[System.WorkItemType] = 'RDIncident'  AND  [System.State] = 'Triage' AND   [System.Title] Contains 'Rma:'
"@)

获取指定TPC的更改集

[Reflection.Assembly]::Load("Microsoft.TeamFoundation.Client, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");

$url = New-Object -TypeName Uri -ArgumentList "TFSURL"

$co = New-Object -TypeName Microsoft.TeamFoundation.Client.TfsTeamProjectCollection -ArgumentList $url

Get-TfsChangeset -Server $co –Latest 

URI\URL\URN的区别

URI:是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。
URL:是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。
URN:uniform resource name,统一资源命名,是通过名字来标识资源,比如jmilk@fan.com。
也就是说,URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI。

最后

因为工作的保密性,所以不能拿手上项目的代码来充当例子,就在网上找到了一些相似的代码来作说明。:-(

Jmilk

时间: 2024-11-08 23:23:34

Powershell&amp;TFS_Part 1的相关文章

Powershell&amp;TFS_Part 1

前言 憋了这么久,Powershell主题终于开搞了.因为工作需要,Powershell可以说是半路出家边学边卖,所以这个主题可能没有Python和Linux那样分类.归纳得太好.而且我们跳过语法,直接应用开搞.语法什么的,就在一个个脚本中稍带介绍吧. TFS Team Fundation Server:是一种为Microsoft产品提供源代码管理.数据收集.报告和项目跟踪,和为协作软件开发的项目. 可作为独立的软件,或Visual Studio Team System(VSTS)服务器端. T

使用AppVeyor CI 和PowerShell部署应用概述

开头语 关于如何为单一的ASP.NET web应用程序设置持续集成,你可以找到很多文章.这些文章都写到如何通过Web Deploy来构建完美的环境来部署简单.只需稍作修改VS.NET模板的web应用程序.任何东西在这一完美环境下都能顺利进行. 但是,真正部署应用程序的话却并非易事.总是有问题不断出现在以下情况中:当需要在注册表(Registry)或自定义文件夹中配置设置,或者你需要部署到Web集群时. 本文中,我们通过使用PowerShell远程处理(PowerShell remoting)和A

超越PowerShell PowerGUI使用心得

我们知道PowerShell将成为cmd的继任者,微软已经将其集成到Windows Server 2008和Windows 7中.不知道大家有没有注意到,在Windows 7中除了PowerShell之外,还有一个名为PowerGUI的工具,从名称上看其实它就是基于图形用户界面的PowerShell,是一款第三方PowerShell增强软件.当然,也不仅仅如此.因为PowerGUI提供了高效率的NET风格的脚本开发环境,而且也便于脚本的调试,这对于一个PowerShell脚本开发者来说,使用Po

如何利用PowerShell分析SharePoint WebApplication体系结构

之前一篇文章<两张图看清SharePoint 2013 Farm 逻辑体系结构>谈到Web Application,Content Database,Site Collection的关系.有了这个逻辑结构图之后,这篇文章将使用PowerShell,来更加直观的展现SharePoint WebApplication的体系结构. SharePoint WebApplication Structure 从上图可以看出,一个WebApplication可以包含多个Content Database,可以

PowerShell如何批量签入SharePoint Document Library中的文件

由于某个文档库设置了编辑前签出功能,导致批量导入文件时这些文件默认的状态都被签出了.如果手动签入则费时费力,故利用PowerShell来实现批量签入Document Library中的文件. Resolution Add-PSSnapin Microsoft.SharePoint.PowerShell function CheckInDocument([string]$url){ $spWeb=Get-SPWeb $url $spDocument=$spWeb.Lists.TryGetList(

如何通过PowerShell获取Site Collection下被签出的文件

由于权限的设置,当文件被签出时导致别人不可见了,这对校验文件个数的人来说着实是件烦恼的事.幸好利用PowerShell,可以获取Site Collection下被签出的文件. Resolution Add-PSSnapin Microsoft.SharePoint.PowerShell function GetAllCheckOutFiles([string]$siteUrl){ $spSite=Get-SPSite $siteUrl $spSite.AllWebs|%{ $_.Lists|wh

如何通过Windows 8 Powershell创建USB引导盘

大家可能已经比较熟悉了制作Windows USB启动盘进行操作系统引导和安装的方法,该方法一般需要第三方的工具例如UltraISO,Windows 7 USB Tool或者RM等加载安装ISO映像文件,拷贝安装Binary然后再用Diskpart磁盘管理工具封装启动分区等. 现在Windows8中,USB的启动盘制作更加简单,可以不再需要第三方工具或者Diskpart磁盘分区工具了,Windows 8本身就可以加载ISO或VHD(虚拟磁盘). 过去,采用的方式流程为:Diskpart分区,Lis

为 windows 服务器安装 PowerShell 管理库

最近在摸索一种命令方式备份Hyper-V里的虚拟机,因为平时备份都是手动关闭VM,然后Export,这样浪费很多的时间,于是折腾了下,想用命令实现自动化完成VM的备份. 查阅了下资料,看到了一个开源的软件能够用此Powershell Management Library里的命令完成大部分的虚拟机管理操作,在这里分享此网站: http://pshyperv.codeplex.com/ 但是在Import 此Module时出现如下错误: Import-Module : There were erro

2008R2core模式下安装PowerShell[为企业部署Windows Server 2008系列十一]

windows server 2008 R2版本发布一段时间了,再三斟酌后还是决定将2008R2的应用也写进本次2008 主题中来. 很多朋友喜欢core模式,甚至喜欢命令行,那么安装了core模式的你,再给core模式 的2008R2安装上PowerShell 那真是将命令行发挥到极致了(帅呆了!!). 对,我也是这样想 的! 那么下面我们一起来看看如何在core模式下安装PowerShell: 第一步:用下面的命 令列出当前服务器的功能和状态: DISM /Online /Get-Featu