1

我有一个 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? 是否有更合适的方法来安装二进制文件并将它们设置为PATH在 ESB 实例创建期间的窗口?

我试图关注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.
------------------------------------------------------------
4

1 回答 1

1

我不是 Elastic Beanstalk 的用户,所以我不能说这是否可行,但根据文档,有必要提供一个额外的命令来更新所使用的 PATH 变量:

Chocolatey 安装程序及其安装的软件包可能会修改机器的 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在命令部分中。我不知道这是否是文档中呈现给浏览器的代码中的转义问题,或者这是否是故意的。你可能需要玩这个来看看有什么用。

于 2019-03-27T07:49:51.007 回答