簡體   English   中英

powershell 腳本列出 Outlook 收件箱中的所有子文件夾

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM