Advanced Windows PowerShell Scripting Video Training

Advanced Windows PowerShell Scripting Video Training
Advanced Windows PowerShell Scripting Video Training

Monday, May 11, 2015

Listing Public Folders in Exchange Server

This weekend I built an entirely new virtual environment for my PowerShell classes moving forward.  Essentially I did this to add in some SQL, Exchange and DSC scenarios.  Just in time to.  I have two Exchange administrators in my PowerShell class this week here in Fort Wayne so I am using my new setup to enhance the class.  Here is the first one.

How do I let all of the public folders, including sub folders?

The Get-PublicFolder cmdlet can be used for this.  Here is the public folder structure that I created using the New-PublicFolder cmdlet.

Level 1 Level 2 Level 3
Folder1    
Folder2    
  FolderA  
    Folder1A
    Folder2A
  FolderB  

This command will recover all the public folders and their parents.

PS C:> Get-PublicFolder -Recurse | Select -Property name,parentpath

 

Name        ParentPath     

----        ----------     

IPM_SUBTREE                

Folder1     \              

Folder2     \              

FolderA     \Folder2       

Folder1A    \Folder2\FolderA

Folder2A    \Folder2\FolderA

FolderB     \Folder2

 

The second question is how to filter for public folders within a parent folder?

PS C:\> Get-PublicFolder -Recurse |

    Where-Object {$_.ParentPath -like "*Folder2*"} |

    Select -Property name,parentpath

 

Name     ParentPath     

----     ----------     

FolderA  \Folder2       

Folder1A \Folder2\FolderA

Folder2A \Folder2\FolderA

FolderB  \Folder2  

 

Here we are using The Where-Object cmdlet to filter the ParentPath property.  The Value of ParentPath is a string.  In this example, we are looking for any folder inside of Folder2.

Another option utilizes the FolderPath property.  The FolderPath property is an array of strings. 

PS C:\> Get-PublicFolder -Recurse |

    Select-Object -Property Name, FolderPath |

    Where-Object {$_.FolderPath -contains "Folder2"}

 

Name     FolderPath                 

----     ----------                 

Folder2  {Folder2}                  

FolderA  {Folder2, FolderA}         

Folder1A {Folder2, FolderA, Folder1A}

Folder2A {Folder2, FolderA, Folder2A}

FolderB  {Folder2, FolderB

 

This output also contains the root folder in the query, Folder2

More to come as we continue this week.

No comments: