Пример #1
0
        private void btnSearchComputers_Click(object sender, EventArgs e)
        {
            Logger.Write("Will search for computers");
            ChangeUIAccess(false);
            lblProgress.Text = resMan.GetString("SearchingComputerInAD");
            lblProgress.Refresh();

            _aborting = false;
            dtGrdVResult.Rows.Clear();
            dtGrdVResult.Refresh();
            this.Cursor = Cursors.WaitCursor;

            if (ouSelector.SearchInAllAD)
            {
                ADcomputers = ADHelper.GetComputers("LDAP://" + txtBxDomainName.Text);
            }
            else
            {
                ADcomputers = ADHelper.GetComputers(ouSelector.SelectedOUList);
            }
            Logger.Write("Found " + ADcomputers.Count + " computers in domaine " + txtBxDomainName.Text);
            lblProgress.Text = ADcomputers.Count + resMan.GetString("ComputersFound");

            WsusWrapper wsus = WsusWrapper.GetInstance();

            computers.Clear();
            prgBrSearch.Value   = 0;
            prgBrSearch.Maximum = ADcomputers.Count;
            lblProgress.Text    = resMan.GetString("SearchingComputersInWSUS");
            lblProgress.Refresh();

            foreach (ADComputer computer in ADcomputers)
            {
                if (!_closing && !_aborting)
                {
                    ADComputer tempComputer = new ADComputer(computer.Name, computer.OUName, computer.LastLogon, computer.OSName, computer.OSServicePack, computer.OSVersion);
                    try
                    {
                        Logger.Write("Searching " + computer.Name + " in WSUS...");
                        Microsoft.UpdateServices.Administration.IComputerTarget target = wsus.GetComputerTargetByName(computer.Name);
                        if (target != null)
                        {
                            tempComputer.IsInWsus = true;
                            Logger.Write("...Found it.");
                        }
                        else
                        {
                            Logger.Write("...not found.");
                            tempComputer.IsInWsus = false;
                        }
                    }
                    catch (Exception)
                    {
                    }
                    if (!computers.Contains(tempComputer))
                    {
                        computers.Add(tempComputer);
                    }
                    prgBrSearch.Value++;
                    prgBrSearch.Refresh();
                }
                else
                {
                    break;
                }
            }
            DisplayComputers();
            ChangeUIAccess(true);
            this.Cursor = Cursors.Default;
        }
        private void ctxMnuComputer_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            Logger.EnteringMethod(e.ClickedItem.Name);
            List <ADComputer>  targetComputers = new List <ADComputer>();
            FrmRemoteExecution remoteExecution = new FrmRemoteExecution();

            foreach (DataGridViewRow row in dGVComputer.SelectedRows)
            {
                if (row.Visible)
                {
                    targetComputers.Add((ADComputer)row.Cells["ComputerName"].Value);
                }
            }
            ctxMnuComputer.Hide();
            Credentials cred = Credentials.GetInstance();

            if (targetComputers.Count != 0)
            {
                if (cred.InitializeCredential() == false)
                {
                    return;
                }
            }
            lblCredentialNotice.Text = cred.CredentialNotice;
            Logger.Write(lblCredentialNotice);

            switch (e.ClickedItem.Name)
            {
            case "DetectNow":
                remoteExecution.Show(this);
                remoteExecution.SendDetectNow(targetComputers, cred.Login, cred.Password);
                break;

            case "ReportNow":
                remoteExecution.Show(this);
                remoteExecution.SendReportNow(targetComputers, cred.Login, cred.Password);
                break;

            case "RebootNow":
                FrmRebootCommand rebootCommand = new FrmRebootCommand(targetComputers, cred.Login, cred.Password);
                rebootCommand.Show();
                break;

            case "ShowPendingUpdates":
                System.Diagnostics.ProcessStartInfo startInfo      = new System.Diagnostics.ProcessStartInfo();
                System.Security.SecureString        securePassword = new System.Security.SecureString();

                startInfo.FileName = Environment.CurrentDirectory + @"\ShowPendingUpdates.exe";
                if (!System.IO.File.Exists(startInfo.FileName))
                {
                    Logger.Write("Unable to find : " + startInfo.FileName);
                    MessageBox.Show(resMan.GetString("UnableToFindShowPendingUpdates"));
                }
                else
                {
                    startInfo.Arguments = targetComputers[0].Name;
                    if (!string.IsNullOrEmpty(cred.Login) && !string.IsNullOrEmpty(cred.Password))
                    {
                        foreach (Char letter in cred.Password)
                        {
                            securePassword.AppendChar(letter);
                        }
                        startInfo.UserName = cred.Login;
                        startInfo.Password = securePassword;
                        startInfo.Domain   = ADHelper.GetDomainName();
                    }
                    startInfo.UseShellExecute  = false;
                    startInfo.WorkingDirectory = Environment.CurrentDirectory;
                    try
                    {
                        System.Diagnostics.Process.Start(startInfo);
                    }
                    catch (Exception ex)
                    {
                        Logger.Write("**** " + ex.Message);
                        MessageBox.Show(ex.Message);
                    }
                }
                break;

            case "InstallPendingUpdates":
                FrmInstallPendingUpdatesNow installPendingUpdates = new FrmInstallPendingUpdatesNow();
                installPendingUpdates.Username  = cred.Login;
                installPendingUpdates.Password  = cred.Password;
                installPendingUpdates.Computers = targetComputers;
                installPendingUpdates.ShowDialog();
                break;

            case "ShowCurrentLogonUser":
                this.Cursor = Cursors.WaitCursor;
                ADComputer remoteComputer = new ADComputer(dGVComputer.SelectedRows[0].Cells["ComputerName"].Value.ToString());
                string     logonUser      = remoteComputer.GetCurrentLogonUser(cred.Login, cred.Password);
                if (!string.IsNullOrEmpty(logonUser))
                {
                    MessageBox.Show(resMan.GetString("CurrentLogonUserIs") + " : " + logonUser);
                }
                else
                {
                    MessageBox.Show(resMan.GetString("UnableToGetLogonUser"));
                }
                this.Cursor = Cursors.Default;
                break;

            case "ShowWindowsUpdateLog":
                this.Cursor = Cursors.WaitCursor;
                ADComputer computer = new ADComputer(dGVComputer.SelectedRows[0].Cells["ComputerName"].Value.ToString());
                if (!computer.Ping(100))
                {
                    MessageBox.Show(resMan.GetString("ComputerUnreachable"));
                }
                else
                {
                    computer.OpenWindowsUpdateLog(cred.Login, cred.Password);
                }
                this.Cursor = Cursors.Default;
                break;

            case "CleanSoftwareDistributionFolder":
                this.Cursor = Cursors.WaitCursor;
                FrmCleanSoftwareDistributionFolder frmCleanSoftwareDistributionFolder = new FrmCleanSoftwareDistributionFolder(targetComputers, cred.Login, cred.Password);
                frmCleanSoftwareDistributionFolder.ShowDialog();
                this.Cursor = Cursors.Default;
                break;

            default:
                break;
            }
        }