2017-04-11 47 views
0

我已經編寫了一個Powershell腳本,它連接到我們的TFS服務器,創建工作區,下載最新源代碼並執行每晚構建和發佈。通過Powershell使用不同的用戶憑據連接到TFS

我遇到的問題是,它始終與我自己的憑據連接,從我讀過的內容來看,這是因爲我已登錄到機器上。我已經創建了一個新的域用戶帳戶,並且我們已在TFS中授予了此管理員權限,但是我無法使腳本使用這些憑據。

下面是與初始連接和工作區創建涉及腳本的一部分,因爲它目前爲:

$subfolder = [System.Guid]::NewGuid().ToString() 
$tfsServer = "http://tfsserver:8080/tfs/xyz" 

$tfsCollection = [Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection($tfsServer) 
$tfsVersionCtrlType = [Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer] 
$tfsVersionCtrl = $tfsCollection.GetService([type] $tfsVersionCtrlType) 
$tfsWorkspace = $tfsVersionCtrl.CreateWorkspace($subfolder, $tfsVersionCtrl.AuthenticatedUser) 

爲了完整起見,這裏的「獲取」邏輯的其餘部分:

$tfsWorkspace.Map($serverLocation, $localLocation) 
$recursion = [Microsoft.TeamFoundation.VersionControl.Client.RecursionType]::Full 
$versionSpec = [Microsoft.TeamFoundation.VersionControl.Client.VersionSpec]::Latest 

$itemSpec = New-Object Microsoft.TeamFoundation.VersionControl.Client.ItemSpec($serverLocation, $recursion) 
$fileRequest = New-Object Microsoft.TeamFoundation.VersionControl.Client.GetRequest($itemSpec, $versionSpec) 
$getStatus = $tfsWorkspace.Get($fileRequest, [Microsoft.TeamFoundation.VersionControl.Client.GetOptions]::Overwrite) 

我通過Powershell使用TFS時遇到的主要問題是,Microsoft在不斷改變它們的實現方式(在某些情況下,這種情況非常激烈),我們留下的是代碼帖子和散佈在互聯網上的文檔碎片(包括SO ) 哪一個 請參閱舊插件和其他現在已過時的參考文獻,這些參考文獻會帶您走上錯誤的路徑。無論如何,所以我已經嘗試創建Windows憑據,PSCredentials等(似乎沒有被任何東西接受),因此提供ICredential的舊方法現在已經過時,我真的不知道該去哪裏轉。

基本上,我只是想創建一個工作區,檢出項目,更新文件並將它們重新檢入 - 全部作爲我們新的「tfsService」用戶帳戶。請幫助...

更新: 根據@Nick的答案,我需要做出以下更改。請注意使用[System.Uri]這是需要這個工作對我來說(不知道這是我的設置怪癖,因爲其他人似乎並不需要這樣)。另外,我需要將構造函數調用TfsTeamProjectCollection全部放在一行上,因爲按照Nick的示例將其分割成不同的行,對我來說也不起作用。

$cred = New-Object System.Net.NetworkCredential("username", "password", "domain") 
$tfsCollection = New-Object Microsoft.TeamFoundation.Client.TfsTeamProjectCollection([System.Uri]$tfsServer, $cred) 
#$tfsCollection = [Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection($tfsServer) 

$tfsVersionCtrlType = [Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer] 
$tfsVersionCtrl = $tfsCollection.GetService([type] $tfsVersionCtrlType) 
$tfsWorkspace = $tfsVersionCtrl.CreateWorkspace($subfolder, $tfsVersionCtrl.AuthenticatedUser) 
+0

立即想到的問題是,「爲什麼當TFS已經具備構建和部署功能時,您是否重新發明了輪子?」 –

+0

嗨,丹尼爾,那不是我真正想要的,但是因爲你問這家公司只有TFS2013,並且沒有部署能力。你對這個問題有答案嗎? – Detail

回答

1

我無法對此進行有效測試,但這似乎是SO對此問題的常見答案。

$cred = New-Object NetworkCredential("myuser", "myPassword", "mydomain") 
$tfsCollection = New-Object Microsoft.TeamFoundation.Client.TfsTeamProjectCollection 
(
    $tfsServer, 
    $cred 
) 
+0

這基本上是我需要的答案,所以我標記爲這樣。我不得不做一些小的編輯工作,雖然(我實際上已經看到了這個答案,但由於我最初無法使用它而被駁回)。 我用最新的代碼編輯了最初的問題。 – Detail

相關問題