Private/ADLookups/_ADLookupsUIEvents.ps1

function _ADLookupsUIEvents {
    #region General UI
    $ADLookups.Add_SourceInitialized({
            _OnADLookupsSourceInitialized
        })

    $ADLookups.Add_Activated({
            if ($HomeWindow) {
                $HomeWindow_LoadingLabel.Visibility = 'Hidden'
            }
        })

    $ADLookups.Add_Closing({
            if ($HomeWindow) {
                $_.Cancel = $true
                $ADLookups.hide()
            }
            else {
                # $ADLookups.close()
            }
        })

    $ADLookups_ExitMenuItem.Add_Click({
            # exit
            if ($HomeWindow) {
                $ADLookups.hide()
            }
            else {
                $ADLookups.close()
            }
        })

    $ADLookups_UpdateCacheMenuItem.Add_Click({
            $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            _UpdateObjectCache -Force
            $ADLookups.Cursor = $null
        })

    $ADLookups_UpdateSCCMDevicesMenuItem.Add_Click({
            $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            # This should use an API query instead of invoke-command
            _UpdateSCCMDevices -ForceLookup
            $ADLookups.Cursor = $null
        })
    #endregion

    #region Find Tab
    $ADLookups_FindTabQueryTextTextBox.Add_TextChanged({
            $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            _FindTabLookup
            $ADLookups.Cursor = $null
        })

    $ADLookups_FindTabQueryTextTextBox.Add_KeyDown({
            if ($_.Key -eq 'Enter') {
                $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
                _FindTabLookup
                $ADLookups.Cursor = $null
            }
        })

    $ADLookups_FindTabCopyContextMenuItem.Add_Click({
            $selectedCell = $ADLookups_FindTabDataGrid.SelectedCells[0]
            $value = $selectedCell.Item.($selectedCell.Column.Header)
            Set-Clipboard -Value $value
        })

    $ADLookups_FindTabDropdownButton.Add_Click({
            # This uses the Marlett font.
            $UpArrow = '5'
            $DownArrow = '6'
            switch ($ADLookups_FindTabDropdownButton.Content) {
                $UpArrow {
                    $ADLookups_FindTabSearchStackPanel.Visibility = 'Collapsed'
                    $ADLookups_FindTabDropdownButton.Content = $DownArrow
                }
                $DownArrow {
                    $ADLookups_FindTabSearchStackPanel.Visibility = 'Visible'
                    $ADLookups_FindTabDropdownButton.Content = $UpArrow
                }
                Default {
                }
            }
        })
    #endregion

    #region General User Tab
    $ADLookups_UserTabLookupButton.Add_Click({
            $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            _GeneralUserTabLookup
            $ADLookups.Cursor = $null
        })

    $ADLookups_UserTabSamAccountNameComboBox.Add_KeyDown({
            if ($_.Key -eq 'Enter') {
                $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
                _GeneralUserTabLookup
                $ADLookups.Cursor = $null
            }
        })

    $ADLookups_UserTabDisableUserButton.Add_Click({
            $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            $MessageSplat = @{
                MessageText  = "Do you want to disable $($ADLookups_UserTabSamAccountNameComboBox.Text)?"
                MessageIcon  = 'Asterisk'
                ButtonType   = 'YesNo'
                MessageTitle = 'Disable user account'
            }
            $Response = _ShowMessageBox @MessageSplat

            switch ($Response) {
                Yes {
                    Set-ADUser -Identity $ADLookups_UserTabSamAccountNameComboBox.Text -Enabled $false

                    $UserResult = Get-ADUser -Identity $ADLookups_UserTabSamAccountNameComboBox.Text

                    if ($UserResult.Enabled) {
                        $MessageSplat = @{
                            MessageText  = 'Account was disabled.'
                            MessageIcon  = 'Asterisk'
                            ButtonType   = 'Ok'
                            MessageTitle = 'Disable user account'
                        }
                        $ADLookups_UserTabDisableUserButton.IsEnabled = $false
                    }
                    else {
                        $MessageSplat = @{
                            MessageText  = 'Unable to disable account.'
                            MessageIcon  = 'Hand'
                            ButtonType   = 'Ok'
                            MessageTitle = 'Error'
                        }
                    }
                    _ShowMessageBox @MessageSplat
                }
                No {
                    # Carry on
                }
                Default {
                }
            }
            $ADLookups.Cursor = $null
        })

    $ADLookups_UserTabEnableUserButton.Add_Click({
            $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            $MessageSplat = @{
                MessageText  = "Do you want to enable $($ADLookups_UserTabSamAccountNameComboBox.Text)?"
                MessageIcon  = 'Asterisk'
                ButtonType   = 'YesNo'
                MessageTitle = 'Enable user account'
            }
            $Response = _ShowMessageBox @MessageSplat

            switch ($Response) {
                Yes {
                    Set-ADUser -Identity $ADLookups_UserTabSamAccountNameComboBox.Text -Enabled $true

                    $UserResult = Get-ADUser -Identity $ADLookups_UserTabSamAccountNameComboBox.Text

                    if ($UserResult.Enabled) {
                        $MessageSplat = @{
                            MessageText  = 'Account was enabled.'
                            MessageIcon  = 'Asterisk'
                            ButtonType   = 'Ok'
                            MessageTitle = 'Enable user account'
                        }
                        $ADLookups_UserTabEnableUserButton.IsEnabled = $false
                    }
                    else {
                        $MessageSplat = @{
                            MessageText  = 'Unable to enable account.'
                            MessageIcon  = 'Hand'
                            ButtonType   = 'Ok'
                            MessageTitle = 'Error'
                        }
                    }
                    _ShowMessageBox @MessageSplat
                }
                No {
                    # Carry on
                }
                Default {
                }
            }
            $ADLookups.Cursor = $null
        })

    $ADLookups_UserTabUnlockUserButton.Add_Click({
            $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            $MessageSplat = @{
                MessageText  = "Do you want to unlock $($ADLookups_UserTabSamAccountNameComboBox.Text)?"
                MessageIcon  = 'Asterisk'
                ButtonType   = 'YesNo'
                MessageTitle = 'Unlock user account'
            }
            $Response = _ShowMessageBox @MessageSplat

            switch ($Response) {
                Yes {
                    Unlock-ADAccount -Identity $ADLookups_UserTabSamAccountNameComboBox.Text

                    $UserResult = Get-ADUser -Identity $ADLookups_UserTabSamAccountNameComboBox.Text -Properties LockedOut

                    if ($UserResult.LockedOut) {
                        $MessageSplat = @{
                            MessageText  = 'Account was unlocked.'
                            MessageIcon  = 'Asterisk'
                            ButtonType   = 'Ok'
                            MessageTitle = 'Unlock user account'
                        }
                        $ADLookups_UserTabUnlockUserButton.IsEnabled = $false
                    }
                    else {
                        $MessageSplat = @{
                            MessageText  = 'Unable to unlock account.'
                            MessageIcon  = 'Hand'
                            ButtonType   = 'Ok'
                            MessageTitle = 'Error'
                        }
                    }
                    _ShowMessageBox @MessageSplat
                }
                No {
                    # Carry on
                }
                Default {
                }
            }
            $ADLookups.Cursor = $null
        })

    $ADLookups_UserTabCollectionButton.Add_Click({

        })
    #endregion

    #region User's Groups Tab
    $ADLookups_UsersGroupsTabLookupButton.Add_Click({
            $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            _UserGroupsTabLookup
            $ADLookups.Cursor = $null
        })

    $ADLookups_UsersGroupsTabSamAccountNameComboBox.Add_KeyDown({
            if ($_.Key -eq 'Enter') {
                $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
                _UserGroupsTabLookup
                $ADLookups.Cursor = $null
            }
        })

    $ADLookups_UsersGroupTabCopyContextMenuItem.Add_Click({
            $selectedCell = $ADLookups_UsersGroupTabDataGrid.SelectedCells[0]
            $value = $selectedCell.Item.($selectedCell.Column.Header)
            Set-Clipboard -Value $value
        })
    #endregion

    #region User's Exchange Tab
    $ADLookups_ExchangeTabLookupButton.Add_Click({
            $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            _UsersExchangeTabLookup
            $ADLookups.Cursor = $null
        })

    $ADLookups_ExchangeTabSamAccountNameComboBox.Add_KeyDown({
            if ($_.Key -eq 'Enter') {
                $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
                _UsersExchangeTabLookup
                $ADLookups.Cursor = $null
            }
        })
    #endregion

    #region Group Tab
    $ADLookups_GroupTabLookupButton.Add_Click({
            $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            _GroupsTabLookup
            $ADLookups.Cursor = $null
        })

    $ADLookups_GroupTabSamAccountNameComboBox.Add_KeyDown({
            if ($_.Key -eq 'Enter') {
                $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
                _GroupsTabLookup
                $ADLookups.Cursor = $null
            }
        })

    $ADLookups_GroupTabCopyContextMenuItem.Add_Click({
            $selectedCell = $ADLookups_GroupTabMembersDataGrid.SelectedCells[0]
            $value = $selectedCell.Item.($selectedCell.Column.Header)
            Set-Clipboard -Value $value
        })

    $ADLookups_GroupTabExportMembersMenuItem.Add_Click({
            $SaveDialog = New-Object System.Windows.Forms.SaveFileDialog
            $SaveDialog.DefaultExt = '.csv'
            $SaveDialog.InitialDirectory = $STTSettings.ObjectsSettings.ObjectStorageFolder
            $SaveDialog.Filter = 'Comma Delimited | *.csv'
            $SaveDialog.Title = 'Export Group Listing'
            $Output = $SaveDialog.ShowDialog()

            if ($Output -eq 'OK') {
                $PossibleExport | Export-Csv -Path $SaveDialog.FileName -NoTypeInformation
            }
        })

    $ADLookups_GroupTabMembersOfRadioButton.Add_Checked({
            $ADLookups_GroupTabMembersRecursiveCheckBox.IsChecked = $false
            $ADLookups_GroupTabMembersRecursiveCheckBox.IsEnabled = $false
            $Members = @()
            $Members += [pscustomobject]@{
                Refresh = 'Click Lookup to load membership.'
            }
            $ADLookups_GroupTabMembersDataGrid.ItemsSource = $Members
        })

    $ADLookups_GroupTabMembersRadioButton.Add_Checked({
            $ADLookups_GroupTabMembersRecursiveCheckBox.IsEnabled = $true
            $Members = @()
            $Members += [pscustomobject]@{
                Refresh = 'Click Lookup to load membership.'
            }
            $ADLookups_GroupTabMembersDataGrid.ItemsSource = $Members
        })
    #endregion

    #region Computer Tab
    $ADLookups_ComputerTabLookupButton.Add_Click({
            $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            _ComputerTabLookup
            $ADLookups.Cursor = $null
        })

    $ADLookups_ComputerTabHostNameComboBox.Add_KeyDown({
            if ($_.Key -eq 'Enter') {
                $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
                _ComputerTabLookup
                $ADLookups.Cursor = $null
            }
        })

    $ADLookups_ComputerTabRSOPButton.Add_Click({
            $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            if (!$RSOP) {
                _NewXAMLWindow -FormName 'RSOP'
                _RSOPWindowUIEvents
            }
            $RSOP_HostnameComboBox.SelectedItem = $ADLookups_ComputerTabHostNameComboBox.Text
            $RSOP.ShowDialog()
            $ADLookups.Cursor = $null
        })

    $ADLookups_ComputerTabQueryLiveButton.Add_Click({
            $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            if ($ADLookups_ComputerTabHostNameComboBox.Text) {
                $ComputerStats_ComputersComboBox.Text = $ADLookups_ComputerTabHostNameComboBox.Text
                _ComputerTabQuery -Identity $ADLookups_ComputerTabHostNameComboBox.Text
            }
            else {
                $MessageSplat = @{
                    MessageText  = 'Please provide a computer hostname'
                    MessageIcon  = 'Hand'
                    ButtonType   = 'OK'
                    MessageTitle = 'Error'
                }
                _ShowMessageBox @MessageSplat
            }
            $ADLookups.Cursor = $null
        })

    $ADLookups_ComputerTabShowApplicationsButton.Add_Click({
            $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            if ($ADLookups_ComputerTabHostNameComboBox.Text) {
                if (!$ComputerStats) {
                    _NewXAMLWindow -FormName 'ComputerStats'
                    _ComputerStatsUIEvents
                }
                $ComputerStats_ComputersComboBox.Text = $ADLookups_ComputerTabHostNameComboBox.Text
                $ComputerStats_TypeComboBox.Text = 'Installed Software'
                _PopulateComputerStats -LookupType Software -Identity $ADLookups_ComputerTabHostNameComboBox.Text
                $ComputerStats.ShowDialog()
            }
            else {
                $MessageSplat = @{
                    MessageText  = 'Please provide a computer hostname'
                    MessageIcon  = 'Hand'
                    ButtonType   = 'OK'
                    MessageTitle = 'Error'
                }
                _ShowMessageBox @MessageSplat
            }
            $ADLookups.Cursor = $null
        })

    $ADLookups_ComputerTabShowInstalledUpdatesButton.Add_Click({
            $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            if ($ADLookups_ComputerTabHostNameComboBox.Text) {
                if (!$ComputerStats) {
                    _NewXAMLWindow -FormName 'ComputerStats'
                    _ComputerStatsUIEvents
                }
                $ComputerStats_ComputersComboBox.Text = $ADLookups_ComputerTabHostNameComboBox.Text
                $ComputerStats_TypeComboBox.Text = 'Windows Updates'
                _PopulateComputerStats -LookupType Updates -Identity $ADLookups_ComputerTabHostNameComboBox.Text
                $ComputerStats.ShowDialog()
            }
            else {
                $MessageSplat = @{
                    MessageText  = 'Please provide a computer hostname'
                    MessageIcon  = 'Hand'
                    ButtonType   = 'OK'
                    MessageTitle = 'Error'
                }
                _ShowMessageBox @MessageSplat
            }
            $ADLookups.Cursor = $null
        })
    $ADLookups_ComputerTabProcessesButton.Add_Click({
            $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            if ($ADLookups_ComputerTabHostNameComboBox.Text) {
                if (!$ComputerStats) {
                    _NewXAMLWindow -FormName 'ComputerStats'
                    _ComputerStatsUIEvents
                }
                $ComputerStats_ComputersComboBox.Text = $ADLookups_ComputerTabHostNameComboBox.Text
                $ComputerStats_TypeComboBox.Text = 'Running Processes'
                _PopulateComputerStats -LookupType Processes -Identity $ADLookups_ComputerTabHostNameComboBox.Text
                $ComputerStats.ShowDialog()
            }
            else {
                $MessageSplat = @{
                    MessageText  = 'Please provide a computer hostname'
                    MessageIcon  = 'Hand'
                    ButtonType   = 'OK'
                    MessageTitle = 'Error'
                }
                _ShowMessageBox @MessageSplat
            }
            $ADLookups.Cursor = $null
        })

    $ADLookups_ComputerTabServicesButton.Add_Click({
            $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            if ($ADLookups_ComputerTabHostNameComboBox.Text) {
                if (!$ComputerStats) {
                    _NewXAMLWindow -FormName 'ComputerStats'
                    _ComputerStatsUIEvents
                }
                $ComputerStats_ComputersComboBox.Text = $ADLookups_ComputerTabHostNameComboBox.Text
                $ComputerStats_TypeComboBox.Text = 'Services'
                _PopulateComputerStats -LookupType Services -Identity $ADLookups_ComputerTabHostNameComboBox.Text
                $ComputerStats.ShowDialog()
            }
            else {
                $MessageSplat = @{
                    MessageText  = 'Please provide a computer hostname'
                    MessageIcon  = 'Hand'
                    ButtonType   = 'OK'
                    MessageTitle = 'Error'
                }
                _ShowMessageBox @MessageSplat
            }
            $ADLookups.Cursor = $null
        })

    $ADLookups_ComputerTabCDollarButton.Add_Click({
            $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            if ($ADLookups_ComputerTabHostNameComboBox.Text) {
                $Hostname = $ADLookups_ComputerTabHostNameComboBox.Text
                Invoke-Item "\\$Hostname\C$"
            }
            else {
                $MessageSplat = @{
                    MessageText  = 'Please provide a computer hostname'
                    MessageIcon  = 'Hand'
                    ButtonType   = 'OK'
                    MessageTitle = 'Error'
                }
                _ShowMessageBox @MessageSplat
            }
            $ADLookups.Cursor = $null
        })

    $ADLookups_ComputerTabCollectionButton.Add_Click({
            $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            $Collections = @()
            try {
                $CollectionIDs = _GetSCCMInformationQuerySTT -Route wmi -Connector SMS_FullCollectionMembership -FilterField Name -FilterString $ADLookups_ComputerTabHostNameComboBox.Text
                foreach ($ID in $CollectionIDs) {
                    $Object = _GetSCCMInformationQuerySTT -Route wmi -Connector sms_collection -FilterField CollectionID -FilterString $ID.CollectionID
                    $Collections += [PSCustomObject]@{
                        CollectionID          = $Object.CollectionID
                        Name                  = $Object.name
                        LimitToCollectionName = $Object.LimitToCollectionName
                    }
                }
            }
            catch {
                $Collections += [pscustomobject]@{
                    Error = 'Error getting collections'
                }
            }
            $ADLookups_ComputerTabCollectionMembershipDataGrid.ItemsSource = $Collections
            $ADLookups.Cursor = $null
        })
    #endregion
}