2016-09-12 1 views
-1

Un petit arrière-plan en premier.Powershell Enregistrer les pièces jointes dans les sous-dossiers dans Outlook

Dans ma boîte de réception, j'ai appelé un Subfolder Dans c'est un e-mail de quelqu'un avec une pièce jointe appelée One.pdf Dans ma boîte de réception, j'ai appelé deux Subfolder A l'intérieur c'est un courriel de quelqu'un avec une pièce jointe appelée Two.pdf Dans ma boîte de réception, j'ai un sous-dossier appelé propre à l'intérieur de ce que j'ai un sous-dossier appelé trois. c'est à l'intérieur d'un courriel de quelqu'un avec une pièce jointe appelée Three.pdf Dans ma boîte de réception Je am Email avec une pièce jointe appelée Four.pdf

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

Toujours avec moi? :)

J'ai une exigence pour faire ce qui suit.

Je dois analyser la boîte de réception et trouver la pièce jointe .PDF et l'enregistrer dans un autre emplacement sur un lecteur. Ensuite, j'ai besoin d'analyser les sous-dossiers de la boîte de réception. Si je trouve un .pdf, j'ai besoin de faire deux choses.

Je dois vérifier si les dossiers existent et s'ils ne l'ont pas été. Je dois ensuite enregistrer le .PDF dans ce sous-dossier dans le dossier que je viens de créer.

Actuellement, je peux créer les sous-dossiers.

Mon problème est que je ne parviens pas à créer les fichiers corrects dans chaque sous-dossier. En fait, en ce moment, je ne peux que créer quatre.pdf et je peux créer cela dans chaque sous-dossier.

Actuellement, je travaille avec ce code.

$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)) 
      } 

     } 
    } 
} 

Cela permet la sélection du dossier Outlook, puis ne fait rien. Si je change $ Fo.Items à $ Mail.items il crée les dossiers et les quatre.pdf

Je sais que Fo n'est pas ce que je veux qu'il soit mais je ne suis pas sûr de ce que la différence à prendre d'ici.

Des conseils s'il vous plaît. Remerciements

Répondre

0

Vous ne savez pas pourquoi j'ai été rejeté, être intrested à savoir?

Quoi qu'il en soit. Je peux à cette solution pour mon problème. Chaque "section" descendra le niveau d'un sous-dossier, construira la structure du dossier et sauvegardera les paramètres en fonction du type. Ce n'est pas beau mais il fait le travail dont j'ai besoin. Je l'ai posté ici pour référence.

$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)) 
        } 
       } 
      } 
     } 
    } 
}