2014-05-19 15 views
5

Czy ktoś wie, czy jest możliwe, aby skopiować pliki z TFS (2013 Update 2) kontroli źródła do określonego folderu na komputerze?Kopiowanie plików z TFS versioncontrol do katalogu z PowerShell

Załóżmy, że mam ścieżkę serwera $/BuildTemplate2013/BuildProcessSource i chcę, aby wszystkie pliki tego katalogu były kopiowane/pobierane do C:\destinationDir z PowerShell. Czy to jest możliwe? Mam zainstalowane narzędzia Power Update TFS 2013 Update 2, ale nie mogę znaleźć żadnego polecenia ...

Odpowiedz

9

I utworzeniu skryptu PowerShell, który łączy się z serwerem TFS z zespołów TFS. Następnie przeglądam pliki na serwerze (w określonej ścieżce) i pobieram je rekurencyjnie.

# 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

musiałem dodać '-server $ tfsCollection' po' $ przedmiotów = Get-TfsChildItem $ AutoDeployDir -Recurse' aby uzyskać ten bieg, to działało jak mistrz. – Dan

+0

Może dlatego, że mamy tylko jedną kolekcję w tej firmie, to dlaczego nie potrzebowałem tego?Zrobiłem to dla TFS2013 –

+0

Ah Jestem na 2010 - niezależnie, dzięki za scenariusz, zaoszczędziło mi to dużo czasu. Chciałem tylko wspomnieć, że gdyby ktoś miał podobny problem. – Dan

0

Polecenie, którego szukasz, to tf.exe get i jest dostarczane z narzędziami klienta TFS, np. Visual Studio lub Team Explorer samodzielne narzędzie. Aby korzystać z tf.exe get, musisz mieć skonfigurowane mapowanie obszaru roboczego i folderu roboczego.

Jeśli wolisz używać TF elektronarzędzi następnie użyć polecenia Update-TfsWorkspace uzyskać pliki. Uważam, że nadal będziesz potrzebował obszaru roboczego zdefiniowanego w mapowaniu workfold.

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

muszę polecenia PowerShell z poziomu narzędzi TFS siłowe –

3

Opcja PowerShell nie jest zaznaczona domyślnie w podczas instalowania Narzędzia TFS zasilania.

Wybierz opcję instalacji narzędzia PowerShell TFS.

enter image description here

Następnie można użyć commandlet Update-TfsWorkspace aby uzyskać najnowsze pliki. Upewnij się, że masz już utworzony obszar roboczy dla katalogu, do którego potrzebujesz najnowszych plików. Następnie należy wykonać następujące

cd <Your Directory Path> 

Update-TfsWorkspace 

Podczas wykonywania let polecenia, należy upewnić się, że obszar roboczy jest tworzony dla użytkownika, który zamierza wykonać PowerShell.

Wystarczy wykonać go na

+0

Ale jak mogę podać konkretnego katalogu na moim dysku, takich jak 'C: \ destinationDir'? Wywołuję ten skrypt z mojego szablonu procesu kompilacji i muszę zmienić niektóre pliki. –

+0

Jednym ze sposobów, aby to zrobić, jest wykonanie poleceń z programu PowerShell z katalogu, z którego chcesz go skopiować. Aby to zrobić, konieczne jest skonfigurowanie mapowania obszaru roboczego dla tego folderu. –

+0

Tylko to polecenie * wyświetla * zawartość serwera. Jest to odpowiednik 'tf dir'. W rzeczywistości nie pobiera plików do lokalnego systemu plików. –

Powiązane problemy