2014-05-19 8 views
5

TFS (2013 업데이트 2) 원본 컨트롤의 파일을 컴퓨터의 특정 폴더로 복사 할 수 있는지 알고 있습니까?tfs versioncontrol에서 PowerShell을 사용하여 디렉터리로 파일 복사

서버 경로가 $/BuildTemplate2013/BuildProcessSource이고 해당 디렉토리의 모든 파일을 PowerShell을 사용하여 C:\destinationDir에 복사하거나 다운로드하려고한다고 가정합니다. 그게 가능하니? TFS 2013 업데이트 2 전원 도구가 설치되어 있지만 해당 명령을 찾을 수 없습니다.

답변

9

에 그것을 실행합니다. 그런 다음 특정 경로의 서버에있는 파일을 반복하여 재귀 적으로 다운로드합니다.

# 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

'$ items = Get-TfsChildItem $ AutoDeployDir -Recurse' 다음에'-Server $ tfsCollection'을 추가하여 실행해야합니다. 그러면 챔피언처럼 작동합니다. – Dan

+0

어쩌면 우리는이 회사에 하나의 컬렉션 만 가지고 있기 때문에 내가 필요하지 않은 이유가 무엇일까요?나는 이것을 TFS2013에 만들었습니다. –

+0

아, 저는 2010 년입니다. - 대본, 감사합니다. 시간이 많이 걸렸습니다. 다른 사람들이 비슷한 문제를 안고있는 경우를 대비 해서요. – Dan

0

찾고 계신 명령은 tf.exe get이며 TFS 클라이언트 도구, 즉 Visual Studio 또는 Team Explorer와 함께 제공됩니다. 독립 실행 형 도구. tf.exe get을 사용하려면 작업 영역과 작업 폴더 매핑을 구성해야합니다.

TF Power Tools를 사용하려면 Update-TfsWorkspace 명령을 사용하여 파일을 가져옵니다. 나는 당신이 여전히 일식 매핑으로 정의 된 작업 공간을 필요로 할 것이라고 생각한다.

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

TFS 전동 공구 –

3

PowerShell 옵션은 TFS 전동 공구를 설치할 때 기본적으로 선택되지 않습니다.

TFS Powershell 도구를 설치하려면이 옵션을 선택하십시오.

enter image description here

그런 다음 최신 파일을 얻기 위해 업데이트-TfsWorkspace의 커맨드를 사용할 수 있습니다. 최신 파일이 필요한 디렉토리의 작업 공간이 이미 만들어 졌는지 확인하십시오. 다음을 실행하십시오

cd <Your Directory Path> 

Update-TfsWorkspace 

let 명령을 실행하는 동안 powershell을 실행할 사용자에 대해 작업 영역이 만들어 졌는지 확인하십시오.

그냥 내가 TFS 어셈블리와 TFS 서버에 연결하는 PowerShell 스크립트를 생성 한

+0

에서 PowerShell 명령이 필요합니다. 어떻게 드라이브에 'C : \ destinationDir'과 같은 특정 디렉토리를 지정할 수 있습니까? 빌드 프로세스 템플릿에서이 스크립트를 호출하고 일부 파일을 변경해야합니다. –

+0

PowerShell 커맨드 릿을 복사 할 디렉토리에서 PowerShell 커맨드 렛을 실행하는 방법 중 하나가 있습니다. 해당 폴더에 대해 작업 공간 매핑을 이미 설정해야합니다. –

+0

이 명령은 서버의 내용 만 * 나열합니다. 이것은'tf dir '과 동일합니다. 실제로는 로컬 파일 시스템으로 파일을 검색하지 않습니다. –