現象
Exchange 管理センター (EAC) を指定して外部の受信者に送信されるアイテムを取得するのには埋め込みの電子的証拠開示検索を作成することを前提としています、受信者ではありません:"internalDomain"の検索条件。この状況では、検索構文はのみ外部の受信者に送信されたアイテムを返しますは、内部および外部の受信者を持っているアイテムを除外します。
原因
この問題は、電子的証拠開示は、ブール ロジックを使用してキーワード クエリ言語 (KQL) を使用するために発生します。したがって、受信者ではありません:"internalDomain"内部の受信者が含まれている、外部の受信者が設定されている項目を含むすべての項目を除外します。注: 現在の設計では、EAC でより洗練された機能は提供されません。
回避策
この問題を回避するのには、次の方法のいずれかを使用できます。
方法 1: EWSEditor を使用します。
フリー ウェアのEWSEditorアプリケーションは、この問題を回避するために使用できます。アイテムの検索に使用できる電子的証拠開示のウィンドウがあります。注 これらの検索を行うにして監査 RBAC の役割を使用しているアカウントを設定する必要があります。
方法 2: 別の API を使用します。
KQL に依存しない、別の API を使用します。Exchange Web サービス (EWS) など、他のプログラムを使用してカスタム ソリューションを構築する必要があります。ソリューションは、データ (大きいデータセット) の一部を取得できます。ソリューションが必要なセットに一致するメッセージに到着する外部のロジックを使用して、受信した結果をさらに処理できます、受信者ではありません:"internalDomain"条件を任意に解釈します。また、今後このようなメッセージの識別用する方が監査のメールボックスにこのような項目 (内部および外部の受信者) のコピーを送信するトランスポート ルールを使用します。次は、EWS のマネージ API を使用してこの問題を回避するサンプル コードです。注: このコードのサンプルでは、内部ドメイン名を InternalDomain1.com、InternalDomain2.com、InternalDomain3.com を置き換えます。このプレース ホルダーは、コード内の 3 つの場所が表示されます。
<#AQS search using EWS Managed APIUSAGE: .\Search-Mailbox.ps1 -MailboxName mbx@domain.com -AqsString "(""Test"")"#>[CmdletBinding()]param ( [Parameter(Position=0,Mandatory=$True,HelpMessage="Mailbox SMTP format")] [ValidateNotNullOrEmpty()] [string]$MailboxName, [Parameter(Position=1,Mandatory=$True,HelpMessage="AQS QueryString")] [ValidateNotNullOrEmpty()] [string]$AqsString )######################################################################## Update EWS DLL Folder,$domain, $account, $pwd and $exserver Values########################################################################$resultFL = "C:\Scripts\Result"$domain = "SEARCH"$account = "MailboxSearch@domain.com";$pwd = '123'$exServer = "exch01search.net"$EWSManagedApiPath = "C:\scripts\Microsoft.Exchange.WebServices.dll"########################################################################$LogFile_All = "$($resultFL)\$($Mailboxname)_All.txt"$LogFile_Filtr = "$($resultFL)\$($Mailboxname)_Filtered.txt"$LogFile_Itype = "$($resultFL)\$($Mailboxname)_ItemTypes.txt"$StopWatch = New-Object system.Diagnostics.Stopwatch$StopWatch.Start()Add-Type -Path $EWSManagedApiPath$service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010_SP2)$service.Credentials= new-object Microsoft.Exchange.WebServices.Data.WebCredentials($account,$pwd,$domain)$service.UseDefaultCredentials = $false$UseAutoDiscover = $false$service.Url = new-object uri("https://domain.com/EWS/Exchange.asmx")$ImpersonatedUserId = new-object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SmtpAddress,$MailboxName);$service.ImpersonatedUserId = $ImpersonatedUserId#Define Extended properties$PR_Folder_Path= new-object Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition(26293, [Microsoft.Exchange.WebServices.Data.MapiPropertyType]::String);$PR_FOLDER_TYPE = new-object Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition(13825,[Microsoft.Exchange.WebServices.Data.MapiPropertyType]::Integer);$folderidcnt = new-object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::MsgFolderRoot,$MailboxName)#Define the FolderView used for Export should not be any larger then 1000 folders due to throttling$fvFolderView = New-Object Microsoft.Exchange.WebServices.Data.FolderView(1000)#Deep Transval will ensure all folders in the search path are returned$fvFolderView.Traversal = [Microsoft.Exchange.WebServices.Data.FolderTraversal]::Deep;$pSchPropSet= new-object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties)$pSchPropSet.Add($PR_Folder_Path)$fvFolderView.PropertySet = $pSchPropSet#The Search filter will exclude any Search Folders$sfSearchFilter = new-object Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo($PR_FOLDER_TYPE,"1")$fiResult = $null$MsgPropSet = New-Object Microsoft.Exchange.WebServices.Data.PropertySet$MsgPropSet.Add([Microsoft.Exchange.WebServices.Data.ItemSchema]::Id)$MsgPropSet.Add([Microsoft.Exchange.WebServices.Data.ItemSchema]::ParentFolderId)$MsgPropSet.Add([Microsoft.Exchange.WebServices.Data.ItemSchema]::ItemClass)$MsgPropSet.Add([Microsoft.Exchange.WebServices.Data.ItemSchema]::Subject)$MsgPropSet.Add([Microsoft.Exchange.WebServices.Data.ItemSchema]::DateTimeSent)$MsgPropSet.Add([Microsoft.Exchange.WebServices.Data.EmailMessageSchema]::Sender)$MsgPropSet.Add([Microsoft.Exchange.WebServices.Data.EmailMessageSchema]::ToRecipients)$MsgPropSet.Add([Microsoft.Exchange.WebServices.Data.EmailMessageSchema]::ccRecipients)$MsgPropSet.Add([Microsoft.Exchange.WebServices.Data.EmailMessageSchema]::BccRecipients)$AptPropSet = New-Object Microsoft.Exchange.WebServices.Data.PropertySet$AptPropSet.Add([Microsoft.Exchange.WebServices.Data.ItemSchema]::Id)$AptPropSet.Add([Microsoft.Exchange.WebServices.Data.ItemSchema]::ParentFolderId)$AptPropSet.Add([Microsoft.Exchange.WebServices.Data.ItemSchema]::ItemClass)$AptPropSet.Add([Microsoft.Exchange.WebServices.Data.ItemSchema]::Subject)$AptPropSet.Add([Microsoft.Exchange.WebServices.Data.ItemSchema]::DateTimeSent)$AptPropSet.Add([Microsoft.Exchange.WebServices.Data.AppointmentSchema]::Organizer)$AptPropSet.Add([Microsoft.Exchange.WebServices.Data.AppointmentSchema]::RequiredAttendees)$AptPropSet.Add([Microsoft.Exchange.WebServices.Data.AppointmentSchema]::OptionalAttendees)$SchPropSet = New-Object Microsoft.Exchange.WebServices.Data.PropertySet$SchPropSet.Add([Microsoft.Exchange.WebServices.Data.ItemSchema]::Id)$SchPropSet.Add([Microsoft.Exchange.WebServices.Data.ItemSchema]::ParentFolderId)$SchPropSet.Add([Microsoft.Exchange.WebServices.Data.ItemSchema]::ItemClass)$SchPropSet.Add([Microsoft.Exchange.WebServices.Data.ItemSchema]::Subject)$SchPropSet.Add([Microsoft.Exchange.WebServices.Data.ItemSchema]::DateTimeSent)$SchPropSet.Add([Microsoft.Exchange.WebServices.Data.MeetingRequestSchema]::Organizer)$SchPropSet.Add([Microsoft.Exchange.WebServices.Data.MeetingRequestSchema]::RequiredAttendees)$SchPropSet.Add([Microsoft.Exchange.WebServices.Data.MeetingRequestSchema]::OptionalAttendees)#Write-host "Checking Mailbox: $($MailboxName)"#Write-host "Searching QueryString: $($AqsString)"#The Do loop will handle any paging that is required if there are more the 1000 folders in a mailbox$ic=0$fic=0do { $fiResult = $Service.FindFolders($folderidcnt,$sfSearchFilter,$fvFolderView) #$fiResult.Folders.Count foreach($ffFolder in $fiResult.Folders){ # "Processing : " + $ffFolder.displayName $fpath = $ffFolder.ExtendedProperties[0].Value $fic++ $fiItems = $null $ItemView = New-Object Microsoft.Exchange.WebServices.Data.ItemView(1000) do{ Write-Progress -Activity "Processing $($MailboxName) - QueryString $($AqsString)" -Status $ffFolder.DisplayName -PercentComplete ($fic/$fiResult.Folders.Count*100) $fiItems = $ffFolder.findItems($AqsString,$ItemView) $ic = $ic + $fiItems.items.count $ItemView.offset += $fiItems.Items.Count foreach($Item in $fiItems.Items){ $itype = "$($item.ItemClass)`t$($Item.id.UniqueId)" Add-content -Value $itype -Path $LogFile_Itype $result="" switch ($item.ItemClass) { "IPM.Note" { $Item.Load($MsgPropSet) $MT = @() # Create a MAPITABLE to filter external Domains $eRecipients="" $result = "$($mailboxname)`t$($fpath)`t$($Item.Sender.Name)`t$($Item.DateTimeSent)`t$($Item.Subject)`t$($Item.id.UniqueId)`t$($item.ItemClass)" Add-content -Value $result -Path $LogFile_All $item.ToRecipients | %{If($_.RoutingType -ne "EX"){$mt+=$_.Address}} $item.ccRecipients | %{If($_.RoutingType -ne "EX"){$mt+=$_.Address}} $item.BccRecipients | %{If($_.RoutingType -ne "EX"){$mt+=$_.Address}} $er=@()<#Replace InternalDomain1.com, InternalDomain2.com, InternalDomain3.com with your internal domain name.#> $mt | %{if($_ -notmatch 'InternalDomain1.com|InternalDomain2.com|InternalDomain3.com'){ $eRecipients = $true $er +=$_ } } } "IPM.Appointment" { $Item.Load($AptPropSet) $MT = @() # Create a MAPITABLE to filter external Domains $eRecipients="" $result = "$($mailboxname)`t$($fpath)`t$($Item.Organizer.Name)`t$($Item.DateTimeSent)`t$($Item.Subject)`t$($Item.id.UniqueId)`t$($item.ItemClass)" Add-content -Value $result -Path $LogFile_All $item.RequiredAttendees | %{If($_.RoutingType -ne "EX"){$mt+=$_.Address}} $item.OptionalAttendees | %{If($_.RoutingType -ne "EX"){$mt+=$_.Address}} $er=@() <#Replace InternalDomain1.com, InternalDomain2.com, and InternalDomain3.com with your internal domain name.#> $mt | %{if($_ -notmatch 'InternalDomain1.com|InternalDomain2.com|InternalDomain3.com'){ $eRecipients = $true $er +=$_ } } } "IPM.Schedule.Meeting.Request" { $Item.Load($SchPropSet) $MT = @() # Create a MAPITABLE to filter external Domains $eRecipients="" $result = "$($mailboxname)`t$($fpath)`t$($Item.Organizer.Name)`t$($Item.DateTimeSent)`t$($Item.Subject)`t$($Item.id.UniqueId)`t$($item.ItemClass)" Add-content -Value $result -Path $LogFile_All $item.RequiredAttendees | %{If($_.RoutingType -ne "EX"){$mt+=$_.Address}} $item.OptionalAttendees | %{If($_.RoutingType -ne "EX"){$mt+=$_.Address}} $er=@()<#Replace InternalDomain1.com, InternalDomain2.com, InternalDomain3.com with your internal domain.#> $mt | %{if($_ -notmatch 'InternalDomain1.com|InternalDomain2.com|InternalDomain3.com'){ $eRecipients = $true $er +=$_ } } } Default {$eRecipients="";$result=""} } #END Switch If($eRecipients){ $er = $er -join ";" $result="$($result)`t$($er)" Add-content -Value $result -Path $LogFile_Filtr } } #End Foreach Items }while($fiItems.MoreAvailable -eq $true) } #End Foreach Folders $fvFolderView.Offset += $fiResult.Folders.Count}while($fiResult.MoreAvailable -eq $true)$StopWatch.Stop()write-host "Completed $($Mailboxname) in Seconds:" $StopWatch.Elapsed.TotalSeconds -ForegroundColor GreenWrite-Host "Total Items found:" $ic$StopWatch = $null
方法 3: 予防的な監視内部および外部の受信者を持っているアイテムの id は、監査メールボックスにこのような項目のコピーを送信することがでくトランスポート ルールを作成します。
状況
マイクロソフトでは、デザインによっては認識しています。
詳細
インプレース電子証拠開示の詳細については、次のマイクロソフト web サイトを参照してください。
インプレース電子証拠開示に関する一般的な情報KQL の詳細については、次のマイクロソフト web サイトを参照してください。