Назад | Перейти на главную страницу

Могу ли я запустить программу из командной строки для другого зарегистрированного пользователя?

У нас есть машина с Windows Server 2008, на которой запущены службы терминалов. Когда пользователи входят в систему, запускается специальная программа, которая находится в системном трее, которая дает им несколько настраиваемых горячих клавиш для нашей компании.

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

У меня есть доступ к учетной записи администратора, но у меня нет доступа к паролям других пользователей.

Можно ли запустить программу из командной строки для другого зарегистрированного пользователя?

Нет. Windows не предлагает тот тип возможности олицетворения пользователя, о котором вы здесь спрашиваете. Нет никаких sudo эквивалент или даже приближение в Windows.

Я не могу найти документ или статью в данный момент, но не разрешаю sudoФункциональность олицетворения пользователя в стиле -стиле в Windows была сознательным дизайнерским решением еще на заре создания ядра NT, и в результате мы очень сильно ее придерживаемся. (Нет даже каких-либо умных обходных путей или хаков, чтобы обойти это, как обычно - это просто слишком глубоко укоренилось, чтобы обойти его.)

В мире Windows для выполнения [практически] любых действий в качестве пользователя (будь то запуск программы, проверка подлинности в AD или что-то еще) вам потребуется токен доступа, который используется для идентификации и аутентификации доступа / привилегий пользователя. Этот токен доступа только создается при вводе имени учетной записи и пароля пользователя (при входе в систему, для RunAs, и так далее).

Потенциально важное предостережение (для ваших целей) заключается в том, что существующий токен доступа можно дублировать в токен олицетворения, который можно передать Функция ImpersonateLoggedOnUser, который можно использовать для олицетворять контекст безопасности вошедшего в систему пользователя.

Учитывая то, что вы один из тех разработчиков / программистов, которые могут знать, как работать с загадочными магиями .NET, это может быть полезно для вас при написании небольшого приложения для достижения того, что вы хотите делать.

Однако, чтобы быть точным, нет команды, которую вы могли бы запустить или обработать для выполнения, чтобы выдать себя за пользователя Windows, за исключением кодирования одного (или поиска другого, закодированного кем-то другим), и даже в этом случае она ограничена пользователями, чьи токены доступа доступны (зарегистрированные пользователи).

Если пользователи вошли в систему, вы можете использовать что-то вроде owexec запускать процессы как их. Это не требует их пароля. Мы используем его для чего-то очень похожего на то, что вы описываете, за исключением части служб терминалов.

Возможно, вам потребуется добавить несколько сценариев, чтобы собрать все активные сеансы, а затем настроить таргетинг на каждый из них индивидуально с помощью -u вариант.

Если вы говорите о локальном программном обеспечении, а не о RemoteApp, то я думаю, что наиболее полезным в вашем случае будет использование PsExec:

http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

Для получения дополнительных примеров использования вы можете перейти к http://windowsitpro.com/systems-management/psexec