我試圖通過bat文件生成證書請求並提交給CA.循環遍歷bat文件中的每一行
我能夠做到只有1個主機名,所以我正在做一個bat文件來自動生成所有這些。這是我嘗試過的。它應該在hostnames.txt文件中逐行循環並替換所有變量。
從How do you loop through each line in a text file using a windows batch file?
set CA_SERVER=xxxx
set CA_NAME=xxxx
set LOGFILE=.\RequestCert.log
set LIST=hostnames.txt
if not exist %LIST% (
echo %DATE% : %TIME% : ERROR : The list of hostnames file %LIST% is
missing. Cannot request certificate. Exiting! >> %LOGFILE%)
for /f "tokens=*" %%a in ("%LIST%") do (
set HOSTNAME=%%a
echo HOSTNAME
)
我想測試一個簡單的回聲會工作,但錯誤想出了爲引用:該命令的語法不正確。我看到很多來自stackoverflow的引用,但它無法弄清楚什麼是錯的。
以上是我在上述修正後實施的。
openssl req -nodes -newkey rsa:2048 -nodes -keyout %HOSTNAME%.key -out
%HOSTNAME%.csr -subj "/C=SG/ST=/L=xxx/O=xxx/OU=xxx
/CN=%HOSTNAME%"
certreq -submit -f -config "%CA_SERVER%\%CA_NAME%" -attrib
CertificateTemplate:SSLCert" %HOSTNAME%.csr
echo Generating certificate request and key for %HOSTNAME%
我知道這已被問了很多次,但我的似乎沒有工作..預先感謝您的幫助!
更新: 當前配置在Gerhard Barnard的幫助下工作。
沒有爲我生成這個錯誤,只是'按照預期的方式'''''''HOSTNAME'。由於'list'是一個文件名,因此在'for/f'中引用它只會將文件名分配給'%% a'。如果你想要文件的*內容*,那麼你需要使用'usebackq'選項來改變引號的含義。將這個值賦給'hostname'後,您需要'echo'hostname的*內容*而不是常量字符串'HOSTNAME' - 甚至在那裏,因爲'echo'命令在括號內行)(一個「代碼塊」)你需要採取其他措施 - 參見SO延期擴展項目。 – Magoo