PowerShell 脚本,用于列出 Outlook 收件箱中的所有子文件夹



新的powershell用户在这里。我想要来自Outlook收件箱的所有文件夹,子文件夹和子文件夹等的列表

Add-Type -assembly "Microsoft.Office.Interop.Outlook"
$Outlook = New-Object -comobject Outlook.Application
$namespace = $Outlook.GetNameSpace("MAPI")
Get-ChildItem -Directory $namespace

术语"文件信息"未被识别为 cmdlet 的名称, 函数、脚本文件或可操作程序。检查拼写 名称,或者如果包含路径,请验证路径是否正确,并且 再试一次。

Outlook

文件夹不是目录项,它们是 Outlook 配置文件中的对象。

所以,你不能这样做...

Get-ChildItem -Directory $namespace

。 因为那是针对 Windows 文件系统的。

因此,您应该追逐文件夹对象:

### Messing with Outlook folders
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")
$namespace.Folders
# Results
<#
$namespace.Folders

Application            : Microsoft.Office.Interop.Outlook.ApplicationClass
Class                  : 2
Session                : Microsoft.Office.Interop.Outlook.NameSpaceClass
Parent                 : Microsoft.Office.Interop.Outlook.NameSpaceClass
DefaultItemType        : 0
DefaultMessageClass    : IPM.Note
Description            : 
EntryID                : 0000000070244...
Folders                : System.__ComObject
Items                  : System.__ComObject
Name                   : ...
#>
$namespace.Folders.FullFolderPath
# Results
<#
\user01@contoso.com
#>
$namespace.Folders.Folders.FullFolderPath
# Results
<#
\user01@contoso.comDeleted Items
\user01@contoso.comInbox
\user01@contoso.comOutbox
\user01@contoso.comSent Items
...
#>

($folder = $namespace.getDefaultFolder)
# Results
<#
OverloadDefinitions                                                                                                                                                                      
-------------------                                                                                                                                                                      
Microsoft.Office.Interop.Outlook.MAPIFolder GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders FolderType)                                                               
Microsoft.Office.Interop.Outlook.MAPIFolder _NameSpace.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders FolderType)
#>

$folder = $namespace.getDefaultFolder($olFolders::olFolderInBox)
$folder.items
# Results
<#
Yadds... 
Yadda...
Yadda...
#>

以下代码(PS 版本 7.1.3(将按字母顺序列出所有 Outlook 文件夹(加上每个文件夹中的项目总数(,并缩进每个子文件夹以便于阅读。

Add-Type `
  -LiteralPath "C:WindowsassemblyGAC_MSILMicrosoft.Office.Interop.Outlook15.0.0.0__71e9bce111e9429cMicrosoft.Office.Interop.Outlook.dll" `
  -ReferencedAssemblies "Microsoft.Office.Interop.Outlook"
$Outlook = New-Object -comobject Outlook.Application
$ns = $Outlook.GetNameSpace("MAPI")
Function Listfolders
{ 
  param($Folders, $Indent)
  ForEach ($Folder in $Folders | sort-object name)
  {
    write-host $Indent$($Folder.Name)" ("$($Folder.Items.Count)")"
    Listfolders $Folder.Folders $Indent"  " 
  }
}
ListFolders $ns.Folders ""

您可能希望(也可能不希望(在完成运行后停止 Outlook 进程。注意:如果 Outlook 已在运行,这将关闭它。

Get-Process "*outlook*" | Stop-Process

相关内容

最新更新