Última hora: Keyfactor adquiere InfoSec Global y CipherInsights | Soluciones integrales para descubrimiento, control y agilidad

  • Inicio
  • Blog
  • Actualización por lotes de atributos para usuarios en FIM

Actualización por lotes de atributos para usuarios en FIM

Recientemente, un cliente solicitó la posibilidad de utilizar datos de un archivo generado externamente para realizar actualizaciones de atributos por lotes para usuarios en el servicio FIM. Lo que hizo que esto fuera más complicado de lo esperado fue que algunos de los atributos de usuario, por ejemplo Manager, eran referencias FIM.

En un caso sencillo, por ejemplo el atributo Título, podríamos simplemente establecer el atributo en el nuevo valor en PowerShell y actualizar utilizando el complemento de automatización FIM. Para un atributo de referencia, sin embargo, tendríamos que buscar literalmente el GUID del objeto referenciado en el Portal FIM, copiarlo en el archivo de datos de origen y luego realizar la actualización simple.

Para facilitarle la vida al cliente, implementamos una búsqueda XPath para aquellos atributos que eran referencias conocidas, de modo que pudieran utilizar una forma más sencilla de identificar el valor referenciado, por ejemplo, su nombre de cuenta AD.

El ejemplo siguiente se ha simplificado considerablemente para mostrar sólo el proceso de actualización del atributo Manager del usuario. El código original del cliente es más complejo, pero añade muy poco a lo que se ilustra aquí.

Empezaremos inicializando el snap-in FIM Automation y una variable para hacer referencia al servicio web FIM. A efectos de demostración, utilizaremos variables sencillas para representar a nuestro usuario, el nombre del atributo y el valor del atributo:

<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"

Tras la inicialización, utilizaremos export-fimconfig y una expresión XPath para recuperar el objeto de cuenta del usuario. Esto devuelve un objeto Persona FIM y se utiliza para crear el ImportObject para su uso con el servicio 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

A continuación utilizamos el nombre de cuenta textual del Gestorproporcionado y recuperamos el objeto Persona. Esa referencia PowerShell es entonces formateada a 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:",""

Una vez que tengamos el GUID del gestor de usuarios, podemos crear un nuevo objeto ImportChange, añadirle la nueva referencia y el nombre del atributo y luego añadirlo al ImportObject original.

Por último, Import-FIMConfig puede utilizarse para enviar el resultado al servicio web FIM:

$importChange = Nuevo objeto Microsoft.ResourceManagement.Automation.ObjectModel.ImportChange
$importChange.Operación = 1
$importChange.NombreAtributo = $nombreAtributoUsuario
$importChange.AttributeValue = $userAttributeValue
$importChange.CompletamenteResuelto = 1
$importChange.Locale = "Invariante"
 $importObject.Changes = $importChange
 $importObject | Importar-FIMConfig

Todo ello permite al usuario final trabajar de forma transparente con las referencias FIM.