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"); } }
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!"); }