BAT批處理腳本案例--判斷證書是否到期

通常服務器上有很多證書,這些證書大都可以通過解析文件,獲取到期時間,比如某個證書文件*.key,內容如下:

<?xml version="1.0" encoding="GB2312"?>
<?watermark value=""?>
<license>
	...
	<outofdate>20200531</outofdate>

我們只要解析文件,獲取outofdate所在文本行,解析獲取20200531字符串,然後轉換成日期並判斷是否到期即可,具體腳本代碼如下:
ssl_date.bat

@echo off & setlocal enabledelayedexpansion
set arg1=%~1
if "%arg1%"=="" ( goto usage )
set "arg1=%arg1:(=^(%"
set "arg1=%arg1:)=^)%"
for /f %%i in (%arg1%) do (
    echo "%%i" | findstr /i "outofdate" > nul && (
        set "outdate=%%i"
    )
)
if defined outdate (
    set "outdate=%outdate:~11,8%"
)
call :daydiff %outdate% the_diff
echo %the_diff%
goto :eof

:daydiff arg1 the_diff
rem 20200202
set arg1=%~1
set /a arg_days=(%arg1:~0,4%) * 12 * 30 + (%arg1:~4,1%) * 10 * 30 + (%arg1:~5,1%) * 30
if %arg1:~6,1% equ 0 (
    set /a arg_days=%arg_days% + %arg1:~7,1%
) else (
    set /a arg_days=%arg_days% + %arg1:~6,2%
)

set cur_date=%date%
set /a cur_days=(%cur_date:~0,4%) * 12 * 30 + (%cur_date:~5,1%) * 10 * 30 + (%cur_date:~6,1%) * 30
if "%arg1:~8,1%" equ "0" (
    set /a cur_days=%cur_days% + %cur_date:~9,1%
) else (
    set /a cur_days=%cur_days% + %cur_date:~8,2%
)

set /a diff_days=%arg_days%-%cur_days%
set "%2=%diff_days%"
goto :eof

:usage
echo "Usage: %0 <filepath> <outofdate>"
goto end

:end
exit /B 0

代碼說明:
1)set arg1=%~1,參數去引號處理,“c:\ddd.key” => c:\ddd.key
2)set “arg1=%arg1:(=^(%”,括號轉義處理,文件路徑不能有括號
3)daydiff ,一個計算兩個日期差幾天的函數,通常證書是否到期需要提前通知,一般是10天等,所以計算差幾天可能有1-2天誤差,不影響功能使用

使用方法:

ssl_date.bat ssl.key
130

運行結果:130,表示證書還有130天到期
如果有zabbix等監控軟件的話,那麼只要配置一個監控項目,並設置<10報警,那麼當到期時間10內的話,zabbix就會告警提示。

發佈了298 篇原創文章 · 獲贊 98 · 訪問量 77萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章