如何使用Powershell指定收件箱的子文件夹

时间:2012-02-21 18:24:40

标签: powershell outlook

我正在尝试使用Powershell访问outlook(2010)中名为“子文件夹”的“收件箱”子文件夹。

$olFolderInbox = 6
$outlook = new-object -com outlook.application;
$ns = $outlook.GetNameSpace("MAPI");
$inbox = $ns.GetDefaultFolder($olFolderInbox)

# how do I specify a subfolder that's inside Inbox???
# I mean, "Inbox\subfolder" where "subfolder" is the name of the subfolder...

如何指定此子文件夹?

我确信这很简单,这就是为什么我要“失去它”。提前谢谢!

*稍后在我的代码中, 我搜索正文以查找“searchterm”并将结果发送到文本文件(如果匹配)。以下代码适用于我的收件箱:

$inbox.items | foreach {
if($_.body -match "searchterm") {$_.body | out-file -encoding ASCII foo.txt} # prints to file...

我想要查看收件箱的子文件夹而不是收件箱,如上所述......

+++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++

编辑:

$olFolderInbox = 6
$outlook = new-object -com outlook.application;
$ns = $outlook.GetNameSpace("MAPI");
$inbox = $ns.GetDefaultFolder($olFolderInbox)
$targetfolder = $inbox.Folders | where-object { $_.name -eq "Subfolder" }
$targetfolder.items | foreach {
if($_.body -match "keyword") {$_.body | out-file -Append -encoding ASCII foo.txt} # keyword match prints body to file...
}

好的,我认为现在有效......

我不知道我做错了什么,虽然它确实是我使用Powershell的第一天,所以毫不奇怪,真的。

2 个答案:

答案 0 :(得分:3)

$targetfolder = $inbox.Folders | where-object { $_.name -eq "subfolder" }
$targetfolder.items | where-object { $_.body -match "keyword" } | % { $_.body } # can then redirect the body to file etc.

编辑:不确定为什么你的最新编辑不起作用。你的结构看起来与我上面的相似,我在自己的邮箱中验证过。

编辑编辑:请确保如果您使用的是out-file,则会附加结果,而不是覆盖每次匹配。

答案 1 :(得分:1)

尝试使用Where-Object cmdlet过滤从$inbox.Folders返回的文件夹。

$Subfolder = $inbox.Folders | Where-Object -FilterScript { (Split-Path -Path $_.FolderPath -Leaf) -eq 'Subfolder' }

以下是上述的替代/简写版本。这不会那么可靠,因为您可能有另一个名为MySubfolder的文件夹与Subfolder不同。

$Subfolder = $inbox.Folders | ? { $_.FolderPath.EndsWith('Subfolder') }