[英]powershell script to list all sub-folders in an Outlook Inbox
新 powershell 用户在这里。 我想要来自 Outlook 收件箱的所有文件夹、子文件夹和子子文件夹等的列表
Add-Type -assembly "Microsoft.Office.Interop.Outlook"
$Outlook = New-Object -comobject Outlook.Application
$namespace = $Outlook.GetNameSpace("MAPI")
Get-ChildItem -Directory $namespace
术语“FileInfo”未被识别为 cmdlet、function、脚本文件或可运行程序的名称。 检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。
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.com\Deleted Items
\\user01@contoso.com\Inbox
\\user01@contoso.com\Outbox
\\user01@contoso.com\Sent 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:\Windows\assembly\GAC_MSIL\Microsoft.Office.Interop.Outlook\15.0.0.0__71e9bce111e9429c\Microsoft.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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.