简体   繁体   中英

Copy files from tfs versioncontrol to directory with PowerShell

Does somebody know if it is possible to Copy files from TFS (2013 Update 2) source control to a specific folder on your computer?

Let's say I have the server path $/BuildTemplate2013/BuildProcessSource and I want all the files of that directory to be copied/downloaded to C:\destinationDir with PowerShell. Is that possible? I have the TFS 2013 Update 2 Power tools installed but I can't find any command for that...

I've created a PowerShell script that connects to the TFS server with the TFS assemblies. I then loop through the files on the server (in a specific path) and download it recursively.

# The deploy directory for all the msi, zip etc.
$AutoDeployDir = "Your TFS Directory Server Path"
$deployDirectory = $($Env:TF_BUILD_DROPLOCATION + "\Deploy\" + $Env:TF_BUILD_BUILDNUMBER)

# Add TFS 2013 dlls so we can download some files
Add-Type -AssemblyName 'Microsoft.TeamFoundation.Client, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
Add-Type -AssemblyName 'Microsoft.TeamFoundation.VersionControl.Client, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
$tfsCollectionUrl = 'http://YourServer:8080/tfs/YourCollection' 
$tfsCollection = New-Object -TypeName Microsoft.TeamFoundation.Client.TfsTeamProjectCollection -ArgumentList $tfsCollectionUrl
$tfsVersionControl = $tfsCollection.GetService([Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer])

# Register PowerShell commands
Add-PSSnapin Microsoft.TeamFoundation.PowerShell

# Get all directories and files in the AutoDeploy directory
$items = Get-TfsChildItem $AutoDeployDir -Recurse

# Download each item to a specific destination
foreach ($item in $items) {
    # Serverpath of the item
    Write-Host "TFS item to download:" $($item.ServerItem) -ForegroundColor Blue

    $destinationPath = $item.ServerItem.Replace($AutoDeployDir, $deployDirectory)
    Write-Host "Download to" $([IO.Path]::GetFullPath($destinationPath)) -ForegroundColor Blue

    if ($item.ItemType -eq "Folder") {
        New-Item $([IO.Path]::GetFullPath($destinationPath)) -ItemType Directory -Force
    }
    else {
        # Download the file (not folder) to destination directory
        $tfsVersionControl.DownloadFile($item.ServerItem, $([IO.Path]::GetFullPath($destinationPath)))
    }
}

The PowerShell option is not selected by default in your when you install TFS Power Tools.

Select the option to install TFS powershell tools.

在此输入图像描述

You can then use the Update-TfsWorkspace commandlet to get latest files. Please make sure you have a workspace already created for the directory where you need to latest files to get to. Then execute the following

cd <Your Directory Path>

Update-TfsWorkspace

While executing the command let, please make sure that that the workspace is created for the user that going to execute the powershell.

Just execute it on a

The command you are looking for is tf.exe get and that comes with the TFS client tools ie Visual Studio or the Team Explorer stand-alone tool. You will need to have a workspace and work folder mapping configured in order to use tf.exe get .

If you prefer to use the TF Power Tools then use the Update-TfsWorkspace command to get files. I believe you will still need a workspace defined with a workfold mapping.

Update-TfsWorkspace -Item $/TeamProject/Path/Path2/Item -Recurse

I used the rest api

    $webClient = New-Object System.Net.WebClient

    $fileName = "<FILENAME>"
    $tfsMappingPath = "$/<TFS_MAPPING>/$fileName"
    $url = "<TFS_URL>/_apis/tfvc/items?path=$tfsMappingPath"

    $WebClient.UseDefaultCredentials = $true

    $WebClient.DownloadFile($url,"$pwd/$fileName")

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM