Keyfactor Days 2027: participa en la conferencia sobre seguridad y confianza que se celebrará en San Diego ¡Inscríbete ya!

Uso de PowerShell para Eliminar Objetos del Servicio FIM

Sami VanVliet Sami VanVliet Principal Product Manager

La eliminación de un gran número de objetos del Servicio FIM puede realizarse de varias maneras:

  1. Cree una actividad de flujo de trabajo personalizada para eliminar el objeto que se activa en un MPR de transición establecido.
  2. Configure una MA como autoritativa para la eliminación de objetos y, a continuación, desvincule los objetos de la MA FIM.
  3. Scripts PowerShell.

El script de PowerShell nos pareció el método menos intrusivo, ya que no implicaba cambiar la configuración de los flujos de trabajo ni del motor de sincronización.

Cuando se enumera un gran número de objetos a través de PowerShell, la secuencia de comandos puede agotarse, a menudo después de haberse ejecutado durante varias horas, y puede volver al punto de partida.

Para evitarlo, escribimos lo siguiente, que lanza varias ventanas independientes para ejecutar el script, filtradas por la letra inicial del apellido.

cmd /c start powershell -NoExit -Command {$Host.UI.RawUI.WindowTitle = “Delete User – A”; .\DeleteUser.ps1 ‘A’}
cmd /c start powershell -NoExit -Command {$Host.UI.RawUI.WindowTitle = “Delete User – B”; .\DeleteUser.ps1 ‘B’}
cmd /c start powershell -NoExit -Command {$Host.UI.RawUI.WindowTitle = “Delete User – C”; .\DeleteUser.ps1 ‘C’}
cmd /c start powershell -NoExit -Command {$Host.UI.RawUI.WindowTitle = “Delete User – D”; .\DeleteUser.ps1 ‘D’}

Etc. a Z.

El script de borrado generará una petición al Servicio FIM por cada objeto borrado, por lo que se generará una gran cola si hay 26 scripts ejecutándose al mismo tiempo. Para minimizar el impacto en el rendimiento del Servicio FIM, ejecutamos unas 5-8 cartas a la vez.

Aquí está el código para eliminar el usuario.

param (

[cadena]$Letra = $(throw "Especifique la última letra"))

#------------------------------------

Set-Variable -Name URI -Value "https://localhost:5725/resourcemanagementservice" -Option Constant

#------------------------------------

Función DeletePerson

{

Param($IdObjeto)

Fin

{

$ImportObject = New-Object Microsoft.ResourceManagement.Automation.ObjectModel.ImportObject

$ImportObject.ObjectType = "Persona"

$ImportObject.TargetObjectIdentifier = $ObjectId

$ImportObject.SourceObjectIdentifier = $ObjectId

$ImportObject.State = 2

$ImportObject | Import-FIMConfig -uri $URI -ErrorVariable Err -ErrorAction SilentlyContinue

If($Err){Lanza $Err}

}

}

#------------------------------------

If(@(get-pssnapin | where-object {$_.Name -eq "FIMAutomation"} ).count -eq 0) {add-pssnapin FIMAutomation}

#clear-host

$ExportObject = Exportar-FIMConfig -uri $URI `

-onlyBaseResources `

-customconfig "(/Person[starts-with(LastName, '$Letter')])" `

-ErrorVariable Err `

-ErrorAction SilenciosamenteContinuar

If($Err){Lanza $Err}

If($ExportObject -eq $null) {throw “L:There are no persons in your environment”}

$iMax = @($ExportObject).Count

$i = 1

$ExportObject | ForEach{

$pctComp = ([int]($i/$iMax * 100))

Write-Progress -activity "Borrar como" `

-status "Por favor espere" -percentcomplete $pctComp `

-currentoperation "$i de $iMax Personas procesadas"

$ObjectId = (($_.ResourceManagementObject.ObjectIdentifier).split(":"))[2]

DeletePerson -ObjectId $ObjectId

$i++

}

Write-Host "`nComando completado con éxito`n"

#------------------------------------

Trampa

{

$exMensaje = $_.Excepción.Mensaje

If($exMensaje.ComienzaCon("L:"))

{write-host "`n" $exMensaje.substring(2) "`n" -foregroundcolor blanco -backgroundcolor azul oscuro}

Else {write-host “`nError: ” $exMessage “`n” -foregroundcolor white -backgroundcolor darkred}

Salida 1

}

#

Suscríbase a The Source

Stay secure with Keyfactor's monthly newsletter, packed with expert insights and practical steps for quantum-readiness.

Continuar leyendo

PQC

The 5 Stages of PQC Readiness: A Practical Framework for Enterprise Migration

Leer más
Signserver tech update
Comunidad de desarrolladores

Asegurando paquetes OpenPGP y Debian con firma de código

Leer más
When you should automate certificate renewals
Gestión de certificados

Lo siguiente son las certificaciones de 100 días: por qué tu inversión en automatización del segundo trimestre dará sus frutos en 2027

Leer más