Задача Python для Windows для запуска с администратором - PullRequest
0 голосов
/ 26 февраля 2019

Я ищу некоторый код Python для создания Задачи Windows в Планировщике Задач, он должен запускаться при запуске и иметь самый высокий уровень разрешений (admin).

// description of your code here
Uses the new COM Task Scheduler Interface to create a new disabled scheduled task, then run it once as part of a script. Use this to launch interactive tasks, even remotely.
import win32com.client
computer_name = "" #leave all blank for current computer, current user
computer_username = ""
computer_userdomain = ""
computer_password = ""
action_id = "Test Task" #arbitrary action ID
action_path = r"c:\windows\system32\calc.exe" #executable path (could be python.exe)
action_arguments = r'' #arguments (could be something.py)
action_workdir = r"c:\windows\system32" #working directory for action executable
author = "Someone" #so that end users know who you are
description = "testing task" #so that end users can identify the task
task_id = "Test Task"
task_hidden = False #set this to True to hide the task in the interface
username = ""
password = ""
run_flags = "TASK_RUN_NO_FLAGS" #see dict below, use in combo with username/password
#define constants
TASK_TRIGGER_DAILY = 2
TASK_CREATE = 2
TASK_CREATE_OR_UPDATE = 6
TASK_ACTION_EXEC = 0
IID_ITask = "{148BD524-A2AB-11CE-B11F-00AA00530503}"
RUNFLAGSENUM = {
    "TASK_RUN_NO_FLAGS"              : 0,
    "TASK_RUN_AS_SELF"               : 1,
    "TASK_RUN_IGNORE_CONSTRAINTS"    : 2,
    "TASK_RUN_USE_SESSION_ID"        : 4,
    "TASK_RUN_USER_SID"              : 8 
}
#connect to the scheduler (Vista/Server 2008 and above only)
scheduler = win32com.client.Dispatch("Schedule.Service")
scheduler.Connect(computer_name or None, computer_username or None, computer_userdomain or None, computer_password or None)
rootFolder = scheduler.GetFolder("\\")
#(re)define the task
taskDef = scheduler.NewTask(0)
colTriggers = taskDef.Triggers
trigger = colTriggers.Create(TASK_TRIGGER_DAILY)
trigger.DaysInterval = 100
trigger.StartBoundary = "2100-01-01T08:00:00-00:00" #never start
trigger.Enabled = False
colActions = taskDef.Actions
action = colActions.Create(TASK_ACTION_EXEC)
action.ID = action_id
action.Path = action_path
action.WorkingDirectory = action_workdir
action.Arguments = action_arguments
info = taskDef.RegistrationInfo
info.Author = author
info.Description = description
settings = taskDef.Settings
settings.Enabled = False
settings.Hidden = task_hidden
#register the task (create or update, just keep the task name the same)
result = rootFolder.RegisterTaskDefinition(task_id, taskDef, TASK_CREATE_OR_UPDATE, "", "", RUNFLAGSENUM[run_flags] ) #username, password
#run the task once
task = rootFolder.GetTask(task_id)
task.Enabled = True
runningTask = task.Run("")
task.Enabled = False

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

РЕДАКТИРОВАТЬ: Я НЕ просто заставляю программу запрашивать администратора, так как подсказка появится, как указано выше.Мне нужно, чтобы он имел самый высокий уровень выполнения в WINDOWS EVENT SCHEDULER для запуска при входе в систему.

Ответы [ 2 ]

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

После более тщательного поиска в Google я наткнулся на команду, которая делает именно то, что мне нужно.

schtasks.exe /create /S COMPUTERNAME /RU "NT AUTHORITY\SYSTEM" /RL HIGHEST /SC ONLOGON /TN "Administrative OnLogon Script" /TR "cscript.exe \"Path\To\Script.vbs\""

Все, что мне нужно сделать, это заменить имя компьютера и программу для выполнения, и она выполняет задачу.в совершенстве.Я могу выполнить его в среде Python с повышенными правами, чтобы создать его.

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

Я думаю, что было бы неплохо для вас создать пакетный файл с Python и вашим скриптом.Сделав это, есть несколько вещей, которые вы, возможно, захотите попробовать, у меня лично не было времени, чтобы попробовать их, но вот вы:

  • Скомпилируйте файл .BAT и сделайте его.exe как только вы это сделаете, я думаю, вы сможете подключить планировщик задач к миксу и запускать свой код всякий раз, когда вам нужно.
  • Если ничего не работает, вы всегда можете возиться с реестром вашего окна, чтобыразрешите вашему сценарию обойти приглашение с помощью редактора реестра Windows.

Проверьте его перед выполнением, так как это код, который я нашел в другом месте, но он должен выполнить свою задачу:


   [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Group Policy Objects\{E2F13B98-650F-47DB-845A-420A1ED34EC7}User\Software\Microsoft\Windows\CurrentVersion\Policies\Associations]
"LowRiskFileTypes"=".exe;.bat;.cmd;.vbs"

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Associations]
"LowRiskFileTypes"=".exe;.bat;.cmd;.vbs"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...