【发布时间】:2018-06-17 02:03:12
【问题描述】:
我有一个安装服务的批处理脚本。我正在使用 puppet 使用 Powershell 在 Windows 上安装此服务。
C:\graylog-collector\bin\graylog-collector-service.bat install GrayLogCollector
通过 PS 使用上述内容将安装该服务,因为它只是启动 .bat 文件。该服务需要JAVA_HOME,它已经设置为环境系统变量,但 Puppet 不知道。我试图在运行这个批处理文件之前传递JAVA_HOME 的值。我尝试了几种不同的方法,例如:
$JAVA_HOME = [Environment]::GetEnvironmentVariable("JAVA_HOME", "Machine"); C:\graylog-collector-0.5.0\bin\graylog-collector-service.bat install GrayLogCollector
我不想编辑文件,也不想再次声明变量。我正在尝试使用系统中已经设置的内容。基本上,尝试获取 JAVA_HOME 的值并将其提供给 .bat 文件。
【问题讨论】:
-
$env:JAVA_HOME,但如果它已经设置好了,“puppet 不知道它已经设置好了”和“将它输入 .bat 文件”是什么意思?如果设置好了,那就设置好了,Puppet 还是没有 Puppet,对吧?如果 .bat 文件不是为接受输入而构建的,你就不能给它输入,对吧? -
在 PowerShell 中,使用命令
& cmd.exe /C SET查看调用 .bat 脚本时可用的变量。 -
您应该能够通过
exec资源直接运行批处理文件。我看不到 PowerShell 会在这里发挥作用。 -
@TessellatingHeckler 我不能,因为 Puppet 不知道,因为 Puppet 无权检索环境系统变量!根据我的阅读,我需要将它定义为 puppet 中的 FACT,这样它才能工作。但是,我不想在多个地方定义这个变量,因为将来如果路径发生变化,事情可能会中断!
-
@AnsgarWiechers 真的,我能做到!但是,它有什么不同呢?它仍然没有解决我对不知道 JAVA_HOME 的 puppet 的问题
标签: powershell batch-file cmd