为什么远程PowerShell会话的TFS身份验证失败?

时间:2012-08-08 13:38:02

标签: powershell tfs powershell-remoting

直接在计算机上运行以下PowerShell脚本

Add-Type -Path "C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\ReferenceAssemblies\v2.0\Microsoft.TeamFoundation.VersionControl.Client.dll"

$basePath = "http://magv-dev-tfs:8080/tfs/MccCollection"
[Microsoft.TeamFoundation.Client.TeamFoundationServerFactory]::GetServer($basePath)

我得到一个对象,其中包含AuthenticatedUserName,AuthenticatedUserDisplayName,AuthenticatedUserIdentity字段。

当我使用sam e凭据在同一台计算机上的其他计算机上运行远程PowerShellTab中的相同脚本时,这三个字段是真实的:

AuthenticatedUserName           : 
AuthenticatedUserDisplayName    : 
AuthenticatedUserIdentity       : 
Uri                             : http://my-tfs:8080/tfs/mcccollection
TimeZone                        : System.CurrentSystemTimeZone
InstanceId                      : 
Name                            : my-tfs\MccCollection
Credentials                     : System.Net.SystemNetworkCredential
Culture                         : de-DE
SessionId                       : 7c76a150-f681-4b3c-9b0d-2836a3a5a908
ClientCacheDirectoryForInstance : 
HasAuthenticated                : False
TfsTeamProjectCollection        : magv-dev-tfs\MccCollection

编辑:

至少我找到了How to use [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory]::GetServer with credential from Powershell

的作品

2 个答案:

答案 0 :(得分:1)

在invoke-command调用中添加-credential参数?

答案 1 :(得分:1)

使用Visual Studio TFS时,PowerShell可以访问连接到项目时已注册的连接。 RegisteredTfsConnections提供对已注册连接的访问​​权限,因此您无需费心将凭据放入代码中。

以下代码段连接到TFS服务器,并返回WorkItem。

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Client")
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.WorkItemTracking.Client")
$regProjCollection = [Microsoft.TeamFoundation.Client.RegisteredTfsConnections]::GetProjectCollection("tfs2010\TFS2010-MyCollection")
$tfsTeamProjCollection = [Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection($regProjCollection)
$ws = $tfsTeamProjCollection.GetService([type]"Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore")
$ws.GetWorkItem(2525)