Flash info

Une frénésie incontrollée poussent certains individus à convertir tous les scripts d'admin en PowerShell. L'un d'eux aurait été apperçu récemment près du campus universitaire de Talence.

 
Accueil arrow Bibliothèque de scripts arrow MS Office arrow Obtenir les fichiers PST connectés à Outlook
Obtenir les fichiers PST connectés à Outlook
Écrit par Arnaud Petitjean [MVP]   
09-09-2010

Testé sur : Outlook 2007, et 2003 

Dans certains cas, il peut être utile de déterminer par script quels sont les fichiers d'archives (PST)  Outlook connectés dans la session courante d'un utilisateur.

Typiquement cette information peut avoir son utilité dans un script de logon afin d'effectuer par la suite les actions qui s'imposent sur ces fichiers. Bref, les applications peuvent être multiples...

Exemple d'utilisation :

PS > Get-PSTArchive | Format-Table -Autosize

PSTPath                                     Size  Description  StoreID
-------                                     ----  -----------  -------
C:\...\Dossiers personnels(1).pst           271360             0000000038A1BB100...
\\monServeur\...\Dossiers personnels(2).pst 271360             0000000038A1BB100...

Function Get-PSTArchive
{
    <#
      Retourne un objet de cette forme :

        PSTPath                            Size Description         StoreID
        -------                            ---- -----------         -------
        P:\Archive 2009.pst           550585344 Archives mails 2009 0000000038A1BB1005E5101AA1BB08002B2A56C200006D737073742E...
        P:\Dossiers personnels(1).pst    271360                     0000000038A1BB1005E5101AA1BB08002B2A56C200006D737073742E...
        P:\Archives 2006-2007.pst     552616960                     0000000038A1BB1005E5101AA1BB08002B2A56C200006D737073742E...
    #>

   Function ConvertStoreID
   {
      Param ([STRING]$StoreID)

 
     $str = ''
      For ($i=0; $i -lt $StoreID.length; $i=$i+2) # on prend 2 caractères par 2 caractères
      {
         $car = ($StoreID.substring($i,2))
         If ($car -ne '00')
         {
            $car = [convert]::ToInt32($car,16)    # conversion Hexa -> Décimal
            $str = $str + [char]$car
         }
      }
      Write-Output ($str.SubString(36))           # extraction de la chaine à partir du 36e caractère
   }

   $ol=New-Object -ComObject Outlook.Application
   $ns=$ol.GetNamespace('MAPI')

   $ns.folders | where {$_.Name -eq 'dossiers personnels'} |
      Select-Object @{name='PSTPath';expression={ConvertStoreID $_.StoreID}},
                    @{name='Size';expression={Get-Item (ConvertStoreID $_.StoreID) | Select-Object -ExpandProperty Length}},
                    @{name='Description';expression={$_.Description}},
                    @{name='StoreID';expression={$_.StoreID}}
}

Exemple d'utilisation :

PS > Get-PSTArchive | Format-Table -Autosize

PSTPath                                                                           Size  Description  StoreID
-------                                                                           ----  -----------  -------
C:\Users\petitjean a\AppData\Local\Microsoft\Outlook\Dossiers personnels(1).pst   271360             0000000038A1BB100...
\\monServeur\Homes\petitjean a\Dossiers personnels(2).pst                         271360             0000000038A1BB100...

En retour, la fonction Get-PSTArchive retourne un objet personnalisé (ou un tableau d'objets s'il y a plusieurs archives connectées) avec 4 propriétés qui sont : PSTPath, Size, Description et StoreID.

La difficulté de ce script réside dans le fait que les chemins des fichiers PST ne sont pas en clair (pourquoi faire simple ?). Il faut donc convertir la propriété StoreID via la fonction ConvertStoreID.

Voir aussi : Connecter / déconnecter une archive à Outlook 

Enjoy !

Dernière mise à jour : ( 09-09-2010 )
 
© 2017 PowerShell-Scripting.com