Search code examples
powershellautomationmailitem

How do I reference Folder and Subfolder


How do I reference the email folder & subfolder? In line 8 of my code, I am failing with olxEmailFolder and every other attempt to getting the folder. Any thoughts?

#connect to outlook
$GetOutlook = New-Object -com "Outlook.Application"; 
$olName = $GetOutlook.GetNamespace("MAPI")
$olxEmailFolder = $olName.GetDefaultFolder('olFolderInbox')
$olxEmailFolder.Name
$olxEmailItem = $olxemailFolder.items
#show unread emails in inbox
$olxEmailItem | select olxEmailFolder, ReceivedByName, SentOnBehalfOfName, SentOn, Subject, Body | Format-Table -auto | Out-File "C:\results.txt"
#go through each subfolder and get name
$SubFolders = $olxEmailFolder.Folders
ForEach($Folder in $SubFolders)
{
   $Folder.Name
   $SubfolderItem = $Folder.Items
   $EmailCount = 1
#create status bar for each subfolder
   ForEach($Email in $SubfolderItem)
   {
     Do
     {
        Write-Progress -Activity "Checking folder" -status $Folder.Name -PercentComplete ($EmailCount/$Folder.Items.Count*100)
        $EmailCount++
     }
#show unread emails from subfolders
     While($EmailCount -le $Folders.Item.Count)
   }
}

Solution

  • Here you go Copra:

    #connect to outlook
    $GetOutlook = New-Object -com "Outlook.Application"; 
    $olName = $GetOutlook.GetNamespace("MAPI")
    $olxEmailFolder = $olName.GetDefaultFolder(‘olFolderInbox’)
    $olxEmailFolder.Name
    $olxEmailItem = $olxemailFolder.items
    
    #show unread emails in inbox
    $olxEmailItem | select SentOn, SenderName, Subject, Body | Format-Table -auto | Out-File "C:\A_results.txt"
    
    #go through each subfolder and get name
    $SubFolders = $olxEmailFolder.Folders 
    
    ForEach($Folder in $SubFolders)
    {
       $Folder.Name | select $Folder.Name | Format-Table -auto | Out-File "C:\A_results.txt" -Append 
       $SubfolderItem = $Folder.Items
       $EmailCount = 1
    #create status bar for each subfolder
       ForEach($Email in $SubfolderItem)
       {
         Do
         {
            Write-Progress -Activity "Checking folder" -status $Folder.Name -PercentComplete ($EmailCount/$Folder.Items.Count*100) 
            $EmailCount++
         }
    #show unread emails from subfolders
         While($EmailCount -le $Folders.Item.Count)
       $Email | select SentOn, SenderName, Subject, Body | Format-Table -Auto | Out-File "C:\A_results.txt" -Append
       }
    }
    #connect to tasks
    $olxTasksFolder = $olName.GetDefaultFolder(‘olFolderTasks’)
    $olxTaskItems = $olxTasksFolder.items
    $TaskCount = 1
    #create task array
    $TaskList = @()
    ForEach($TaskItem in $olxTaskItems)
    {
    #create status bar for tasks
       Do
       {
         Write-Progress -Activity "Checking" -status "Tasks" -PercentComplete ($Taskcount/$olxTasksFolder.Items.count*100) | select $Taskcount, $olxTasksFolder.Items | Out-File "C:\D_results.txt"
         $TaskCount++
       }
    #add each incomplete tash to array
       While($TaskCount -le $olxTaskFolder.Items.Count)
       If($TaskItem.Complete -eq $False)
       {
       $TaskList+=New-Object -TypeName PSObject -Property @{
       Subject=$TaskItem.Subject
       DateCreated=$TaskItem.CreationTime
       Percent=$TaskItem.PercentComplete
       Due=$TaskItem.DueDate
       }}
    }
    #show task array to screen
    #$TaskList | Sort DueDate -descending | Format-Table -Auto