You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows Server IIS环境下PHP调用schtasks出现Access denied错误咨询

排查与解决步骤

1. 先确认PHP脚本实际运行的账号

你之前只给IUSR、IIS_USERS授权是无效的,IIS站点默认使用应用程序池的独立虚拟账号运行,不属于上述用户组。直接执行以下代码获取实际运行账号:

exec('whoami', $user);
print_r($user);

拿到的结果就是你需要针对性授权的账号,如果应用池标识用的是默认的ApplicationPoolIdentity,账号格式为IIS AppPool\你的应用池名称。

2. 解决32位PHP的系统目录重定向问题

如果你的PHP是32位版本,部署在64位Windows Server 2019上时,系统会自动把对C:\Windows\System32的访问重定向到C:\Windows\SysWOW64目录,导致权限匹配失效。把代码中的schtasks路径替换为强制访问64位目录的路径即可:
原命令中的schtasks改为C:\Windows\Sysnative\schtasks,修改后代码示例:

<?php
$results = array(
    "output" => NULL,
    "code" => NULL
);
exec(
    'C:\Windows\Sysnative\schtasks /create /sc MONTHLY /tn AtlantisPrint /tr C:\SoftwarehausHeider\Atlantis\prog\atlantis.exe /ru Administrator /rp XXXX /f 2>&1',
    $results["output"],
    $results["code"]
);
echo "<pre>" . print_r($results, TRUE) . "</pre>";

3. 给运行账号授予对应权限

给第一步查到的实际运行账号,添加以下权限:

  • C:\Windows\System32\schtasks.exe 的读取、执行权限
  • C:\Windows\System32\Tasks 目录的读取、写入权限
  • C:\SoftwarehausHeider\Atlantis\prog\ 目录的读取、执行权限

4. 配置本地安全策略

任务计划创建操作需要额外的系统权限,打开本地安全策略(运行secpol.msc),依次进入「本地策略→用户权限分配」,给运行账号添加以下两个策略:

  • 调整进程的内存配额
  • 替换进程级令牌
    配置完成后执行gpupdate /force生效,或直接重启服务器。

快速验证方法

可以临时把对应应用池的标识(高级设置→进程模型→标识)改为本地系统(LocalSystem),运行脚本测试是否成功。如果可以正常创建任务,就可以确认是账号权限问题,验证完成后记得改回原标识,避免安全风险。

内容的提问来源于stack exchange,提问作者SWH-TW

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 09:24:01