在msdeploy中向批处理文件传递参数的方法

5

我无法让这个工作起来。

call "%MSDeployPath%msdeploy" -verb:sync -source:runCommand='backup.bat param1' -dest:auto,computername=10.xx.xx.xx,username=xxx,password=yyy

这是错误提示:

警告:'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

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

为什么要这么难呢?

1个回答

7

编辑:你是对的,文档指出cmd/bat文件将被流式传输到目标。

在我看来,这仅仅是该功能无法接受参数的限制。在部署时创建一个修改过的批处理文件版本,并将设置硬编码不应该太困难。

例如:

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

IF ("%SCRIPT_USERNAME%" == "") SET SCRIPT_USERNAME=%1

更新 经过查看msdeploy的反向源代码(啊咳),我可以确认这仅仅是它当前设计的方式。它基于路径是否表示文件来确定是否上传文件。由于添加参数将阻止它将路径解析为文件,因此它不会上传任何内容。


不是真的。runCommand 可以流式传输并执行 .bat 文件,.bat 文件不需要在目标服务器上。从您提供的链接中,它说:“如果指定了批处理文件或命令文件,则该文件将被流式传输到目标计算机并作为本地命令在目标计算机上运行”。问题是我无法为批处理文件传递参数。 - WriteEatSleepRepeat
大家好,我知道这是一年前的事情了,但在这方面有任何进展吗?我正在尝试在部署服务器上使用单个脚本,然后使用不同的参数调用它。 - WheretheresaWill
@WheretheresaWill - 我认为在3.5版本中这种行为没有改变,所以我认为它仍然是一样的。你唯一真正的选择就是在环境中设置环境变量。 - Richard Szalay
@RichardSzalay 再次感谢您的有用帖子 - 每当我遇到 MSDeploy 问题时,我总是能找到您的答案/博客!无论如何,我想重新设计它,使脚本针对特定站点进行同步,并在部署时运行... 不够简洁,但应该能胜任工作。 - WheretheresaWill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接