functions/folder/Get-EXCContactFolder.ps1
function Get-EXCContactFolder { <# .SYNOPSIS Returns the folder object of the specified path. .DESCRIPTION Returns the folder object of the specified path. .PARAMETER FolderPath The path to the folder, relative to the message folder base. .PARAMETER SmptAddress The email address of the mailbox to access .PARAMETER Service The established Service connection to use for this connection. Use 'Connect-EXCExchange' in order to establish a connection and obtain such an object. .EXAMPLE PS C:\> Get-EXCContactFolder -FolderPath 'Contacts\Private' -SmptAddress 'peter@example.com' -Service $Service Returns the 'Private' folder within the contacts folder for the mailbox peter@example.com #> [CmdletBinding()] param ( [Parameter(Position = 0, Mandatory = $true)] [string] $FolderPath, [Parameter(Position = 1, Mandatory = $true)] [string] $SmptAddress, [Parameter(Position = 2, Mandatory = $false)] [Microsoft.Exchange.WebServices.Data.ExchangeService] $Service, [Parameter(Position = 3, Mandatory = $false)] [String] $MailboxName, [Parameter(Position = 4, Mandatory = $False)] [switch] $ModernAuth, [Parameter(Position = 5, Mandatory = $False)] [String] $ClientId, [Parameter(Position = 6, Mandatory = $False)] [String] $RedirectUri= "urn:ietf:wg:oauth:2.0:oob", [Parameter(Position = 7, Mandatory = $False)] [String] $CertificateFilePath, [Parameter(Position = 8, Mandatory = $False)] [Security.SecureString] $CertificatePassword ) process { if(![String]::IsNullOrEmpty($MailboxName)){ $service = Connect-EXCExchange -MailboxName $MailboxName -Credentials $Credentials -ModernAuth:$ModernAuth.IsPresent -ClientId $ClientId -RedirectUri $RedirectUri -CertificateFilePath $CertificateFilePath -CertificatePassword $CertificatePassword } ## Find and Bind to Folder based on Path #Define the path to search should be seperated with \ #Bind to the MSGFolder Root $folderid = new-object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::MsgFolderRoot, $SmptAddress) $tfTargetFolder = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($Service, $folderid) #Split the Search path into an array $fldArray = $FolderPath.Split("\") #Loop through the Split Array and do a Search for each level of folder for ($lint = 1; $lint -lt $fldArray.Length; $lint++) { #Perform search based on the displayname of each folder level $fvFolderView = new-object Microsoft.Exchange.WebServices.Data.FolderView(1) $SfSearchFilter = new-object Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo([Microsoft.Exchange.WebServices.Data.FolderSchema]::DisplayName, $fldArray[$lint]) $findFolderResults = $Service.FindFolders($tfTargetFolder.Id, $SfSearchFilter, $fvFolderView) if ($findFolderResults.TotalCount -gt 0) { foreach ($folder in $findFolderResults.Folders) { $tfTargetFolder = $folder } } else { Write-host "Error Folder Not Found check path and try again" $tfTargetFolder = $null break } } if ($tfTargetFolder -ne $null) { return [Microsoft.Exchange.WebServices.Data.Folder]::Bind($Service, $tfTargetFolder.Id) } else { throw "Folder Not found" } } } |