目录

前言

憋了这么久,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

Powershell&TFS_Part 1的更多相关文章

  1. 在PowerShell中使用curl(Invoke-WebRequest)

    前言 习惯了windows的界面模式就很难转去命令行,甚至以命令行发家的git也涌现出各种界面tool.然而命令行真的会比界面快的多,如果你是一个码农. situation:接到需求分析bug,需要访 ...

  2. Windows 7上执行Cake 报错原因是Powershell 版本问题

    在Windows 7 SP1 电脑上执行Cake的的例子 http://cakebuild.net/docs/tutorials/getting-started ,运行./Build.ps1 报下面的 ...

  3. <译>通过PowerShell工具跨多台服务器执行SQL脚本

    有时候,当我们并没有合适的第三方工具(大部分需要付费)去管理多台数据库服务器,那么如何做最省力.省心呢?!Powershell一个强大的工具,可以很方便帮到我们处理日常的数据库维护工作 .简单的几步搞 ...

  4. 利用PowerShell复制SQLServer账户的所有权限

    问题 对于DBA或者其他运维人员来说授权一个账户的相同权限给另一个账户是一个很普通的任务.但是随着服务器.数据库.应用.使用人员地增加就变得很枯燥乏味又耗时费力的工作.那么有什么容易的办法来实现这个任 ...

  5. PowerShell 数组以及XML操作

    PowerShell基础 PowerShell数组操作 将字符串拆分成数据的操作 cls #原始字符串 $str = "abc,def,ghi,mon" #数据定义 #$StrAr ...

  6. linux下mono,powershell安装教程

    1简介 简单来说pash就是bash+powershell 2官网 https://github.com/Pash-Project/Pash 3下载fedora20---lxde桌面---32位版. ...

  7. Windows下PowerShell监控Keepalived

    一.背景 某数据库服务器为CentOS,想要监控Keepalived的VIP是否有问题,通过邮件进行报警,但这台机器不能上外网,现在只能在Windows下通过PowerShell来完成发邮件预警. 二 ...

  8. 使用PowerShell收集多台服务器的性能计数器

    写在前面     当管理多台Windows Server服务器时(无论是DB.AD.WEB以及其他的应用服务器),当出现性能或其他问题后,参阅性能计数器都是一个非常好的维度从而推测出问题可能出现的原因 ...

  9. 野路子出身PowerShell 文件操作实用功能

    本文出处:http://www.cnblogs.com/wy123/p/6129498.html 因工作需要,处理一批文件,本想写C#来处理的,后来想想这个是PowerShell的天职,索性就网上各种 ...

随机推荐

  1. Postgresql重安装报错The database cluster initialisation failed.

    之前安装过PostgreSQL-9.6.5,卸载后,重装PostgreSQL-9.1.3版本,报错. 清除注册表,删除postgres账户,清除垃圾后,再次安装仍然报错. 最后改变默认安装路径,神奇的 ...

  2. vue中使用better-scroll滚动条插件

    应用场景: overflow: hidden会让超出的部分隐藏,并且无法拖拽,所以可使用插件让长列表限定的区域滚动拖拽. 参考:https://zhuanlan.zhihu.com/p/2740702 ...

  3. flockfile, ftrylockfile, funlockfile - 为标准输入输出锁定文件 FILE

    SYNOPSIS 总览 #include <stdio.h> void flockfile(FILE *filehandle); int ftrylockfile(FILE *fileha ...

  4. Django发送邮件功能

    以126邮箱为例 1 首先进126邮箱设置,开启: POP3/SMTP服务 IMAP/SMTP服务 成功开启后会获得一个授权码.   2. setting.py配置: # 配置发送邮箱 # 需要登录网 ...

  5. GNU ARM eclipse 安装--Linux 版本

    官方网站:https://gnu-mcu-eclipse.github.io/ 1. 工具链安装 1.1 xpm 安装 安装 nodejs: sudo apt-get install nodejs s ...

  6. Spring Boot jpa Service层实现代码

    package com.fei.service.impl; import java.util.ArrayList; import java.util.List; import javax.persis ...

  7. R语言-三种方法绘制单位圆

    与一般开发语言不同,R以数据统计分析和绘图可视化为主要卖点.本文是第一篇博客,解决一个简单的绘图问题,以练手为目的. 以下直接给出三种单位圆的画法: 方法1 f=seq(,*pi,0.001) x=s ...

  8. [CF434D Div1] Tree

    问题描述 给定一颗 n 个点的树,树边带权,试求一个排列 P,使下式的值最大 \[ \sum_{i=1}^{n-1}maxflow(P_i,P_{i+1}) \] 其中 maxflow(s, t) 表 ...

  9. A1036

    输入n行不同学生的name性别id和成绩,输出成绩最高的女生名字和id,成绩最低的男生名字和id求出二者的差 如果有性别缺少,输出Absent并在结果行输出NA 注意变量不要搞混,可以用结构体……不过 ...

  10. CSS画心形和蛋形

    一.心形 使用transform-origin属性实现设置不同的点为原点 1.改变元素基点transform-origin(transform-origin是变形原点,原点就是元素绕着旋转或变形的点) ...