将参数传递给msdeploy runco​​mmand中的批处理文件

And*_* N. 5 web-deployment msdeploy webdeploy microsoft-web-deploy

我无法让它发挥作用

call "%MSDeployPath%msdeploy" -verb:sync -source:runCommand='backup.bat param1' -dest:auto,computername=10.xx.xx.xx,username=xxx,password=yyy
Run Code Online (Sandbox Code Playgroud)

它给了我:

警告:'backup.bat'不被识别为内部或外部命令,可操作程序或批处理文件.

警告:进程'C:\ Windows\system32\cmd.exe'(命令行'')退出,代码为'0x1'.总变化:1(添加0,删除0,更新1,更改0参数,复制0字节)

如果我删除param1并在.bat中对其进行硬编码,它就可以正常工作,所以如果你想知道的话,bat文件没有问题.

我试图指定.bat的完整路径,它仍然不起作用:

call "%MSDeployPath%msdeploy" -verb:sync -source:runCommand='c:\backup.bat param1' -dest:auto,computername=10.xx.xx.xx,username=xxx,password=yyy
Run Code Online (Sandbox Code Playgroud)

在这种情况下,它看起来像将路径解释为远程路径,它期望backup.bat在服务器上.我在服务器上移动了backup.bat后确认了这一点

为什么它必须如此坚硬???

Ric*_*lay 7

编辑您是对的,文档说明 cmd/bat文件将流式传输到目标.

在我看来,它只是一个功能的限制,它不能接受参数.在部署时使用硬编码设置创建批处理文件的修改版本应该不会太困难.

就像是:

REM Start of prepended script
SET SCRIPT_USERNAME=ThatGuy
REM End of prepended script

IF ("%SCRIPT_USERNAME%" == "") SET SCRIPT_USERNAME=%1
Run Code Online (Sandbox Code Playgroud)

更新浏览了msdeploy的反射源(ahem)后,我可以确认它只是当前设计的方式.它根据整个路径是否代表文件来确定是否上传文件.由于添加参数会阻止它解析文件的路径,因此它不会上传任何内容.