【发布时间】:2014-12-12 11:21:35
【问题描述】:
我正在尝试在正常运行时间监控中设置自定义脚本,并让此命令运行 openssl 并让我传递给它的参数运行。
openssl s_client -CAfile C:\apcerts\certs\ -quiet -connect ${HOST}:${PORT} > ${TMPF} 2>&1 < EOF
<TF80DOC><XPLN/></TF80DOC>
EOF
if (Select-String "Update Level" ${TMPF} > /dev/null)
{
exitstatus=$STATE_OK
Select-String "Update Level" ${TMPF} | sort | uniq}
elseif (Select-String "Regulatory" ${TMPF} > /dev/null)
{
exitstatus=$STATE_OK
Select-String "Regulatory" ${TMPF} | sort | uniq}
else{
echo `date` >> /tmp/caught_errs.out
cat ${TMPF} >> /tmp/caught_errs.out
echo " " >> /tmp/caught_errs.out
exitstatus=$STATE_CRITICAL
}
rm -f ${TMPF} 2> /dev/null
exit ${exitstatus}
我希望将变量 ${host}:${port} 留空,并且我希望有一个参数,我可以手动将信息放入其中,并使用该信息填充字段。
例如,我需要连接到 blank-xml.myinfo.com:30011。
我遇到的问题是,当我在自定义监视器上进行设置时,我有一个打开 openssl 但无法打开 .txt 文件来运行给定命令的 .bat。
我需要做什么才能使它起作用。
更新:
我制作了一个批处理文件,将信息传递给 openssl,该文件要小得多。
@echo off
c:\OpenSSL-Win64\bin\openssl s_client -connect help-xml.helpme.com:443
此部分效果很好,可以在屏幕上显示所需的信息。我还需要向窗口发送另一个命令,但收到一条错误消息,指出
该命令是<TF80DOC><XPLN/></TF80DOC> 我曾尝试使用 & 符号并在它之前使用过 echo,但仍然收到相同的错误,否则屏幕将立即弹出并关闭而没有任何信息。
if then 语句在我运行<TF80DOC><XPLN/></TF80DOC> 后起作用,因为它包含语句正在查找的信息。但是,如果在 s_client -connect help-xml.helpme.com:443 运行后我无法将 <TF80DOC><XPLN/></TF80DOC> 发送到 openssl,那么 if 语句将永远无法工作。
更新:
我已将powershell命令改为管道在s_client -connect help-xml.helpme.com:443之后的命令
新代码看起来像
@'
<TF90DOC><XPLN/></TF90DOC>
'@ | C:\OpenSSL-Win64\bin\openssl s_client -quiet -connects_client -connect help-xml.helpme.com:443 > test1.txt 2>&1
if then 语句不是问题,因为我知道如何修复它。代码的 powershell 部分有效,但需要我按 Enter 键,这不是我需要的。我需要它在没有用户输入的情况下自动执行命令
对于批处理命令,我对其做了一些细微的改动,分别是
@echo off
setlocal enabledelayedexpansion
set "var=<TF90DOC><XPLN/></TF90DOC>"
echo echo !var! | C:\OpenSSL-Win64\bin\openssl s_client -connect tf90-xml.bsi.com:443> test1.txt 2>&1
这个命令仍然给我错误
【问题讨论】:
-
我如何将
<TF80DOC><XPLN/></TF80DOC>写为变量。 -
好的,我得试试。我会让你知道会发生什么
-
我遇到了和以前一样的问题。这是
-
顶部的脚本是什么语言?那是PowerShell吗?重击?如果是 Powershell,请尝试使用反引号(带有
`字符,通常位于 [Tab] 上方)转义<和>。所以$xml = "<TF80DOC><XPLN/></TF80DOC>"不行,试试`<TF80DOC`>`<XPLN/`>`</TF80DOC`>。 More info on escaping in PowerShell。如果您不使用 PowerShell,请忽略所有这些。这令人困惑。Select-String看起来像 PowerShell cmdlet,但/dev/null是 Linux 的东西。 -
您似乎对基于 cmets 的代码进行了几处更改 - 您能否发布最新的代码,以便我们了解它当前 [不] 的工作情况?
标签: powershell batch-file openssl