2017-09-14 49 views
1

我在PowerShell中的以下打算:我怎樣才能展望客房,而無需通過整個地址列表

[System.Collections.ArrayList] $ConfRooms = $Outlook.Session.GetGlobalAddressList().AddressEntries | ?{$_.Name -match "^Conf Room"} | %{$_.Name} 

,並在C#中的以下內容:

Outlook.AddressEntry addEntry in objOutlook.Session.GetGlobalAddressList().AddressEntries 

最後一個是遵循的:

if(Regex.IsMatch(addEntry.Name, "^Conf Room")) 

我遇到的問題是它遍歷整個地址簿來查找房間。有什麼方法可以得到房間清單嗎?當直接通過Outlook時,我點擊新項目,選擇會議,選擇計劃助理,然後選擇「添加房間」,它只給我地址列表中的房間,所以必須有一個標誌,將某個地址條目定義爲一個房間(因爲它也包括作爲一個物業的能力)。這個彈出窗口是直接的,我希望在我正在編寫的程序中達到同樣的效果。

回答

0

對於一個房間,PR_DISPLAY_TYPE_EX MAPI屬性是DT_ROOM(您可以在OutlookSpy中看到屬性 - 單擊IAddrBook按鈕並深入到任何房間)。

另請注意,GAL公開了「所有房間」容器(您應該可以通過Namespace.AddressLists集合訪問它)。請注意,如果您有多個Exchange帳戶並且容器名稱已本地化,則可以有多個「所有房間」容器。如果您要遍歷所有地址簿列表,則「所有房間」列表的PR_CONTAINER_FLAGS MAPI屬性將包含0x00000200位。

如果使用Redemption是一個選項,它暴露RDOExchangeAccountAllRoomsRDOAddressBookAllRooms屬性(返回RDOAddressList對象)。

+0

說實話...從來沒有使用MAPI,所以這對我來說都是希臘人。 – user3377627

+0

如果您需要訪問MAPI屬性,可以使用'AddressList.PropertyAccessor.GetProperty'來完成。 'PR_DISPLAY_TYPE_EX' DASL屬性名稱是'http:// schemas.microsoft.com/mapi/proptag/0x39050003'。 'PR_CONTAINER_FLAGS'是'http:// schemas.microsoft.com/mapi/proptag/0x36000003'。您可以在OutlookSpy(DASL編輯框)中看到DASL屬性名稱。 –