Casper-SC
@Casper-SC
.NET программист

ASP.NET Core 3.1 + IIS + Powershell SDK. Как запустить стороннее приложение через PowerShell на виртуальной машине?

Веб-приложение установлено на виртуальной машине с Windows 10. Запущено из под IIS в пуле приложений, который я создал и в его настройках задал параметры:
Identity / Удостоверение - Пользователь с правами админа, но не тот, которым я залогинен в виртуальной машине.
Start Mode / Режим запуска - AlwaysRunning
Idle-Time-Out (minutes) / Таймаут простоя в минутах - 60

Этот код работает, если я запускаю приложение из под дебага в Visual Studio или на своём компьютере, где в пуле приложений в IIS параметр Identity / Удостоверение задан как тот же пользователь, которым я залогинен в винде.
PowerShell powerShell = null;
try
{
    powerShell = PowerShell.Create();
    // Здесь подписка на обработчики событий...
    string clientCommandLineArgs = "...";
    var sb = new StringBuilder(); // там ещё одна команда, поэтому собираю результаты для лога так

    var startProcessResult = await powerShell
        .AddScript($"Start-Process \"{clientCommandLineArgs}\";")
        .InvokeAsync()
        .ConfigureAwait(false);
    sb.AppendLine(string.Join("; ", startProcessResult.Select(x => $"Start-Process: {x.ToString()}")));

    _logger.Information(template + $"PowerShell:{Environment.NewLine}{sb}");
}
finally
{
    if (powerShell is not null)
    {
        // Отписка от обработчиков событий...
    }
}


Я пытаюсь запустить UWP приложение по ссылке. Можно создавать специальные ссылки, прописывать их в манифесте приложения и запускать по этой ссылке. Вот именно так я запускаю приложение, а не указывая путь к *.exe файлу.

Как решить проблему да и вообще в чём проблема? В том, что разные пользователи или в чём?
  • Вопрос задан
  • 154 просмотра
Пригласить эксперта
Ответы на вопрос 1
@rPman
На сколько мне известно, единственный способ запустить процесс от пользователя, отличного от залогиненного, без запроса логина и пароля - это использование службы task scheduler (планировщик).

Создаешь задачу без условий запуска, в свойствах указываешь что у тебя другой пользователь, вводишь логин пароль - все. Теперь чтобы запустить эту задачу нужно написать schtask /run ...

p.s. тут обсуждалось как это сделать из power shell, но прав iis не хватит

p.p.s. я запускал специальный процесс из под нужного пользователя, который мониторил специальный файлик на наличие команд и запускал его (для атомарности операций, чтобы не пилить базы данных, этот файл переименовывался во временный, запускался, удалялся и снова ожидание, если процессов пишущих в файл много - на каждый свой файлик, например с PID в имени), но сам сервис нужно как то запустить, если тебе нужен автоматический запуск при включении компьютера, т.е. опять службой

p.p.p.s. Когда то очень давно была сторонняя утилита srvany, которая поднимала службу, позволяющую запускать указанную утилиту под правами службы, а сами эти права настраивались в реестре.
upd. во
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы