Nov 18 2011

Powershell: Inventaire Mobile Blackberry et Activesync sous Exchange

Quand vous mettez en place un solution de messagerie Exchange vous avez la possibilité de permettre à vos utilisateurs d’accéder à leur boite aux lettres sur leur mobile via le protocole ActiveSync pour la plupart des plateformes (IPhone, Android, Windows Phone…). En ce qui concerne Blackberry, pour une solution d’entreprise, il est conseillé de mettre en place une infrastructure BES.

Le but de ce script Powershell est de réaliser un inventaire de l’ensemble des mobiles se connectant à votre messagerie d’entreprise Exchange. Cela se fait en deux parties: Un inventaire Blackberry en requêtant la base de configuration SQL BES et un inventaire des mobiles utilisant le protocole ActiveSync en requêtant l’Active Directory:

Inventaire BlackBerry:

Toutes les informations de configuration de votre solution BES sont stockées dans la base SQL BESMGMT, vous trouverez donc entre autres toutes les informations concernant les mobiles BlackBerry. Pour cela trois tables sont intéressantes:

  • UserConfig: Contient entre autres l’adresse Email de l’utilisateur (MailboxSMTPAddr).
  • SyncDeviceMgmtSummary: Modèle du blackberry et version d’OS (ModelName et AppsVer).
  • UserStats: Date du dernier Email reçu (LastFwdTime).

En utilisant SQL Management Studio vous pouvez naviguer dans les tables pour retrouver les informations utiles:

Il ne vous reste plus qu’à utiliser PowerShell pour vous connecter à la base SQL et récupérer les informations qui vous sont utiles. La clef commune entre les trois tables est la valeur ID. Nous ne prenons en compte que les BlackBerry ayant reçu un Email au cours des 60 derniers jours.

$days = 60
$dbServer = "SQLBES-SRV"
$db = "BESMgmt"
 
#If you use SA account to connect database, change pwd=XXXXXX!, or use Windows Authentication, see below
$connString = "Server=$dbServer;Database=$db;uid=sa;pwd=XXXXXX"
 
#If you use Windows Authentication to connect BESMGMT SQL Database, need setup the database
#$connString = "Server=$dbServer;Database=$db;Integrated Security=True"
 
#SQL Query to retrieve BB devices Info (only devices who recieved mail in the last $days)
$Query = "Select UserConfig.DisplayName,MailboxSMTPAddr,ModelName,LastFwdTime,AppsVer from UserConfig,SyncDeviceMgmtSummary,UserStats where UserConfig.ID=SyncDeviceMgmtSummary.UserConfigID AND UserConfig.ID=UserStats.UserConfigID AND DeviceType <> 0 AND ModelName <> '' AND DateDiff(dd,LastFwdTime,GETDATE()) < "+$days
 
#Connect to Database, run Query, Disconnect
 
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = $connString
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $Query
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$bbs = $DataSet.Tables[0]

Si vous voulez plus d’exemples de requêtes SQL sur BES vous pouvez lire ce post ou bien ce forum qui nécessite l’utilisation des Cmdlets SQL 2008. Le script ci dessus fait appel directement au Namespace System.Data.SqlClient et ne nécessite que PowerShell v2.

Il ne vous reste plus qu’à parcourir $bbs pour avoir les informations sur vos clients BlackBerry.

Inventaire ActiveSync:

En ce qui concerne l’inventaire de vos autres mobiles se connectant via ActiveSync c’est plus simple, car l’information est stockée dans Active Directory. En effet comme l’indique Florian’s blog ces données sont un sous objet de votre compte utilisateur: Pour vous en convaincre, ouvrez une console dsa.msc:

Grâce à l’Exchange Management Shell (2007 et 2010), le cmdlet Get-ActiveSyncDeviceStatistics permet de fournir très facilement des statistiques sur vos mobiles utilisant ActiveSync: Pour des exemples lire ce post de Ben Lye sur le sujet. Les valeurs suivantes sont particulièrement intéressantes:

  • DeviceType: Le type de mobile (ex: Iphone, WP, Android…)
  • DeviceModel: Le modèle de mobile (ex: HTC, LG, Samsung, Iphone…)
  • DeviceUserAgent: Figure la build de l’OS (Iphone, WP, Android…)
  • LastSuccessSync: Dernière synchronisation ActiveSync réussie, nous filtrons tout comme les BlackBerry, les mobiles ayant répondu au cours des 60 derniers jours.

Nous retrouvons donc à peu près les mêmes informations que celles obtenues sur les BlackBerry via notre requête SQL.

Fonctionnement général du script:

Nous commençons donc par faire un inventaire BlackBerry en requêtant la base SQL BESMGMT. Pour chaque adresse Email MailboxSMTPAddr nous vérifions si il possède aussi un mobile utilisant le protocole ActiveSync (et oui quand on est vraiment VIP on a un BlackBerry et un Ipad 🙂 ), ceci via la commande:

$acts = Get-ActiveSyncDeviceStatistics -Mailbox $bb.MailboxSMTPAddr
 
if (($acts | Measure-object).count -eq 0) {User has just one BB no ActiveSync device}
 
else {User has one ActiveSync device in addition to BB}

Une fois l’inventaire BlackBerry terminé nous chargeons l’ensemble des boites aux lettres utilisateur Exchange via la commande:

$Mailboxes = Get-Mailbox -RecipientTypeDetails UserMailbox -ResultSize Unlimited

Puis nous comparons leur PrimarySmtpAddress (récupéré via le cmdlet Get-Mailbox) avec les MailboxSMTPAddr ($BESsmtpArray) afin d’exclure les utilisateurs déjà traités dans l’inventaire BlackBerry. Pour ces utilisateurs restants nous vérifions si ils possèdent un mobile utilisant ActiveSync.

Le résultat sort sous la forme d’un fichier CSV avec les informations suivantes:

  • Adresse Email de l’utilisateur.
  • Nombre de mobiles (ActiveSync + BlackBerry).
  • Type de mobile: BlackBerry, IPhone, WP, Android…
  • Modèle du mobile: Modèle de BlackBerry, Samsung, HTC, LG…
  • Version d’OS.
  • Dernière connexion: Dernier Email reçu sur BlackBerry, dernière synchronisation ActiveSync.

Voici un exemple de résultat obtenu:

Il vous faudra modifier les paramètres suivants dans le script et le lancer à partir de l’Exchange Management Shell:

  • $days: Si vous souhaitez alonger ou réduire le seuil d’inactivité (60 jours par défaut).
  • $dbServer: Nom de votre serveur SQL BES.
  • La variable $connString: Selon le type d’authentification à la base SQL que vous utilisez.

Pour télécharger le script complet, c’est ici:

PS: Le script n’a été testé que sous Exchange 2010 et BES 5.02, merci de vos retours sur les autres versions. A valider sous Exchange 2007, le cmdlet utilisé étant le même.

This post is also available in: Anglais

No Comments

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment

*

WordPress Themes

Blossom Icon Set

Software Top Blogs