2016-11-17 17 views
0

こんにちは、私は実際にはPowerShellを初めて使用しています。私はETLデータベースの配備をやろうとしているので、指定した時間が経過した後でtfsフォルダにすべてのファイルが必要です。私は、TFSとの接続を確立したが、私はファイルをダウンロードすることができていますが、ファイルには、私は、以前のチェックインを使用してファイルを取得しています2つのチェックインを持っていない最新のpowershellを使用してtfsフォルダから最新のチェックインファイルを取得する

私のコード場合:

$TfsUrl = "http://tfs2013-xxx02.ad.xxx.com:8080/tfs/abcd-xxx243" 

    # Load TFS assemblies for connecting to the TFS server 
    Add-Type -Path "E:\Microsoft Visual Studio 14.0\Common7\IDE\TestAgent\Microsoft.TeamFoundation.Client.dll" 
    Add-Type -Path "E:\Microsoft Visual Studio 14.0\Common7\IDE\TestAgent\Microsoft.TeamFoundation.Common.dll" 
    Add-Type -Path "E:\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\4qvjm2or.ipa\Microsoft.TeamFoundation.Lab.Client.dll" 
    Add-Type -Path "E:\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\4qvjm2or.ipa\Microsoft.TeamFoundation.Lab.Common.dll" 
    Add-Type -Path "E:\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\4qvjm2or.ipa\Microsoft.TeamFoundation.VersionControl.Client.dll" 

    #Get TFS Instance 
    $Tfs = [Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection($TfsUrl) 

    # use the account credentials of the process running the script 
    try 
    { 
     $Tfs.EnsureAuthenticated() 
     Write-Output "TFS Connection is successful" 
    } 
    catch 
    { 
     Write-Output "Error trying to connect to tfs server. Check your tfs permissions and path: $_ " 
     Exit(1) 
    } 

    #Write-Message $LogFileName "THIS IS INSIDE Connect-ToTFS" 
    #Write-Message $LogFileName "TFS IS $Tfs" 

$DeploymentFilePath= "$/xxxx/FutureReleases/Database/ReportingETLs" 

$TFSInstance = $Tfs.GetService([Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer]) 
$LatestVersion = [Microsoft.TeamFoundation.VersionControl.Client.VersionSpec]::Latest 
$RecursionType = [Microsoft.TeamFoundation.VersionControl.Client.RecursionType]::Full 


$DateFrom = "D2016-10-08T01:59" 

# Get the From and To date-time in version format to be passed to TFS API 
$VersionFrom = $null 
$VersionFrom = [Microsoft.TeamFoundation.VersionControl.Client.VersionSpec]::ParseSingleSpec($DateFrom, "")  

$FileHistory = @($TFSInstance.QueryHistory($DeploymentFilePath,$LatestVersion,0,$RecursionType,$null,$null,$null,[int32]::MaxValue, $true ,$true, $true)) 

#Write-Output "Filehistory is: $FileHistory" 

#$ChangeSetCount = $FileHistory.Count 
#Write-Output "ChangeSetCount is: $ChangeSetCount" 


$TFSGetFullPath = "E:\temp\" 
$chArray = @() 
$checkin ="" 

foreach ($history in $FileHistory) 
{ 
    foreach ($change in $history.Changes) 
    { 
     foreach ($item in $change.item) 
     { 

      if($item.CheckinDate -gt $VersionFrom.Date) 
      { 
       $chArray += $history.ChangesetId 


      } 
     } 
    } 
} 

Write-Output "ChangesetArray is: $chArray" 
foreach ($ch in $chArray) 
{ 
    foreach ($lastdeployedHistory in $FileHistory)  
    {  
     if($lastdeployedHistory.ChangesetId -eq $ch) 
     { 
      foreach ($workitem in $lastdeployedHistory.Changes) 
      { 
       $workitem.Item.DownloadFile([IO.Path]::GetFullPath($TFSGetFullPath) + $workitem.Item.ServerItem.Split('/')[$workitem.Item.ServerItem.Split('/').Length - 1]); 
      } 
     }                             
    } 
} 

答えて

0

これは、$ chArrayのオブジェクトの順序によって発生します。 $ chArrayのチェンジセットは、新しいものから古いものへと順序付けられています。ファイルをダウンロードすると、まず新しいファイルがダウンロードされ、古いファイルがダウンロードされます。

たとえば、1つのファイルには111と112の2つのチェンジセットがあり、コードにはWrite-Output "ChangesetArray is: $chArray"のコードがあります。ChangesetArray is: 112 111のような出力が表示されます。ファイルをダウンロードすると、まず112バージョンのファイルがダウンロードされ、次に最新バージョンを上書きする111バージョンがダウンロードされます。

あなたがこの問題を解決するために$ chArrayで配列をソートすることができます

Write-Output "ChangesetArray is: $chArray" 

$sortcsarray = $chArray | Sort-Object 

Write-Output "ChangesetArray is: $sortcsarray" 

foreach ($ch in $sortcsarray) 
+0

@avkこんにちは、あなたがこの問題を解決する必要がありますか? –

関連する問題