如何设置“不存储密码”.任务只能在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呢?

如何设置“不存储密码”.任务只能在TaskScheduler中以编程方式访问本地计算机资源

我最终解决了这个问题:

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