如何设置“不存储密码”.任务只能在TaskScheduler中以编程方式访问本地计算机资源
本文关键字:TaskScheduler 编程 方式 计算机资源 访问 任务 设置 何设置 不存储密码 密码 存储 | 更新日期: 2023-09-27 17:52:15
我以编程方式创建TaskScheduler任务并运行它。我使用以下代码:
var taskDefinition = taskService.NewTask();
taskDefinition.RegistrationInfo.Author = WindowsIdentity.GetCurrent().Name;
taskDefinition.RegistrationInfo.Description = "Runs Programm";
// TaskLogonType.S4U = run wether user is logged on or not
taskDefinition.Principal.LogonType = TaskLogonType.S4U;
var action = new ExecAction(path, arguments);
taskDefinition.Actions.Add(action);
taskService.RootFolder.RegisterTaskDefinition("TaskName", taskDefinition);
//get task:
var task = taskService.RootFolder.GetTasks().Where(a => a.Name == "TaskName").FirstOrDefault();
try
{
task.Run();
}
catch (Exception ex)
{
log.Error("Error starting task in TaskSheduler with message: " + ex.Message);
}
任务已经创建,我可以在TaskScheduler窗口中看到它,但是有一个复选框我想要被选中。它被称为"不存储密码"。该任务将只能访问本地资源"
我发现了如何检查它上面的单选按钮,说"运行用户是否登录"。这是通过:
taskDefinition.Principal.LogonType = TaskLogonType.S4U;
但是我如何将下面的复选框设置为false呢?
我最终解决了这个问题:
taskService.RootFolder.DeleteTask("TaskName", false);
var taskDefinition = taskService.NewTask();
taskDefinition.RegistrationInfo.Author = WindowsIdentity.GetCurrent().Name;
taskDefinition.RegistrationInfo.Description = "Runs Task with arguments: " + arguments;
taskDefinition.Principal.LogonType = TaskLogonType.InteractiveTokenOrPassword;
var action = new ExecAction(path, arguments);
taskDefinition.Actions.Add(action);
taskService.RootFolder.RegisterTaskDefinition("TaskName", taskDefinition, TaskCreation.Create, "domain''user", password, TaskLogonType.InteractiveTokenOrPassword);
//get task:
var task = taskService.RootFolder.GetTasks().Where(a => a.Name == ("TaskName").FirstOrDefault();
log.Info("Start task " + task.Name + " with arguemtns " + arguments);
try
{
task.Run();
}
catch (Exception ex)
{
log.Error("Error starting task in TaskSheduler with message: " + ex.Message);
}
Docs说
使用现有的交互式令牌来运行任务。用户必须使用用户(S4U)登录服务登录。当使用S4U登录时,系统不存储密码,也无法访问网络或加密文件
所以我猜你是否设置了存储密码的复选框并不重要。
应该适用TASK_LOGON_S4U和TASK_LOGON_SERVICE_ACCOUNT