• Startseite
  • Blog
  • Stapelaktualisierung von Attributen für Benutzer in FIM

Stapelaktualisierung von Attributen für Benutzer in FIM

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.