2014-05-19 6 views
5

के साथ tfs versioncontrol से निर्देशिका में फ़ाइलों की प्रतिलिपि बनाएँ क्या किसी को पता है कि TFS (2013 अद्यतन 2) स्रोत नियंत्रण से फ़ाइलों को अपने कंप्यूटर पर किसी विशिष्ट फ़ोल्डर में कॉपी करना संभव है?PowerShell

मान लें कि मेरे पास सर्वर पथ $/BuildTemplate2013/BuildProcessSource है और मैं चाहता हूं कि उस निर्देशिका की सभी फ़ाइलों को पावरशेल के साथ C:\destinationDir पर कॉपी/डाउनलोड किया जाए। क्या यह संभव है? मेरे पास टीएफएस 2013 अपडेट 2 पावर टूल्स स्थापित हैं लेकिन मुझे इसके लिए कोई कमांड नहीं मिल रहा है ...

उत्तर

9

मैं एक PowerShell स्क्रिप्ट TFS विधानसभाओं के साथ TFS सर्वर से कनेक्ट करता है कि बनाए गए पृष्ठ पर निष्पादित। मैं फिर सर्वर पर फ़ाइलों (एक विशिष्ट पथ में) के माध्यम से लूप और इसे रिकर्सिव डाउनलोड करें।

# 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

मुझे यह चलाने के लिए '$ आइटम = Get-TfsChildItem $ AutoDeployDir -Recurse' के बाद '-सेवर $ tfsCollection' जोड़ना था, फिर यह एक चैंप की तरह काम करता था। – Dan

+0

शायद क्योंकि हमारे पास इस कंपनी में केवल एक संग्रह है, यही वजह है कि मुझे इसकी आवश्यकता नहीं थी?मैंने इसे TFS2013 –

+0

के लिए बनाया है आह मैं 2010 में हूं - भले ही, स्क्रिप्ट के लिए धन्यवाद, यह मुझे बहुत समय बचाता है। मैं सिर्फ यह उल्लेख करना चाहता था कि अगर किसी और को भी ऐसी ही समस्या हो। – Dan

0

जो आदेश आप खोज रहे हैं वह tf.exe get है और यह टीएफएस क्लाइंट टूल्स यानी विजुअल स्टूडियो या टीम एक्सप्लोरर के साथ आता है स्टैंडअलोन टूल। tf.exe get का उपयोग करने के लिए आपको एक वर्कस्पेस और कार्य फ़ोल्डर मैपिंग कॉन्फ़िगर करने की आवश्यकता होगी।

यदि आप टीएफ पावर टूल्स का उपयोग करना पसंद करते हैं तो फ़ाइलों को प्राप्त करने के लिए Update-TfsWorkspace कमांड का उपयोग करें। मेरा मानना ​​है कि आपको अभी भी वर्कफ़ोल्ड मैपिंग के साथ परिभाषित वर्कस्पेस की आवश्यकता होगी।

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

मैं TFS विद्युत उपकरण –

3

जब आप टीएफएस पावर टूल्स इंस्टॉल करते हैं तो PowerShell विकल्प डिफ़ॉल्ट रूप से नहीं चुना जाता है।

टीएफएस पावरहेल उपकरण स्थापित करने के लिए विकल्प का चयन करें।

enter image description here

फिर आप अद्यतन-TfsWorkspace commandlet का उपयोग नवीनतम फ़ाइलें प्राप्त करने के लिए कर सकते हैं। कृपया सुनिश्चित करें कि आपके पास पहले से ही निर्देशिका के लिए एक वर्कस्पेस बनाया गया है जहां आपको नवीनतम फ़ाइलों को प्राप्त करने की आवश्यकता है। उसके बाद निम्न

cd <Your Directory Path> 

Update-TfsWorkspace 

निष्पादित आदेश देना क्रियान्वित करते हैं, यह सुनिश्चित करें कि कि कार्यक्षेत्र उपयोगकर्ता कि powershell निष्पादित करने के लिए जाने के लिए बनाई गई है कि सुनिश्चित करें।

बस एक

+0

से PowerShell आदेश की जरूरत है लेकिन यह कैसे मैं 'सी की तरह मेरी ड्राइव पर किसी विशिष्ट निर्देशिका निर्दिष्ट कर सकते हैं: \ destinationDir'? मैं इस स्क्रिप्ट को अपने निर्माण प्रक्रिया टेम्पलेट से कॉल कर रहा हूं और कुछ फ़ाइलों को बदलने की जरूरत है। –

+0

ऐसा करने के तरीकों में से एक निर्देशिका से अपने PowerShell कमांडलेट निष्पादित करना है जहां आप इसे कॉपी करना चाहते हैं। आपको उस फ़ोल्डर के लिए पहले से ही एक कार्यक्षेत्र मैपिंग सेट अप करने की आवश्यकता होगी। –

+0

वह आदेश केवल * सूची * सर्वर की सामग्री सूचीबद्ध करता है। यह 'टीएफ डीआईआर 'के बराबर है। यह वास्तव में स्थानीय फाइल सिस्टम पर फ़ाइलों को पुनर्प्राप्त नहीं करता है। –