Powershell: Désactiver les appareils ActiveSync non utilisés
Nous allons voir dans ce post comment désactiver les vieux appareils ActiveSync qui ne sont plus utilisés par vos utilisateurs. Il existe déjà pour cela un script proposé sur les forums MS Exchange, mais celui peut ne pas fonctionner dans certains cas:
Prenons un utilisateur situé dans une OU donnée, chaque OU correspond à un site ou région de la société, et voyons les résultats du paramètre identity pour les cmdlets Get-ActiveSyncDevice et Get-ActiveSyncDeviceStatistics:
Les paramètres identity des deux Cmdlets sont identiques. Supposons maintenant que notre utilisateur soit muté sur un autre site ou région, son compte utilisateur est bougé dans l’OU correspondant à son nouveau site:
L’utilisateur a rendu l’appareil ActiveSync à son ancien site et n’est donc plus utilisé. Lançons les deux cmdlets Get-ActiveSyncDevice et Get-ActiveSyncDeviceStatistics et voyons le résultat:
On voit que le paramètre identity de Get-ActiveSyncDevice a été mis à jour avec la nouvelle OU mais pas celui du cmdlet Get-ActiveSyncDeviceStatistics.
Donc si nous appliquons le onliner suivant, qui supprime les appareils qui ne se sont pas connectés depuis 90 jours, alors la suppression se terminera en échec:
Get-ActiveSyncDevice -ResultSize unlimited | Get-ActiveSyncDeviceStatistics | where {$_.LastSyncAttemptTime -lt (get-date).adddays(-30)} | Remove-ActiveSyncDevice |
Ceci avec le message d’erreur suivant:
Couldn’t find ‘ldap389.info/BSR2/test-vpn’ as a recipient.
+ CategoryInfo : InvalidArgument: (:) [Remove-ActiveSyncDevice], RecipientNotFoundException
+ FullyQualifiedErrorId : 2060141F,Microsoft.Exchange.Management.Tasks.RemoveMobileDevice
La solution de contournement est de se baser sur le GUID du paramètre identity, ce paramètre ne changeant jamais et étant commun entre les deux cmdlets Get-ActiveSyncDevice et Get-ActiveSyncDeviceStatistics, la suppression du device se fera sans problèmes. Donc pour supprimer les appareils qui ne sont pas synchronisés depuis 90 jours utiliser le script suivant:
$guids = Get-ActiveSyncDevice -ResultSize unlimited | Get-ActiveSyncDeviceStatistics | where {$_.LastSyncAttemptTime -lt (get-date).adddays(-90)} | select guid,identity foreach($guid in $guids){ $UniqueID = [string]$guid.guid remove-activesyncdevice $UniqueID -confirm:$false} |
Les comptes peuvent être déplacés d’OU et la suppression sera tout de même effectuée.
This post is also available in: Anglais