コード例 #1
0
        private void disabledView_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
        {
            try
            {
                //Console.WriteLine("selectionchanged: " + e.ItemIndex + " " + e.IsSelected + " " + e.Item + " --- lastindex " + selectedindex);
                if (!e.IsSelected)
                {
                    return;
                }
                if (selectedindex >= 0)
                {
                    selectedindex = -1;
                    return;
                }

                string selected = e.Item.Text;
                selectedindex = e.ItemIndex;

                string answer = Interaction.InputBox("Are you OK to re-enable " + selected, "Computer Re-enabler", "Yes");
                if (!answer.ToUpper().Equals("YES"))
                {
                    return;
                }

                Cursor.Current = Cursors.WaitCursor;


                string         machine   = selected.IndexOf('(') < 0 ? selected : selected.Substring(0, selected.IndexOf('(')).Trim();
                DirectoryEntry machinede = MDE.ContainsKey(machine) ? (DirectoryEntry)MDE[machine] : null;
                if (machinede == null)
                {
                    throw new Exception("Machine DirectoryEntry not found: '" + machine + "'");
                }
                DirectoryEntry Workstations = null;
                string         disp         = whoBox.Text.Trim();
                if (disp.Length > 0)
                {
                    string user = USERS.getUsernameFromDisplayname(disp);
                    if (user == null || user.Length == 0)
                    {
                        throw new Exception("New Owner not found: '" + disp + "'");
                    }
                    DirectoryEntry de = USERS.getDirectoryentryFromUsername(user);
                    if (de == null)
                    {
                        throw new Exception("New Owner DirectoryEntry not found: '" + disp + "'");
                    }
                    Workstations = de.Parent.Parent.Children.Find("OU=Workstations", "organizationalUnit");
                    if (Workstations == null)
                    {
                        throw new Exception("Workstations OU not found in " + de.Parent.Name);
                    }
                }
                else
                {
                    try
                    {
                        Workstations = ((Domain)domainBox.SelectedItem).GetDirectoryEntry()
                                       .Children.Find("OU=" + OUBox.Text, "organizationalUnit")
                                       .Children.Find("OU=!Unknown-SCCM", "organizationalUnit");
                    }
                    catch (Exception ee)
                    {
                        throw new Exception("!Unknown-SCCM OU not found in " + OUBox.Text);
                    }
                }
                if (!MachineInfo.reassign(machine, disp, machinede, Workstations))
                {
                    throw new Exception("Failed to re-enable " + selected);
                }
                string to = Workstations == null ? "" : Workstations.Path;
                to = Regex.Replace(to, @".*/OU=", @"");
                to = Regex.Replace(to, @",OU=", @"\");
                to = Regex.Replace(to, @",DC=.*", @"");

                disabledView.BeginUpdate();
                disabledView.Items.Remove(e.Item);
                disabledView.EndUpdate();


                COMP_SEARCH.SearchRoot = Workstations;
                COMP_SEARCH.Filter     = "(&(ObjectCategory=computer)(name=" + machine + "))";
                SearchResult sr = COMP_SEARCH.FindOne();
                if (COMPSR != null)
                {
                    COMPSR.Add(selected, sr);
                }
                reenabled.Add(selected);

                Cursor.Current = Cursors.Default;
                MessageBox.Show(selected + " has been re-enabled successfully."
                                + "\nLocation: " + to, "Computer Re-enabler");
            }
            catch (Exception ee)
            {
                //selected_item = null;
                Console.WriteLine(ee.ToString());
                Cursor.Current = Cursors.Default;
                MessageBox.Show(ee.Message, "Computer Re-enabler");
            }
        }
コード例 #2
0
        private void lockedAccountTimer_Tick(object sender, EventArgs e)
        {
            statusLabel.Text = "Checking " + usersInfo.getUsersCount() + " user" + (usersInfo.getUsersCount() > 1 ? "s" : "") + "...";
            speak("Account checking...");
            //if (!running) return;
            foreach (Control control in actionsPanel.Controls)
            {
                if (control is Panel && ((Panel)control).Controls.Count > 0 && ((Panel)control).Controls[0] is Button)
                {
                    Panel  panel  = control as Panel;
                    Button button = ((Panel)control).Controls[0] as Button;
                    if (button.Text.StartsWith("UNLOCK"))
                    {
                        string desc     = button.Text.Split(new char[] { ':', '\'' })[1].Trim();
                        string user     = usersInfo.getUsernameFromDisplayname(desc);
                        bool   unlocked = UsersInfo.isUnlockedAD(usersInfo.getDirectoryentryFromUsername(user));
                        if (unlocked)
                        {
                            Invoke(new removeActionDelegate(removeAction), new Object[] { panel });
                        }
                    }
                    else if (button.Text.StartsWith("EXPIRING"))
                    {
                        string desc     = button.Text.Split(new char[] { ':', '\'' })[1].Trim();
                        string user     = usersInfo.getUsernameFromDisplayname(desc);
                        int    days     = UsersInfo.daysToExpiration(usersInfo.getDirectoryentryFromUsername(user), MAXDAYS);
                        bool   expiring = days < ALARMDAYS && days >= 0;
                        if (!expiring)
                        {
                            Invoke(new removeActionDelegate(removeAction), new Object[] { panel });
                        }
                    }
                }
            }
            int users_count = usersInfo.getUsersCount();

            var expiring_u = usersInfo.getExpiringUsers(MAXDAYS, ALARMDAYS).ToList().OrderByDescending(o => (int)o[1]).Select(o => new
            {
                days          = (int)o[1],
                user          = (string)o[0],
                desc          = usersInfo.getDisplaynameFromUsername((string)o[0]),
                decentralized = usersInfo.getDecentralizedFromUsername((string)o[0]),
                external      = usersInfo.getDirectoryentryFromUsername((string)o[0]).Path.ToUpper().Contains("OU=EXTERNAL,"),
                //de = usersInfo.getDirectoryentryFromUsername((string)o[0]).Path
            }).ToList(); foreach (var o in expiring_u)
            {
                if (SHOW_EXTERNAL || !o.external)
                {
                    actions.Insert(0, new Object[] { "EXPIRING: " + o.desc + "'s password is "
                                                     + (o.days == 0 ? "expired" : "expiring in " + o.days + " day" + (o.days > 1 ? "s" : ""))
                                                     + (o.decentralized || o.external ? "\n***" : "") + (o.decentralized ? " DECENTRALIZED" : "") + (o.external ? " EXTERNAL" : "") + (o.decentralized || o.external ? " ***" : ""),
                                                     "EXPIRING", o.user, o.decentralized, null });
                }
            }

            var locked_u = usersInfo.getLockedUsers().ToList().Select(u => new
            {
                user          = u,
                desc          = usersInfo.getDisplaynameFromUsername(u),
                decentralized = usersInfo.getDecentralizedFromUsername(u),
                external      = usersInfo.getDirectoryentryFromUsername(u).Path.ToUpper().Contains("/EXTERNAL")
            }).ToList(); foreach (var o in locked_u)

            {
                if (SHOW_EXTERNAL || !o.external)

                {
                    actions.Insert(0, new Object[] { "UNLOCK: " + o.desc + "'s account is locked"
                                                     + (o.decentralized || o.external ? "\n***" : "") + (o.decentralized ? " DECENTRALIZED" : "") + (o.external ? " EXTERNAL" : "") + (o.decentralized || o.external ? " ***" : ""),
                                                     "UNLOCK", o.user, o.decentralized, null });
                }
            }

            statusLabel.Text = "Check completed: " + users_count + " user" + (users_count > 1 ? "s" : "") + " verified. Locked: " + locked_u.Count + ". Expiring: " + expiring_u.Count + ".";
            int actions_count = locked_u.Count + expiring_u.Count;

            speak("Check completed. There are " + actions_count + " user" + (actions_count > 1 ? "s" : "") + " to look at, "
                  + locked_u.Count + (locked_u.Count > 1 ? " are " : " is ") + "locked and " + expiring_u.Count + (expiring_u.Count > 1 ? " are " : " is ") + "expiring.");
            Console.WriteLine("Timer getting job done!");
        }