Обходной путь для факта, что запланированная задача в Windows требует, чтобы пользователь вошел в систему - PullRequest
10 голосов
/ 04 августа 2011

Я использую небольшой исполняемый файл, созданный третьей стороной, который должен регулярно запускаться на сервере Windows 2008.Этот исполняемый файл эффективно передает информацию из одной системы в другую и должен работать каждый час или около того круглосуточно.В процессе обработки исполняемый файл запускает небольшой пользовательский интерфейс типа Windows Forms.

Я настроил запланированное задание для вызова файла, и это работает ТОЛЬКО, если пользователь, под которым настроено выполнение задания, вошел в систему на компьютере (локально или через удаленный рабочий стол).Если я задаю задачу для запуска от имени другого пользователя или задаю задачу для запуска, когда пользователь не вошел в систему, на запланированной задаче выполняются и ошибки.Я пробовал работать от имени разных пользователей, включая администратора и системного пользователя.Существуют ли возможные обходные пути (без изменения стороннего кода, к которому у меня нет доступа), которые позволили бы запускать этот код без входа определенного пользователя.

Ответы [ 7 ]

4 голосов
/ 13 мая 2015

В этой статье показано, как создать задачу, не требующую входа в систему: https://www.scriptjunkie.us/2013/01/running-code-from-a-non-elevated-account-at-any-time/

Описанная процедура выглядит следующим образом:

Сначала создайте запланированную задачу дляЗапустите вашу команду с параметрами по умолчанию в качестве текущего пользователя (по умолчанию это создаст запланированное задание, которое запускается только после входа в систему):

schtasks /create /tn mytask /SC HOURLY /TR "calc"

Затем экспортируйте задание как XML:

schtasks /query /XML /tn mytask > temp.xml

и удалите задачу:

schtasks /delete /tn mytask /f

Затем откройте файл XML и замените строку <LogonType>InteractiveToken</LogonType> на<LogonType>S4U</LogonType>

Это можно сделать с помощью следующих команд, предполагая, что powershell находится в системе: powershell -Command "Get-Content '.\temp.xml' | foreach {$_ -replace 'InteractiveToken', 'S4U' }" > new.xml move /y new.xml temp.xml

Теперь заново создайте задачу из измененного файла XML:

schtasks /create /xml temp.xml /tn mytasks

и удалите временный файл:

del /f /q temp.xml

4 голосов
/ 06 августа 2011

Для приложения с графическим интерфейсом требуется рабочий стол, и вы можете получить его только у зарегистрированного пользователя.

3 голосов
/ 03 декабря 2015

Я могу опоздать с ответом, но мы не можем использовать по команде без /interactive...

https://support.microsoft.com/en-us/kb/313565

Согласно Microsoft: / interactive: Используйте этот параметрчтобы позволить задаче взаимодействовать с рабочим столом пользователя, который вошел в систему во время выполнения задачи.

2 голосов
/ 19 сентября 2017

Есть простое решение. Измените группу на локальную группу «пользователи», и вам не будет предложено ввести пароль. (Запланированная задача - Общие - Параметры безопасности - Изменить пользователя или группу).

2 голосов
/ 11 января 2013

Я думаю, что нашел решение для этой ситуации. Вам необходимо иметь две учетные записи на сервере (User1 и User2). RMD на сервер под User1. В этом RMD создайте запланированное задание и настройте его для запуска под учетной записью User2. Затем из этого RMD необходимо выполнить RMD на самом сервере, используя учетные данные User2 (что-то вроде сна Inception внутри сна). Важно не свернуть это новое окно RMD; Вы можете сделать его маленьким, но он должен быть открытым. После этого вы можете закрыть исходный сеанс RMD, и задача будет выполняться под учетной записью User2, поскольку у User2 есть открытый рабочий стол из вашего второго сеанса RMD.

Protip - не открепляйте дескрипторы окна RMD в верхней части окна RMD - тогда может быть трудно закрыть правильный RMD. Если вы это сделаете, вам нужно будет использовать опцию «Пуск»> «Выйти из системы» полностью из ваших RMD.

1 голос
/ 08 августа 2011

Может показаться, что из проведенного мною исследования (и ответа Дэвида Хеффернана) без влияния на исходный код это невозможно.

Есть некоторые полезные мысли по поводу Как я могу запустить приложение с графическим интерфейсом Windows в качестве службы? , которые относятся к этому, но ни один из них не дает жизнеспособного решения этой проблемы.

0 голосов
/ 22 февраля 2019

Это выглядит как старая тема, но я недавно столкнулся с этим в своей организации из-за требований UAC, которые они не использовали.Я все еще тестирую это, но я полагаю, что вы все еще можете включить интерактивный режим для запланированной задачи, используя команду /Change в задаче и добавив флаг /IT, чтобы сделать ее интерактивной.Ссылка здесь: https://docs.microsoft.com/en-us/windows/desktop/taskschd/schtasks

schtasks /Change /tn "Task A" /IT /RP "password of user if used"

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

...