python - 使用 win32com 将 Principal.RunLevel 添加到 Python 上的任务计划程序
问题描述
在网上看了很多天。我决定问我自己的问题。我已经做了一些挖掘并找到了一些方法来实现这一点,但我被卡住了。我知道我必须更改 logon_type 并设置用户名,但它似乎不起作用。我尝试使用 salt.module.win_task.py 作为指导,但它仍然对我不起作用。这是我的代码(从别人那里借来的,我做了一些调整)
scheduler = win32com.client.Dispatch('Schedule.Service')
scheduler.Connect()
root_folder = scheduler.GetFolder('\\')
task_def = scheduler.NewTask(0)
# Create trigger
start_time = datetime.datetime.now() + datetime.timedelta(minutes=30)
TASK_TRIGGER_TIME = 1
trigger = task_def.Triggers.Create(TASK_TRIGGER_TIME)
trigger.StartBoundary = start_time.isoformat()
# Create action
TASK_ACTION_EXEC = 0
action = task_def.Actions.Create(TASK_ACTION_EXEC)
action.ID = "TEST"
action.Path = "C:/test/test.bat"
action.Arguments = ''
action.WorkingDirectory = "C:/test/"
# Set parameters
task_def.RegistrationInfo.Description = 'Run test.bat'
task_def.Settings.Enabled = True
task_def.Settings.StopIfGoingOnBatteries = False
task_def.Settings.Hidden = False
task_def.Settings.startwhenavailable = True
task_def.Settings.DisallowStartIfOnBatteries = False
# Register task
# If task already exists, it will be updated
TASK_CREATE_OR_UPDATE = 6
TASK_LOGON_NONE = 0
root_folder.RegisterTaskDefinition(
"TEST", # Task name
task_def,
TASK_CREATE_OR_UPDATE,
'', # No user
'', # No password
TASK_LOGON_NONE)
我试过添加(从win_task.py复制)
TASK_RUNLEVEL_HIGHEST = 1
TASK_LOGON_SERVICE_ACCOUNT = 5
task_def.Principal.UserID = "SYSTEM"
task_def.Principal.DisplayName = "SYSTEM"
task_def.Principal.GroupID = "Administrators"
task_def.Principal.LogonType = TASK_LOGON_SERVICE_ACCOUNT
task_def.Principal.RunLevel = TASK_RUNLEVEL_HIGHEST
并改变这部分
root_folder.RegisterTaskDefinition(
"TEST", # Task name
task_def,
TASK_CREATE_OR_UPDATE,
task_def.Principal.UserID,
None, # No password
TASK_LOGON_SERVICE_ACCOUNT)
我几乎尝试了所有方法,有人知道如何添加运行级别属性吗?(不使用 XML)
解决方案
您的代码效果很好!您收到错误代码的原因:
(-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2147024891), None)
是因为您试图在Principal.Runlevel
没有管理权限的情况下进行更改。
要使您的代码正常工作,请以管理员身份运行一个 cmd 窗口并使用它来运行您的 win_task.py。
>python win_task.py
这是一个关于如何做到这一点的视频!
以管理员身份运行脚本后,我能够创建任务并更改“以最高权限运行”复选框。
这是我能找到解释 principal.runlevel 的唯一资源
推荐阅读
- reactjs - 单击打开日历组件,在其他地方单击应关闭组件
- sql - SQL 连接表,如果没有链接则为空值
- c - 在 Gstreamer C API 中对 videoscale 元素使用上限
- javascript - 使用 JS 脚本的条形码扫描仪一段时间后 PC 冻结?
- docker - 如何使用 https://localhost:5001/api/Movies/getname 之类的 api 在 .net 核心中简单地调用从 container1 到 container2 的方法
- c# - 无法将通用记录转换为对象
- javascript - 获取日期时间输入字段的值
- lua - The rules for the # operator
- python - 如何将图像转换为感知器算法的输入向量?
- android - LiveDataReactiveStreams.fromPublisher 不工作