Ein Kunde bat kürzlich um die Möglichkeit, Daten in einer extern erstellten Datei zu verwenden, um Batch-Attributaktualisierungen für Benutzer im FIM-Dienst durchzuführen. Was die Sache komplizierter machte als erwartet, war, dass einige der Benutzerattribute, z. B. Manager, FIM-Referenzen waren.
In einem einfachen Fall, z. B. dem Attribut Titel, könnten wir das Attribut einfach in PowerShell auf den neuen Wert setzen und mit dem FIM Automation-Snap-In aktualisieren. Für ein Referenzattribut müssten wir jedoch buchstäblich die GUID des referenzierten Objekts im FIM-Portal nachschlagen, diese in die Quelldatendatei kopieren und dann die einfache Aktualisierung durchführen.
Um dem Kunden das Leben zu erleichtern, haben wir einen XPath-Lookup für die Attribute implementiert, die bekannte Referenzen sind, so dass er den referenzierten Wert, z. B. seinen AD-Kontonamen, leichter identifizieren kann.
Das folgende Beispiel ist stark vereinfacht und zeigt nur den Prozess zur Aktualisierung des Attributs " Manager " des Benutzers. Der ursprüngliche Client-Code ist komplexer, fügt aber nur sehr wenig zu dem hinzu, was hier gezeigt wird.
Wir beginnen mit der Initialisierung des FIM-Automatisierungs-Snap-Ins und einer Variablen, die auf den FIM-Webdienst verweist. Zu Demonstrationszwecken verwenden wir einfache Variablen, um unseren Benutzer, den Attributnamen und den Attributwert darzustellen:
<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"
Nach der Initialisierung verwenden wir export-fimconfig und einen XPath-Ausdruck, um das Kontoobjekt des Benutzers abzurufen. Dieses gibt ein FIM-Person-Objekt zurück und wird verwendet, um das ImportObject für die Verwendung mit dem FIM-Webdienst zu erstellen:
$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
Als Nächstes verwenden wir den textuellen Kontonamen des bereitgestellten Managersund rufen das Person-Objekt ab. Dieser PowerShell-Verweis wird dann in eine einfache GUID formatiert:
$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:",""
Sobald wir die GUID für den Benutzermanager haben, können wir ein neues ImportChange-Objekt erstellen, diesem den neuen Verweis und den Attributnamen hinzufügen und es dann dem ursprünglichen ImportObject hinzufügen.
Schließlich kann Import-FIMConfig verwendet werden, um das Ergebnis an den FIM-Webdienst zu senden:
$importChange = New-Object Microsoft.ResourceManagement.Automation.ObjectModel.ImportChange $importChange.Operation = 1 $importChange.AttributName = $BenutzerAttributName $importChange.AttributeValue = $userAttributeValue $importChange.FullyResolved = 1 $importChange.Locale = "Unveränderlich" $importObject.Changes = $importChange $importObject | Import-FIMConfig
All dies ermöglicht es dem Endbenutzer auf einfache Weise, transparent mit FIM-Referenzen zu arbeiten.