Un client a récemment demandé à pouvoir utiliser les données d'un fichier généré en externe pour effectuer des mises à jour par lots des attributs des utilisateurs dans le service FIM. L'opération s'est avérée plus compliquée que prévu car certains des attributs utilisateur, par exemple Manager, étaient des références FIM.
Dans un cas simple, par exemple l'attribut Title, nous pourrions simplement définir l'attribut avec la nouvelle valeur dans PowerShell et effectuer la mise à jour à l'aide du snap-in FIM Automation. Pour un attribut de référence, par contre, nous devrions littéralement rechercher le GUID de l'objet référencé dans le portail FIM, le copier dans le fichier de données source, puis effectuer la simple mise à jour.
Pour faciliter la vie du client, nous avons mis en œuvre une recherche XPath pour les attributs qui étaient des références connues, afin qu'il puisse utiliser un moyen plus simple d'identifier la valeur référencée, par exemple le nom de son compte AD.
L'exemple ci-dessous est considérablement simplifié pour ne montrer que le processus de mise à jour de l'attribut Manager de l'utilisateur. Le code client original est plus complexe, mais n'ajoute que très peu de choses à ce qui est illustré ici.
Nous commencerons par initialiser le snap-in FIM Automation et une variable pour référencer le service web FIM. Pour les besoins de la démonstration, nous utiliserons des variables simples pour représenter notre utilisateur, le nom de l'attribut et la valeur de l'attribut :
<i># Loads the FIM PS tools if not already loaded</i> <b>if</b> (@(get-pssnapin | where-object {$_.Name -eq "FIMAutomation"} ).count -eq 0) {Add-PSSnapIn FIMAutomation} <i># Sets basic script variables for location of FIM service and CSV file</i> Set-Variable -name URI -value <a href="https://localhost:5725/resourcemanagementservice">https://localhost:5725/resourcemanagementservice</a> <i># Static parameters for demonstration</i> $userAccountName = "JohnDoe" $userAttributeName = "Manager" $userAttributeValue = "JohnsManager"
Après l'initialisation, nous utiliserons export-fimconfig et une expression XPath pour récupérer l'objet compte de l'utilisateur. Cet objet renvoie un objet FIM Person et est utilisé pour créer l'objet ImportObject à utiliser avec le service web FIM :
$userObject = export-fimconfig -uri $URI -onlyBaseResources -customconfig "/Person[AccountName='$userAccountName']" <b>if</b>($user -eq $null) { throw "Cannot Get User by AccountName=$userAccountName" } $importObject = New-Object Microsoft.ResourceManagement.Automation.ObjectModel.ImportObject $importObject.ObjectType = "Person" $importObject.SourceObjectIdentifier = $userObject.ResourceManagementObject.ObjectIdentifier $importObject.TargetObjectIdentifier = $userObject.ResourceManagementObject.ObjectIdentifier $importObject.State = 1
Ensuite, nous utilisons le nom de compte textuel du gestionnairefourni et récupérons l'objet Personne. Cette référence PowerShell est ensuite formatée en un simple GUID :
$managerObject = export-fimconfig -uri $URI -onlyBaseResources -customconfig "/Person[AccountName='$userAttributeValue']" <b>if</b>($user -eq $null) { throw "Cannot Get User by accountName=$accountName" } $managerObject = $managerObject.ResourceManagementObject.ObjectIdentifier -replace "urn:uuid:",""
Une fois que nous avons le GUID du gestionnaire de l'utilisateur, nous pouvons créer un nouvel objet ImportChange, y ajouter la nouvelle référence et le nom de l'attribut, puis l'ajouter à l'objet ImportObject d'origine.
Enfin, Import-FIMConfig peut être utilisé pour envoyer le résultat au service web FIM :
$importChange = Nouvel objet Microsoft.ResourceManagement.Automation.ObjectModel.ImportChange $importChange.Operation = 1 $importChange.AttributeName = $userAttributeName $importChange.AttributeValue = $userAttributeValue $importChange.FullyResolved = 1 $importChange.Locale = "Invariant" $importObject.Changes = $importChange $importObject | Import-FIMConfig
Tout cela constitue un moyen simple de permettre à l'utilisateur final de travailler de manière transparente avec des références FIM.