La eliminación de un gran número de objetos del Servicio FIM puede realizarse de varias maneras:
- Cree una actividad de flujo de trabajo personalizada para eliminar el objeto que se activa en un MPR de transición establecido.
- Configure una MA como autoritativa para la eliminación de objetos y, a continuación, desvincule los objetos de la MA FIM.
- 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
}
#