Просмотр папок в почтовом ящике outlook в архиве и получение всех элементов в powershell

#powershell #outlook

Вопрос:

Я очень новичок в powershell и пытаюсь рекурсивно получить все элементы в архиве и элементы вложенных папок с путем в указанном почтовом ящике.

Я был бы очень признателен вам за помощь. как я уже говорил ранее, я новичок в powershell и написании сценариев в целом, поэтому мой код с течением времени становится нежизнеспособным.

Вот мой код: «» Очистить узел надстройки типа сборки «Microsoft.Офис.Взаимодействие.Outlook» $Outlook = Новый объект-сообъект Outlook.Приложение $пространство имен = $Outlook.GetNameSpace(«MAPI»)

 Write-Host "Démarrage du script . . . ."   $Year = Get-Date -Format ("yyyy") $YearMonth = Get-Date -Format ("yyyyMM")  $Mailbox = $NameSpace.Folders.Item('spam@exemple.fr').Folders.Item('Archive').Folders.Item($Year).Folders.Item($YearMonth) $Subfolder1 = $NameSpace.Folders.Item('spam@exemple.fr').Folders.Item('Archive').Folders.Item($Year).Folders.Item($YearMonth).folders.item(1) $Subfolder2 = $NameSpace.Folders.Item('spam@exemple.fr').Folders.Item('Archive').Folders.Item($Year).Folders.Item($YearMonth).folders.item(2) $Subfolder3 = $NameSpace.Folders.Item('spam@exemple.fr').Folders.Item('Archive').Folders.Item($Year).Folders.Item($YearMonth).folders.item(3) $Subfolder4 = $NameSpace.Folders.Item('spam@exemple.fr').Folders.Item('Archive').Folders.Item($Year).Folders.Item($YearMonth).folders.item(4)   $Subfolder4sub1 = $NameSpace.Folders.Item('spam@exemple.fr').Folders.Item('Archive').Folders.Item($Year).Folders.Item($YearMonth).folders.item(4).folders.item(1)   $Subfolder4sub2 = $NameSpace.Folders.Item('spam@exemple.fr').Folders.Item('Archive').Folders.Item($Year).Folders.Item($YearMonth).folders.item(4).folders.item(2)  $Subfolder4sub3 = $NameSpace.Folders.Item('spam@exemple.fr').Folders.Item('Archive').Folders.Item($Year).Folders.Item($YearMonth).folders.item(4).folders.item(3)    Write-Host "Traitement des mails . . . ."   $CSVfolder = "C:TEMPdatas_spamV3.csv"  Clear-Content "C:TEMPdatas_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  } '''  

Ответ №1:

РЕДАКТИРОВАТЬ : Я сам нашел решение : «‘ очистить хост $outlook = Новый объект-Com Outlook.Приложение $mapi = $outlook.GetNamespace(‘MAPI’) $mailboxRoot = пространство имен$.Папки.Пункт(‘spam@mail.fr»).Папки.Элемент(«Архив») $месяц = Формат даты получения («ГГГГ»)

 Clear-Content "C:TEMPOut_SPAM.csv" $headers = "Id;Emplacement;Date;Emetteur;Sujet" | Add-Content -Path  "C:TEMPOut_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:TEMPOut_SPAM.csv"  }    amp; $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)) {  amp; $walkFolderScriptBlockBis $item    }  $temp = $index   1  amp; $walkFolderScriptBlock $item $temp  }    } } $index = 0 amp; $walkFolderScriptBlock $mailboxRoot $index  

»’