windows 如何在没有管理员权限的情况下使用 vbs 将任务设置为在登录时以当前用户身份运行?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/19522094/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How do you set a task to run as the current user at logon using vbs without admin rights?
提问by ChrisD
From the command line I can create a scheduled task that runs at logon without the need for admin privileges or the user entering a password to set the task. However I have to use an xml file to do this. here's an example xml, where the "Domain\User" part has to replaced at run time with the domain and name of the current user:
从命令行我可以创建一个在登录时运行的计划任务,而无需管理员权限或用户输入密码来设置任务。但是我必须使用一个 xml 文件来做到这一点。这是一个示例 xml,其中“域\用户”部分必须在运行时替换为当前用户的域和名称:
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Author>Domain\User</Author>
</RegistrationInfo>
<Triggers>
<LogonTrigger>
<Enabled>true</Enabled>
<UserId>Domain\User</UserId>
</LogonTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>Domain\User</UserId>
<LogonType>InteractiveToken</LogonType>
</Principal>
</Principals>
<Settings>
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
</Settings>
<Actions Context="Author">
<Exec>
<Command>"C:\Windows\notepad.exe"</Command>
<Arguments>/logon</Arguments>
</Exec>
</Actions>
</Task>
I can use the xml to create a task using the command:
我可以使用 xml 使用以下命令创建任务:
schtasks /create /TN "Test Logon Task" /XML task.xml
This works fine but I'm trying to do the same thing in vbs without the need to write and then load an xml file for the user. I've been trying to adapt the example from MSDNbut so far I've not been able to add the task without admin rights or prompting for the user's password.
这工作正常,但我试图在 vbs 中做同样的事情,而无需编写然后为用户加载一个 xml 文件。我一直在尝试改编MSDN 中的示例,但到目前为止,我无法在没有管理员权限或提示输入用户密码的情况下添加任务。
Does anyone know how to do this?
有谁知道如何做到这一点?
采纳答案by MC ND
Probably Schtasks.exe - From Microsoft documentation
可能是 Schtasks.exe - 来自 Microsoft 文档
Permissions for schtasks
You must have permission to run the command. Any user can schedule
a task on the local computer, and they can view and change the tasks
that they scheduled. Members of the Administrators group can schedule,
view, and change all tasks on the local computer.
And one of the parameters (/sc onlogon
) allow to define a task that will run at logon.
其中一个参数 ( /sc onlogon
) 允许定义将在登录时运行的任务。
Seems possible to be the answer, BUT i've not tried.
似乎可能是答案,但我没有尝试过。
EDIT
编辑
Since schtasks proved not to be the answer, i've taken the original code from Microsoft and adapt to work (i hope, works for me)
由于 schtasks 被证明不是答案,我从 Microsoft 获取原始代码并适应工作(我希望,对我有用)
'---------------------------------------------------------
' This sample schedules a task to start notepad.exe when a user logs on.
'---------------------------------------------------------
' A constant that specifies a logon trigger.
const TriggerTypeLogon = 9
' A constant that specifies an executable action.
const ActionTypeExecutable = 0
const TASK_LOGON_INTERACTIVE_TOKEN = 3
'********************************************************
' Create the TaskService object.
Set service = CreateObject("Schedule.Service")
call service.Connect()
'********************************************************
' Get a folder to create a task definition in.
Dim rootFolder
Set rootFolder = service.GetFolder("\")
' The taskDefinition variable is the TaskDefinition object.
Dim taskDefinition
' The flags parameter is 0 because it is not supported.
Set taskDefinition = service.NewTask(0)
'********************************************************
' Define information about the task.
' Set the registration info for the task by
' creating the RegistrationInfo object.
Dim regInfo
Set regInfo = taskDefinition.RegistrationInfo
regInfo.Description = "Task will execute Notepad when a " & _
"specified user logs on."
regInfo.Author = "Author Name"
' Set the task setting info for the Task Scheduler by
' creating a TaskSettings object.
Dim settings
Set settings = taskDefinition.Settings
settings.StartWhenAvailable = True
'********************************************************
' Create a logon trigger.
Dim triggers
Set triggers = taskDefinition.Triggers
Dim trigger
Set trigger = triggers.Create(TriggerTypeLogon)
' Trigger variables that define when the trigger is active.
Dim startTime, endTime
startTime = "2013-10-22T10:49:02"
endTime = "2013-10-30T10:52:02"
WScript.Echo "startTime :" & startTime
WScript.Echo "endTime :" & endTime
trigger.StartBoundary = startTime
trigger.EndBoundary = endTime
trigger.ExecutionTimeLimit = "PT5M" ' Five minutes
trigger.Id = "LogonTriggerId"
trigger.UserId = "MyDomainOrComputer\testUser" ' Must be a valid user account
'***********************************************************
' Create the action for the task to execute.
' Add an action to the task. The action executes notepad.
Dim Action
Set Action = taskDefinition.Actions.Create( ActionTypeExecutable )
Action.Path = "C:\Windows\System32\notepad.exe"
WScript.Echo "Task definition created. About to submit the task..."
'***********************************************************
' Deal with the password problems
taskDefinition.Principal.UserId = "MyDomainOrComputer\testUser"
taskDefinition.Principal.LogonType = TASK_LOGON_INTERACTIVE_TOKEN
'***********************************************************
' Register (create) the task.
const createOrUpdateTask = 6
call rootFolder.RegisterTaskDefinition( _
"Test Logon Trigger", taskDefinition, createOrUpdateTask, _
Empty , Empty, TASK_LOGON_INTERACTIVE_TOKEN)
WScript.Echo "Task submitted."
Changed the RegisterTaskDefinition call to not pass credentials for the task, and configured del Principal
object properties of the taskDefinition
将 RegisterTaskDefinition 调用更改为不传递任务的凭据,并配置Principal
taskDefinition 的del对象属性
Task registered with non admin user, without password prompt.
使用非管理员用户注册的任务,没有密码提示。