Альтернатива стандартной утилите RunAs с возможностью задать пароль в командной строке.
Программа делает то-же самое, что и стандартная runas.exe. Единственное отличие - возможность указать пароль напрямую, в командной строке.
Одним из возможных применений может быть выполнение пакетных заданий из под учетной записи администратора.
Синтаксис командной строки:
runasuser [-u пользователь] [-p пароль] [-d домен] someprogram.exe [параметры программы]
Ниже приведен полный исходный код:
Программа делает то-же самое, что и стандартная runas.exe. Единственное отличие - возможность указать пароль напрямую, в командной строке.
Одним из возможных применений может быть выполнение пакетных заданий из под учетной записи администратора.
Синтаксис командной строки:
runasuser [-u пользователь] [-p пароль] [-d домен] someprogram.exe [параметры программы]
Ниже приведен полный исходный код:
using System; using System.Diagnostics; using System.Security; namespace RunAsUser { class Program { static int Main(string[] args) { string username = "", password = "", domain = "", apppath = "", arguments = ""; for( int i=0; i<args.Length; i++) { switch (args[i].ToLower()) { case "-u": username = args[++i]; break; case "-p": password = args[++i]; break; case "-d": domain = args[++i]; break; default: if (apppath == "") apppath = args[i]; else arguments += args[i] + (i<args.Length?" ":""); break; } } if (args.Length == 0 || apppath == "" ) { Console.WriteLine("\nCommand line syntax:\nrunasuser [-u user] [-p password] [-d domain] someprogram.exe [params]\n"); return 1; } Console.WriteLine(arguments); return RunAs(apppath, arguments, domain, username, password); } static int RunAs(string apppath, string arguments, string domain, string username, string password) { Process userProcess; try { userProcess = Process.Start( apppath, arguments, username, GetSecure(password), domain); while (!userProcess.HasExited) ; return userProcess.ExitCode; } catch (Exception e) { Console.WriteLine(e.Message); } return -1; } static SecureString GetSecure(string str) { SecureString SecureStr = new SecureString(); foreach (char c in str) { SecureStr.AppendChar(c); } return SecureStr; } } }
как я понял это на локальном комп.?
ОтветитьУдалитьА возможно ли доработка для возможности выполнения на удаленном компьютере?
Было бы интереснее "всё в одном флаконе".
Можно добавить удаленный запуск через WMI. При этом сервис WMI должен быть запущен и файрвол не должен его фильтровать.
УдалитьНо я для этих целей использую отдельную утилиту: PsExec - http://technet.microsoft.com/en-us/sysinternals/bb896649.aspx
Командная строка выглядит примерно так:
psexec \\computername -c runasuser.exe -u user -p password program.exe parameters
в 7ке не работает. по крайней мере с батниками
ОтветитьУдалитьИнтересно, только-что проверил - все работает в семерке. Может в параметрах ошибка ? Домен надо указывать в параметре -d, а не как в стандартном runas.
Удалитьвсе хорошо работает, вопрос на каком языке написан исходный код и можно ли прописать сразу логин, пароль и домен в самом скрипте и скомпилировать?
ОтветитьУдалитьЯзык - C#, можно скомпилировать в Visual Studio. Логин, пароль и домен можно вписать в 11-ой строке.
ОтветитьУдалить