internal/functions/Method1to5.ps1

Function Method1to5 {
    <#
    .SYNOPSIS
    Method to list folders in the user mailbox.
     
    .DESCRIPTION
    Method to list folders in the user mailbox, showing Folder name, FolderId, Number of items, and number of subfolders.
     
    .PARAMETER ClientID
    String parameter with the ClientID (or AppId) of your AzureAD Registered App.
 
    .PARAMETER TenantID
    String parameter with the TenantID your AzureAD tenant.
 
    .PARAMETER ClientSecret
    String parameter with the Client Secret which is configured in the AzureAD App.
 
    .EXAMPLE
    PS C:\> Method1to5
    lists folders in the user mailbox.
 
    #>

    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseSingularNouns", "")]
    [CmdletBinding()]
    param(
        [String] $ClientID,

        [String] $TenantID,

        [String] $ClientSecret
    )
    $statusBarLabel.Text = "Running..."
    Test-StopWatch -Service $service -ClientID $ClientID -TenantID $TenantID -ClientSecret $ClientSecret
    Function Find-Subfolders {
        Param (
            $array,

            $ParentFolderId,

            $ParentDisplayname
        )
        $sourceFolderId = new-object Microsoft.Exchange.WebServices.Data.FolderId($ParentFolderId)
        $rootfolder = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,$sourceFolderId)

        $FolderView = New-Object Microsoft.Exchange.WebServices.Data.FolderView(100)
        #$FolderView.Traversal = "Deep"
        
        $rootfolder.load()
        foreach ($folder in $rootfolder.FindFolders($FolderView) ) {
            $i++
            $DisplayName = "$ParentDisplayname\$($Folder.Displayname)"
            $output = $folder | Select-Object @{N = "Displayname" ; E = {$DisplayName}}, @{N = "TotalItemsCount"; E = { $_.TotalCount } }, @{N = "# of Subfolders"; E = { $_.ChildFolderCount } }, Id
            $array.Add($output)
            if ($folder.ChildFolderCount -gt 0) {
                #write-host "looking for subfolders under $($folder.displayname)" -ForegroundColor Green
                Find-Subfolders -ParentFolderId $folder.id -ParentDisplayname $Displayname -Array $array
            }
        }
    }

    if ($radiobutton1.Checked) { $Wellknownfolder = "MsgFolderRoot" }
    elseif ($radiobutton2.Checked) { $Wellknownfolder = "ArchiveMsgFolderRoot" }
    elseif ($radiobutton3.Checked) { $Wellknownfolder = "PublicFoldersRoot" }
    elseif ($radiobutton4.Checked) { $Wellknownfolder = "RecoverableItemsRoot" }
    elseif ($radiobutton5.Checked) { $Wellknownfolder = "ArchiveRecoverableItemsRoot" }

    #listing all available folders in the mailbox
    $rootfolder = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service, [Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::$Wellknownfolder)
    $array = New-Object System.Collections.ArrayList
    Find-Subfolders -ParentFolderId $rootfolder.id -Array $array -ParentDisplayname ""

    $dgResults.datasource = $array
    $dgResults.AutoResizeColumns()
    $dgResults.Visible = $True
    $txtBoxResults.Visible = $False
    $PremiseForm.refresh()
    $statusBarLabel.Text = "Ready. Folders found: $($array.Count)"
    Write-PSFMessage -Level Output -Message "Task finished succesfully" -FunctionName "Method 1-5" -Target $email
}