Reputation: 21
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
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