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.
Comments