2014-05-19 15 views
5

Qualcuno sa se è possibile copiare i file dal controllo sorgente TFS (2013 Update 2) in una cartella specifica sul computer?Copia i file da tfs versioncontrol alla directory con PowerShell

Diciamo che ho il percorso del server $/BuildTemplate2013/BuildProcessSource e voglio che tutti i file di quella directory siano copiati/scaricati su C:\destinationDir con PowerShell. È possibile? Ho installato gli strumenti di alimentazione di TFS 2013 Update 2 ma non riesco a trovare alcun comando per quello ...

risposta

9

Ho creato uno script PowerShell che si connette al server TFS con le assemblee TFS. Quindi eseguo il loop dei file sul server (in un percorso specifico) e lo scarico in modo ricorsivo.

# 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

Ho dovuto aggiungere '-Server $ tfsCollection' dopo' $ items = Get-TfsChildItem $ AutoDeployDir -Recurse' per farlo funzionare, quindi ha funzionato come un campione. – Dan

+0

Forse perché abbiamo solo una collezione in questa azienda è la ragione per cui non ne avevo bisogno?L'ho realizzato per TFS2013 –

+0

Ah, sono del 2010 - a prescindere, grazie per la sceneggiatura, mi ha risparmiato un sacco di tempo. Volevo solo menzionarlo nel caso in cui qualcun altro avesse un problema simile. – Dan

0

Il comando che stai cercando è tf.exe get e che viene fornito con gli strumenti client TFS ovvero Visual Studio o Team Explorer strumento autonomo. Per utilizzare tf.exe get, sarà necessario configurare un mapping di cartelle di lavoro e di lavoro.

Se si preferisce utilizzare gli strumenti di alimentazione TF, utilizzare il comando Update-TfsWorkspace per ottenere i file. Credo che avrai ancora bisogno di uno spazio di lavoro definito con una mappatura del ripiano.

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

Ho bisogno il comando di PowerShell da Strumenti TFS Potere –

3

L'opzione PowerShell non è selezionata per impostazione predefinita quando si installa TFS Power Tools.

Selezionare l'opzione per installare gli strumenti PowerShell TFS.

enter image description here

È possibile quindi utilizzare il commandlet Update-TfsWorkspace per ottenere i file più recenti. Assicurati di avere uno spazio di lavoro già creato per la directory in cui è necessario disporre dei file più recenti. Quindi eseguire il seguente

cd <Your Directory Path> 

Update-TfsWorkspace 

Durante l'esecuzione del comando let, assicurarsi che che l'area di lavoro è stato creato per l'utente che sta per eseguire il PowerShell.

Basta eseguirlo su una

+0

ma come posso specificare una directory specifica sul mio disco come 'C: \ destinationDir'? Sto chiamando questo script dal mio modello di processo di build e ho bisogno di cambiare alcuni file. –

+0

Uno dei modi per farlo è eseguire i comandi PowerShell dalla directory in cui si desidera copiarlo. È necessario disporre già di un mapping dell'area di lavoro impostato per tale cartella per poterlo fare. –

+0

Questo comando * solo * elenca i contenuti del server. È l'equivalente di 'tf dir'. In realtà non recupera i file sul filesystem locale. –

Problemi correlati