2016-09-12 17 views
-1

まず小さな背景です。Powershell Outlookのサブフォルダに添付ファイルを保存しないでください。

は私の受信トレイでは、私は、この内部ワン をサブフォルダを求めている私は、この内部二 をサブフォルダを求めている私の受信トレイに One.pdfと呼ばれる添付ファイルを持つ人からのメールは、呼び出された添付ファイルを持つ人からのメールですTwo.pdf 私の受信トレイには、この中にOwnというサブフォルダがあります.3つというサブフォルダがあります。このインサイド は、私は私と一緒にまだ

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

Four.pdfと呼ばれるファイルが添付された午前のメールを持っている私の受信トレイでは Three.pdfと呼ばれる添付ファイルを持つ人からのメールですか? :)

私は以下のことを行う必要があります。

受信トレイを解析して.PDF添付ファイルを見つけて、ドライブの別の場所に保存する必要があります。 その後、受信トレイのサブフォルダを解析する必要があります。私が.pdfを見つけたら、私は2つのことをする必要があります。

フォルダが存在するかどうか、作成しない場合は確認する必要があります。 そのSubfolderの.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に変更すると、フォルダとfour.pdfが作成されます。

$ Foは私が望むものではありませんが、ここからどのような違いがありますか分かりません。

お願いします。 ありがとう

答えて

0

私が投票した理由を知りたいと思っていますか?

とにかく。私は私の問題のためにこの解決策にすることができます。

各 "セクション"はサブフォルダレベルをドリルダウンし、フォルダー構造を構築し、タイプに基づいてattahmentsを保存します。それは決して美しいものではありませんが、私は必要な仕事をしています。私は参考のためにここに掲載しました。

$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)) 
        } 
       } 
      } 
     } 
    } 
} 
関連する問題