我的客户正在使用TFS2018 update2版本。和AD用于管理TFS用户。 现在大约有1000个用户。大约有10到20个用户报告说他们的用户帐户在TFS工作项“分配给”字段中找不到。如此奇怪和困惑!
1)我们检查了工作项设置的“AssignedTo”字段,是默认设置,允许现有用户和有效用户。 2)用户甚至被添加到团队项目中,但是,在“已分配到”字段中使用搜索时无法找到它们。
3)尝试过其他类型的工作项目,任何项目。同样的问题。
一般来说,这些用户可以成功添加到团队项目中,并且在所有项目的所有工作项的“已分配”字段中找不到它们。所以我们怀疑它是某种用户帐户同步问题?
我们做了更多调查和调试。我们找到了一个名为 operationScopes 的参数,其值为' ims ';如果我们在此数组中添加值“广告”。用户可以找到!我们注意到这些“坏用户”和“好用户”之间的返回值bdifference属于'Local directory'和'localId'字段。此处的值为null,对于良好的用户,本地目录和 LocalID 都不为空。 希望这个线索有效。 http://TFS2018server:8080/tfs/TFSCollection/_apis/IdentityPicker/Identities
并添加更多线索,我们更新了Web Services_static \ tfs \ Dev16.M122.5_script \ TFS \ debug \ VSS \ Identities \ Picker \ Services.js ;通过在OperationScope.IMS开关中添加queryScopes.push(“ims”),可以找到用户。我知道,这不是更新TFS代码的好方法,它只是做调试。希望它有用。
答案 0 :(得分:0)
根据调查和测试,似乎是AD同步问题。这意味着错过的用户可能无法同步到TFS。
因此,当您在AD中查询错过的用户时,您可以找到它(将值广告'添加到 operationScopes ),但在TFS中找不到它们。< / p>
TFS使用每小时调度一次的后台同步作业来查找Active Directory(如果服务器未加入域,则为本地计算机工作组)中的更改。您可以使用以下任何技术强制执行作业:How to synchronize TFS users with AD
即使同步正常,您仍可能看不到UI中列出的用户或名称。同步作业不会在数据库中为数据库中的每个用户或组自动创建用户配置文件,以避免大型企业无法增长。
在这种情况下,第一次使用新的AD帐户(用户或组)时,必须使用DOMAIN\account
语法引用它,以便TFS在AD中即时查找并插入配置文件记录在该帐户的数据库中。
进一步的疑难解答 如果你还有麻烦,Hinsh先生有一个很好的troubleshooting guide。它仍然适用于TFS 2018 Update2
答案 1 :(得分:0)
我在Azure DevOps Server 2019(版本Dev17.M153.3)中存在相同的问题 当我尝试将用户添加到安全组时,它显示了该用户,但无法检索scopeName,因此,如果其他域中的其他用户使用相同的用户名,则会引发以下错误
找到与“ theusername”匹配的多个身份。使用唯一的名称 指定以下身份之一:
- 全名1(唯一名称:domain1 \ theusername)
- 全名2(唯一名称:domain2 \ theusername)
,但其他集合中的同一用户正在工作。
在C:\ Program Files \ Azure DevOps Server 2019 \ Application Tier \ Web Services_static \ tfs \ Dev17.M153.3_scripts \ TFS \ debug \ VSS \ Identities \ Picker \ Services.js queryScopes.push(“ ims”)已经在那里。
经过一番调查,我可以将问题简化为以下Powershell代码
$url1 = "https://tfsserver/CB/_apis/IdentityPicker/Identities?api-version=5.1-preview.1"
$Body = '{"query":"mydomainname\\myusername","identityTypes":["user","group"],"operationScopes":["ims","ad","wmd"],"properties":["DisplayName","IsMru","ScopeName","SamAccountName","Active","SubjectDescriptor","Department","JobTitle","Mail","MailNickname","PhysicalDeliveryOfficeName","SignInAddress","Surname","Guest","TelephoneNumber","Description"],"filterByAncestorEntityIds":[],"filterByEntityIds":[],"options":{"MinResults":40,"MaxResults":40,"ExtensionId":"F12CA7AD-00EE-424F-B6D7-9123A60F424F","ProjectScopeName":"ateamprojectname","CollectionScopeName":"badcollection","Constraints":[]}}'
$x= Invoke-Webrequest $url1 -Method POST -ContentType application/json -UseDefaultCredentials -Body $Body
$y = $x.Content | ConvertFrom-Json
Write-Host "badcollection->", $y.results.identities.scopeName
$url1 = "https://tfsserver/CB_TestCollection/_apis/IdentityPicker/Identities?api-version=5.1-preview.1"
$Body = '{"query":"mydomainname\\myusername","identityTypes":["user","group"],"operationScopes":["ims","ad","wmd"],"properties":["DisplayName","IsMru","ScopeName","SamAccountName","Active","SubjectDescriptor","Department","JobTitle","Mail","MailNickname","PhysicalDeliveryOfficeName","SignInAddress","Surname","Guest","TelephoneNumber","Description"],"filterByAncestorEntityIds":[],"filterByEntityIds":[],"options":{"MinResults":40,"MaxResults":40,"ExtensionId":"F12CA7AD-00EE-424F-B6D7-9123A60F424F","ProjectScopeName":"ateamprojectname","CollectionScopeName":"goodCollection","Constraints":[]}}'
$x= Invoke-Webrequest $url1 -Method POST -ContentType application/json -UseDefaultCredentials -Body $Body
$y = $x.Content | ConvertFrom-Json
Write-Host "goodcollection->", $y.results.identities.scopeName
第一个写主机的输出结果是“ badcollection->” 但是第二个写主机的输出结果是“ goodcollection-> mydomainname”
问题是: 为什么要依赖收藏? 我如何强制tfs同步该用户帐户的不良收藏和良好收藏。