Sintomi
Si supponga di crea una ricerca di eDiscovery In loco in Exchange Admin Center EAC () per restituire gli articoli che vengono inviati a destinatari esterni specificando il non destinatari: "internalDomain" criteri di ricerca. In questo caso, la sintassi di ricerca restituisce gli elementi che vengono inviati solo i destinatari esterni, ma esclude gli elementi che i destinatari interni ed esterni.
Causa
Questo problema si verifica perché eDiscovery utilizza parole chiave Query Language (KQL) che utilizza la logica booleana. Di conseguenza, il non destinatari: "internalDomain" esclude tutti gli elementi che contengono un destinatario interno, anche gli elementi che dispongono di un destinatario esterno.
Nota: Il progetto corrente non fornisce una funzionalità tramite il valore EAC più raffinata.Soluzione alternativa
Per risolvere questo problema, è possibile utilizzare uno dei metodi descritti di seguito.
Metodo 1: Utilizzare EWSEditor
Un'applicazione di EWSEditor -ware libero è disponibile per risolvere il problema. È una finestra di eDiscovery che può essere utilizzata per eseguire la ricerca per gli articoli. Nota: È necessario impostare l'account utilizzato per il ruolo di RBAC di controllo per eseguire tali ricerche.
Metodo 2: Utilizzare un'API diversa
Utilizzare un'API diversa che non si basano su KQL. È necessario creare una soluzione personalizzata utilizzando altri programmi, ad esempio servizi Web Exchange (EWS). La soluzione può recuperare alcune parti dei dati (un set di dati più grande). La soluzione di elaborare ulteriormente il risultato ricevuto tramite logica esterna per raggiungere il set desiderato di messaggi che corrispondono al non destinatari: "internalDomain" criteri verrebbero interpretato dal.
Inoltre, per l'identificazione di tali messaggi in futuro, una soluzione migliore, è possibile utilizzare una regola di trasporto che è possibile inviare copie di tali elementi (destinatari interni ed esterni) a una cassetta postale di controllo. Di seguito è un esempio di codice per risolvere il problema utilizzando l'API gestita EWS. Nota: In questo esempio di codice, sostituire InternalDomain1.com, InternalDomain2.com, InternalDomain3.com con il nome di dominio interno. Questo segnaposto viene visualizzato in tre posizioni nel codice.
<#AQS search using EWS Managed API
USAGE: .\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=0 do { $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 Green Write-Host "Total Items found:" $ic $StopWatch = $null
Metodo 3: Prevenzione monitoraggioPer identificare gli articoli che i destinatari interni ed esterni, creare una regola di trasporto che è possibile inviare copie di tali elementi alla cassetta postale di una controllo.
Stato
Microsoft ha confermato che si tratta di progettazione.
Ulteriori informazioni
Per ulteriori informazioni sul posto eDiscovery, visitare il seguente sito Web Microsoft:
Informazioni generali sul posto eDiscoveryPer ulteriori informazioni su KQL, visitare il seguente sito Web Microsoft: