本文目录
使用版本控制来保护你的PowerShell脚本
在第一次 Dutch PowerShell User Group 会议上, 我做过一个有关使用版本控制来保护Windows PowerShell脚本的演示。通过这篇文章,也可以让你从头开始来完成自己脚本的版本控制。
软件开发者肯定不会考虑在一个没有版本控制的项目中工作了。那对于一个动辄就要维护成千上百的Windows PowerShell 脚本文件的IT管理人员来讲,使用版本控制管理自己的脚本再寻常不过了。版本控制或者源代码控制主要是为了跟踪源代码的变化。有很多工具可以帮助实现版本控制,比如 GIT,Mercurial,还有Team Foundation Server。本文将会演示如何使用Team Foundation Server (TFS)来保护你的Windows PowerShell 脚本 。使用了版本控制以后,即使你之前没有复制脚本进行备份,又改错了代码,脚本出了问题不能工作,你也不用担心。
什么是版本控制?
使用版本控制, 你能:
- 记录更改
- 查看历史版本
- 撤销更改
版本控制也被称为:
- 修订控制
- 源代码控制
版本控制软件
Microsoft Visual Studio Team Foundation Server 2012 (TFS) 是一个基于微软应用程序生命周期管理(ALM)解决方案的协作平台。 TFS 支持敏捷开发实践, 本地和云上的多个IDEs 和平台 , 并且提供了你需要在整个IT生命周期中高效管理软件开发项目的工具。
Team foundation 组件
Team Foundation Server 主要由下面的组件组成:
- 客户端层 (像 Visual Studio, Office, 命令行, 等)
- 应用程序层 (Team Foundation Web Services API)
- 数据层 (SQL Server)
TFS 代码控制的步骤
当你尝试开始实现代码控制时,这里有几个基本的命令需要提前了解:
- Add ‒ 从本地的文件系统中添加文件和目录至版本控制服务器(TFS).
- Check out ‒ 让本地的文件处于可编辑和可更改状态,这样在工作台中会显示“编辑”状态.
- Check in ‒ 提交本地的更改到版本控制服务器(TFS).
注意: 实际上有很多其它命令,但是这里主要演示代码控制的一些基本命令.
在开始版本控制之前需要准本那些步骤?
微软提供了Team Foundation Service, 它是基于云平台的Team Foundation 服务. 眼下, 协作用户少于5个的账号可以免费使用, 并且在限定的时间以内,所有的功能都是免费的! 当然你也可以在本地安装TFS 2012 。 更多信息可以参考 Team Foundation Server. 还有一个 Express version available 可以使用。
本文中,我们会在Windows 8 的操作系统上配置下面的版本控制环境:
- Team Foundation Service ‒ 基于云的TFS.
- Team Explorer Microsoft Visual Studio 2012 ‒ Team Explorer 是一款客户端软件,提供了访问Team Foundation Server 的功能。
- Microsoft Visual Studio Team Foundation Server 2012 Update 1 Power Tools ‒ Power Tools 是一套可以提高访问Team Foundation Server效率的集成命令行扩展工具。
第一步 : 注册Team foundation service.
开始注册.
初始化成功后, 我们需要创建一个项目。这个项目将作为源代码和工作项的存储仓库。
第二步: 安装和配置 Team Explorer 2012
(如果机器上之前没有安装visual studio)你需要先下载 download Team Explorer for Microsoft Visual Studio 2012 ,安装一个tfs 客户端。
打开团队浏览器,点击 Connect to Team Foundation Server.
输入基于云的Team Foundation Server地址。.
现在需要创建一个工作台映射了。在源代码浏览器中映射本地的盘符,可以是任意的一个文件夹。
第三步: Microsoft Visual Studio Team Foundation Server 2012 Update 1 Power Tools
我们会用到 Windows PowerShell cmdlets,它来自 Microsoft Visual Studio Team Foundation Server 2012 Update 1 Power Tools ,用Windows PowerShell 和Team Foundation Server 进行通信交互。
注意
- Windows PowerShell 命令需要安装.NET Framework 3.5 功能.
- Windows PowerShell 的执行策咯需要被配置 ,受限制的执行策略不会工作。
在下载 downloading the Power Tools, 之后,我们可以只选择Windows PowerShell cmdlets.
Windows PowerShell 中的版本控制步骤
在安装了必备的软件以后,我们就可以使用Windows PowerShell 来进行版本控制了。
打开 Windows PowerShell ISE, 然后加载Team Foundation Visual Studio Team Foundation Server 2012 Power Tools的命令集.
Get-PSSnapin –Registered Add-PSSnapin Microsoft.TeamFoundation.PowerShell
查看 Microsoft.TeamFoundation.PowerShell snap in中的命令.
Get-Command –Module Microsoft.TeamFoundation.PowerShell
本文中我们会使用下面的命令来演示在Windows PowerShel的l版本控制。
- Get-TfssServer
- Add-TfsPendingChange
- New-TfsChangeSet
- Add-TfsPendingChange
- Get-TfsPendingChange
- New-TfsItemHistory
- Remove-TfsPendingChange
#检查Microsoft.TeamFoundation.PowerShell 是否安装 Get-PSSnapin -Registered #导入 Microsoft.TeamFoundation.PowerShell 管理单元 Add-PSSnapin Microsoft.TeamFoundation.PowerShell -Verbose #连接到TFS服务器 Get-TfsServer -Name "https://[name].visualstudio.com/defaultcollection" #创建HelloWorld.ps1 文件 New-Item C:\DEV\PowerShell\HelloWorld.ps1 -ItemType File -Force #添加文件 #添加本地的文件和文件夹到Team Foundation的版本控制服务器 Add-TfsPendingChange -Add -Item C:\DEV\PowerShell\HelloWorld.ps1 -Verbose #签入提交新文件 New-TfsChangeset -Item C:\DEV\PowerShell\HelloWorld.ps1 -Comment "Initial Check in" -Verbose #签出文件 #Makes the local file writable and changes its pending Change status to "edit" in the workspace. Edit is an alias for the Checkout command. #让本地文件可写,并更改状态为“编辑”。Edit是一个签出文件的命令的别名,也可以完成这个工作。 Add-TfsPendingChange -Edit -Item C:\DEV\PowerShell\HelloWorld.ps1 -Verbose #查看挂起的更改 # 显示在工作台中的一个或者多个挂起更改信息。 Get-TfsPendingChange -Item C:\DEV\PowerShell\HelloWorld.ps1 -Verbose #更改 C:\DEV\PowerShell\HelloWorld.ps1 Set-Content -Path C:\DEV\PowerShell\HelloWorld.ps1 -Value "Hello, World" #更改后签入 New-TfsChangeset -Item C:\DEV\PowerShell\HelloWorld.ps1 -Comment "Added some extra script commands" -Verbose #查看历史 Get-TfsItemHistory -HistoryItem C:\DEV\PowerShell\HelloWorld.ps1 -Server (Get-TfsServer -name "https://[name].visualstudio.com/defaultcollection") #删除挂起的更改 #Stores a set of pending changes, together with pending check-in notes, a comment, and a list of associated work items, on the version control server for Team Foundation without actually checking them in. Remove-TfsPendingChange -Item C:\DEV\PowerShell\HelloWorld.ps1 -Workspace (Get-TfsWorkspace -Path C:\DEV\PowerShell)
你知道吗,我们还可以通过Team Foundation Server 2012 Power Tools的程序集来完成上面同样的工作。
# 加载TFS客户端程序集 [Reflection.Assembly]::Load('Microsoft.TeamFoundation.VersionControl.Client, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a') #连接 TFS Server [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory]::GetServer("https://[name].visualstudio.com/defaultcollection") #创建 HelloWorld2.ps1 文件 New-Item C:\DEV\PowerShell\HelloWorld2.ps1 -ItemType File -Force #添加文件 #从本地的文件系统添加文件和目录到Team Foundation的版本控制服务器。 $WorkstationType = [Microsoft.TeamFoundation.VersionControl.Client.Workstation] $WorkspaceInfo = $WorkstationType::Current.GetLocalWorkspaceInfo("C:\DEV\PowerShell") # 查看集合 $Collection = [Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection($WorkspaceInfo.ServerUri) $Collection.EnsureAuthenticated() # 查看工作台,处理工作台的更改 $Global:Workspace = $WorkspaceInfo.GetWorkspace($Collection) $Workspace.PendAdd("C:\DEV\PowerShell\HelloWorld2.ps1") #创建一个新文件 $pendingChanges = $workspace.GetPendingChanges() | Where-Object {$_.LocalItem -eq "C:\DEV\PowerShell\HelloWorld2.ps1"} $Comment = "Initial version of the HelloWorld2.ps1 file" $workspace.CheckIn($pendingChanges,$Comment) #签出编辑 $Workspace.PendEdit("C:\DEV\PowerShell\HelloWorld2.ps1") #获取挂起的更改 $pendingChanges = $workspace.GetPendingChanges() | Where-Object {$_.LocalItem -eq "C:\DEV\PowerShell\HelloWorld2.ps1"} $pendingChanges #更改 C:\DEV\PowerShell\HelloWorld2.ps1 Set-Content -Path C:\DEV\PowerShell\HelloWorld2.ps1 -Value "Hello, World" #查看Tfs 工作项的属性信息。 $tfs = [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory]::GetServer($WorkspaceInfo.ServerUri) $vcs = $tfs.GetService([Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer]) #Version Control Server $vcs.GetExtendedItems("C:\DEV\PowerShell\HelloWorld2.ps1", [Microsoft.TeamFoundation.VersionControl.Client.DeletedState]::NonDeleted, [Microsoft.TeamFoundation.VersionControl.Client.ItemType]::Any) #查看历史 $tfs = [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory]::GetServer($WorkspaceInfo.ServerUri) $vcs = $tfs.GetService([Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer]) #Version Control Server $vcs.QueryHistory("C:\DEV\PowerShell\HelloWorld2.ps1", [Microsoft.TeamFoundation.VersionControl.Client.VersionSpec]::Latest, 0, 'None', $null, $null, $null, 1, $false, $false)
希望你会喜欢使用版本控制来保护你的Windows PowerShell脚本。
原文英文链接:Protect Your PowerShell Scripts with Version Control
原文作者:Stefan
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
初次到访,支持一下