如何通过PowerShell和EWS托管API检索PR_RULE_ACTIONS?

时间:2014-12-11 16:55:09

标签: powershell delegates exchangewebservices mapi ews-managed-api

我需要检索和检查委托转发规则(EWS中的内置委托命令不足以满足我的需求,因为它们阻塞了用作委托的组。)

我能够成功找到“Schedule+ EMS Interface”创建的规则。但是,我无法检索PR_RULE_ACTIONS。打开跟踪。

我看到PidTagRuleMsgProvider属性返回正常,但PR_RULE_ACTIONS永远不会。

我怀疑我在属性集定义中使用了错误的MAPI属性类型,但我已经浏览了http://msdn.microsoft.com/en-us/library/exchangewebservices.mapipropertytypetype(v=exchg.140).aspx中列出的所有内容。有线索吗?

以下是相关的代码片段:

# Setup Basic EWS Properties for Message Search - Used to locate Hidden Forwarding Rule
$searchFilterForwardRule         = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+ContainsSubstring([Microsoft.Exchange.WebServices.Data.ItemSchema]::ItemClass, "IPM.Rule", [Microsoft.Exchange.WebServices.Data.ContainmentMode]::Prefixed, [Microsoft.Exchange.WebServices.Data.ComparisonMode]::Exact)
$itemViewForwardRule             = New-Object Microsoft.Exchange.WebServices.Data.ItemView(30, 0, [Microsoft.Exchange.Webservices.Data.OffsetBasePoint]::Beginning)
$itemViewForwardRule.PropertySet = New-Object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties, [Microsoft.Exchange.WebServices.Data.ItemSchema]::ItemClass, [Microsoft.Exchange.WebServices.Data.ItemSchema]::Subject)
$itemViewForwardRule.Traversal   = [Microsoft.Exchange.WebServices.Data.ItemTraversal]::Associated

# Properties for Hidden Delegate Forwarding Rule
$PID_TAG_RULE_MSG_PROVIDER    = New-Object Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition(0x65EB,[Microsoft.Exchange.WebServices.Data.MapiPropertyType]::String)
$PID_TAG_RULE_ACTIONS     =  New-Object Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition(0x6680,[Microsoft.Exchange.WebServices.Data.MapiPropertyType]::Binary)

# Property Set for Delegate Forward Rule
$propertySetForwardRule = New-Object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties, $PID_TAG_RULE_MSG_PROVIDER)

$forwardRuleExists = $false

$findResults = $service.FindItems([Microsoft.Exchange.Webservices.Data.WellKnownFolderName]::Inbox, $searchFilterForwardRule, $itemViewForwardRule)


If ($findResults.TotalCount -lt 1) {
Write-Error "Failed to find rule" "Error"
} Else {
Foreach ($item in $findResults.Items) {

    $item.Load($propertySetForwardRule)


    If ($item.ExtendedProperties.Count -ge 1) {

        If ($item.ExtendedProperties[0].Value -eq "Schedule+ EMS Interface") {
            $forwardRuleExists = $true
            write-host "Delegate forwarding rule found." -ForegroundColor Cyan

            $propertySetForwardRule.Add($PID_TAG_RULE_ACTIONS)
            $item.Load($propertySetForwardRule)

            Write-Host "Attempting to retrieve x6680 PR_RULE_ACTIONS (PidTagRuleActions)" -ForegroundColor Cyan
            $PR_RULE_ACTIONS = $null 
                if($Item.TryGetProperty($Pid_Tag_Rule_Actions,[ref]$PR_RULE_ACTIONS)){  

                    return $PR_RULE_ACTIONS
                } # endif
              else {write-host "TryGetProperty for PR_RULE_ACTIONS failed!" -ForegroundColor Red 
                } # endelse


        } # End If - Correct Message 

    } # End If - Has Extended Properties
} # End ForEach            
} # End If - Message Count

2 个答案:

答案 0 :(得分:0)

PR_RULE_ACTIONS的属性标记是0x668000FE。你可以在OutlookSpy中看到它(和属性数据) - 转到收件箱文件夹,单击IMAPIFolder按钮,转到PR_RULES_TABLE选项卡,选择规则,双击PR_RULE_ACTIONS属性。

答案 1 :(得分:0)

Glen Scales能够让我走上正确的道路。事实证明,PR_RULE_ACTIONS不是通过EWS公开的,而是通过名为PR_EXTENDED_RULE_ACTIONS的属性公开的相同数据。现在,我很高兴地抛出代码来解析二进制blob。

http://msdn.microsoft.com/en-us/library/ee218391(v=EXCHG.80).aspx