Powershell保存Outlook

时间:2016-09-12 10:39:05

标签: email powershell outlook

首先是一点背景。

在我的收件箱中,我有一个名为One的子文件夹 其中包含一个名为One.pdf附件的人发来的电子邮件 在我的收件箱中,我有一个名为Two的子文件夹 其中包含一个名为Two.pdf附件的人发来的电子邮件 在我的收件箱中,我有一个名为Own的子文件夹,我有一个名为Three的子文件夹。 其中包含一个名为Three.pdf附件的人发来的电子邮件 在我的收件箱中,我收到了一封名为Four.pdf的附件的电子邮件

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

还在我身边吗? :)

我要求执行以下操作。

我需要解析收件箱并找到.PDF附件并将其保存到驱动器上的其他位置。 然后我需要解析收件箱的子文件夹。如果我找到.pdf,我需要做两件事。

我需要检查文件夹是否存在以及是否创建它。 我需要将该子文件夹中的.PDF保存到我刚刚创建的文件夹中。

目前我可以创建子文件夹。

我的问题是我无法在每个子文件夹中创建正确的文件。事实上,现在我只能创建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不是我想要的,但我不确定从这里采取什么差异。

请提出任何建议。 谢谢

1 个答案:

答案 0 :(得分: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))
                    }
                }
            }
        }
    }
}