我有一个脚本来检查我的Outlook收件箱中的邮件。我也可以通过这个脚本检查来自另一个邮箱的邮件:
Function Get-OutlookItems {
Param (
[Parameter(Mandatory=$true)]
[String]$SharedMailbox,
[Switch]$IncludeSubfolders
)
Add-Type -Assembly "Microsoft.Office.Interop.Outlook" | Out-Null
$olFolders = "Microsoft.Office.Interop.Outlook.olDefaultFolders" -as [type]
$outlook = New-Object -ComObject Outlook.Application
$namespace = $outlook.GetNamespace("MAPI")
# Resolve the shared mailbox folder based on the email address
$sharedMailboxAddressEntry = $namespace.CreateRecipient($SharedMailbox)
$sharedMailboxAddressEntry.Resolve()
if ($sharedMailboxAddressEntry.Resolved) {
$sharedMailboxFolder = $namespace.GetSharedDefaultFolder($sharedMailboxAddressEntry, $olFolders::olFolderInbox)
} else {
throw "Unable to resolve the shared mailbox."
}
if ($IncludeSubfolders) {
$folderItems = $sharedMailboxFolder.Items.Restrict
} else {
$folderItems = $sharedMailboxFolder.Items
}
$folderItems | Select-Object -Property Subject, ReceivedTime, Importance, SenderName
}
Get-OutlookItems -SharedMailbox 'shared@domain.com' -IncludeSubFolders
但它似乎只显示我的收件箱。如何显示此共享邮箱中的所有文件夹?或者这是不可能的?
1条答案
按热度按时间ldxq2e6h1#
调用
Restict
方法从子文件夹中获取项目没有任何意义:Items
类的Restrict
方法(以及Find
/FindNext
方法)允许获取与指定搜索条件对应的项。这是完全不同的任务。要获取子文件夹,您需要使用Folders属性,该属性返回表示指定Folder中包含的所有文件夹的
Folders
集合。下面的示例代码(C#)首先使用GetRootFolder()
方法获取默认存储的根文件夹。然后调用根文件夹上的EnumerateFolders
方法。EnumerateFolders
接受一个根文件夹,并遍历根文件夹所代表的默认存储的文件夹。EnumerateFolders
首先使用Folders
属性获取根文件夹对象的子文件夹。然后递归调用EnumerateFolders
,以枚举层次结构中的所有文件夹。递归地遍历所有子文件夹,您可能会得到所有项目/文件夹。