2014-05-19 4 views
5

Weiß jemand, ob es möglich ist, Dateien von der TFS (2013 Update 2) -Source Control in einen bestimmten Ordner auf Ihrem Computer zu kopieren?Dateien von tfs versioncontrol in ein Verzeichnis mit PowerShell kopieren

Angenommen, ich habe den Serverpfad $/BuildTemplate2013/BuildProcessSource, und ich möchte, dass alle Dateien dieses Verzeichnisses mit PowerShell auf C:\destinationDir kopiert/heruntergeladen werden. Ist das möglich? Ich habe die TFS 2013 Update 2 Elektrowerkzeuge installiert, aber ich kann keinen Befehl dafür finden ...

Antwort

9

ich ein Powershell-Skript erstellt haben, die mit den TFS-Baugruppen mit dem TFS-Server verbindet. Ich durchlaufe dann die Dateien auf dem Server (in einem bestimmten Pfad) und lade sie rekursiv herunter.

# 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))) 
    } 
} 
+1

Ich musste '-Server $ tfsCollection' nach' $ items = Get-TfsChildItem $ AutoDeployDir -Recurse 'hinzufügen, um das zu starten, dann funktionierte es wie ein Champ. – Dan

+0

Vielleicht, weil wir nur eine Sammlung in dieser Firma haben, ist der Grund, warum ich das nicht gebraucht habe?Ich habe das für TFS2013 gemacht –

+0

Ah ich bin auf 2010 - egal, danke für das Skript, es hat mir eine Menge Zeit erspart. Ich wollte das nur erwähnen, falls jemand ein ähnliches Problem hatte. – Dan

0

Der Befehl, den Sie suchen, ist tf.exe get und das kommt mit den TFS-Client-Tools dh Visual Studio oder der Team Explorer eigenständiges Werkzeug. Sie müssen einen Arbeitsbereich und ein Arbeitsordner-Mapping konfiguriert haben, um tf.exe get zu verwenden.

Wenn Sie die TF Power Tools verwenden möchten, verwenden Sie den Befehl Update-TfsWorkspace, um Dateien abzurufen. Ich glaube, dass Sie immer noch einen Arbeitsbereich benötigen, der mit einem Arbeitsfolgemaps definiert ist.

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

Ich brauche die Powershell-Befehl aus dem TFS Power Tools –

3

Die PowerShell-Option ist bei der Installation von TFS Power Tools standardmäßig nicht ausgewählt.

Wählen Sie die Option zum Installieren von TFS-Powershell-Tools.

enter image description here

Anschließend können Sie die Update-TfsWorkspace Commandlet verwenden, um aktuelle Dateien. Stellen Sie sicher, dass Sie bereits einen Arbeitsbereich für das Verzeichnis erstellt haben, in dem Sie die neuesten Dateien benötigen. Dann führen Sie den folgenden

cd <Your Directory Path> 

Update-TfsWorkspace 

Während den Befehl let ausführt, stellen Sie sicher, dass der Arbeitsbereich für den Benutzer erstellt wird, die die Powershell geht auszuführen.

führen Sie es einfach auf ein

+0

Aber wie kann ich ein bestimmtes Verzeichnis auf meinem Laufwerk wie 'C: \ angeben destinationDir'? Ich rufe dieses Skript aus meiner Build-Prozess-Vorlage und muss einige Dateien ändern. –

+0

Eine Möglichkeit, dies zu tun, besteht darin, die PowerShell-Befehle aus dem Verzeichnis auszuführen, aus dem Sie sie kopieren möchten. Für diesen Ordner müsste bereits eine Arbeitsbereich-Zuordnung eingerichtet sein. –

+0

Dieser Befehl listet * nur den Inhalt des Servers auf. Es ist das Äquivalent von "tf dir". Es ruft Dateien nicht tatsächlich auf dem lokalen Dateisystem ab. –