Skip to content

Instantly share code, notes, and snippets.

@kayasax
Created May 5, 2015 09:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kayasax/70b8897a208717f677dc to your computer and use it in GitHub Desktop.
Save kayasax/70b8897a208717f677dc to your computer and use it in GitHub Desktop.
Afficher la liste des dossiers outlook ou trouver le chemin d'accès d'un dossier particulier
# SMAC - LM - 05/05/2015
<#
.Synopsis
Recherche des dossiers dans outlook
Si un nom de dossier est passé en paramètre le script affichera son chemin d'accès,
Si aucun nom n'est fourni, le script liste tous les dossiers outlook
.Description
Utilisation de l'objet COM outlook afin de parcourir les dossiers.
.Parameter dossier
contient le nom (ou une partie du nom) du dossier à chercher. Si ce paramètre n'est pas renseigné l'arborescence complète sera affichée.
.Notes
Changelog :
#>
[CmdletBinding()] #make script react as cmdlet (-verbose etc..)
param(
[Parameter(Position=0, Mandatory=$false,ValueFromPipeline = $true)]
[System.String]
$dossier=$null
)
$output=""
$find=@() #tableau pour le résultat de la recherche
function Get-MailboxFolder($folder,$prefix, $search=$null, $firstrun=$false){
if(($search -ne $null) -and ($folder.name -match $search)) {
$script:find+=$folder.folderpath # si le nom du dossier contient le terme recherché on l'ajoute au tableau des résultats
}
if($firstrun -eq $true){$script:output=$script:output+"$prefix$($_.name)`n"} # affichage du nom des dossiers de 1er niveau
if ($folder.folders.count -gt 0 ){ # si le dossier contient des sous-dossiers
if($firstrun -eq $false){
$script:output=$script:output+"$prefix$($folder.name)`n"
}
$prefix=" "+$prefix # modification du préfixe
$folder.folders |sort -property name| %{ get-MailboxFolder $_ $prefix $search} #appel récursif de la fonction
}
# pas de sous dossier
if($folder.folders.count -eq 0 -and $firstrun -eq $false){$script:output=$script:output+"$prefix$($folder.name)`n"}
}
# ouverture outlook
$o=New-Object -ComObject outlook.application
$ns=$o.GetNamespace("MAPI")
$bal=$ns.Folders.Item(1) #compte de messagerie par défaut
$prefix="└"
$i=1
$bal.folders|sort -property name |%{
$percent=$i*100/($bal.folders.count)
write-progress -activity "Recherche en cours merci de patienter" -currentoperation "$($_.name)" -percentcomplete $percent
get-MailboxFolder $_ $prefix $dossier $true
$i++
}
if(($dossier -ne $null) -and ($dossier -ne "")){ # Fait on une recherche ?
if ($find.count -eq 0){write-host "Aucun dossier *$dossier* n'a pas été trouvé"}
else{write-host "Le terme *$dossier* a été trouvé dans : ";$find}
}
else{$script:output} # afficher l'arborescence
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment