kayasax
5/5/2015 - 9:37 AM

Afficher la liste des dossiers outlook ou trouver le chemin d'accès d'un dossier particulier

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