我已經編寫了一個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)
立即想到的問題是,「爲什麼當TFS已經具備構建和部署功能時,您是否重新發明了輪子?」 –
嗨,丹尼爾,那不是我真正想要的,但是因爲你問這家公司只有TFS2013,並且沒有部署能力。你對這個問題有答案嗎? – Detail