如何禁用\启用团队基础服务器 (TFS) 活动目录同步



执行 TFS 用户从一个域到另一个域的迁移时,TFSConfig 标识命令允许您在 TFS 中迁移用户,如下所示: https://www.visualstudio.com/en-us/docs/setup-admin/tfs/command-line/tfsconfig-cmd#identities

使用此命令的一个警告是,TFS 无法"知道"新的用户帐户。一旦 TFS "知道"用户,您将永远无法删除它...并且不能使用 TFSConfig 标识将旧用户迁移到 TFS 中的新用户。

默认情况下,TFS 作业代理在整点运行其 AD 同步。因此,如果使用 AD 组预配访问权限...帐户已迁移...TFS AD 同步过程运行,在运行 TFSConfig 标识之前选取新用户,然后你就会被冲洗。无法删除它选取的新帐户,并且无法运行 TFSConfig 标识命令在 TFS 中迁移用户。

那么,如何在TFS中关闭AD同步过程。答案在互联网上并不容易获得......因此,这个问答风格的帖子。

有一个 Web 服务接口和 .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 标识以在 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")

请注意,在重新启用后一小时之前,它不会再次运行。

最新更新