2016-09-12 4 views
-1

Небольшой фон.Powershell Сохранить вложения в подпапках в Outlook

В моих Входящих У меня есть подпапку Один Внутри этого письмо от кого-то с приложением под названием One.pdf в почтовом ящике у меня есть подпапка Два Внутри этого письмо от кого-то с приложением под названием Two.pdf В моей папке «Входящие» у меня есть подпапка «Собственная внутри», у меня есть подпапка под названием «Три». Внутри это письмо от кого-то с приставкой под названием Three.pdf в своем почтовом ящике я имею утра Email с приложением под названием Four.pdf

Inbox 
-----One 
--------Three 
-----Two 

еще со мной? :)

У меня есть требование сделать следующее.

Мне нужно разобрать почту и найти вложение .PDF и сохранить ее в другом месте на диске. Затем мне нужно разобрать подпапки в папке «Входящие». Если я найду .pdf, мне нужно сделать две вещи.

Мне нужно проверить, существуют ли папки и если они не созданы. Мне нужно сохранить .PDF в этой подпапке в папку, которую я только что создал.

В настоящее время я могу создать подпапки.

Моя проблема: я не могу создать правильные файлы в каждой подпапке. Infact прямо сейчас могу только создать four.pdf, и я могу создать это во всех подпапках.

В настоящее время я работаю с этим кодом.

$O=0 
$Obj = New-Object -comobject outlook.application 
$Name = $Obj.GetNamespace(“MAPI”) 
$Mail = $Name.pickfolder() 
$Path = "C:\Attached\" 

$SubFolder = { 
    param(
     $currentFolder 
    ) 
foreach ($item in $currentFolder.Folders) { 
$Mail.Items | ForEach { 
    $O=$O+1 
    $_.Attachments | foreach { 
     $item.FolderPath 
     & $SubFolder $item 
     } 
    } 
} 
} 


$Walk = & $SubFolder $Mail 

ForEach ($Fo in $Walk){ 
    $Fo.Items | ForEach { 
    $O=$O+1 
    $_.Attachments | foreach { 
    $Sub = $Fo 
    $Pos = $Sub.IndexOf("\") 
    $LeftPart = $Sub.Substring($Pos+28) 
    $FilePath = $Path + $LeftPart + "\" 

    If ($_.filename -like "*.PDF") { 
    $_ 
     If (!(Test-Path -path $FilePath)) 
      { 
      $Dest = New-Item $FilePath -type directory 
      } 
      $_.saveasfile((Join-Path $FilePath $_.filename)) 
      } 

     } 
    } 
} 

Это позволяет выбрать папку Outlook и затем ничего не делать. Если я изменю $ Fo.Items на $ Mail.items, он создаст папки и четыре. Pdf

Я знаю, что $ Fo - это не то, что я хочу, но не знаю, какой отличием можно взять здесь.

Любой совет пожалуйста. Thanks

ответ

0

Не знаете, почему меня проголосовали, вас интересует?

В любом случае. Я могу это решение решить.

Каждая «секция» развернет уровень подпапки, создаст структуру папок, а затем сохранит настройки, основанные на типе. Это ни в коем случае не симпатично, но это делает работу, в которой я нуждаюсь. Я разместил его здесь для справки.

$O=0 
$Outlook = New-Object -com "Outlook.Application" 
$NameSpace = $Outlook.GetNamespace("MAPI") 
$Mail = $NameSpace.pickfolder() 
$Parent = $Mail.Folders 
$Path = “C:\Attached\” 


ForEach ($Folder in $Parent) { 
#Parent Folder. 
ForEach($SubFolder in $Folder) { 
#First subfolder. 
    ForEach ($Item in $SubFolder.Items){ 
    $O=$O+1 
    $Sub = $SubFolder.FolderPath 
    $LeftPart = $Sub.Substring($Pos+28) 
    $FilePath = $Path + $LeftPart + "\" 
    If (!(Test-Path -path $FilePath)) 
      { 
      $Dest = New-Item $FilePath -type directory 
      } 

    foreach ($Attach in $Item.Attachments){ 
     If ($Attach.filename -like "*.PDF") { 
      $Attach.saveasfile((Join-Path $FilePath $Attach.filename)) 
      } 
    If ($Attach.filename -like "*.doc*") { 
      $Attach.saveasfile((Join-Path $FilePath $Attach.filename)) 
      } 
     } 
    } 
    ForEach ($SubSubFolder in $SubFolder.Folders){ 
    #Second Subfolder. 
     ForEach ($SubItem in $SubSubFolder.Items){ 
     $1=$1+1 
     $Sub = $SubSubFolder.FolderPath 
     $LeftPart = $Sub.Substring($Pos+28) 
     $FilePath = $Path + $LeftPart + "\" 
     If (!(Test-Path -path $FilePath)) 
       { 
       $Dest = New-Item $FilePath -type directory 
       } 

     foreach ($Attach in $SubItem.Attachments){ 
     If ($Attach.filename -like "*.PDF") { 
       $Attach.saveasfile((Join-Path $FilePath $Attach.filename)) 
       } 
     If ($Attach.filename -like "*.doc*") { 
       $Attach.saveasfile((Join-Path $FilePath  $Attach.filename)) 
        } 
       } 
      } 
     } 
    } 
} 
Смежные вопросы