Created
May 5, 2015 09:37
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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