ComplianceDiagnosticDLP.psm1
Import-Module "$PSScriptRoot\ComplianceDiagnosticUtils.psm1" function Confirm-DlpCommandsPresent { # Check if MIP Label Commands are present $command = Get-Command Get-DlpCompliancePolicy -ErrorAction SilentlyContinue if ($command -eq $null) { return $false } $command = Get-Command Get-DlpComplianceRule -ErrorAction SilentlyContinue if ($command -eq $null) { return $false } return $true } function Initialize-DlpExchange{ $global:dlpControlVariables.sampleEmailFileData = $null $global:dlpControlVariables.emtdFileData = $null $global:dlpControlVariables.fileData = $null $global:dlpControlVariables.PTFiddlerFile = $null $global:dlpControlVariables.PnrFile = $null } function Initialize-DlpSpo{ $global:dlpControlVariables.TDPReport = $null $global:dlpControlVariables.SPOGSDFiles = $null } function Initialize-DlpTeams{ $global:dlpControlVariables.teamsFileData = $null } function Initialize-DlpEndpoint{ $global:dlpControlVariables.ClassificationFiddlerFiles = $null $global:dlpControlVariables.BrowsedEndpointReproFiles = $null } function Initialize-DlpAlerts{ $global:dlpControlVariables.AlertFiddlerFile = $null $global:dlpControlVariables.ActivityFile = $null $global:dlpControlVariables.AuditFile = $null } function Get-DLPTabContent ($TabObject){ [Parameter(Mandatory=$true)] [Windows.Controls.TabItem] $TabObject GetGlobalDlpRule $dlpExchangeButton = Get-Button -ButtonName "DLP Exchange Diagnostic" $dlpSPOButton = Get-Button -ButtonName "DLP SPO/ODB Diagnostic" -Margin "10,50,10,10" $dlpTeamsButton = Get-Button -ButtonName "DLP Teams Diagnostic" -Margin "10,50,10,10" $dlpEndpointButton = Get-Button -ButtonName "DLP Endpoint Diagnostic" -Margin "10,50,10,10" $dlpPanelGrid = New-Object Windows.Controls.Grid $dlpTopTabControl = Get-TopTabControl $dlpPanelGrid.Children.Add($dlpTopTabControl.TopTabControl) > $null $global:ContextScopeVariables.dlpOutput = New-Object Windows.Controls.StackPanel $outputPanelTemplate = Get-TemplateGrid $outputPanelTemplate.Column1.Children.Add($dlpExchangeButton) > $null $dlpDiagnosticTabContent = New-Object Windows.Controls.StackPanel $dlpDiagnosticTabContent.HorizontalAlignment = [Windows.HorizontalAlignment]::Center $dlpDiagnosticTabContent.VerticalAlignment = [Windows.VerticalAlignment]::Top $dlpDiagnosticTabContent.Margin = New-Object Windows.Thickness 0, 70, 0, 0 $dlpDiagnosticTabContent.Children.Add($global:ContextScopeVariables.dlpOutput) > $null $scrollViewer = New-Object Windows.Controls.ScrollViewer $scrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $scrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $outputPanelTemplate.Column2.Children.Add($dlpDiagnosticTabContent) > $null $scrollViewer.Content = $outputPanelTemplate.Grid # $dlpTopTabControl.DiagnosticsTabItem.Content = $scrollViewer // TODO : revive it after logic is built # NOTE: The variables that we use in event functions will be null if they are passed as local scope $dlpExchangeButton.Add_Click({ }) $dlpSPOButton.Add_Click({ }) $dlpTeamsButton.Add_Click({ }) $dlpEndpointButton.Add_Click({ }) # Collect diagnostic data from user $global:dlpControlVariables.dlpSupportDataTabContent = New-Object Windows.Controls.StackPanel $global:dlpControlVariables.dlpSupportDataTabContent.HorizontalAlignment = [Windows.HorizontalAlignment]::Center $global:dlpControlVariables.SupportPanelTemplate = Get-TemplateGrid $dlpEXOSupportButton = Get-Button -ButtonName "Exchange DLP" -Margin '10,50,10,10' -width 200 -HorizontalAlignment "Left" $global:dlpControlVariables.SupportPanelTemplate.Column1.Children.Add($dlpEXOSupportButton) > $null $dlpSPOSupportButton = Get-Button -ButtonName "SPO/ODB DLP" -Margin '10,50,10,10' -width 200 -HorizontalAlignment "Left" $global:dlpControlVariables.SupportPanelTemplate.Column1.Children.Add($dlpSPOSupportButton) > $null $dlpTeamsSupportButton = Get-Button -ButtonName "Teams DLP" -Margin '10,50,10,10' -width 200 -HorizontalAlignment "Left" $global:dlpControlVariables.SupportPanelTemplate.Column1.Children.Add($dlpTeamsSupportButton) > $null $dlpEndpointSupportButton = Get-Button -ButtonName "Endpoint DLP" -Margin '10,50,10,10' -width 200 -HorizontalAlignment "Left" $global:dlpControlVariables.SupportPanelTemplate.Column1.Children.Add($dlpEndpointSupportButton) > $null $dlpAlertsSupportButton = Get-Button -ButtonName "Collect DLP Alerts Data" -Margin '10,50,10,10' -width 200 -HorizontalAlignment "Left" $global:dlpControlVariables.SupportPanelTemplate.Column1.Children.Add($dlpAlertsSupportButton) > $null $DiagscrollViewer = New-Object Windows.Controls.ScrollViewer $DiagscrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $DiagscrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $DiagscrollViewer.Content = $global:dlpControlVariables.SupportPanelTemplate.Grid $dlpTopTabControl.GatherSupportDataTabItem.Content = $DiagscrollViewer $global:dlpControlVariables.SupportPanelTemplate.Column2.Children.Add($global:dlpControlVariables.dlpSupportDataTabContent ) > $null $dlpEXOSupportButton.Add_Click({ Initialize-DlpExchange Get-DlpEXOSupportTemplate }) $dlpSPOSupportButton.Add_Click({ Initialize-DlpSpo Get-DlpSPOSupportTemplate }) $dlpTeamsSupportButton.Add_Click({ Initialize-DlpTeams Get-DlpTeamsSupportTemplate }) $dlpEndpointSupportButton.Add_Click({ Initialize-DlpEndpoint Get-DlpEndpointSupportTemplate }) $dlpAlertsSupportButton.Add_Click({ Initialize-DlpAlerts Get-DlpAlertsSupportTemplate }) $TabObject.Content = $dlpPanelGrid } function Get-DlpAlertsSupportTemplate(){ $blueColor = [System.Windows.Media.Color]::FromRgb(63, 119, 206) $redColor = [System.Windows.Media.Color]::FromRgb(200, 10, 10) $supportDataHeader = Show-Text -Text "DLP Alerts Support Data Template" -Color $blueColor -fontSize 20 $tableGrid = Get-Table -columns 4 -rows 10 $workloadLabel = Show-Text -Text "Workload" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 0 -column 1 -Control $workloadLabel $workloads = @('Exchange', 'Sharepoint/Onedrive', 'Endpoint', 'Teams') $global:dlpControlVariables.WorkloadCombobox = Get-ComboBox -Margin "0,5,10,5" -Width 400 -HorizontalAlignment "Left" $global:dlpControlVariables.WorkloadCombobox.ItemsSource = $workloads Add-ControlToTableAt -TableObj $tableGrid -row 0 -column 2 -Control $global:dlpControlVariables.WorkloadCombobox $global:dlpControlVariables.WorkloadCombobox.Add_SelectionChanged({ param ( $sender, $eventArgs ) Get-TooltipForAlertsId -sender $sender -eventArgs $eventArgs }) $global:dlpControlVariables.itemIdentifierLabel = Show-Text -Text "Item Identifier" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" -ShowHelp $true $global:dlpControlVariables.itemIdentifierLabel.ToolTip = Get-ToolTip -Text "Select the workload to see how to find the corresponding item identifier" Add-ControlToTableAt -TableObj $tableGrid -row 1 -column 1 -Control $global:dlpControlVariables.itemIdentifierLabel $global:dlpControlVariables.itemId = Get-TextBox -Width 400 -Margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 1 -column 2 -Control $global:dlpControlVariables.itemId $dateTimeLabel = Show-Text -Text "Date & Time of issue (UTC)" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 2 -column 1 -Control $dateTimeLabel $dateTimeButton = Get-Button -ButtonName "Select date & Time" -Margin "0,0,10,0" -HorizontalAlignment "Left" -height 30 -width 220 Add-ControlToTableAt -TableObj $tableGrid -row 2 -column 2 -Control $dateTimeButton $global:ContextScopeVariables["DlpAlertsDateTimeLabel"] = Show-Text -Text "UTC Date Time" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 2 -column 3 -Control $global:ContextScopeVariables["DlpAlertsDateTimeLabel"] $dateTimeButton.Add_Click({ $global:ContextScopeVariables.DateTimeProp = "DlpAlertsDateTime" $global:ContextScopeVariables["DlpAlertsDateTime"] = "" Get-DateTimePickerDialog }) $ImpactedRule = Show-Text -Text "DLP Rule" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 3 -column 1 -Control $ImpactedRule $global:dlpControlVariables.ImpactedRuleComboboxAlerts = Get-ComboBox -Margin "0,0,10,0" -Width 400 -HorizontalAlignment "Left" $global:dlpControlVariables.ImpactedRuleComboboxAlerts.ItemsSource = $global:ContextScopeVariables.dlpRules.Name Add-ControlToTableAt -TableObj $tableGrid -row 3 -column 2 -Control $global:dlpControlVariables.ImpactedRuleComboboxAlerts $global:dlpControlVariables.AlertFiddlerLabel = Show-Text -Text "Fiddler or har file Trace" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" -ShowHelp $true $global:dlpControlVariables.AlertFiddlerLabel.ToolTip = Get-ToolTip -Text "Open the alert from DLP tab and click on View Details`nThen Record the network trace while loading the alert`nin fiddler or on a browser as a .har file" Add-ControlToTableAt -TableObj $tableGrid -row 4 -column 1 -Control $global:dlpControlVariables.AlertFiddlerLabel $FiddlerFileButton = Get-FileButton ` -GlobalScopeName "dlpControlVariables" ` -GlobalVariableName "BrowsedFiddlerLabel" ` -GlobalFileListName "AlertFiddlerFile" ` -ButtonName "Attach Fiddler or har Trace" ` -Margin "0,0,10,0" ` -HorizontalAlignment "Left" ` -height 30 ` -width 220 ` -VerticalAlignment "Center" Add-ControlToTableAt -TableObj $tableGrid -row 4 -column 2 -Control $FiddlerFileButton $global:dlpControlVariables.BrowsedFiddlerLabel = Show-Text -Text "Attached Alert Network trace" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" $AlertFiddlerScrollViewer = New-Object Windows.Controls.ScrollViewer $AlertFiddlerScrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $AlertFiddlerScrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $AlertFiddlerScrollViewer.Content = $global:dlpControlVariables.BrowsedFiddlerLabel Add-ControlToTableAt -TableObj $tableGrid -row 5 -column 2 -Control $AlertFiddlerScrollViewer $global:dlpControlVariables.AuditRecordLabel = Show-Text -Text "Audit Record" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" -ShowHelp $true $global:dlpControlVariables.AuditRecordLabel.ToolTip = Get-ToolTip -Text "Search for audit record in Purview's Audit tab by selecting:`nAcitivities-Friendly Name: Matched DLP rule`nRecord Types: Select everything Starting with 'ComplianceDLP'`nUsers(Optional): Select the user to narrow the search`nKeyword Search(Optional): UniqueId of the email/file/message or path of the endpoint file" Add-ControlToTableAt -TableObj $tableGrid -row 6 -column 1 -Control $global:dlpControlVariables.AuditRecordLabel $AuditFileButton = Get-FileButton ` -GlobalScopeName "dlpControlVariables" ` -GlobalVariableName "BrowsedAuditLabel" ` -GlobalFileListName "AuditFile" ` -ButtonName "Attach Audit Records" ` -Margin "0,0,10,0" ` -HorizontalAlignment "Left" ` -height 30 ` -width 220 ` -VerticalAlignment "Center" Add-ControlToTableAt -TableObj $tableGrid -row 6 -column 2 -Control $AuditFileButton $global:dlpControlVariables.BrowsedAuditLabel = Show-Text -Text "Attached Audit record" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" $AuditScrollViewer = New-Object Windows.Controls.ScrollViewer $AuditScrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $AuditScrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $AuditScrollViewer.Content = $global:dlpControlVariables.BrowsedAuditLabel Add-ControlToTableAt -TableObj $tableGrid -row 7 -column 2 -Control $AuditScrollViewer $global:dlpControlVariables.ActivityExplorerLabel = Show-Text -Text "Activity Explorer Trace" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" -ShowHelp $true $global:dlpControlVariables.ActivityExplorerLabel.ToolTip = Get-ToolTip -Text "Open activity explorer tab in DLP policies section`nAdd the filter 'Rule' and select the DLP Rule in the filter`nAdd filters to get the DLP Rule match in question`nStart recording the trace and click refresh button above the result table." Add-ControlToTableAt -TableObj $tableGrid -row 8 -column 1 -Control $global:dlpControlVariables.ActivityExplorerLabel $AvtivityFileButton = Get-FileButton ` -GlobalScopeName "dlpControlVariables" ` -GlobalVariableName "BrowsedActivityLabel" ` -GlobalFileListName "ActivityFile" ` -ButtonName "Attach Activity Explorer Trace" ` -Margin "0,0,10,0" ` -HorizontalAlignment "Left" ` -height 30 ` -width 220 ` -VerticalAlignment "Center" Add-ControlToTableAt -TableObj $tableGrid -row 8 -column 2 -Control $AvtivityFileButton $global:dlpControlVariables.BrowsedActivityLabel = Show-Text -Text "Attached Activity Explorer trace" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" $ActivityScrollViewer = New-Object Windows.Controls.ScrollViewer $ActivityScrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $ActivityScrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $ActivityScrollViewer.Content = $global:dlpControlVariables.BrowsedActivityLabel Add-ControlToTableAt -TableObj $tableGrid -row 9 -column 2 -Control $ActivityScrollViewer $tableGrid.Margin = New-Object System.Windows.Thickness(10,30,10,10) $tableGrid.HorizontalAlignment = "Center" $tableGrid.ColumnDefinitions[2].Width = 410 $global:dlpControlVariables.dlpSupportDataTabContent.Children.Clear() $global:dlpControlVariables.dlpSupportDataTabContent.Children.Add($supportDataHeader) > $null $global:dlpControlVariables.dlpSupportDataTabContent.Children.Add($tableGrid) > $null $GetDlpAlertsExport = Get-Button -ButtonName "Export Support Data" $GetDlpAlertsExport.Margin = New-Object System.Windows.Thickness(10,50,10,10) $global:dlpControlVariables.dlpSupportDataTabContent.Children.Add($GetDlpAlertsExport) > $null # $Disclaimer = Show-Text -Text "*Hover (move your mouse over) on the text boxes or Headers to see hints of how to get the data" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" -Color $redColor # $global:dlpControlVariables.dlpSupportDataTabContent.Children.Add($Disclaimer) > $null $GetDlpAlertsExport.Add_Click({ # Create a new SaveFileDialog object $Folder = Get-ExportFolder("ExportedDLPAlertsData") if (!$Folder) { return } $filePath = $Folder + "\"+"DLPAlertsExport.Json" $supportData=@{} $supportData["ItemIdentifier"] = $global:dlpControlVariables.itemId.Text $supportData["Workload"] = $global:dlpControlVariables.WorkloadCombobox.Text $supportData["ImpactedRule"] = $global:dlpControlVariables.ImpactedRuleComboboxAlerts.Text $supportData["DlpRules"] = $global:ContextScopeVariables.dlpRules # $supportData["Forests"] = Get-ForestInfo $supportData["DateTime"] = $global:ContextScopeVariables["DlpAlertsDateTime"] try { # Copy the files to the destination folder $supportData["AlertFiddlerFile"] = Get-FileName($global:dlpControlVariables.AlertFiddlerFile) foreach ($file in $global:dlpControlVariables.AlertFiddlerFile) { Copy-Item $file $Folder -Force } # Copy the files to the destination folder $supportData["AuditFile"] = Get-FileName($global:dlpControlVariables.AuditFile) foreach ($file in $global:dlpControlVariables.AuditFile) { Copy-Item $file $Folder -Force } # Copy the files to the destination folder $supportData["ActivityFile"] = Get-FileName($global:dlpControlVariables.ActivityFile) foreach ($file in $global:dlpControlVariables.ActivityFile) { Copy-Item $file $Folder -Force } # Zip the destination folder CleanAndShowFolder -Folder $Folder -supportData $supportData -filePath $filePath } catch { [System.Windows.MessageBox]::Show("Failed to create zip file. Error message: $_", "Error", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error) } }) } function Get-TooltipForAlertsId( $sender, $eventArgs){ $teamsMessage = "Open Microsoft Teams in edge browser`nOpen the corresponding message`nHit f12 and open Network`nNow like the message with emoticon`nCheck for a call 'messages/{messageId}/properties'`nCopy the Number between messages/ and /properties" $EndpointMessage = "Give the full file location path of the file. `nHold Shift and right-click on the file, select Copy Path." $spo = "Navigate to the document library on Browser `n Select the file `n Click on the ... dots `n Select 'Details' option `n A panel opens on the right `n Scroll to Bottom `n Click on copy icon beside path" $exchange = "Give the messageId in this format:`n<PH0PR00MB09993EA57251D44FD792BFD99@PH0PR00MB0999.namprd00.prod.outlook.com>" $selectedWorkload = $sender.SelectedItem switch ($selectedWorkload) { "Exchange" { $global:dlpControlVariables.itemIdentifierLabel.ToolTip = $exchange } "Sharepoint/Onedrive" { $global:dlpControlVariables.itemIdentifierLabel.ToolTip = $spo } "Endpoint" { $global:dlpControlVariables.itemIdentifierLabel.ToolTip = $EndpointMessage } "Teams" { $global:dlpControlVariables.itemIdentifierLabel.ToolTip = $teamsMessage } } } function Get-DlpTeamsSupportTemplate(){ $blueColor = [System.Windows.Media.Color]::FromRgb(63, 119, 206) $redColor = [System.Windows.Media.Color]::FromRgb(200, 10, 10) $supportDataHeader = Show-Text -Text "DLP Teams Support Data Template" -Color $blueColor -fontSize 20 $tableGrid = Get-Table -columns 4 -rows 10 $AffectedMessage = Show-Text -Text "Message Id" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" -ShowHelp $true $AffectedMessage.ToolTip = Get-ToolTip -Text "Open Microsoft Teams in edge browser`nOpen the corresponding message`nHit f12 and open Network`nNow like the message with emoticon`nCheck for a call 'messages/{messageId}/properties'`nCopy the Number between messages/ and /properties" Add-ControlToTableAt -TableObj $tableGrid -row 0 -column 1 -Control $AffectedMessage $global:dlpControlVariables.messageId = Get-TextBox -Width 400 -Margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 0 -column 2 -Control $global:dlpControlVariables.messageId $scopedPolicyLabel = Show-Text -Text "Impacted Policy" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 1 -column 1 -Control $scopedPolicyLabel $global:dlpControlVariables.scopedPolicyComboboxTeams = Get-ComboBox -Margin "0,0,10,0" -Width 400 -HorizontalAlignment "Left" $global:dlpControlVariables.scopedPolicyComboboxTeams.ItemsSource = $global:ContextScopeVariables.dlpPolicyDropDown Add-ControlToTableAt -TableObj $tableGrid -row 1 -column 2 -Control $global:dlpControlVariables.scopedPolicyComboboxTeams $global:dlpControlVariables.scopedPolicyComboboxTeams.add_SelectionChanged({ if ($global:dlpControlVariables.scopedPolicyComboboxTeams.SelectedItem -ne $null){ $selectedRule = $global:ContextScopeVariables.dlpRules|?{$_.ParentPolicyName -eq $global:dlpControlVariables.scopedPolicyComboboxTeams.SelectedItem} if ($selectedRule.GetType().Name -eq "PSObject") { $selectedRuleName = @( $selectedRule.Name ) } else { $selectedRuleName = $selectedRule.Name } $global:dlpControlVariables.ImpactedRuleComboboxTeams.ItemsSource = $selectedRuleName } }) $dateTimeLabel = Show-Text -Text "Date & Time of issue (UTC)" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 2 -column 1 -Control $dateTimeLabel $dateTimeButton = Get-Button -ButtonName "Select date & Time" -Margin "0,0,10,0" -HorizontalAlignment "Left" -height 30 -width 220 Add-ControlToTableAt -TableObj $tableGrid -row 2 -column 2 -Control $dateTimeButton $global:ContextScopeVariables["DlpTeamsDateTimeLabel"] = Show-Text -Text "UTC Date Time" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 2 -column 3 -Control $global:ContextScopeVariables["DlpTeamsDateTimeLabel"] $dateTimeButton.Add_Click({ $global:ContextScopeVariables.DateTimeProp = "DlpTeamsDateTime" $global:ContextScopeVariables["DlpTeamsDateTime"] = "" Get-DateTimePickerDialog }) $ImpactedRule = Show-Text -Text "Impacted Rule" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 3 -column 1 -Control $ImpactedRule $global:dlpControlVariables.ImpactedRuleComboboxTeams = Get-ComboBox -Margin "0,0,10,0" -Width 400 -HorizontalAlignment "Left" $global:dlpControlVariables.ImpactedRuleComboboxTeams.ItemsSource = $global:ContextScopeVariables.dlpRuleDropDown #$global:dlpControlVariables.ImpactedLabelCombobox.SelectionMode = "Multiple" Add-ControlToTableAt -TableObj $tableGrid -row 3 -column 2 -Control $global:dlpControlVariables.ImpactedRuleComboboxTeams $global:dlpControlVariables.ImpactedRuleComboboxTeams.add_SelectionChanged({ if ($global:dlpControlVariables.ImpactedRuleComboboxTeams.SelectedItem -ne $null){ $selectedRule = $global:ContextScopeVariables.dlpRules|?{$_.Name -eq $global:dlpControlVariables.ImpactedRuleComboboxTeams.SelectedItem} $global:dlpControlVariables.scopedPolicyComboboxTeams.Text = $selectedRule.ParentPolicyName } }) $ChatTypeLabel = Show-Text -Text "Type of Chat" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 4 -column 1 -Control $ChatTypeLabel $ChatType = @('1-1','Group Chat', 'Channel', 'Private Channel', 'Shared Channel') $global:dlpControlVariables.ChatTypeCombobox = Get-ComboBox -Margin "0,5,10,5" -Width 400 -HorizontalAlignment "Left" $global:dlpControlVariables.ChatTypeCombobox.ItemsSource = $ChatType Add-ControlToTableAt -TableObj $tableGrid -row 4 -column 2 -Control $global:dlpControlVariables.ChatTypeCombobox $AffectedMessageContent = Show-Text -Text "Message Content (Sample)" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 5 -column 1 -Control $AffectedMessageContent $global:dlpControlVariables.message = Get-TextBox -Width 400 -Margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 5 -column 2 -Control $global:dlpControlVariables.message $SenderSMTPLabel = Show-Text -Text "Sender SMTP address" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 6 -column 1 -Control $SenderSMTPLabel $global:dlpControlVariables.senderSMTP = Get-TextBox -Width 400 -Margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 6 -column 2 -Control $global:dlpControlVariables.senderSMTP $RecipientLabel = Show-Text -Text "Recipient Info (SMTP/Group Name/Channel)" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 7 -column 1 -Control $RecipientLabel $global:dlpControlVariables.RecipentDetails = Get-TextBox -Width 400 -Margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 7 -column 2 -Control $global:dlpControlVariables.RecipentDetails $BrowseAttachLabel = Show-Text -Text "Attach Screenshot/ Fiddler / Other info?" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 8 -column 1 -Control $BrowseAttachLabel $BrowseAttachButton = Get-FileButton ` -GlobalScopeName "dlpControlVariables" ` -GlobalVariableName "BrowsedTeamsFileLabel" ` -GlobalFileListName "teamsFileData" ` -ButtonName "Browse Supporting Files" ` -Margin "0,0,10,0" ` -HorizontalAlignment "Left" ` -height 30 ` -width 220 ` -VerticalAlignment "Center" Add-ControlToTableAt -TableObj $tableGrid -row 8 -column 2 -Control $BrowseAttachButton $global:dlpControlVariables.BrowsedTeamsFileLabel = Show-Text -Text "Attached Files" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" $FilesScrollViewer = New-Object Windows.Controls.ScrollViewer $FilesScrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $FilesScrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $FilesScrollViewer.Content = $global:dlpControlVariables.BrowsedTeamsFileLabel Add-ControlToTableAt -TableObj $tableGrid -row 9 -column 2 -Control $FilesScrollViewer $tableGrid.Margin = New-Object System.Windows.Thickness(10,30,10,10) $tableGrid.HorizontalAlignment = "Center" $tableGrid.ColumnDefinitions[2].Width = 410 $global:dlpControlVariables.dlpSupportDataTabContent.Children.Clear() $global:dlpControlVariables.dlpSupportDataTabContent.Children.Add($supportDataHeader) > $null $global:dlpControlVariables.dlpSupportDataTabContent.Children.Add($tableGrid) > $null $GetDlpTeamsExport = Get-Button -ButtonName "Export Support Data" $GetDlpTeamsExport.Margin = New-Object System.Windows.Thickness(10,50,10,10) $global:dlpControlVariables.dlpSupportDataTabContent.Children.Add($GetDlpTeamsExport) > $null $GetDlpTeamsExport.Add_Click({ # Create a new SaveFileDialog object $Folder = Get-ExportFolder("ExportedDLPTeamsData") if (!$Folder) { return } $filePath = $Folder + "\"+"DLPPolicyExport.Json" $supportData=@{} $supportData["DlpPolicy"] = $global:ContextScopeVariables.dlpPolicy $supportData["DlpRule"] = $global:ContextScopeVariables.dlpRules $supportData["MessageId"] = $global:dlpControlVariables.messageId.Text $supportData["ImpactedRule"] = $global:dlpControlVariables.ImpactedRuleComboboxTeams.Text $supportData["ImpactedPolicy"] = $global:dlpControlVariables.scopedPolicyComboboxTeams.Text $supportData["ChatType"] = $global:dlpControlVariables.ChatTypeCombobox.Text $supportData["SampleMessage"] = $global:dlpControlVariables.message.Text $supportData["SenderSMTP"] = $global:dlpControlVariables.senderSMTP.Text $supportData["RecipentDetails"] = $global:dlpControlVariables.RecipentDetails.Text # $supportData["Forests"] = Get-ForestInfo $supportData["DateTime"] = $global:ContextScopeVariables["DlpTeamsDateTime"] try { # Copy the files to the destination folder $supportData["SupportingFiles"] = Get-FileName($global:dlpControlVariables.teamsFileData) foreach ($file in $global:dlpControlVariables.teamsFileData) { Copy-Item $file $Folder -Force } # Zip the destination folder CleanAndShowFolder -Folder $Folder -supportData $supportData -filePath $filePath } catch { [System.Windows.MessageBox]::Show("Failed to create zip file. Error message: $_", "Error", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error) } }) } function Get-DlpEndpointSupportTemplate(){ $blueColor = [System.Windows.Media.Color]::FromRgb(63, 119, 206) $redColor = [System.Windows.Media.Color]::FromRgb(200, 10, 10) $supportDataHeader = Show-Text -Text "DLP Endpoint Support Data Template" -Color $blueColor -fontSize 20 $tableGrid = Get-Table -columns 4 -rows 13 $scopedPolicyLabel = Show-Text -Text "Impacted Policy" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 0 -column 1 -Control $scopedPolicyLabel $global:dlpControlVariables.scopedPolicyComboboxEndpoint = Get-ComboBox -Margin "0,0,10,0" -Width 400 -HorizontalAlignment "Left" $global:dlpControlVariables.scopedPolicyComboboxEndpoint.ItemsSource = $global:ContextScopeVariables.dlpPolicyDropDown Add-ControlToTableAt -TableObj $tableGrid -row 0 -column 2 -Control $global:dlpControlVariables.scopedPolicyComboboxEndpoint $global:dlpControlVariables.scopedPolicyComboboxEndpoint.add_SelectionChanged({ if ($global:dlpControlVariables.scopedPolicyComboboxEndpoint.SelectedItem -ne $null){ $selectedRule = $global:ContextScopeVariables.dlpRules|?{$_.ParentPolicyName -eq $global:dlpControlVariables.scopedPolicyComboboxEndpoint.SelectedItem} if ($selectedRule.GetType().Name -eq "PSObject") { $selectedRuleName = @( $selectedRule.Name ) } else { $selectedRuleName = $selectedRule.Name } $global:dlpControlVariables.ImpactedRuleComboboxEndpoint.ItemsSource = $selectedRuleName } }) $ImpactedRule = Show-Text -Text "Impacted Rule" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 1 -column 1 -Control $ImpactedRule $global:dlpControlVariables.ImpactedRuleComboboxEndpoint = Get-ComboBox -Margin "0,0,10,0" -Width 400 -HorizontalAlignment "Left" $global:dlpControlVariables.ImpactedRuleComboboxEndpoint.ItemsSource = $global:ContextScopeVariables.dlpRuleDropDown #$global:dlpControlVariables.ImpactedLabelCombobox.SelectionMode = "Multiple" Add-ControlToTableAt -TableObj $tableGrid -row 1 -column 2 -Control $global:dlpControlVariables.ImpactedRuleComboboxEndpoint $global:dlpControlVariables.ImpactedRuleComboboxEndpoint.add_SelectionChanged({ if ($global:dlpControlVariables.ImpactedRuleComboboxEndpoint.SelectedItem -ne $null){ $selectedRule = $global:ContextScopeVariables.dlpRules|?{$_.Name -eq $global:dlpControlVariables.ImpactedRuleComboboxEndpoint.SelectedItem} $global:dlpControlVariables.scopedPolicyComboboxEndpoint.Text = $selectedRule.ParentPolicyName } }) $dateTimeLabel = Show-Text -Text "Date & Time of issue (UTC)" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 2 -column 1 -Control $dateTimeLabel $dateTimeButton = Get-Button -ButtonName "Select date & Time" -Margin "0,0,10,0" -HorizontalAlignment "Left" -height 30 -width 220 Add-ControlToTableAt -TableObj $tableGrid -row 2 -column 2 -Control $dateTimeButton $global:ContextScopeVariables["DlpEndpointDateTimeLabel"] = Show-Text -Text "UTC Date Time" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 2 -column 3 -Control $global:ContextScopeVariables["DlpEndpointDateTimeLabel"] $dateTimeButton.Add_Click({ $global:ContextScopeVariables.DateTimeProp = "DlpEndpointDateTime" $global:ContextScopeVariables["DlpEndpointDateTime"] = "" Get-DateTimePickerDialog }) $clientAnalyzerInfo1 = Show-Text -Text "Please download and extract Client Analyzer from" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 3 -column 2 -Control $clientAnalyzerInfo1 $clientAnalyzerInfo2 = Get-TextBox -Text "https://aka.ms/mdatpanalyzer" -IsReadOnly $true -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 3 -column 3 -Control $clientAnalyzerInfo2 $clientAnalyzerAdditionalInfo1 = Show-Text -Text "Additional Arguments for Client Analyzer Tool" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 4 -column 2 -Control $clientAnalyzerAdditionalInfo1 $global:dlpControlVariables.ClientAnalyzerParameters = Get-TextBox -Width 200 -Margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 4 -column 3 -Control $global:dlpControlVariables.ClientAnalyzerParameters $clientAnalyzerLocation = Show-Text -Text "Client Analyzer Location" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 5 -column 1 -Control $clientAnalyzerLocation $BrowseClientAnalyzer = Get-Button -ButtonName "Browse Location" -Margin "0,0,10,0" -HorizontalAlignment "Left" -height 30 -width 220 Add-ControlToTableAt -TableObj $tableGrid -row 5 -column 2 -Control $BrowseClientAnalyzer $BrowseClientAnalyzer.Add_Click({ $fileDialog = New-Object System.Windows.Forms.OpenFileDialog $fileDialog.Multiselect = $false $fileDialog.Filter = "MDEClientAnalyzer.cmd|MDEClientAnalyzer.cmd" $result = $fileDialog.ShowDialog() if ($result -eq [System.Windows.Forms.DialogResult]::OK) { $global:dlpControlVariables.clientAnalyzerFileName = $fileDialog.FileName $global:dlpControlVariables.BrowsedClientAnalyzerLabel.Text = $global:dlpControlVariables.clientAnalyzerFileName $global:dlpControlVariables.BrowsedClientAnalyzerLabel.Height = 30 } }) $RunClientAnalyzer = Get-Button -ButtonName "Run ClientAnalyzer" -Margin "0,0,10,0" -HorizontalAlignment "Left" -height 30 -width 220 Add-ControlToTableAt -TableObj $tableGrid -row 5 -column 3 -Control $RunClientAnalyzer $RunClientAnalyzer.Add_Click({ $currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent()) if ($currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) -eq $false) { [System.Windows.MessageBox]::Show("Please start compliance diagnostics tool in Admin mode to run client analyzer","Error",0,0) return } if ($global:dlpControlVariables.clientAnalyzerFileName -eq $null) { [System.Windows.MessageBox]::Show("Please select MDEClientAnalyzer executable from Browse Location tab.","Error",0,0) return } $arguments = "-t " + $global:dlpControlVariables.ClientAnalyzerParameters.Text Start-Process -filePath $global:dlpControlVariables.clientAnalyzerFileName -ArgumentList $arguments }) $global:dlpControlVariables.BrowsedClientAnalyzerLabel = Show-Text -Text "Client Analyzer Location" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" $ClientAnalyzerViewer = New-Object Windows.Controls.ScrollViewer $ClientAnalyzerViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $ClientAnalyzerViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $ClientAnalyzerViewer.Content = $global:dlpControlVariables.BrowsedClientAnalyzerLabel Add-ControlToTableAt -TableObj $tableGrid -row 6 -column 2 -Control $ClientAnalyzerViewer $BrowseClientAnalyzerOpLabel = Show-Text -Text "Attach ClientAnalyzer Output" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 7 -column 1 -Control $BrowseClientAnalyzerOpLabel $BrowseClientAnalyzerOpButton = Get-FileButton ` -GlobalScopeName "dlpControlVariables" ` -GlobalVariableName "BrowsedClientAnalyzerOpLabel" ` -GlobalFileListName "BrowsedClientAnalyzerOpFiles" ` -ButtonName "Browse ClientAnalyzer Output" ` -Margin "0,0,10,0" ` -HorizontalAlignment "Left" ` -height 30 ` -width 220 ` -VerticalAlignment "Center" Add-ControlToTableAt -TableObj $tableGrid -row 7 -column 2 -Control $BrowseClientAnalyzerOpButton $global:dlpControlVariables.BrowsedClientAnalyzerOpLabel = Show-Text -Text "Attached ClientAnalyzer Output" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" $ClientAnalyzerOpViewer = New-Object Windows.Controls.ScrollViewer $ClientAnalyzerOpViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $ClientAnalyzerOpViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $ClientAnalyzerOpViewer.Content = $global:dlpControlVariables.BrowsedClientAnalyzerOpLabel Add-ControlToTableAt -TableObj $tableGrid -row 8 -column 2 -Control $ClientAnalyzerOpViewer $BrowseReproLabel = Show-Text -Text "Sample Repro File" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 9 -column 1 -Control $BrowseReproLabel $BrowseReproButton = Get-FileButton ` -GlobalScopeName "dlpControlVariables" ` -GlobalVariableName "BrowsedEndpointReproLabel" ` -GlobalFileListName "BrowsedEndpointReproFiles" ` -ButtonName "Browse Repro Files" ` -Margin "0,0,10,0" ` -HorizontalAlignment "Left" ` -height 30 ` -width 220 ` -VerticalAlignment "Center" Add-ControlToTableAt -TableObj $tableGrid -row 9 -column 2 -Control $BrowseReproButton $global:dlpControlVariables.BrowsedEndpointReproLabel = Show-Text -Text "Attached Files" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" $ReproFilesScrollViewer = New-Object Windows.Controls.ScrollViewer $ReproFilesScrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $ReproFilesScrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $ReproFilesScrollViewer.Content = $global:dlpControlVariables.BrowsedEndpointReproLabel Add-ControlToTableAt -TableObj $tableGrid -row 10 -column 2 -Control $ReproFilesScrollViewer $BrowseAttachLabel = Show-Text -Text "Attach Screenshot/ Other info" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 11 -column 1 -Control $BrowseAttachLabel $BrowseAttachButton = Get-FileButton ` -GlobalScopeName "dlpControlVariables" ` -GlobalVariableName "BrowsedEndpointFileLabel" ` -GlobalFileListName "endpointFileData" ` -ButtonName "Browse Supporting Files" ` -Margin "0,0,10,0" ` -HorizontalAlignment "Left" ` -height 30 ` -width 220 ` -VerticalAlignment "Center" Add-ControlToTableAt -TableObj $tableGrid -row 11 -column 2 -Control $BrowseAttachButton $global:dlpControlVariables.BrowsedEndpointFileLabel = Show-Text -Text "Attached Files" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" $FilesScrollViewer = New-Object Windows.Controls.ScrollViewer $FilesScrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $FilesScrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $FilesScrollViewer.Content = $global:dlpControlVariables.BrowsedEndpointFileLabel Add-ControlToTableAt -TableObj $tableGrid -row 12 -column 2 -Control $FilesScrollViewer $tableGrid.Margin = New-Object System.Windows.Thickness(10,30,10,10) $tableGrid.HorizontalAlignment = "Center" $tableGrid.ColumnDefinitions[2].Width = 410 $global:dlpControlVariables.dlpSupportDataTabContent.Children.Clear() $global:dlpControlVariables.dlpSupportDataTabContent.Children.Add($supportDataHeader) > $null $global:dlpControlVariables.dlpSupportDataTabContent.Children.Add($tableGrid) > $null $GetDlpEndpointExport = Get-Button -ButtonName "Export Support Data" $GetDlpEndpointExport.Margin = New-Object System.Windows.Thickness(10,50,10,10) $global:dlpControlVariables.dlpSupportDataTabContent.Children.Add($GetDlpEndpointExport) > $null $GetDlpEndpointExport.Add_Click({ # Create a new SaveFileDialog object $Folder = Get-ExportFolder("ExportedDLPEndpointData") if (!$Folder) { return } $filePath = $Folder + "\"+"DLPEndpointExport.Json" $supportData=@{} $supportData["DlpPolicy"] = $global:ContextScopeVariables.dlpPolicy $supportData["DlpRule"] = $global:ContextScopeVariables.dlpRules $supportData["ImpactedRule"] = $global:dlpControlVariables.ImpactedRuleComboboxEndpoint.Text $supportData["ImpactedPolicy"] = $global:dlpControlVariables.scopedPolicyComboboxEndpoint.Text # $supportData["Forests"] = Get-ForestInfo $supportData["DateTime"] = $global:ContextScopeVariables["DlpEndpointDateTime"] try { # Copy the files to the destination folder $supportData["SupportingFiles"] = Get-FileName($global:dlpControlVariables.endpointFileData) foreach ($file in $global:dlpControlVariables.endpointFileData) { Copy-Item $file $Folder -Force } $supportData["ClientAnalyzerOpFiles"] = Get-FileName($global:dlpControlVariables.BrowsedClientAnalyzerOpFiles) foreach ($file in $global:dlpControlVariables.BrowsedClientAnalyzerOpFiles) { Copy-Item $file $Folder -Force } $supportData["EndpointReproFiles"] = Get-FileName($global:dlpControlVariables.BrowsedEndpointReproFiles) foreach ($file in $global:dlpControlVariables.BrowsedEndpointReproFiles) { Copy-Item $file $Folder -Force } # Zip the destination folder CleanAndShowFolder -Folder $Folder -supportData $supportData -filePath $filePath } catch { [System.Windows.MessageBox]::Show("Failed to create zip file. Error message: $_", "Error", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error) } }) } function Get-DlpSPOSupportTemplate(){ $blueColor = [System.Windows.Media.Color]::FromRgb(63, 119, 206) $redColor = [System.Windows.Media.Color]::FromRgb(200, 10, 10) $supportDataHeader = Show-Text -Text "DLP Sharepoint/ODB Support Data Template" -Color $blueColor -fontSize 20 $tableGrid = Get-Table -columns 4 -rows 11 $AffectedDoc = Show-Text -Text "Affected File Path" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" -ShowHelp $true $AffectedDoc.ToolTip = Get-ToolTip -Text "Navigate to the document library on Browser `n Select the file `n Click on the ... dots `n Select 'Details' option `n A panel opens on the right `n Scroll to Bottom `n Click on copy icon beside path" Add-ControlToTableAt -TableObj $tableGrid -row 0 -column 1 -Control $AffectedDoc $global:dlpControlVariables.AffectedDocPath = Get-TextBox -Width 400 -Margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 0 -column 2 -Control $global:dlpControlVariables.AffectedDocPath $global:dlpControlVariables.AffectedDocError = Show-Text -Text "Could not find the document. Please make sure that a valid path is provided." -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" -Color $redColor $global:dlpControlVariables.AffectedDocError.Visibility = [Windows.Visibility]::Hidden Add-ControlToTableAt -TableObj $tableGrid -row 0 -column 3 -Control $global:dlpControlVariables.AffectedDocError $scopedPolicyLabel = Show-Text -Text "Impacted Policy" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 1 -column 1 -Control $scopedPolicyLabel $global:dlpControlVariables.scopedPolicyComboboxSPO = Get-ComboBox -Margin "0,0,10,0" -Width 400 -HorizontalAlignment "Left" $global:dlpControlVariables.scopedPolicyComboboxSPO.ItemsSource = $global:ContextScopeVariables.dlpPolicyDropDown Add-ControlToTableAt -TableObj $tableGrid -row 1 -column 2 -Control $global:dlpControlVariables.scopedPolicyComboboxSPO $global:dlpControlVariables.scopedPolicyComboboxSPO.add_SelectionChanged({ if ($global:dlpControlVariables.scopedPolicyComboboxSPO.SelectedItem -ne $null){ $selectedRule = $global:ContextScopeVariables.dlpRules|?{$_.ParentPolicyName -eq $global:dlpControlVariables.scopedPolicyComboboxSPO.SelectedItem} if ($selectedRule.GetType().Name -eq "PSObject") { $selectedRuleName = @( $selectedRule.Name ) } else { $selectedRuleName = $selectedRule.Name } $global:dlpControlVariables.ImpactedRuleComboboxSPO.ItemsSource = $selectedRuleName } }) $dateTimeLabel = Show-Text -Text "Date & Time of issue (UTC)" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 2 -column 1 -Control $dateTimeLabel $dateTimeButton = Get-Button -ButtonName "Select date & Time" -Margin "0,0,10,0" -HorizontalAlignment "Left" -height 30 -width 220 Add-ControlToTableAt -TableObj $tableGrid -row 2 -column 2 -Control $dateTimeButton $global:ContextScopeVariables["DlpSPODateTimeLabel"] = Show-Text -Text "UTC Date Time" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 2 -column 3 -Control $global:ContextScopeVariables["DlpSPODateTimeLabel"] $dateTimeButton.Add_Click({ $global:ContextScopeVariables.DateTimeProp = "DlpSPODateTime" $global:ContextScopeVariables["DlpSPODateTime"] = "" Get-DateTimePickerDialog }) $ImpactedRule = Show-Text -Text "Impacted Rule" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 3 -column 1 -Control $ImpactedRule $global:dlpControlVariables.ImpactedRuleComboboxSPO = Get-ComboBox -Margin "0,0,10,0" -Width 400 -HorizontalAlignment "Left" $global:dlpControlVariables.ImpactedRuleComboboxSPO.ItemsSource = $global:ContextScopeVariables.dlpRuleDropDown #$global:dlpControlVariables.ImpactedLabelCombobox.SelectionMode = "Multiple" Add-ControlToTableAt -TableObj $tableGrid -row 3 -column 2 -Control $global:dlpControlVariables.ImpactedRuleComboboxSPO $global:dlpControlVariables.ImpactedRuleComboboxSPO.add_SelectionChanged({ if ($global:dlpControlVariables.ImpactedRuleComboboxSPO.SelectedItem -ne $null){ $selectedRule = $global:ContextScopeVariables.dlpRules|?{$_.Name -eq $global:dlpControlVariables.ImpactedRuleComboboxSPO.SelectedItem} $global:dlpControlVariables.scopedPolicyComboboxSPO.Text = $selectedRule.ParentPolicyName } }) $docSiteIdlabel = Show-Text -Text "Site ID (GUID) of document" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" -ShowHelp $true $docSiteIdlabel.ToolTip = Get-ToolTip -Text "Populate the Document Path field`nThen a link would be shown beside this text box`nUse that link to get the siteId`ncopy the GUID between<d:Id ...></d:Id>" Add-ControlToTableAt -TableObj $tableGrid -row 4 -column 1 -Control $docSiteIdlabel $global:dlpControlVariables.docSiteId = Get-TextBox -Width 400 -Margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 4 -column 2 -Control $global:dlpControlVariables.docSiteId $global:dlpControlVariables.docSiteIdHelp = Show-Text -Text "Help" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 4 -column 3 -Control $global:dlpControlVariables.docSiteIdHelp $global:dlpControlVariables.docSiteIdHelp.Visibility = [Windows.Visibility]::Hidden $reportSMTP = Show-Text -Text "Test-DlpPolicy Report Email address" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 5 -column 1 -Control $reportSMTP $global:dlpControlVariables.reportSmtp = Get-TextBox -Width 400 -Margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 5 -column 2 -Control $global:dlpControlVariables.reportSmtp $TestDlpPoliciesButton = Get-Button -ButtonName "Run Test-DlpPolicy" -Margin "0,0,10,0" -HorizontalAlignment "Left" -height 30 -width 220 Add-ControlToTableAt -TableObj $tableGrid -row 5 -column 3 -Control $TestDlpPoliciesButton $global:dlpControlVariables.AffectedDocPath.Add_TextChanged({ $FileUrl = $global:dlpControlVariables.AffectedDocPath.Text -replace ":w:/r/", "" $siteUrl = $FileUrl -replace "(https?://.+?\.sharepoint\.com|https?://.+?\.sharepoint-df\.com|https?://(1drv|onedrive)\.live\.com)/([^/]+)/([^/]+)/([^/]+/)*[^/]+(\.\w+)?(\?[^#]*)?(#.*)?$", '$1/$3/$4' $apiLink = "$siteUrl/_api/site/id" if($siteUrl){ $global:dlpControlVariables.docSiteIdHelp.Text = "" $global:dlpControlVariables.docSiteIdHelp.Inlines.Clear() # Add regular text to the tooltip $global:dlpControlVariables.docSiteIdHelp.Inlines.Add("Click the following link to get the site id between <d:Id> tags `n") # Create a Hyperlink $hyperlink = New-Object Windows.Documents.Hyperlink $hyperlink.Inlines.Add("Click Here For SiteID") $hyperlink.NavigateUri = $apiLink $hyperlink.Add_RequestNavigate({ Start-Process $args.Uri.AbsoluteUri }) # Add the Hyperlink to the TextBlock $global:dlpControlVariables.docSiteIdHelp.Inlines.Add($hyperlink) $global:dlpControlVariables.docSiteIdHelp.Visibility = [Windows.Visibility]::Visible }else{ $global:dlpControlVariables.docSiteIdHelp.Visibility = [Windows.Visibility]::Hidden } }) $TestDlpPoliciesButton.Add_Click({ if ($global:dlpControlVariables.AffectedDocPath.Text -eq $null) { [System.Windows.MessageBox]::Show("Please enter the affected doc path in SPO/ODB.","Error",0,0) return } if ($global:dlpControlVariables.reportSmtp.Text -eq $null) { [System.Windows.MessageBox]::Show("Please enter the email the report has to be sent to.","Error",0,0) return } if ($global:dlpControlVariables.docSiteId.Text -eq $null) { [System.Windows.MessageBox]::Show("Please enter the Site ID (GUID) of the document.","Error",0,0) return } $global:dlpControlVariables.AffectedDocError.Visibility = [Windows.Visibility]::Hidden $v = $global:dlpControlVariables.AffectedDocPath.Text $FileUrl = $v -replace ":w:/r/", "" $siteUrl = $FileUrl -replace "(https?://.+?\.sharepoint\.com|https?://.+?\.sharepoint-df\.com|https?://(1drv|onedrive)\.live\.com)/([^/]+)/([^/]+)/([^/]+/)*[^/]+(\.\w+)?(\?[^#]*)?(#.*)?$", '$1/$3/$4' $siteId = $global:dlpControlVariables.docSiteId.Text $workload = "SPO" if($FileUrl -like "*-my.sharepoint*") { $workload = "ODB" } $pattern = "(?<=\%7B)(.*?)(?=\%7D)" $pattern1 = "(?<=\{)(.*?)(?=\})" if ($FileUrl -match $pattern) { $matchesR = [regex]::Matches($FileUrl, $pattern) $match = $matchesR[0].Value Write-Host "Id" -NoNewLine -ForegroundColor Blue; Write-Host " $match" -ForegroundColor Cyan $id = $match }elseif($FileUrl -match $pattern1){ $matchesR = [regex]::Matches($FileUrl, $pattern1) $match = $matchesR[0].Value Write-Host "Id" -NoNewLine -ForegroundColor Blue; Write-Host " $match" -ForegroundColor Cyan $id = $match } if(!$siteUrl){ $global:dlpControlVariables.AffectedDocError.Visibility = [Windows.Visibility]::Visible } else{ $scriptBlock = { param($siteId, $FileUrl, $workload, $reportAddr) $res = Test-DlpPolicies -SiteId $siteId -FileUrl $FileUrl -Workload $workload -SendReportTo $reportAddr return $res } $ps = [powershell]::Create().AddScript($scriptBlock) $ps.AddArgument($siteId) $ps.AddArgument($FileUrl) $ps.AddArgument($workload) $ps.AddArgument($global:dlpControlVariables.reportSmtp.Text) $global:dlpControlVariables.TDPResult = Get-ExoCmdletResult -ps $ps if($global:dlpControlVariables.TDPResult.Message.Contains("Unable to find the file")){ $global:dlpControlVariables.AffectedDocError.Visibility = [Windows.Visibility]::Visible }elseif($global:dlpControlVariables.TDPResult.Message.Contains("request is accepted")){ $global:dlpControlVariables.BrowsedTDPLabel.Text = "A Report has been sent to the above email address with subject 'Test-DlpPolicies on File'. `nPlease download it and attach here." } } }) $TDPLabel = Show-Text -Text "Attach Test-DlpPolicy Report" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 6 -column 1 -Control $TDPLabel $TDPButton = Get-FileButton ` -GlobalScopeName "dlpControlVariables" ` -GlobalVariableName "BrowsedTDPLabel" ` -GlobalFileListName "TDPReport" ` -ButtonName "Browse Test-DlpPolicy Report" ` -Margin "0,0,10,0" ` -HorizontalAlignment "Left" ` -height 30 ` -width 220 ` -VerticalAlignment "Center" Add-ControlToTableAt -TableObj $tableGrid -row 6 -column 2 -Control $TDPButton $global:dlpControlVariables.BrowsedTDPLabel = Show-Text -Text "Attached Test-DlpPolicies Report" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" $TDPscrollViewer = New-Object Windows.Controls.ScrollViewer $TDPscrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $TDPscrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $TDPscrollViewer.Content = $global:dlpControlVariables.BrowsedTDPLabel Add-ControlToTableAt -TableObj $tableGrid -row 7 -column 2 -Control $TDPscrollViewer $BrowseAttachLabel = Show-Text -Text "Attach Screenshot/ Fiddler / Other info?" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 8 -column 1 -Control $BrowseAttachLabel $BrowseAttachButton = Get-FileButton ` -GlobalScopeName "dlpControlVariables" ` -GlobalVariableName "BrowsedSPOFileLabel" ` -GlobalFileListName "SPOGSDFiles" ` -ButtonName "Browse Supporting Files" ` -Margin "0,0,10,0" ` -HorizontalAlignment "Left" ` -height 30 ` -width 220 ` -VerticalAlignment "Center" Add-ControlToTableAt -TableObj $tableGrid -row 8 -column 2 -Control $BrowseAttachButton $global:dlpControlVariables.BrowsedSPOFileLabel = Show-Text -Text "Attached Files" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" $FilesScrollViewer = New-Object Windows.Controls.ScrollViewer $FilesScrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $FilesScrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $FilesScrollViewer.Content = $global:dlpControlVariables.BrowsedSPOFileLabel Add-ControlToTableAt -TableObj $tableGrid -row 9 -column 2 -Control $FilesScrollViewer $AdditionalDoc = Show-Text -Text "Additional file paths" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 10 -column 1 -Control $AdditionalDoc $global:dlpControlVariables.AdditionalPaths = Get-TextBox -Width 400 -height 150 -Margin "0,0,10,0" -HorizontalAlignment "Left" $global:dlpControlVariables.AdditionalPaths.AcceptsReturn = $true $global:dlpControlVariables.AdditionalPaths.TextWrapping = "Wrap" Add-ControlToTableAt -TableObj $tableGrid -row 10 -column 2 -Control $global:dlpControlVariables.AdditionalPaths $tableGrid.Margin = New-Object System.Windows.Thickness(10,30,10,10) $tableGrid.HorizontalAlignment = "Center" $tableGrid.ColumnDefinitions[2].Width = 410 $global:dlpControlVariables.dlpSupportDataTabContent.Children.Clear() $global:dlpControlVariables.dlpSupportDataTabContent.Children.Add($supportDataHeader) > $null $global:dlpControlVariables.dlpSupportDataTabContent.Children.Add($tableGrid) > $null $GetDlpSPOExport = Get-Button -ButtonName "Export Support Data" $GetDlpSPOExport.Margin = New-Object System.Windows.Thickness(10,50,10,10) $global:dlpControlVariables.dlpSupportDataTabContent.Children.Add($GetDlpSPOExport) > $null $GetDlpSPOExport.Add_Click({ # Create a new SaveFileDialog object $Folder = Get-ExportFolder("ExportedDLPSPOData") if (!$Folder) { return } $filePath = $Folder + "\"+"DLPPolicyExport.Json" $supportData=@{} $supportData["DlpPolicy"] = $global:ContextScopeVariables.dlpPolicy $supportData["DlpRule"] = $global:ContextScopeVariables.dlpRules $supportData["FilePath"] = $global:dlpControlVariables.AffectedDocPath.Text $supportData["ImpactedRule"] = $global:dlpControlVariables.ImpactedRuleComboboxSPO.Text $supportData["ImpactedPolicy"] = $global:dlpControlVariables.scopedPolicyComboboxSPO.Text $supportData["AdditionalFilePaths"] = $global:dlpControlVariables.AdditionalPaths.Text $supportData["ComplianceProperties"] = $global:dlpControlVariables.TDPResult # $supportData["Forests"] = Get-ForestInfo $supportData["DateTime"] = $global:ContextScopeVariables["DlpSPODateTime"] try { # Copy the files to the destination folder $supportData["TestDlpPoliciesReportFiles"] = Get-FileName($global:dlpControlVariables.TDPReport) foreach ($file in $global:dlpControlVariables.TDPReport) { Copy-Item $file $Folder -Force } # Copy the files to the destination folder $supportData["SupportingFiles"] = Get-FileName($global:dlpControlVariables.SPOGSDFiles) foreach ($file in $global:dlpControlVariables.SPOGSDFiles) { Copy-Item $file $Folder -Force } # Zip the destination folder CleanAndShowFolder -Folder $Folder -supportData $supportData -filePath $filePath } catch { [System.Windows.MessageBox]::Show("Failed to create zip file. Error message: $_", "Error", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error) } }) } function Get-DlpEXOSupportTemplate(){ $blueColor = [System.Windows.Media.Color]::FromRgb(63, 119, 206) $supportDataHeader = Show-Text -Text "DLP Exchange Support Data Template" -Color $blueColor -fontSize 20 $tableGrid = Get-Table -columns 4 -rows 16 $AffectedClient = Show-Text -Text "Affected Client" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 0 -column 1 -Control $AffectedClient $AffectedClientCombo = @('Outlook For Web','Outlook Windows application', "Outlook Mobile") $global:dlpControlVariables.AffectedClientComboboxExo = Get-ComboBox -Margin "0,5,10,5" -Width 400 -HorizontalAlignment "Left" $global:dlpControlVariables.AffectedClientComboboxExo.ItemsSource = $AffectedClientCombo Add-ControlToTableAt -TableObj $tableGrid -row 0 -column 2 -Control $global:dlpControlVariables.AffectedClientComboboxExo $ImpactedUserSMTP = Show-Text -Text "Impacted User/Group SMTP" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 1 -column 1 -Control $ImpactedUserSMTP $global:dlpControlVariables.ImpactedUserTextBoxExo = Get-TextBox -Width 400 -Margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 1 -column 2 -Control $global:dlpControlVariables.ImpactedUserTextBoxExo $dateTimeLabel = Show-Text -Text "Date & Time of issue (UTC)" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 2 -column 1 -Control $dateTimeLabel $dateTimeButton = Get-Button -ButtonName "Select date & Time" -Margin "0,0,10,0" -HorizontalAlignment "Left" -height 30 -width 220 Add-ControlToTableAt -TableObj $tableGrid -row 2 -column 2 -Control $dateTimeButton $global:ContextScopeVariables["DlpExoDateTimeLabel"] = Show-Text -Text "UTC Date Time" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 2 -column 3 -Control $global:ContextScopeVariables["DlpExoDateTimeLabel"] $dateTimeButton.Add_Click({ $global:ContextScopeVariables.DateTimeProp = "DlpExoDateTime" $global:ContextScopeVariables["DlpExoDateTime"] = "" Get-DateTimePickerDialog }) $scopedPolicyLabel = Show-Text -Text "Impacted Policy" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 3 -column 1 -Control $scopedPolicyLabel $global:dlpControlVariables.scopedPolicyComboboxExo = Get-ComboBox -Margin "0,0,10,0" -Width 400 -HorizontalAlignment "Left" $global:dlpControlVariables.scopedPolicyComboboxExo.ItemsSource = $global:ContextScopeVariables.dlpPolicyDropDown Add-ControlToTableAt -TableObj $tableGrid -row 3 -column 2 -Control $global:dlpControlVariables.scopedPolicyComboboxExo $global:dlpControlVariables.scopedPolicyComboboxExo.add_SelectionChanged({ if ($global:dlpControlVariables.scopedPolicyComboboxExo.SelectedItem -ne $null){ $selectedRule = $global:ContextScopeVariables.dlpRules|?{$_.ParentPolicyName -eq $global:dlpControlVariables.scopedPolicyComboboxExo.SelectedItem} if ($selectedRule.GetType().Name -eq "PSObject") { $selectedRuleName = @( $selectedRule.Name ) } else { $selectedRuleName = $selectedRule.Name } $global:dlpControlVariables.ImpactedRuleComboboxExo.ItemsSource = $selectedRuleName } }) $ImpactedRule = Show-Text -Text "Impacted Rule" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 4 -column 1 -Control $ImpactedRule $global:dlpControlVariables.ImpactedRuleComboboxExo = Get-ComboBox -Margin "0,0,10,0" -Width 400 -HorizontalAlignment "Left" $global:dlpControlVariables.ImpactedRuleComboboxExo.ItemsSource = $global:ContextScopeVariables.dlpRuleDropDown #$global:dlpControlVariables.ImpactedLabelCombobox.SelectionMode = "Multiple" Add-ControlToTableAt -TableObj $tableGrid -row 4 -column 2 -Control $global:dlpControlVariables.ImpactedRuleComboboxExo $global:dlpControlVariables.ImpactedRuleComboboxExo.add_SelectionChanged({ if ($global:dlpControlVariables.ImpactedRuleComboboxExo.SelectedItem -ne $null){ $selectedRule = $global:ContextScopeVariables.dlpRules|?{$_.Name -eq $global:dlpControlVariables.ImpactedRuleComboboxExo.SelectedItem} $global:dlpControlVariables.scopedPolicyComboboxExo.Text = $selectedRule.ParentPolicyName } }) $SampleEmailLabel = Show-Text -Text "Sample Email file (.eml)" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 5 -column 1 -Control $SampleEmailLabel $SampleEmailButton = Get-FileButton ` -GlobalScopeName "dlpControlVariables" ` -GlobalVariableName "BrowsedEmailLabel" ` -GlobalFileListName "sampleEmailFileData" ` -ButtonName "Browse Sample Email" ` -Margin "0,0,10,0" ` -HorizontalAlignment "Left" ` -height 30 ` -width 220 ` -VerticalAlignment "Center" Add-ControlToTableAt -TableObj $tableGrid -row 5 -column 2 -Control $SampleEmailButton $global:dlpControlVariables.BrowsedEmailLabel = Show-Text -Text "Attached Sample Email" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" $SampleEmailscrollViewer = New-Object Windows.Controls.ScrollViewer $SampleEmailscrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $SampleEmailscrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $SampleEmailscrollViewer.Content = $global:dlpControlVariables.BrowsedEmailLabel Add-ControlToTableAt -TableObj $tableGrid -row 6 -column 2 -Control $SampleEmailscrollViewer $global:dlpControlVariables.EMTDLabel = Show-Text -Text "Extended Message Trace Detail" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" -ShowHelp $true $global:dlpControlVariables.EMTDLabel.ToolTip = Get-ToolTip -Text "Follow instructions from below page`nhttps://learn.microsoft.com/en-us/exchange/monitoring/trace-an-email-message/message-trace-modern-eac#open-message-trace" Add-ControlToTableAt -TableObj $tableGrid -row 7 -column 1 -Control $global:dlpControlVariables.EMTDLabel $EMTDButton = Get-FileButton ` -GlobalScopeName "dlpControlVariables" ` -GlobalVariableName "BrowsedEMTDLabel" ` -GlobalFileListName "emtdFileData" ` -ButtonName "Browse EMTD" ` -Margin "0,0,10,0" ` -HorizontalAlignment "Left" ` -height 30 ` -width 220 ` -VerticalAlignment "Center" Add-ControlToTableAt -TableObj $tableGrid -row 7 -column 2 -Control $EMTDButton $global:dlpControlVariables.BrowsedEMTDLabel = Show-Text -Text "Attached EMTD" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" $EMTDscrollViewer = New-Object Windows.Controls.ScrollViewer $EMTDscrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $EMTDscrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $EMTDscrollViewer.Content = $global:dlpControlVariables.BrowsedEMTDLabel Add-ControlToTableAt -TableObj $tableGrid -row 8 -column 2 -Control $EMTDscrollViewer $BrowseAttachLabel = Show-Text -Text "Attach Screenshot/ Fiddler / Other info?" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 9 -column 1 -Control $BrowseAttachLabel $BrowseAttachButton = Get-FileButton ` -GlobalScopeName "dlpControlVariables" ` -GlobalVariableName "BrowsedFileLabel" ` -GlobalFileListName "fileData" ` -ButtonName "Browse Supporting Files" ` -Margin "0,0,10,0" ` -HorizontalAlignment "Left" ` -height 30 ` -width 220 ` -VerticalAlignment "Center" Add-ControlToTableAt -TableObj $tableGrid -row 9 -column 2 -Control $BrowseAttachButton $global:dlpControlVariables.BrowsedFileLabel = Show-Text -Text "Attached Files" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" $FilesScrollViewer = New-Object Windows.Controls.ScrollViewer $FilesScrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $FilesScrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $FilesScrollViewer.Content = $global:dlpControlVariables.BrowsedFileLabel Add-ControlToTableAt -TableObj $tableGrid -row 10 -column 2 -Control $FilesScrollViewer #$dlpSupportDataTabContent.Children.Add($global:dlpControlVariables.BrowsedFileLabel) $isPTLabel = Show-Text -Text "Is Policytip issue?" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 11 -column 1 -Control $isPTLabel $global:dlpControlVariables.scopedPolicyTipYes = Get-RadioButton -value "Yes" -selected $false $global:dlpControlVariables.scopedPolicyTipNo = Get-RadioButton -value "No" -selected $true $global:dlpControlVariables.scopedPolicyTipYes.Add_Checked({ RadioButton_Yes($_) }) $global:dlpControlVariables.scopedPolicyTipNo.Add_Checked({ RadioButton_No($_) }) $RBstackPanel = New-Object Windows.Controls.StackPanel $RBstackPanel.HorizontalAlignment = 'Left' $RBstackPanel.Children.Add($global:dlpControlVariables.scopedPolicyTipYes) $RBstackPanel.Children.Add($global:dlpControlVariables.scopedPolicyTipNo) Add-ControlToTableAt -TableObj $tableGrid -row 11 -column 2 -Control $RBstackPanel $global:dlpControlVariables.PTFiddler = Show-Text -Text "Fiddler/har File" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" $global:dlpControlVariables.PTFiddler.Visibility = [Windows.Visibility]::Hidden Add-ControlToTableAt -TableObj $tableGrid -row 12 -column 1 -Control $global:dlpControlVariables.PTFiddler $global:dlpControlVariables.PTFiddlerButton = Get-FileButton ` -GlobalScopeName "dlpControlVariables" ` -GlobalVariableName "BrowsedFiddlerLabel" ` -GlobalFileListName "PTFiddlerFile" ` -ButtonName "Browse Supporting Files" ` -Margin "0,0,10,0" ` -HorizontalAlignment "Left" ` -height 30 ` -width 220 ` -VerticalAlignment "Center" $global:dlpControlVariables.PTFiddlerButton.Visibility = [Windows.Visibility]::Hidden Add-ControlToTableAt -TableObj $tableGrid -row 12 -column 2 -Control $global:dlpControlVariables.PTFiddlerButton $global:dlpControlVariables.ptFiddlerHelp = Show-Text -Text "Record while drafting or opening a draft email" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 12 -column 3 -Control $global:dlpControlVariables.ptFiddlerHelp $global:dlpControlVariables.ptFiddlerHelp.Visibility = [Windows.Visibility]::Hidden $global:dlpControlVariables.BrowsedFiddlerLabel = Show-Text -Text "Attached Policy Tips Fiddler/har" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" $global:dlpControlVariables.BrowsedFiddlerLabel.Visibility = [Windows.Visibility]::Hidden $fiddscrollViewer = New-Object Windows.Controls.ScrollViewer $fiddscrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $fiddscrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $fiddscrollViewer.Content = $global:dlpControlVariables.BrowsedFiddlerLabel Add-ControlToTableAt -TableObj $tableGrid -row 13 -column 2 -Control $fiddscrollViewer $global:dlpControlVariables.PTPNR = Show-Text -Text "PNR File (If Outlook Desktop Issue)" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" $global:dlpControlVariables.PTPNR.Visibility = [Windows.Visibility]::Hidden Add-ControlToTableAt -TableObj $tableGrid -row 14 -column 1 -Control $global:dlpControlVariables.PTPNR $global:dlpControlVariables.PNRButton = Get-FileButton ` -GlobalScopeName "dlpControlVariables" ` -GlobalVariableName "BrowsedPNRLabel" ` -GlobalFileListName "PnrFile" ` -ButtonName "Browse PNR XML" ` -Margin "0,0,10,0" ` -HorizontalAlignment "Left" ` -height 30 ` -width 220 ` -VerticalAlignment "Center" $global:dlpControlVariables.PNRButton.Visibility = [Windows.Visibility]::Hidden Add-ControlToTableAt -TableObj $tableGrid -row 14 -column 2 -Control $global:dlpControlVariables.PNRButton $global:dlpControlVariables.pnrHelp = Show-Text -Text "location: C:\Users<username>\AppData\Local\Microsoft\Outlook" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 14 -column 3 -Control $global:dlpControlVariables.pnrHelp $global:dlpControlVariables.pnrHelp.Visibility = [Windows.Visibility]::Hidden $global:dlpControlVariables.BrowsedPNRLabel = Show-Text -Text "Attached Policy Tips PNR File" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" $global:dlpControlVariables.BrowsedPNRLabel.Visibility = [Windows.Visibility]::Hidden $PNRdscrollViewer = New-Object Windows.Controls.ScrollViewer $PNRdscrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $PNRdscrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $PNRdscrollViewer.Content = $global:dlpControlVariables.BrowsedPNRLabel Add-ControlToTableAt -TableObj $tableGrid -row 15 -column 2 -Control $PNRdscrollViewer $tableGrid.Margin = New-Object System.Windows.Thickness(10,30,10,10) $tableGrid.HorizontalAlignment = "Center" $tableGrid.ColumnDefinitions[2].Width = 410 $global:dlpControlVariables.dlpSupportDataTabContent.Children.Clear() $global:dlpControlVariables.dlpSupportDataTabContent.Children.Add($supportDataHeader) > $null $global:dlpControlVariables.dlpSupportDataTabContent.Children.Add($tableGrid) > $null $GetDlpExoExport = Get-Button -ButtonName "Export Support Data" $GetDlpExoExport.Margin = New-Object System.Windows.Thickness(10,50,10,10) $global:dlpControlVariables.dlpSupportDataTabContent.Children.Add($GetDlpExoExport) > $null $GetDlpExoExport.Add_Click({ # Create a new SaveFileDialog object $Folder = Get-ExportFolder("ExportedDLPEXOData") if (!$Folder) { return } $filePath = $Folder + "\"+"DLPPolicyExport.Json" $supportData=@{} $supportData["DlpPolicy"] = $global:ContextScopeVariables.dlpPolicy $supportData["DlpRule"] = $global:ContextScopeVariables.dlpRules $supportData["ImpactedClient"] = $global:dlpControlVariables.AffectedClientComboboxExo.Text $supportData["ImpactedUser"] = $global:dlpControlVariables.ImpactedUserTextBoxExo.Text $supportData["ImpactedRule"] = $global:dlpControlVariables.ImpactedRuleComboboxExo.Text $supportData["ImpactedPolicy"] = $global:dlpControlVariables.scopedPolicyComboboxExo.Text $supportData["IsPolicyTipIssue"] = $global:dlpControlVariables.scopedPolicyTipYes.IsChecked # $supportData["Forests"] = Get-ForestInfo $supportData["DateTime"] = $global:ContextScopeVariables["DlpExoDateTime"] try { # Copy the files to the destination folder $supportData["ReproFile"] = Get-FileName($global:dlpControlVariables.sampleEmailFileData) foreach ($file in $global:dlpControlVariables.sampleEmailFileData) { Copy-Item $file $Folder -Force } # Copy the files to the destination $supportData["ExtendedMessageTraceFiles"] = Get-FileName($global:dlpControlVariables.emtdFileData) foreach ($file in $global:dlpControlVariables.emtdFileData) { Copy-Item $file $Folder -Force } # Copy the files to the destination folder $supportData["SupportingFiles"] = Get-FileName($global:dlpControlVariables.fileData) foreach ($file in $global:dlpControlVariables.fileData) { Copy-Item $file $Folder -Force } # Copy the files to the destination folder $supportData["PolicyTipSupportFiles"] = Get-FileName($global:dlpControlVariables.PTFiddlerFile) foreach ($file in $global:dlpControlVariables.PTFiddlerFile) { Copy-Item $file $Folder -Force } # Copy the files to the destination folder $supportData["PolicyTipPnrFiles"] = Get-FileName($global:dlpControlVariables.PnrFile) foreach ($file in $global:dlpControlVariables.PnrFile) { Copy-Item $file $Folder -Force } # Zip the destination folder CleanAndShowFolder -Folder $Folder -supportData $supportData -filePath $filePath } catch { [System.Windows.MessageBox]::Show("Failed to create zip file. Error message: $_", "Error", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error) } }) } function RadioButton_Yes($s) { $global:dlpControlVariables.PTFiddler.Visibility = [Windows.Visibility]::Visible $global:dlpControlVariables.PTFiddlerButton.Visibility = [Windows.Visibility]::Visible $global:dlpControlVariables.ptFiddlerHelp.Visibility = [Windows.Visibility]::Visible $global:dlpControlVariables.BrowsedFiddlerLabel.Visibility = [Windows.Visibility]::Visible $global:dlpControlVariables.PTPNR.Visibility = [Windows.Visibility]::Visible $global:dlpControlVariables.PNRButton.Visibility = [Windows.Visibility]::Visible $global:dlpControlVariables.pnrHelp.Visibility = [Windows.Visibility]::Visible $global:dlpControlVariables.BrowsedPNRLabel.Visibility = [Windows.Visibility]::Visible } function RadioButton_No($s) { $global:dlpControlVariables.PTFiddler.Visibility = [Windows.Visibility]::Hidden $global:dlpControlVariables.PTFiddlerButton.Visibility = [Windows.Visibility]::Hidden $global:dlpControlVariables.ptFiddlerHelp.Visibility = [Windows.Visibility]::Hidden $global:dlpControlVariables.BrowsedFiddlerLabel.Visibility = [Windows.Visibility]::Hidden $global:dlpControlVariables.PTPNR.Visibility = [Windows.Visibility]::Hidden $global:dlpControlVariables.PNRButton.Visibility = [Windows.Visibility]::Hidden $global:dlpControlVariables.pnrHelp.Visibility = [Windows.Visibility]::Hidden $global:dlpControlVariables.BrowsedPNRLabel.Visibility = [Windows.Visibility]::Hidden } function GetGlobalDlpRule { [System.Windows.Input.Mouse]::SetCursor([System.Windows.Input.Cursors]::Wait) if($global:ContextScopeVariables.dlpRules -and $global:ContextScopeVariables.dlpPolicy){ return } Write-Host "Getting data loss prevention (DLP) policies in your organization." $global:ContextScopeVariables.dlpPolicy = Get-DlpCompliancePolicy if ($global:ContextScopeVariables.dlpPolicy -ne $null) { if ($global:ContextScopeVariables.dlpPolicy.GetType().Name -eq "PSObject") { $global:ContextScopeVariables.dlpPolicyDropDown = @( $global:ContextScopeVariables.dlpPolicy.Name ) } else { $global:ContextScopeVariables.dlpPolicyDropDown = $global:ContextScopeVariables.dlpPolicy.Name } } Write-Host "Getting data loss prevention (DLP) rules in your organization." $global:ContextScopeVariables.dlpRules = Get-DlpComplianceRule if ($global:ContextScopeVariables.dlpRules -ne $null) { if ($global:ContextScopeVariables.dlpRules.GetType().Name -eq "PSObject") { $global:ContextScopeVariables.dlpRuleDropDown = @( $global:ContextScopeVariables.dlpRules.Name ) } else { $global:ContextScopeVariables.dlpRuleDropDown = $global:ContextScopeVariables.dlpRules.Name } } [System.Windows.Input.Mouse]::SetCursor([System.Windows.Input.Cursors]::Arrow) } Export-ModuleMember -Function * # SIG # Begin signature block # MIInwAYJKoZIhvcNAQcCoIInsTCCJ60CAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAOLdGefR2Ja4vK # bsLEpMyCrCKr9TlMa9B6pWTpclvG3aCCDXYwggX0MIID3KADAgECAhMzAAADrzBA # DkyjTQVBAAAAAAOvMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p # bmcgUENBIDIwMTEwHhcNMjMxMTE2MTkwOTAwWhcNMjQxMTE0MTkwOTAwWjB0MQsw # CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u # ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB # AQDOS8s1ra6f0YGtg0OhEaQa/t3Q+q1MEHhWJhqQVuO5amYXQpy8MDPNoJYk+FWA # hePP5LxwcSge5aen+f5Q6WNPd6EDxGzotvVpNi5ve0H97S3F7C/axDfKxyNh21MG # 0W8Sb0vxi/vorcLHOL9i+t2D6yvvDzLlEefUCbQV/zGCBjXGlYJcUj6RAzXyeNAN # xSpKXAGd7Fh+ocGHPPphcD9LQTOJgG7Y7aYztHqBLJiQQ4eAgZNU4ac6+8LnEGAL # go1ydC5BJEuJQjYKbNTy959HrKSu7LO3Ws0w8jw6pYdC1IMpdTkk2puTgY2PDNzB # tLM4evG7FYer3WX+8t1UMYNTAgMBAAGjggFzMIIBbzAfBgNVHSUEGDAWBgorBgEE # AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQURxxxNPIEPGSO8kqz+bgCAQWGXsEw # RQYDVR0RBD4wPKQ6MDgxHjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEW # MBQGA1UEBRMNMjMwMDEyKzUwMTgyNjAfBgNVHSMEGDAWgBRIbmTlUAXTgqoXNzci # tW2oynUClTBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8vd3d3Lm1pY3Jvc29mdC5j # b20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3JsMGEG # CCsGAQUFBwEBBFUwUzBRBggrBgEFBQcwAoZFaHR0cDovL3d3dy5taWNyb3NvZnQu # Y29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3J0 # MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIBAISxFt/zR2frTFPB45Yd # mhZpB2nNJoOoi+qlgcTlnO4QwlYN1w/vYwbDy/oFJolD5r6FMJd0RGcgEM8q9TgQ # 2OC7gQEmhweVJ7yuKJlQBH7P7Pg5RiqgV3cSonJ+OM4kFHbP3gPLiyzssSQdRuPY # 1mIWoGg9i7Y4ZC8ST7WhpSyc0pns2XsUe1XsIjaUcGu7zd7gg97eCUiLRdVklPmp # XobH9CEAWakRUGNICYN2AgjhRTC4j3KJfqMkU04R6Toyh4/Toswm1uoDcGr5laYn # TfcX3u5WnJqJLhuPe8Uj9kGAOcyo0O1mNwDa+LhFEzB6CB32+wfJMumfr6degvLT # e8x55urQLeTjimBQgS49BSUkhFN7ois3cZyNpnrMca5AZaC7pLI72vuqSsSlLalG # OcZmPHZGYJqZ0BacN274OZ80Q8B11iNokns9Od348bMb5Z4fihxaBWebl8kWEi2O # PvQImOAeq3nt7UWJBzJYLAGEpfasaA3ZQgIcEXdD+uwo6ymMzDY6UamFOfYqYWXk # ntxDGu7ngD2ugKUuccYKJJRiiz+LAUcj90BVcSHRLQop9N8zoALr/1sJuwPrVAtx # HNEgSW+AKBqIxYWM4Ev32l6agSUAezLMbq5f3d8x9qzT031jMDT+sUAoCw0M5wVt # CUQcqINPuYjbS1WgJyZIiEkBMIIHejCCBWKgAwIBAgIKYQ6Q0gAAAAAAAzANBgkq # hkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x # EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv # bjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5 # IDIwMTEwHhcNMTEwNzA4MjA1OTA5WhcNMjYwNzA4MjEwOTA5WjB+MQswCQYDVQQG # EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG # A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQg # Q29kZSBTaWduaW5nIFBDQSAyMDExMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC # CgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGfQhsqa+laUKq4BjgaBEm6f8MMHt03 # a8YS2AvwOMKZBrDIOdUBFDFC04kNeWSHfpRgJGyvnkmc6Whe0t+bU7IKLMOv2akr # rnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13YxC4Ddato88tt8zpcoRb0Rrrg # OGSsbmQ1eKagYw8t00CT+OPeBw3VXHmlSSnnDb6gE3e+lD3v++MrWhAfTVYoonpy # 4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nkkDstrjNYxbc+/jLTswM9 # sbKvkjh+0p2ALPVOVpEhNSXDOW5kf1O6nA+tGSOEy/S6A4aN91/w0FK/jJSHvMAh # dCVfGCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmdX4jiJV3TIUs+UsS1Vz8k # A/DRelsv1SPjcF0PUUZ3s/gA4bysAoJf28AVs70b1FVL5zmhD+kjSbwYuER8ReTB # w3J64HLnJN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zdsGbiwZeBe+3W7UvnSSmn # Eyimp31ngOaKYnhfsi+E11ecXL93KCjx7W3DKI8sj0A3T8HhhUSJxAlMxdSlQy90 # lfdu+HggWCwTXWCVmj5PM4TasIgX3p5O9JawvEagbJjS4NaIjAsCAwEAAaOCAe0w # ggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRIbmTlUAXTgqoXNzcitW2o # ynUClTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYD # VR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToCMZBDuRQFTuHqp8cx0SOJNDBa # BgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny # bC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3JsMF4GCCsG # AQUFBwEBBFIwUDBOBggrBgEFBQcwAoZCaHR0cDovL3d3dy5taWNyb3NvZnQuY29t # L3BraS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3J0MIGfBgNV # HSAEgZcwgZQwgZEGCSsGAQQBgjcuAzCBgzA/BggrBgEFBQcCARYzaHR0cDovL3d3 # dy5taWNyb3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1hcnljcHMuaHRtMEAGCCsG # AQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAHAAbwBsAGkAYwB5AF8AcwB0AGEAdABl # AG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn8oalmOBUeRou09h0ZyKb # C5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+vj/oCso7v0epo/Np22O/IjWll11l # hJB9i0ZQVdgMknzSGksc8zxCi1LQsP1r4z4HLimb5j0bpdS1HXeUOeLpZMlEPXh6 # I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6VoCo/KmtYSWMfCWluWpiW5IP0 # wI/zRive/DvQvTXvbiWu5a8n7dDd8w6vmSiXmE0OPQvyCInWH8MyGOLwxS3OW560 # STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBpmLJZiWhub6e3dMNABQam # ASooPoI/E01mC8CzTfXhj38cbxV9Rad25UAqZaPDXVJihsMdYzaXht/a8/jyFqGa # J+HNpZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYbBL7fQccOKO7eZS/sl/ah # XJbYANahRr1Z85elCUtIEJmAH9AAKcWxm6U/RXceNcbSoqKfenoi+kiVH6v7RyOA # 9Z74v2u3S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sLgOppO6/8MO0ETI7f33Vt # Y5E90Z1WTk+/gFcioXgRMiF670EKsT/7qMykXcGhiJtXcVZOSEXAQsmbdlsKgEhr # /Xmfwb1tbWrJUnMTDXpQzTGCGaAwghmcAgEBMIGVMH4xCzAJBgNVBAYTAlVTMRMw # EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN # aWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNp # Z25pbmcgUENBIDIwMTECEzMAAAOvMEAOTKNNBUEAAAAAA68wDQYJYIZIAWUDBAIB # BQCggbAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEO # MAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEINs7IBk0h4vb2HT0uMt/tiuE # MOGIBqeh9WCqiLfo1f4yMEQGCisGAQQBgjcCAQwxNjA0oBSAEgBNAGkAYwByAG8A # cwBvAGYAdKEcgBpodHRwczovL3d3dy5taWNyb3NvZnQuY29tIDANBgkqhkiG9w0B # AQEFAASCAQAzffEDVDldtVymBhVstVQYWYtV1UJnCNH5oycViGm35ehEJdJIzF35 # Mn1KZ9afs7+LL9BTM2Sh8NPPfjnpKUqvx8RzH4/IlI0ZPhlwHZaI5bIGlkOjOQwY # 3Tiw1wQ1EOpMNseQLHzf4rdJXRoYkV2MPg4bSgLqJy4Rn58hRHGzSGTpZreKm32Z # eJeRJsw+nbeqpWRalfpqOz4TFiz9jn+JyspgEYw0so0m5PWggE93tOx6IXilAnlk # Z652Iq361l+lw+/XpK2cUnmFaVJVd/BAc1Dp8g2vpqGlHRNzX7EYavRDY5sSKaQZ # gD9M1ge26zzbTfgjPqbY0VsvARwrHBYPoYIXKDCCFyQGCisGAQQBgjcDAwExghcU # MIIXEAYJKoZIhvcNAQcCoIIXATCCFv0CAQMxDzANBglghkgBZQMEAgEFADCCAVgG # CyqGSIb3DQEJEAEEoIIBRwSCAUMwggE/AgEBBgorBgEEAYRZCgMBMDEwDQYJYIZI # AWUDBAIBBQAEIJlFXIlA4dvAjesjnI5yNamRe9iBRcenTqGlbLa2sLPyAgZmM6sl # 1hYYEjIwMjQwNTA5MTkwNTE3LjQyWjAEgAIB9KCB2KSB1TCB0jELMAkGA1UEBhMC # VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV # BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEtMCsGA1UECxMkTWljcm9zb2Z0IEly # ZWxhbmQgT3BlcmF0aW9ucyBMaW1pdGVkMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVT # Tjo4NkRGLTRCQkMtOTMzNTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAg # U2VydmljZaCCEXgwggcnMIIFD6ADAgECAhMzAAAB3V1XHZXUraobAAEAAAHdMA0G # CSqGSIb3DQEBCwUAMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9u # MRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp # b24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTIz # MTAxMjE5MDcwOVoXDTI1MDExMDE5MDcwOVowgdIxCzAJBgNVBAYTAlVTMRMwEQYD # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9w # ZXJhdGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRTUyBFU046ODZERi00 # QkJDLTkzMzUxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2Uw # ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCoTgOUROoud5x1ER+JZ3yi # 6fvSb4qbk7XLWoqwsTFEqz0suQlitg7a4kD/k+dh12zdoOwJLUNaUGW0wxhcyund # N72GDawj7iSvj0bD9hT1Q4wV8uZqy0RcyBxy2ogGqGxObxSbqMWdGVnSjArPGnI4 # R1Jn2mPu/fwke7jfgePsYyasL3aVP5qdJgKt3mq8h/gCpr+pZK0DfM4K3GwoB8LK # r76k+pRBamKYu7ip+zAGG0ni3tKTHWrVeRFujVZ1zGDk0Srhj38nwSnUobmpS6PP # JBu6mtpmwOZe+/l9OiQHrDJKMmK+P/QoAxYx1KXB0jg7o5RQSjItevM0XS3q3aVt # GwV/RA7sdswTDGhCvDcsWsAhLgKu/vu5LRQG5d4VCrbs2AtRVGblJdgaulNe0uAi # rKkd4rS0/ajXG9qQCeI6yA3ZZeU4KKnn+YKb/mHLwTPN+G1xTcMrXd7oww9uD/Q3 # fMX1Sb7po7AUEJCuU/6stx60CfLndZx0r7RVYuUmv7mxrmBKUvIBehg1jefym73h # ZHbKE1SD6PKZFoYz7NEO5wOfrgcUAeM5YxIys+VluwQOMKZhZtuH4QZkY1eDW6fp # +/HIAI7w0n05QOg2AXL9pMdSR9nSIWkZ0njl3j0+oTBdCJeffCzLtK8N+VYlFnAE # JFDVE8UZ6hhcc+cPmbrDAwIDAQABo4IBSTCCAUUwHQYDVR0OBBYEFG6i9baMj1Ha # Rcsh0gylo9COJcPxMB8GA1UdIwQYMBaAFJ+nFV0AXmJdg/Tl0mWnG1M1GelyMF8G # A1UdHwRYMFYwVKBSoFCGTmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMv # Y3JsL01pY3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNybDBs # BggrBgEFBQcBAQRgMF4wXAYIKwYBBQUHMAKGUGh0dHA6Ly93d3cubWljcm9zb2Z0 # LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVGltZS1TdGFtcCUyMFBDQSUy # MDIwMTAoMSkuY3J0MAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUH # AwgwDgYDVR0PAQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUAA4ICAQAuVNmyDS4FyB1m # zHKlbn/Y5FE/yvM8iwb7uYfCa6mEds/3mjtsqNTqHPUocr8W3vRmQ7u5JFM8Usid # SGZLGWcOhQ6usmTU9zxIwBJ0RKUQS/Evpm14PjuFS0tC0pm/FyGYi7GqmdHwxHL9 # x3gPv8v6ipwkFpF4IaWhDMBjEM0ZIRsHBnV69cxqUOx08b37ue8RcWV9TJCp1hRD # Serq3fuLXlIF49J4CDsf/5d1zCtx7fE9vs7xiTQBfuf+agZO569O/cyAmxV78bYn # TTeXqF3VvvawCJEvlBg9fQGXQa7benWfjnQKrgYg5GEOZFX1DCkt9ch0DhoJhcbg # js06Vh2pa6qXSJZbMvCjbI+VPbDjYlgHfTzZchBx20GQ5ovfwTZTmMk7dGHoS2w6 # L5mVDWs5O/TnfwPde5qgnU6qxMcARlD2zD/v73WFKmibKbqQZ1LYzn/++gwIVcvH # v3us0ffD5KZZpYjtm6y90N6w+vmQlXaxjPUZuoVAwQZL2IfmI5hnXEORwelk/UXn # PPqgx5m4S4V+GXWmq3efzl3i24Mdn+y+EEEI9yoKo6gzliJ1YTRNYGLU1ix3uPPN # nf5Oy7otCtYPBGayg+5mjq7CSyjypXoHHifRQqmNbA1ClIUWtBB1FvmZCi5aISq0 # uxcI3ayDVpDwYG0M5wo3RNpuO0I02zCCB3EwggVZoAMCAQICEzMAAAAVxedrngKb # SZkAAAAAABUwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQI # EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv # ZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRpZmlj # YXRlIEF1dGhvcml0eSAyMDEwMB4XDTIxMDkzMDE4MjIyNVoXDTMwMDkzMDE4MzIy # NVowfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT # B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE # AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwggIiMA0GCSqGSIb3DQEB # AQUAA4ICDwAwggIKAoICAQDk4aZM57RyIQt5osvXJHm9DtWC0/3unAcH0qlsTnXI # yjVX9gF/bErg4r25PhdgM/9cT8dm95VTcVrifkpa/rg2Z4VGIwy1jRPPdzLAEBjo # YH1qUoNEt6aORmsHFPPFdvWGUNzBRMhxXFExN6AKOG6N7dcP2CZTfDlhAnrEqv1y # aa8dq6z2Nr41JmTamDu6GnszrYBbfowQHJ1S/rboYiXcag/PXfT+jlPP1uyFVk3v # 3byNpOORj7I5LFGc6XBpDco2LXCOMcg1KL3jtIckw+DJj361VI/c+gVVmG1oO5pG # ve2krnopN6zL64NF50ZuyjLVwIYwXE8s4mKyzbnijYjklqwBSru+cakXW2dg3viS # kR4dPf0gz3N9QZpGdc3EXzTdEonW/aUgfX782Z5F37ZyL9t9X4C626p+Nuw2TPYr # bqgSUei/BQOj0XOmTTd0lBw0gg/wEPK3Rxjtp+iZfD9M269ewvPV2HM9Q07BMzlM # jgK8QmguEOqEUUbi0b1qGFphAXPKZ6Je1yh2AuIzGHLXpyDwwvoSCtdjbwzJNmSL # W6CmgyFdXzB0kZSU2LlQ+QuJYfM2BjUYhEfb3BvR/bLUHMVr9lxSUV0S2yW6r1AF # emzFER1y7435UsSFF5PAPBXbGjfHCBUYP3irRbb1Hode2o+eFnJpxq57t7c+auIu # rQIDAQABo4IB3TCCAdkwEgYJKwYBBAGCNxUBBAUCAwEAATAjBgkrBgEEAYI3FQIE # FgQUKqdS/mTEmr6CkTxGNSnPEP8vBO4wHQYDVR0OBBYEFJ+nFV0AXmJdg/Tl0mWn # G1M1GelyMFwGA1UdIARVMFMwUQYMKwYBBAGCN0yDfQEBMEEwPwYIKwYBBQUHAgEW # M2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvRG9jcy9SZXBvc2l0b3J5 # Lmh0bTATBgNVHSUEDDAKBggrBgEFBQcDCDAZBgkrBgEEAYI3FAIEDB4KAFMAdQBi # AEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTV # 9lbLj+iiXGJo0T2UkFvXzpoYxDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3Js # Lm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXRfMjAx # MC0wNi0yMy5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8v # d3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dF8yMDEwLTA2 # LTIzLmNydDANBgkqhkiG9w0BAQsFAAOCAgEAnVV9/Cqt4SwfZwExJFvhnnJL/Klv # 6lwUtj5OR2R4sQaTlz0xM7U518JxNj/aZGx80HU5bbsPMeTCj/ts0aGUGCLu6WZn # OlNN3Zi6th542DYunKmCVgADsAW+iehp4LoJ7nvfam++Kctu2D9IdQHZGN5tggz1 # bSNU5HhTdSRXud2f8449xvNo32X2pFaq95W2KFUn0CS9QKC/GbYSEhFdPSfgQJY4 # rPf5KYnDvBewVIVCs/wMnosZiefwC2qBwoEZQhlSdYo2wh3DYXMuLGt7bj8sCXgU # 6ZGyqVvfSaN0DLzskYDSPeZKPmY7T7uG+jIa2Zb0j/aRAfbOxnT99kxybxCrdTDF # NLB62FD+CljdQDzHVG2dY3RILLFORy3BFARxv2T5JL5zbcqOCb2zAVdJVGTZc9d/ # HltEAY5aGZFrDZ+kKNxnGSgkujhLmm77IVRrakURR6nxt67I6IleT53S0Ex2tVdU # CbFpAUR+fKFhbHP+CrvsQWY9af3LwUFJfn6Tvsv4O+S3Fb+0zj6lMVGEvL8CwYKi # excdFYmNcP7ntdAoGokLjzbaukz5m/8K6TT4JDVnK+ANuOaMmdbhIurwJ0I9JZTm # dHRbatGePu1+oDEzfbzL6Xu/OHBE0ZDxyKs6ijoIYn/ZcGNTTY3ugm2lBRDBcQZq # ELQdVTNYs6FwZvKhggLUMIICPQIBATCCAQChgdikgdUwgdIxCzAJBgNVBAYTAlVT # MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQK # ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVs # YW5kIE9wZXJhdGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRTUyBFU046 # ODZERi00QkJDLTkzMzUxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNl # cnZpY2WiIwoBATAHBgUrDgMCGgMVADYjRxll2zWgz8Z8og2xDnIkoxYQoIGDMIGA # pH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT # B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE # AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwDQYJKoZIhvcNAQEFBQAC # BQDp52NxMCIYDzIwMjQwNTA5MjMwMDAxWhgPMjAyNDA1MTAyMzAwMDFaMHQwOgYK # KwYBBAGEWQoEATEsMCowCgIFAOnnY3ECAQAwBwIBAAICDYowBwIBAAICEXAwCgIF # AOnotPECAQAwNgYKKwYBBAGEWQoEAjEoMCYwDAYKKwYBBAGEWQoDAqAKMAgCAQAC # AwehIKEKMAgCAQACAwGGoDANBgkqhkiG9w0BAQUFAAOBgQBXoZiU8Ez0bc0oRNTO # ULBNTIgVlindPScfo4aEQhhxLk5uzrl3O9NGR+LOT/4Qc3bmETve4xdJ7MVAnX6N # msuRKCIJ938I9ly5X49ekG5nlL6O3DSR7vFDkvPeiwJU6GwCJOy7aoSzijtnbM6E # fKFBDefdo0kEF0f9Fqd4uLHblzGCBA0wggQJAgEBMIGTMHwxCzAJBgNVBAYTAlVT # MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQK # ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1l # LVN0YW1wIFBDQSAyMDEwAhMzAAAB3V1XHZXUraobAAEAAAHdMA0GCWCGSAFlAwQC # AQUAoIIBSjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwLwYJKoZIhvcNAQkE # MSIEIMMZh5SQ2kRP51VRK2LcDkn3cYAGFWo8BvpBjDf6WCg1MIH6BgsqhkiG9w0B # CRACLzGB6jCB5zCB5DCBvQQgYf8OLZplrE94mZx7R9FZN+1AjdNpUcWPkYjjesAx # Y2YwgZgwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ # MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u # MSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAAd1d # Vx2V1K2qGwABAAAB3TAiBCCnBMJ1r8PYKjkNiJE+xi72cYxsA2rzuaHlaNZrxEDG # ITANBgkqhkiG9w0BAQsFAASCAgAQFaoXTnNzA947g5yIPproSTB1ugmCDK8WCYs3 # FhMRtih2oBArd62Tf3oxzqzcYkSbWODUWv0cT2hf/5+DMZrmZHcf0p+jePgesaS1 # QQlfbAHLY5MDjf3ohB70nL6PQpwlSg3kQry9B7mkdgFcmp/SOjQllcOPCZah3gQq # QJe0eujkNI59EKj6dRiGv6Q/iYj1Ufo10xIneMXWE8hGwqVYUIhhjblICiY0T5Cp # LIkwWXWGltHQtxhBPegZR8SLTxtHSvXFkZSBkiPOZ1xTDHqoCl4FQEBAUtdH5RFN # FdddEP5+Se9q/LgQPnHrhDN0TvFTwCh5VnndyDBsUSpPN25gPqxU1vm+gw3FJXt2 # j0k0Gc7LwN6kar6h98u7axwXH7eLJ0Y1sDq5rCSZcEbJvA6Up2gWOnnKrq3vo1af # 35RCZKp/Snn+joBxuKMX7YXzkQ0Nc66bDZ6/kdiIddCx8T/UuOaZc6OizypxSiMb # xIFrPAAc30OGTtzFnuCOMYWPGFIDrl6zRe2m4mxldzlwkHelynihfsyr2yh7DzCC # UDNY0eY09MWMSWk+xGuKHWo0aezTmiIUxHxQt4xd9AHEG8GyH/b2c5Q/DHtUURjw # 7P5zhL3slW9CI7mKwluSTfp0UJQug2REbp/Jkx5SupNFBC9V7DylgjpygpkSzJaK # bBJcbQ== # SIG # End signature block |