2

これを機能させるには、どの種類の資格情報を提供する必要がありますか

$tfsServer = [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory]::GetServer($basePath,$credential)

私は試した:

$credential = New-Object System.Management.Automation.PsCredential($user,$password)  

$credential = New-Object System.Net.NetworkCredential($user, $password, $domane)

そしていつも得た

Für "GetServer" und die folgende Argumenteanzahl kann keine Überladung gefunden werden: "2".
Bei Zeile:18 Zeichen:86
+ $tfsServer = [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory]::GetServer <<<< ($basePath,$credential)
    + CategoryInfo          : NotSpecified: (:) [], MethodException
    + FullyQualifiedErrorId : MethodCountCouldNotFindBest

使いたい

TeamFoundationServerFactory.GetServer Method (String, ICredentialsProvider)

参照。http://msdn.microsoft.com/en-us/library/bb136201%28v=vs.80%29.aspx

背景は、リモートPowerShellセッションでこれを呼び出したいのですが、何らかの理由で理解できません

$tfsServer = [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory]::GetServer($basePath)

収量

「TF30063: mytfs\MccCollection にアクセスする権限がありません。」

4

3 に答える 3

1

次のコードが機能します。

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

$Assem = ("Microsoft.TeamFoundation.Client, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")

$Source =  @"
using System;
using System.Collections.Generic;
using System.Text;
using  Microsoft.TeamFoundation.Client;
using System.Net;
public class ConnectByImplementingCredentialsProvider : ICredentialsProvider
    {
        public ICredentials GetCredentials(Uri uri, ICredentials iCredentials)
        {
            return new NetworkCredential("myuser", "myPassword", "mydomain");
        }

        public void NotifyCredentialsAuthenticated(Uri uri)
        {
            throw new ApplicationException("Unable to authenticate");
        }
    }
"@

Add-Type -ReferencedAssemblies $Assem -TypeDefinition $Source -Language CSharp 

$basePath = "http://mytfs:8080/tfs/MyCollection"
$tfsServer = [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory]::GetServer($basePath, (New-Object ConnectByImplementingCredentialsProvider) )
$tfsServer.EnsureAuthenticated() 

初めて実行$tfsServer.EnsureAuthenticated()するとエラーになりますが、その後は認証されます。

于 2012-08-09T06:29:22.300 に答える
1

@Berns_kが彼の答えに示すように、実装が期待TeamFoundationServerFactoryされています。ICredentialsProvider資格情報を既に持っている場合は、別の方法でインスタンス化する必要がありますTfsTeamProjectCollection

TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(
    new Uri("http://yourserver:8080/tfs/Collection"),
    new NetworkCredential("myuser", "myPassword", "mydomain");
);

またはpowershellで:

$cred = New-Object NetworkCredential("myuser", "myPassword", "mydomain")
$tpc = New-Object Microsoft.TeamFoundation.Client.TfsTeamProjectCollection
(
     $basePath,
     $cred
)

そうすれば、クレデンシャル プロバイダを作成する必要がなくなり、 への最初の呼び出しでエラーが発生することはありませんEnsureAuthenticated

于 2015-05-04T14:12:59.747 に答える
-1

クレデンシャルを作成するために new-object を間違って呼び出しています

$Username = "domain\username"
$Password = ConvertTo-SecureString ‘MySekurePassw0rd42!’ -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential $username,$Password
于 2012-08-08T14:07:38.593 に答える