【问题标题】:Add executable to Windows PATH from .ebextensions and then call executable in subsequent command从 .ebextensions 将可执行文件添加到 Windows PATH,然后在后续命令中调用可执行文件
【发布时间】:2019-08-17 08:06:42
【问题描述】:

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

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.
------------------------------------------------------------

【问题讨论】:

    标签: windows amazon-elastic-beanstalk chocolatey ebextensions


    【解决方案1】:

    我不是 Elastic Beanstalk 的用户,所以我不能说这是否会起作用,但根据documentation,有必要提供一个额外的命令来更新所使用的 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。我不知道这是否是文档中呈现给浏览器的代码中的转义问题,或者这是否是故意的。您可能需要尝试一下,看看有什么效果。

    【讨论】:

    • 即使使用不同的 ewmp 用法,这仍然给我一个无法识别的错误。 ERROR: Invalid key name. 'choco' is not recognized as an internal or external command
    • 但是那篇 AWS 博客文章是一个不错的发现!它确实解释了为什么 PATH 没有被拾取。
    • 您是否尝试过文章中的示例?会不会和容器命令有关?
    猜你喜欢
    • 2014-06-07
    • 2022-01-03
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多