IISWebAppManagementOnMachineGroup报参数错误(退出码87)问题求助
IIS发布任务返回错误码87(参数不正确)排查方案
问题描述
调用流水线IISWebAppManagementOnMachineGroup任务向本地IIS发布应用时,任务抛出错误The Parameter is incorrect .. exited with code '87'。对应流水线此前运行正常,新建流水线重新执行后突发该问题,常规排查操作未解决。
已执行的无效排查操作
- 重装IIS并删除所有
MachineKeys,重装完成后将本机所有MachineKeys的所有者修改为当前管理员账户 - 修改
inetsrv目录下的applicationHost.config配置文件
已验证的问题特征
排查确认流水线执行IIS发布时自动生成的命令中,password参数为问题触发点:以管理员身份启动CMD执行移除password参数的appcmd命令,可正常完成站点配置,验证可用的命令如下:
appcmd.exe set site /site.name:"RTP_LoginService" -applicationDefaults.applicationPool:"RTP_LoginServiceAppPool" -[path='/'].[path='/'].physicalPath:"%SystemDrive%\inetpub\wwwroot\RTP_LoginService" -[path='/'].[path='/'].userName: -[path='/'].[path='/'].password:
当前未对IIS发布任务做任何配置修改,同版本任务此前携带password参数可正常运行。
根因说明
错误码87对应Windows系统级错误ERROR_INVALID_PARAMETER(参数非法),触发原因是近期Windows更新IIS相关安全补丁、或部署代理自动升级后,appcmd.exe收紧了参数校验逻辑:
- 旧版本
appcmd.exe会自动忽略末尾传递的空值、格式非法的password参数,可正常执行 - 新版本
appcmd.exe遇到空值、解密失败乱码格式的password参数时,会直接判定参数非法抛出错误
多数场景下该问题是部署代理运行权限不足,无法正确解密流水线存储的站点凭据密码,导致传递给appcmd.exe的password字段为乱码/空值触发报错。
解决方案
按优先级依次尝试以下操作:
- 调整任务物理路径凭据配置
打开IISWebAppManagementOnMachineGroup任务配置页,找到物理路径身份验证设置项,若不需要自定义目录访问账户,直接选择「应用程序用户(传递身份验证)」,保存配置后重新运行流水线,任务生成命令时将不再携带空的password参数,直接复用应用程序池身份访问站点目录。 - 修复自定义凭据配置
若业务必须指定独立的物理路径访问用户,不要在配置项中留空密码字段,重新输入对应用户的正确密码后保存流水线;同时检查部署代理服务的运行身份,确保其属于本地管理员组,避免代理无权限解密存储的密码字段,导致传递给appcmd的参数格式非法。 - 临时规避方案
若上述操作不生效,可在流水线中禁用IISWebAppManagementOnMachineGroup任务的站点配置步骤,新增内联脚本步骤,直接执行已经验证可用的appcmd命令完成站点配置。
内容的提问来源于stack exchange,提问作者g0y
相关产品推荐
相关产品推荐

