我有一个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
?
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.
------------------------------------------------------------
答案 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
。我不知道这是文档中呈现给浏览器的代码中的转义问题,还是这是故意的。您可能需要玩这个游戏才能看到有效的方法。