2

У меня есть запланированное задание, которое запускает командный файл, который делает некоторые вещи. Я хочу, чтобы пакетный файл запускал другой пакетный файл, который работает в пространстве пользователя; т.е.% username% == текущий вошедший в систему пользователь с правами доступа и т. д. Как запустить команду под текущим пользователем, если запланированная задача выполняется с разрешениями SYSTEM?

Мне это нужно как для Windows XP, так и для Windows 7.

3 ответа3

3

С момента появления терминальных служб "текущий пользователь" может быть множественным. Даже XP поддерживает быстрое переключение пользователей.

Самое близкое, что вы можете получить, это "пользователь подключен к сеансу консоли". Для этого используйте WTSGetActiveConsoleSessionId() + WTSQueryUserToken() + CreateEnvironmentBlock() + CreateProcessAsUser().


Я написал это: https://gist.github.com/871048 - Скомпилируйте, запустите с полным путем к вашему пакетному файлу в качестве аргументов.

Да, для этого требуется .NET Runtime, но, скорее всего, ваши системы уже его имеют. Часть среды выполнения компилятора также: %SystemRoot%\Microsoft.NET\Framework64\v3.5\csc.exe (любая версия, начиная с v2.* Будет работать).

Примечание: WTSQueryUserToken() требует, чтобы программа работала как LocalSystem. (Согласно документации, SeTcbPrivilege недостаточно, но я не проверял.)

2

В разделе «При запуске задачи используйте следующую учетную запись пользователя:» вы можете установить ее в группу «BUILTIN \Users», она будет запускать задачу как текущий вошедший в систему пользователь.

0

Я не думаю, что вы можете настроить его с помощью инструмента планировщика задач для динамического использования текущего вошедшего в систему пользователя, но вы можете указать учетную запись пользователя для использования помимо System в самой задаче. Для обоих приведенных ниже вариантов потребуется пароль для имени пользователя.

Windows 7: в окне свойств задачи есть кнопка "Параметры безопасности" под названием "Изменить пользователя или группу".

Windows XP: в окне свойств задачи вы можете ввести имя пользователя в поле "Запуск от имени".

Последний вариант может заключаться в создании сценария запуска, который будет создавать задачу при входе пользователя в систему, и сопутствующего сценария выхода из системы, чтобы удалить его при выходе из системы. Команда "Schtasks", которая почти идентична в XP и 7. Документация для команды доступна от MS на следующем сайте:http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/schtasks.mspx?mfr=true

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .