我的目标是让有限的用户能够运行需要管理权限的 netsh 脚本:
netsh wlan stop hostednetwork
netsh wlan start hostednetwork
我从我的管理员帐户创建了一个任务计划程序任务,该任务以提升的权限运行此脚本,并在其中保存了我的管理员密码。它成功了。但从受限用户帐户看不到该任务。
我尝试从受限用户任务计划程序创建相同的任务 - 没有发生,它告诉我用户无权创建该任务。
尝试从受限用户运行 schtasks.exe,它也没有显示我想要运行的任务。
有没有办法将我从管理帐户创建的任务与受限用户共享,以便他能够按需运行该任务?或者授予他自己创建任务的权限?
答案1
转到 C:\Windows\System32\Tasks 找到相关任务,并向您希望能够访问该任务的用户分配“读取和执行”权限。确保分配给“仅当前对象”。然后,该任务将从受限用户那里可见并可运行,如果您在其中保存了凭据并选中“无论用户是否登录都运行”,该任务就会起作用。
答案2
是的,这是一个可怕的问题。选择的答案不再有效。我正在使用事件日志作为解决方法:
为您的任务注册“事件”触发器,例如“应用程序”、“应用程序”、30204(此任务的神奇数字)
用此 ID 记录事件。为了从命令行/批处理执行此操作,我编写了一个虚拟的 3 行 .Net 控制台应用程序。
using (var eventLog = new EventLog("Application"))
{
eventLog.Source = "Application";
eventLog.WriteEntry("EventLogTriggeer", EventLogEntryType.Information, int.Parse(args[0]));
}
就我而言,我已经解决了在暂存环境中自动部署的安全性问题。GitHub 向我的 node.js 后端发出 POST 请求,该后端在 IIS AppPool Identity 下运行,并具有对该文件夹的 r/o 访问权限。它验证哈希签名,并执行:
// delegate to priviledged task
exec('%SystemDrive%\\apps\\EventLogTrigger 30204', (err, stdout, stderr)=> /* ... */);
剩余部分通过计划任务完成,该任务在具有修改 inetpub 中文件权限的用户下运行部署脚本。任务是针对每个服务器及其上的每个网站单独配置的,因此路径是硬编码的:
C:\inetpub\ta\autodeploy.cmd