首先是一点背景。
在我的收件箱中,我有一个名为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不是我想要的,但我不确定从这里采取什么差异。
请提出任何建议。 谢谢
答案 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))
}
}
}
}
}
}