从.ebextensions将可执行文件添加到Windows PATH,然后在后续命令中调用可执行文件

时间:2019-03-26 20:22:52

标签: windows amazon-elastic-beanstalk chocolatey ebextensions

我有一个Windows Elastic Beanstalk实例。我项目的commands.config中有以下.ebextensions

commands:
  00-install-choco:
    command: |
        powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))"
  01-set-choco-path:
    command: |
        SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin

这两个命令正在运行。但是,我还有一个container-commands.config文件,需要调用choco,但是由于'choco' is not recognized as an internal or external command

,它一直失败
container_commands:
  01-install nssm:
    command: |
        choco install nssm -y

如何获取后续命令来获取更新的PATH?在ESB实例创建过程中,是否有更合适的方法来安装二进制文件并将其设置为Window的PATH

我试图关注https://aws.amazon.com/blogs/developer/using-nuget-and-chocolatey-package-managers-in-aws-cloudformation-and-aws-elastic-beanstalk/

files:
  c:/tools/ewmp.cmd:
    content: |
      @ECHO OFF
      FOR /F "tokens=3,*" %%a IN ('REG QUERY "HKLMSystemCurrentControlSetControlSession ManagerEnvironment" /v PATH') DO PATH %%a%%b
      %*
commands:
  01-install-choco:
    command: powershell -NoProfile -ExecutionPolicy unrestricted -Command "Invoke-Expression ((New-Object Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))"
    waitAfterCompletion: 0
  02-install-nssm:
    command: c:/tools/ewmp choco install nssm -y
    waitAfterCompletion: 0

但是,即使那样也给了我类似的错误。

-----------------------Command Output-----------------------
ERROR: Invalid key name.
Type "REG QUERY /?" for usage.
'choco' is not recognized as an internal or external command,
operable program or batch file.
------------------------------------------------------------

1 个答案:

答案 0 :(得分:1)

我不是Elastic Beanstalk的用户,所以我无法确定它是否有效,但是根据documentation,有必要提供一条附加命令来更新PATH变量,即已使用:

  

Chocolatey安装程序及其安装的软件包可能会修改计算机的PATH环境变量。这会增加复杂性,因为在同一会话中执行了这些安装之后的后续命令,而该会话没有更新的PATH。为了解决这个问题,我们在执行命令之前利用命令文件将会话的PATH设置为计算机的PATH。

files:
  c:/tools/ewmp.cmd:
    content: |
      @ECHO OFF
      FOR /F "tokens=3,*" %%a IN ('REG QUERY "HKLMSystemCurrentControlSetControlSession ManagerEnvironment" /v PATH') DO PATH %%a%%b
      %*
commands:
  00-install-choco:
    command: powershell -NoProfile -ExecutionPolicy unrestricted -Command "Invoke-Expression ((New-Object Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))"
container_commands:
  01-install nssm:
    command: |
      c:toolsewmp choco install nssm -y

注意:根据文档,我不清楚的一件事是在命令部分使用c:toolsewmp而不是c:/tools/ewmp。我不知道这是文档中呈现给浏览器的代码中的转义问题,还是这是故意的。您可能需要玩这个游戏才能看到有效的方法。