j’ai fait ce script pour supprimer un accès sur plusieurs roles :
Entete spec pour envoi en PATCH
$headersmove = @{
Authorization = "Bearer $($token.access_token)"
Accept = "application/json"
"Content-Type" = "application/json-patch+json"
}
# On boucle sur les roles pour supprimer le profil d'accès sélectionné
foreach ($role in $rolesAvecProfil) {
$lerole = Repair-ApiText $role.name
Write-Host "Traitement du rôle : $lerole" -ForegroundColor Blue
$roleId = $role.id
##recherche index du profil afin de le supprimer
$index = -1
$role.accessProfiles
for ($i = 0; $i -lt $role.accessProfiles.Count; $i++) {
if ($role.accessProfiles[$i].id -eq $profileId) {
$index = $i
break
}
}
# Profil non retrouvé
if ($index -lt 0) {
Write-Verbose "Le profil $profileId n’est pas associé au rôle $lerole"
continue
}
# Envoi du retrait
$patchBody = @(
@{
op = "remove"
path = "/accessProfiles/$index"
}
) | ConvertTo-Json -Depth 6
$patchBody = "[" + $patchBody + "]"
# Envoi API
# Retrait du profil du role
Write-Host "Envoi de retrait du profil d'accès au rôle : $lerole" -ForegroundColor Blue
$response = Invoke-RestMethod -Method PATCH -Uri "$tenantUrl/v3/roles/$roleId" -Headers $headersmove -Body $patchBody
Write-Host "Traitement fini" -ForegroundColor Green
Start-Sleep -Seconds 1
$roleCheck = Invoke-RestMethod -Method GET -Uri "$tenantUrl/v3/roles/$roleId" -Headers $headersmove
if ($roleCheck.accessProfiles.id -contains $profileId) {
$roleCheck
Write-Host "Profil TOUJOURS présent sur $lerole" -ForegroundColor Red
} else {
Write-Host "Profil supprimé de $lerole" -ForegroundColor Green
}
}
}
ça fonctionne bien sauf que sur certains roles rien ne se fait.
Est ce que c normal ?
sinon il y a peut-être un moyen plus efficace ?
Merci.