diff --git a/Program.cs b/Program.cs index 8eec712..44c9f7b 100644 --- a/Program.cs +++ b/Program.cs @@ -30,6 +30,18 @@ namespace domain_utility { "^[rR]\\d*[-]\\d+[a-zA-Z]+\\d+$", "" } // R54-630300THE01 }; + private static string InputRemoteComputer(string str, Action callback) + { + Console.Clear(); + Console.WriteLine(str); + Console.Write("> "); + string remote = Console.ReadLine().Trim(); + if (remote == string.Empty || remote.Length == 0) + InputRemoteComputer(str, callback); + Console.WriteLine(); + return remote; + } + private static void BackToMenu(Action callback, bool noMessage = false) { if (noMessage == false) @@ -46,6 +58,19 @@ namespace domain_utility } } + private static string СheckComputerName(string pcName) + { + for (int i = 0; i < computerNameRegex.GetLength(0); i++) + if (Regex.Match(pcName, computerNameRegex[i, 0]).Success) + return $"{computerNameRegex[i, 1]}{pcName}".ToUpper(); + return string.Empty; + } + + private static bool IsStringContainIp(string ip) + { + return Regex.Match(ip, @"^(\d+[.]\d+[.]\d+[.]\d+)$").Success; + } + private static string PingHost(string host) { string returnMessage = string.Empty; @@ -94,19 +119,6 @@ namespace domain_utility return returnMessage; } - private static string СheckComputerName(string pcName) - { - for (int i = 0; i < computerNameRegex.GetLength(0); i++) - if (Regex.Match(pcName, computerNameRegex[i, 0]).Success) - return $"{computerNameRegex[i, 1]}{pcName}"; - return string.Empty; - } - - private static bool IsStringContainIp(string ip) - { - return Regex.Match(ip, @"^(\d+[.]\d+[.]\d+[.]\d+)$").Success; - } - public static void ResetAdminPassword() { string machineNameAndUser = WindowsIdentity.GetCurrent().Name.ToString(); @@ -124,16 +136,8 @@ namespace domain_utility private static void ShowDomainUserInfo() { - Console.Clear(); - Console.Write("\nВведите имя пользователя (пр. 'lev.rusanov'): "); - string username = Console.ReadLine().Trim(); - if (username == string.Empty || username.Length == 0) - { - ShowDomainUserInfo(); - return; - } - Console.WriteLine(); - + string username = InputRemoteComputer("\nВведите имя пользователя (пр. 'lev.rusanov'): ", ShowDomainUserInfo); + username = $"user {username} /domain"; ProcessStartInfo procStartInfo = new ProcessStartInfo("net", username) @@ -184,15 +188,8 @@ namespace domain_utility private static void ShowComputerBootupTime() { - Console.Clear(); - Console.WriteLine("\nВведите IP адрес или имя компьютера (пр. 10.234.16.129, 'IT04', '630300IT04', 'R54-630300IT04'): "); - string remote = Console.ReadLine().Trim(); - if (remote == string.Empty || remote.Length == 0) - { - ShowComputerBootupTime(); - return; - } - Console.WriteLine(); + string remote = InputRemoteComputer("\nВведите IP адрес или имя компьютера (пр. 10.234.16.129, 'IT04', '630300IT04', 'R54-630300IT04'): ", + ShowComputerBootupTime); if (!IsStringContainIp(remote)) { @@ -227,19 +224,13 @@ namespace domain_utility private static void StartPing() { - Console.Clear(); - Console.WriteLine("\nВведите IP адрес или имя компьютера (пр. 10.234.16.129, 'IT04', '630300IT04', 'R54-630300IT04'): "); - string host = Console.ReadLine().Trim(); - if (host == string.Empty || host.Length == 0) - { - StartPing(); - return; - } + string remote = InputRemoteComputer("\nВведите IP адрес или имя компьютера (пр. 10.234.16.129, 'IT04', '630300IT04', 'R54-630300IT04'): ", + StartPing); - if (!IsStringContainIp(host)) + if (!IsStringContainIp(remote)) { - host = СheckComputerName(host); - if (host == string.Empty) + remote = СheckComputerName(remote); + if (remote == string.Empty) { Console.WriteLine("Имя компьютера или IP-адрес не распознаны! Попробуйте еще раз."); BackToMenu(StartPing); @@ -247,13 +238,12 @@ namespace domain_utility } } - Console.WriteLine(); - if (Regex.Match(host, @"^([rR]\d*[-]\d+[a-zA-Z]+\d+)$").Success) + if (Regex.Match(remote, @"^([rR]\d*[-]\d+[a-zA-Z]+\d+)$").Success) { try { - IPAddress ip = Dns.GetHostEntry(host).AddressList.First(addr => addr.AddressFamily == AddressFamily.InterNetwork); - Console.WriteLine("Обмен пакетами с {0} [{1}] по с 32 байтами данных:", host, ip); + IPAddress ip = Dns.GetHostEntry(remote).AddressList.First(addr => addr.AddressFamily == AddressFamily.InterNetwork); + Console.WriteLine("Обмен пакетами с {0} [{1}] по с 32 байтами данных:", remote, ip); } catch (Exception) { @@ -263,11 +253,11 @@ namespace domain_utility } } else - Console.WriteLine("Обмен пакетами с {0} по с 32 байтами данных:", host); + Console.WriteLine("Обмен пакетами с {0} по с 32 байтами данных:", remote); for (int i = 0; i < 10; i++) { - Console.WriteLine(PingHost(host)); + Console.WriteLine(PingHost(remote)); Thread.Sleep(1000); } @@ -276,14 +266,8 @@ namespace domain_utility private static void OpenComputerCups() { - Console.Clear(); - Console.WriteLine("\nВведите IP адрес или имя компьютера (пр. 10.234.16.129, 'IT04', '630300IT04', 'R54-630300IT04'): "); - string remote = Console.ReadLine().Trim(); - if (remote == string.Empty || remote.Length == 0) - { - OpenComputerCups(); - return; - } + string remote = InputRemoteComputer("\nВведите IP адрес или имя компьютера (пр. 10.234.16.129, 'IT04', '630300IT04', 'R54-630300IT04'): ", + OpenComputerCups); if (!IsStringContainIp(remote)) { @@ -296,20 +280,50 @@ namespace domain_utility } } - Process.Start($"http://{remote.ToUpper()}:631/printers"); + Process.Start($"http://{remote}:631/printers"); BackToMenu(OpenComputerCups); } + private static void StartRDPConnection() + { + string remote = InputRemoteComputer("\nВведите IP адрес или имя компьютера (пр. 10.234.16.129, 'IT04', '630300IT04', 'R54-630300IT04'): ", + StartRDPConnection); + + if (!IsStringContainIp(remote)) + { + remote = СheckComputerName(remote); + if (remote == string.Empty) + { + Console.WriteLine("Имя компьютера или IP-адрес не распознаны! Попробуйте еще раз."); + BackToMenu(StartRDPConnection); + return; + } + } + + remote = $"/v:{remote} /f"; + Process proc = new Process { + StartInfo = new ProcessStartInfo("mstsc", remote) + }; + proc.Start(); + + BackToMenu(StartRDPConnection); + } + private static void Menu() { Console.Clear(); - Console.WriteLine("Выберите действие:\n" + - "1 - посмотреть информацию о пользователе\n" + - "2 - посмотреть дату последней загрузки компьютера (только Windows)\n" + - "3 - ping компьютера\n" + - //"4 - сброс пароля локального администратора (только Windows)\n" + - "4 - открыть CUPS выбранного компьютера"); + string[] menuList = { + "Выберите действие:", + "1 - посмотреть информацию о пользователе (только Windows)", + "2 - посмотреть дату последней загрузки компьютера (только Windows)", + "3 - ping компьютера", + //"4 - сброс пароля локального администратора (только Windows)", + "4 - открыть CUPS выбранного компьютера (только Linux)", + "5 - удаленно подключиться к компьютеру (только Windows -> Windows, Windows -> Linux)" + }; + for (int i = 0; i < menuList.Length; i++) + Console.WriteLine(menuList[i]); int choice; while (!int.TryParse(Console.ReadLine(), out choice)) Console.WriteLine("Введите цифру!"); @@ -319,7 +333,8 @@ namespace domain_utility case 2: ShowComputerBootupTime(); break; case 3: StartPing(); break; case 4: OpenComputerCups(); break; - case 564: ResetAdminPassword(); break; + case 5: StartRDPConnection(); break; + case 51422415: ResetAdminPassword(); break; default: { Console.WriteLine("Неправильный выбор!");