samedi 31 août 2013

Changer le compte de domaine associé à une identité dans TFS

Depuis la version TFS 2010, l'ensemble des identités est listé dans la base Tfs_configuration.
Tous les comptes et groupes ayant un droit d'accès à TFS ont automatiquement une identité créée (qu'ils s'y soient un jour connectés ou non). Il n'est pas possible de supprimer ou fusionner des identités. Cependant il est possible de modifier le compte/groupe de domaine associé à une identité.
Pour cela, il suffit d'utiliser la commande suivante sur un des serveurs Application-Tier :
cd "C:\Program Files\Microsoft Team Foundation Server 11.0\Tools"
.\TFSConfig identities /change /fromdomain:olddomain /todomain:newdomain /account:oldlogin /toaccount:newlogin

Si vous migrez de domaine, vous pouvez utiliser la commande simplifiée suivante. Elle permet de changer les comptes/groupes pour toutes les identités listées à condition que les nouveaux logins soient identiques aux anciens (il faut aussi qu'ils soient d'abord créés dans le nouveau domaine).
cd "C:\Program Files\Microsoft Team Foundation Server 11.0\Tools"
.\TFSConfig identities /change /fromdomain:olddomain /todomain:newdomain

Il arrive parfois qu'une nouvelle identité soit créée par erreur, souvent par ricochets via les groupes Windows. Le nouveau compte cible newdomain\newdidier est alors déjà connu dans TFS. La migration de l'ancien compte olddomain\olddidier vers newdomain\newdidier ne fonctionnera pas.
Comme l'utilisateur newdomain\newdidier n'a en fait réalisé aucune action dans TFS, il est facile de supprimer ce doublon en utilisant un compte local temporaire srvTFS\tmpdidier.
cd "C:\Program Files\Microsoft Team Foundation Server 11.0\Tools"
.\TFSConfig identities /change /fromdomain:newdomain /todomain:srvTFS /account:newdidier /toaccount:tmpdidier
.\TFSConfig identities /change /fromdomain:olddomain /todomain:newdomain /account:olddidier /toaccount:newdidier
Affecter le compte intermédiaire srvTFS\tmpdidier à l'identité créée par erreur de newdomain\newdidier permet de supprimer ce dernier de la liste. Il suffit alors de migrer normalement l'identité de olddomain\didier vers newdomain\newdidier.
Lors d'une migration, j'ai eu un problème de synchronisation des comptes au niveau des éléments de travail. Le Job plante sur une identité, l'accès aux éléments de travail n'est alors plus disponible pour certains utilisateurs. Pour l'éviter, il suffit de forcer après le changement d'une identité la synchronisation en lançant le Job correspondant (ne pas changer 2 fois de suite une identité sans exécuter ce job). Un billet de Neno Loje explique comment ici.

Nous avons aussi souvent un serveur SharePoint associé au TFS et les noms de comptes suivent souvent une règle différente en changeant de domaine. Je vous propose un script PowerShell permettant de migrer rapidement les comptes individuellement. 
Param(
     [string] $csvlogins = "C:\mappageLogins.csv",
     [string] $domainOld = "olddomain",
     [string] $domainNew = "newdomain",
     [string] $SharepointWebApp = "http://srvsps"
    )

$TFSConfig = "$Env:ProgramFiles\Microsoft Team Foundation Server 11.0\Tools\TFSConfig.exe"

$loginList=IMPORT-CSV -Path $csvlogins -delimiter ";"

Foreach ($Account in $loginList) {
    $old = $Account.AncienLogin
    $new = $Account.NouveauLogin
    write-output "$domainOld\$old"
    & $TFSConfig identities /change "/fromdomain:$domainOld" "/todomain:$domainNew" "/account:$old" "/toaccount:$new"
    $user = Get-SPUser -web $SharepointWebApp -Identity "$domainOld\$old"
    Move-SPUser -Identity $user -NewAlias "$domainNew\$new" -IgnoreSID -Confirm:$false
}
Le script fonctionne si TFS est installé sur le serveur et les commandlets de SharePoint sont chargées dans la console PowerShell. Pour lister les identités actuelles de TFS, il suffit d'exécuter TFSconfig identities. Ensuite, il vous suffit de créer un fichier CSV avec les colonnes "AncienLogin" et "NouveauLogin" :
AncienLogin;NouveauLogin
didier;newdidier

Comme toujours, soyez prudents, les changements d’identités peuvent avoir des effets de bord. Vous ne devez jamais utiliser ces commandes sur votre instance de production sauf si vous les avez testées sur l’environnement de test au préalable.

have a nice day.

Mise à jour 01/12/2013 : Ajout remarque sur la synchronisation des identités au niveau des éléments de travail.

Références :
Commande TFSConfig Identities
MSDN Blog on Identity change in TFS 2010
Outil TfsSyncIdentities.exe, Blog Neno Loje

Aucun commentaire:

Enregistrer un commentaire