Альтернатива стандартной утилите 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-ой строке.
ОтветитьУдалить