我正在尝试在运行时间监控中设置自定义脚本,并使用该命令运行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。
我遇到的问题是,在自定义监视器上设置时,我有一个 .bat 文件打开了 OpenSSL 但无法打开 .txt 文件以运行给定的命令。
我需要做什么才能使其正常工作?
更新:
我已经创建了一个较小的批处理文件,将信息传递给 OpenSSL。
@echo off
c:\OpenSSL-Win64\bin\openssl s_client -connect help-xml.helpme.com:443
这个部分很好地展示了屏幕上需要的信息。我需要向窗口发送另一个命令,但是出现了错误,指出“<”命令不是可执行或批处理进程。
那个命令是
<TF80DOC><XPLN/></TF80DOC>
,我尝试使用“&”符号并在它之前使用echo,但仍然得到相同的错误,或者屏幕会立即弹出并关闭而没有任何信息。如果我不能在
s_client -connect help-xml.helpme.com:443
运行后将<TF80DOC><XPLN/></TF80DOC>
发送到openssl,则if then语句将永远不起作用,因为此命令包含要显示的信息,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部分可以工作,但需要我按下回车键,这不是我所需要的。我需要它在没有用户输入的情况下自动执行命令。
对于批处理命令,我做了一些小改动,具体如下:
@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>
写成一个变量? - bgrif\``字符)转义
<和
>。因此,
$xml = "<TF80DOC><XPLN/></TF80DOC>"无法正常工作,请尝试
`<TF80DOC`>`<XPLN/`>`</TF80DOC`>。有关在PowerShell中转义的更多信息,请参见[此处](http://ss64.com/ps/syntax-esc.html)。如果您没有使用PowerShell,请忽略所有内容。这很令人困惑。
Select-String看起来像是PowerShell cmdlet,但
/dev/null`是Linux的东西。 - rojo