Gilt fürExchange Server 2013 Enterprise Edition Exchange Server 2013 Standard Edition

Problembeschreibung

Angenommen, eine In-Place eDiscovery-Suche in Exchange Admin Center (BK erstellen) Elementen zurückgegeben, die an externe Empfänger, durch Angabe gesendet werden der nicht Empfänger: "InternalDomain" Kriterien suchen. In diesem Fall die Suchsyntax gibt Elemente, die an externe Empfänger gesendet werden, aber schließt Elemente mit internen und externen Empfängern.

Ursache

Dieses Problem tritt auf, weil eDiscovery Schlüsselwort Query Language (KQL) verwendet, die boolesche Logik verwendet. Daher die nicht Empfänger: "InternalDomain" schließt alle Elemente, die einen internen Empfänger enthalten, auch die Elemente, die auch einen externen Empfänger.Hinweis Das aktuelle Design bietet keine genauere Funktionen über die Exchange-Verwaltungskonsole.

PROBLEMUMGEHUNG

Um dieses Problem zu umgehen, können Sie eine der folgenden Methoden.

Methode 1: Verwenden von EWSEditor

Eine freie Software EWSEditor Anwendung ist zur Umgehung dieses Problems. Es ist ein eDiscovery-Fenster die Suche nach Elementen verwendet werden können.Hinweis Sie müssen zur Überwachung RBAC-Rolle haben Einrichten dieser Suchvorgänge durchführen.

Methode 2: Verwenden Sie eine andere API

Verwenden Sie eine andere API, die nicht auf KQL. Sie haben eine benutzerdefinierte Lösung erstellen, indem Sie andere Programme, wie Exchange-Webdienste (EWS) verwenden. Die Lösung kann einige Teile der Daten (größeren Dataset) abrufen. Lösung kann weiterverarbeiten erhaltene Ergebnis mit externen Logik an der gewünschten Nachrichten eintreffen, die entsprechen den nicht Empfänger: "InternalDomain" Kriterien interpretiert würde.Auch für die Identifikation solcher Nachrichten zukünftig wäre eine bessere Lösung eine Transportregel verwenden, die Kopien der Elemente (interne und externe Empfänger) auditing-Postfach senden konnte.Folgendes ist ein Beispiel, um dieses Problem mit EWS Managed API.Hinweis Ersetzen Sie in diesem Beispielcode InternalDomain1.com, InternalDomain2.com, InternalDomain3.com mit Ihrem internen Domänennamen ein. Dieser Platzhalter wird in drei Positionen im Code.

<#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

Methode 3: Vorbeugende ÜberwachungErstellen Sie für die Identifizierung der Elemente, die interne und externe Empfänger eine Transportregel, die Kopien der Elemente überwachen Postfach senden können.

Status

Microsoft hat bestätigt, dass dies vorgesehen ist.

Weitere Informationen

Weitere Informationen zu direkten eDiscovery finden Sie auf der folgenden Microsoft-Website:

Allgemeine Informationen zum direkten eDiscoveryWeitere Informationen zu KQL finden Sie auf der folgenden Microsoft-Website:

Referenz für die Filtersyntax KQL

Benötigen Sie weitere Hilfe?

Möchten Sie weitere Optionen?

Erkunden Sie die Abonnementvorteile, durchsuchen Sie Trainingskurse, erfahren Sie, wie Sie Ihr Gerät schützen und vieles mehr.