#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
»’