[PowerShell] Gestire gli account di Outlook da .Net e PowerShell

Avete mai avuto bisogno leggere o modificare le impostazioni degli account di Outlook da .Net o PowerShell?

Per esempio la necessità di cambiare al volo gli indirizzi dei server SMTP di tutti i vostri account su Outlook a causa dei limiti imposti da qualche rete / provider?

Su Codeplex trovate un progettino all'uopo che ho appena pubblicato: http://www.codeplex.com/PSOutlookManager

Consiste in una piccola class library che wrappa le Account Management API (IOlkAccountManager & co.), alcune Cmdlets per gestire facilmente gli account da PowerShell e qualche script di esempio.

Cavarsela con qualche riga in VBScript e l'automazione di Outlook sarebbe stato oro, peccato che quest'ultima non offre nulla sul tema.

Fortunatamente ci sono le (scarsamente documentate) Account Management API (IOlkAccountManager & co.) da Outlook 2003 in poi, non utilizzabili via vbscript o COM Interop .Net e quindi... niet modifiche degli account da applicazioni managed!

A questo punto un bel mixed mode assembly in C++/CLI è stato d'obbligo per wrappare le funzionalità. Anche qui, data la mancanza di documentazione, OutlookSpy è stato fondamentale, assieme ad un progettino analogo per MFC su Codeproject

Per PowerSheel trovate tre Cmdlets di facile utilizzo (si veda la home su Codeplex per documentazione ed esempi di script):
  • Get-MAPIProfile
  • Get-MAPIAccount
  • Set-MAPIAccount

Se invece volete usare .Net, la piccola class library è di comprensione immediata.

Ecco un esempio in C#:

using AlexPilotti.OutlookAccountManager;
...
// Initialize MAPI
AccountManager.MAPIInitialize();

// Get the available MAPI profiles list
IList<ProfileData> profiles = AccountManager.GetProfiles();

// Get the MAPI accounts in the first profile (e.g. "Outlook")

IList<AccountData> accounts = AccountManager.GetAccounts(profiles[0].ProfileName);

// Do some changes in the account settings

accounts[0].EmailID = "changed.email@acme.com";
accounts[0].OutgoingServer = "new.smtpserver.com";

// Update the account

AccountManager.SaveAccountData(accounts[0]);

// That's it!

AccountManager.MAPIUninitialize();


posted @ martedì 3 febbraio 2009 16:39

Print
Comments have been closed on this topic.