DonPepperoni
DonPepperoni

Reputation: 21

Looping through folders in outlook Mailbox in archive and get all the items in powershell

I'm very new to powershell and I'm attempting to get recursively all items in archive and the subfolders items with the path in a specified mailbox.

I would really appreciate your help. as I said before, I am new to powershell and scripting in general so my code isn't viable through the time.

Here is my code : ''' Clear-Host Add-Type -assembly "Microsoft.Office.Interop.Outlook" $Outlook = New-Object -comobject Outlook.Application $namespace = $Outlook.GetNameSpace("MAPI")

Write-Host "Démarrage du script . . . ."


$Year = Get-Date -Format ("yyyy")
$YearMonth = Get-Date -Format ("yyyyMM")

$Mailbox = $NameSpace.Folders.Item('[email protected]').Folders.Item('Archive').Folders.Item($Year).Folders.Item($YearMonth)
$Subfolder1 = $NameSpace.Folders.Item('[email protected]').Folders.Item('Archive').Folders.Item($Year).Folders.Item($YearMonth).folders.item(1)
$Subfolder2 = $NameSpace.Folders.Item('[email protected]').Folders.Item('Archive').Folders.Item($Year).Folders.Item($YearMonth).folders.item(2)
$Subfolder3 = $NameSpace.Folders.Item('[email protected]').Folders.Item('Archive').Folders.Item($Year).Folders.Item($YearMonth).folders.item(3)
$Subfolder4 = $NameSpace.Folders.Item('[email protected]').Folders.Item('Archive').Folders.Item($Year).Folders.Item($YearMonth).folders.item(4)
  
$Subfolder4sub1 = $NameSpace.Folders.Item('[email protected]').Folders.Item('Archive').Folders.Item($Year).Folders.Item($YearMonth).folders.item(4).folders.item(1)
  
$Subfolder4sub2 = $NameSpace.Folders.Item('[email protected]').Folders.Item('Archive').Folders.Item($Year).Folders.Item($YearMonth).folders.item(4).folders.item(2)

$Subfolder4sub3 = $NameSpace.Folders.Item('[email protected]').Folders.Item('Archive').Folders.Item($Year).Folders.Item($YearMonth).folders.item(4).folders.item(3)


 Write-Host "Traitement des mails . . . ."

 $CSVfolder = "C:\TEMP\datas_spamV3.csv"
 Clear-Content "C:\TEMP\datas_spamV3.csv"

 $headers = "Id;Emplacement;Date;Emetteur;Sujet" | Add-Content -Path $CSVfolder


 $Mailbox.Items | foreach {
                $Id = New-Guid
                $path = $Mailbox.FullFolderPath
                $datas = "$($_.ReceivedTime);$($_.SenderEmailAddress);$($_.Subject)"
                "$Id;$path;$datas" | Add-Content -Path $CSVfolder
    }

 $Subfolder1.Items | foreach {
                $Id = New-Guid
                $path = $Subfolder1.FullFolderPath
                $datas = "$($_.ReceivedTime);$($_.SenderEmailAddress);$($_.Subject)"
                "$Id;$path;$datas" | Add-Content -Path $CSVfolder
    }

$Subfolder2.Items | foreach {
                $Id = New-Guid
                $path = $Subfolder2.FullFolderPath
                $datas = "$($_.ReceivedTime);$($_.SenderEmailAddress);$($_.Subject)"
                "$Id;$path;$datas" | Add-Content -Path $CSVfolder
    }

$Subfolder3.Items | foreach {
                $Id = New-Guid
                $path = $Subfolder3.FullFolderPath
                $datas = "$($_.ReceivedTime);$($_.SenderEmailAddress);$($_.Subject)"
                "$Id;$path;$datas" | Add-Content -Path $CSVfolder
    }

 $Subfolder4sub1.Items | foreach {
                $Id
                $path = $Subfolder4sub1.FullFolderPath
                $datas = "$($_.ReceivedTime);$($_.SenderEmailAddress);$($_.Subject)"
                "$Id;$path;$datas" | Add-Content -Path $CSVfolder
    }

$Subfolder4sub2.Items | foreach {
                $Id = New-Guid
                $path = $Subfolder4sub2.FullFolderPath
                $datas = "$($_.ReceivedTime);$($_.SenderEmailAddress);$($_.Subject)"
                "$Id;$path;$datas" | Add-Content -Path $CSVfolder
    }

$Subfolder4sub2.Items | foreach {
                $Id = New-Guid
                $path = $Subfolder4sub3.FullFolderPath
                $datas = "$($_.ReceivedTime);$($_.SenderEmailAddress);$($_.Subject)"
                "$Id;$path;$datas" | Add-Content -Path $CSVfolder
    }
'''

Upvotes: 0

Views: 1057

Answers (1)

DonPepperoni
DonPepperoni

Reputation: 21

EDIT : I found the solution by myself : ''' clear-host $outlook = New-Object -Com Outlook.Application $mapi = $outlook.GetNamespace('MAPI') $mailboxRoot = $NameSpace.Folders.Item('[email protected]').Folders.Item('Archive') $yearmonth = Get-Date -Format ("yyyyMM")

    Clear-Content "C:\TEMP\Out_SPAM.csv"
$headers = "Id;Emplacement;Date;Emetteur;Sujet" | Add-Content -Path 
"C:\TEMP\Out_SPAM.csv"

$walkFolderScriptBlockBis = {
    param(
        $currentFolder
    )
     foreach ($item in $currentFolder.Folders) {
                    $item.Items() | Foreach { 
                    $Id = $_.ConversationId
                    $path = $item.FullFolderPath
                    $datas = "$($_.ReceivedTime);$($_.SenderName);$($_.Subject)"
                    "$Id;$path;$datas" | Add-Content -Path "C:\TEMP\Out_SPAM.csv"
                    }
                
            & $walkFolderScriptBlockBis $item
    
    
    }
}

$walkFolderScriptBlock = {
    param(
        $currentFolder,$index
    )
    foreach ($item in $currentFolder.Folders) {
        if($index -lt 3){
            #$item.FolderPath
            $yearmonth = Get-Date -Format ("yyyyMM")
            if ($item.FolderPath.Contains($yearmonth)) {
                & $walkFolderScriptBlockBis $item
                
            }
            $temp = $index + 1
            & $walkFolderScriptBlock $item $temp
          }
    
     }
}
$index = 0
& $walkFolderScriptBlock $mailboxRoot $index

'''

Upvotes: 2

Related Questions