tfs - 如何禁用\启用 Team Foundation Server (TFS) Active Directory 同步

标签 tfs

执行 TFS 用户从一个域到另一个域的迁移时,TFSConfig Identities 命令允许您按照此处指定的方式在 TFS 内迁移用户: https://www.visualstudio.com/en-us/docs/setup-admin/tfs/command-line/tfsconfig-cmd#identities

使用此命令的一个注意事项是 TFS 无法“知道”新用户帐户。一旦 TFS“知道”某个用户,您就永远无法将其删除......并且您无法使用 TFSConfig Identities 将旧用户迁移到 TFS 中的新用户。

默认情况下,TFS 作业代理在整点运行其 AD 同步。因此,如果您使用 AD 组来提供访问权限……帐户将迁移到……并且 TFS AD 同步过程运行,在您可以运行 TFSConfig Identities 之前选择新用户,然后您就被清理了。它选取的新帐户无法删除,您也无法运行 TFSConfig Identities 命令在 TFS 中迁移用户。

那么,如何在 TFS 中关闭 AD Sync 进程。答案在互联网上并不容易找到……因此这篇问答式的帖子。

最佳答案

有一个 Web 服务接口(interface)和 .NET 程序集,可用于更改 TFS 后台代理中运行的作业。我发现使用 PowerShell 加载 .NET 程序集和使用对象模型更容易。请注意,我的程序集版本是 11.0.0.0,因为我使用 TFS 2013 运行它。其他 TFS 版本中的程序集版本不同。

在 AD 帐户迁移之前,您应该禁用 AD 同步作业。在 TFS 应用层服务器上,禁用 AD 同步作业所需的 Powershell 代码是...

[Reflection.Assembly]::Load("Microsoft.TeamFoundation.Client, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")
[Reflection.Assembly]::Load("Microsoft.TeamFoundation.Common, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")

$TFSConfigurationServer = New-Object Microsoft.TeamFoundation.Client.TfsConfigurationServer(New-Object System.Uri("http://YourTFSServer:8080/tfs"))
$TFSJobService = $TFSConfigurationServer.GetService([Microsoft.TeamFoundation.Framework.Client.ITeamFoundationJobService])

<#
Team Foundation Server Periodic Identity Synchronization
544dd581-f72a-45a9-8de0-8cd3a5f29dfe
#>

foreach($Job in $TFSJobService.QueryJobs())
{
    if($Job.JobId -eq "544dd581-f72a-45a9-8de0-8cd3a5f29dfe") { break }
}

$CurrentJobState = $Job.EnabledState
$NewState = [Microsoft.TeamFoundation.Framework.Common.TeamFoundationJobEnabledState]::FullyDisabled
$Job.EnabledState = $NewState
$TFSJobService.UpdateJob($Job)

用户帐户迁移后,您可以运行 TFSConfig Identities 以在 TFS 中进行必要的更新。然后运行更多 PowerShell 以重新打开 AD 同步作业...

[Reflection.Assembly]::Load("Microsoft.TeamFoundation.Client, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")
[Reflection.Assembly]::Load("Microsoft.TeamFoundation.Common, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")

$TFSConfigurationServer = New-Object Microsoft.TeamFoundation.Client.TfsConfigurationServer(New-Object System.Uri("http://YourTFSServer:8080/tfs"))
$TFSJobService = $TFSConfigurationServer.GetService([Microsoft.TeamFoundation.Framework.Client.ITeamFoundationJobService])

<#
Team Foundation Server Periodic Identity Synchronization
544dd581-f72a-45a9-8de0-8cd3a5f29dfe
#>

foreach($Job in $TFSJobService.QueryJobs())
{
    if($Job.JobId -eq "544dd581-f72a-45a9-8de0-8cd3a5f29dfe") { break }
}

$CurrentJobState = $Job.EnabledState
$NewState = [Microsoft.TeamFoundation.Framework.Common.TeamFoundationJobEnabledState]::Enabled
$Job.EnabledState = $NewState
$TFSJobService.UpdateJob($Job)

另一个有用的项目是您可以使用 QueryLatestJobHistory 方法查看最近运行的 AD 同步作业的状态。

$TFSJobService.QueryLatestJobHistory("544dd581-f72a-45a9-8de0-8cd3a5f29dfe")

请注意,它在重新启用后的整点钟之前不会再次运行。

关于tfs - 如何禁用\启用 Team Foundation Server (TFS) Active Directory 同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43899732/

相关文章:

tfs - 报告站点中的 TeamProject 中没有项目

tfs - 如何将 Mercurial (Hg) 源代码存储库迁移到 TFS?

visual-studio - 如何阻止 VS2015 NuGet 将包添加到 TFS

git - 我可以在没有 Visual Studio 的情况下将 Git 客户端与 TFS 一起使用吗?

tfs - 访问本地存储库文件而不是 tfs 文件

android - 如何直接在android Studio上为TFVC添加解决方案?

deployment - 使用 Team Foundation Build 2015 部署到多个环境

ssl - TFS 2017,HTTPS 绑定(bind)失去控制台权限?

c# - 从 TFS 打开项目时出现 MVC 错误

android - Android Studio 中的 TFS 连接