Keyfactor Tech Days - Maintenant à la demande ! | Les Journées techniques de Keyfactor sont désormais disponibles à la demande.

  • Accueil
  • Blog
  • Utilisation de PowerShell pour supprimer des objets du service FIM

Utilisation de PowerShell pour supprimer des objets du service FIM

La suppression d'un grand nombre d'objets du service FIM peut se faire de plusieurs manières :

  1. Créer une activité de flux de travail personnalisée pour supprimer l'objet qui est déclenché sur un ensemble de transition MPR.
  2. Configurez une MA pour qu'elle fasse autorité en matière de suppression d'objets, puis déconnectez les objets de la MA FIM.
  3. Scripts PowerShell.

Le script PowerShell nous a semblé être l'approche la moins intrusive car il n'impliquait pas de modifier la configuration des flux de travail ou du moteur de synchronisation.

Lors de l'énumération d'un grand nombre d'objets via PowerShell, le script peut s'arrêter - souvent après avoir fonctionné pendant quelques heures - et vous pouvez vous retrouver au point de départ.

Pour éviter cela, nous avons écrit ce qui suit - qui lance plusieurs fenêtres indépendantes pour exécuter le script, qui sont filtrées par la première lettre du nom de famille.

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. à Z.

Le script de suppression génère une demande au service FIM pour chaque objet supprimé, ce qui génère une file d'attente importante si 26 scripts sont exécutés en même temps. Pour minimiser l'impact sur les performances du service FIM, nous avons exécuté environ 5 à 8 lettres à la fois.

Voici le code pour supprimer l'utilisateur.

param (

[string]$Letter = $(throw "Specify last letter"))

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

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

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

Fonction DeletePerson

{

Param($ObjectId)

Fin

{

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

$ImportObject.ObjectType = "Person" (Personne)

$ImportObject.TargetObjectIdentifier = $ObjectId

$ImportObject.SourceObjectIdentifier = $ObjectId

$ImportObject.State = 2

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

If($Err){Lancer $Err}

}

}

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

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

#clear-host

$ExportObject = Export-FIMConfig -uri $URI `

-onlyBaseResources `

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

-ErrorVariable Err `

-Action en cas d'erreur SilentlyContinue

If($Err){Lancer $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 -activité "Effacer en tant que" `

-status "Please wait" -percentcomplete $pctComp `

opération en cours "$i of $iMax Persons processed" -currentoperation "$i of $iMax Persons processed" -current operation "$i of $iMax Persons processed"

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

DeletePerson -ObjectId $ObjectId

$i++

}

Write-Host "`nCommande terminée avec succès`n"

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

Piège

{

$exMessage = $_.Exception.Message

If($exMessage.StartsWith("L :"))

{write-host "`n" $exMessage.substring(2) "`n" -foregroundcolor white -backgroundcolor darkblue}

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

Sortie 1

}

#