Blog

  • 2022年冬アニメ

    明日ちゃんのセーラー服
     絵がきれい

    時間があれば見るかもしれない

    ハコヅメ~交番女子の逆襲~
     ちょっとシュールだけど、嫌いではない

    その着せ替え人形は恋をする
     キャラがいまいち

    見るのをやめた作品

    最遊記RELOAD
     西遊記の翻案ぽいけど、アクションがしょぼい。セリフもうざい。

    天才王子の赤字国家再生術
     ぼそぼそと早口でしゃべっていてつまらない

  • win-acmeの新バージョン通知

     v2.1.15辺りからwin-acmeに自身のバージョンをチェックする機能が追加された。

     ただし、実行時のログファイルに記録されているだけなので、定期的にログファイルを確認しないと気付けかない。

     そこで、win-acmeの実行に合わせてログファイルを確認し、新バージョンが発行されていれば電子メールを送るようにする。リポジトリに登録すれば良いとかは無しで。

     まず、win-acmeでバージョンチェックを有効にする。
    展開されたwin-acmeのフォルダー内にあるsettings_default.jsonをsettings.jsonという名前でコピーし、VersionCheckをtrueにする。

      "Client": {
        "ClientName": "win-acme",
        "ConfigurationPath": null,
        "LogPath": null,
        "VersionCheck": true
    
      },
    

     ログファイルをチェックするバッチファイル(win-acme_checknew.bat)
    実行した結果をログファイルに追記しておく。

    @echo off
    @echo win-acmeの新バージョンがあれば、postmaster宛にメールを送る
    @echo %DATE%-%TIME: =0% : Excecuting ... %0 %*
    
    setlocal enabledelayedexpansion
    
    set ACME_LOGFILE=C:\ProgramData\win-acme\acme-v02.api.letsencrypt.org\Log\log-%date:~-10,4%%date:~-5,2%%date:~-2,2%.txt
    
    @rem ログファイルが無ければ、終了する。
    if not exist %ACME_LOGFILE% goto :DONE
    
    set AVAILABLE=
    @rem setlocal enabledelayedexpansion なので ^! で ! をエスケープする
    for /f "usebackq delims=" %%a in (`findstr /r /c:"\[WRN\] New version .* available^!" %ACME_LOGFILE%`) do Set AVAILABLE=%%a
    
    if not "%AVAILABLE%" == "" (
        @echo New version available!
        @echo call %~dp0SendMail.bat "win-acme New version available^!" "%AVAILABLE%"
              call %~dp0SendMail.bat "win-acme New version available^!" "%AVAILABLE%"
        @echo %DATE%-%TIME: =0% %~nx0 : Send mail.>>%ACME_LOGFILE%
    ) else (
        echo No new version.
        @echo %DATE%-%TIME: =0% %~nx0 : No New Version.>>%ACME_LOGFILE%
    )
    
    :DONE
    endlocal
    
    timeout /T 300
    
    exit /b
    
    

     PowerShellスクリプトを呼び出すバッチファイル(SendMail.bat)

    @echo off
    @rem 電子メールを送信する
    @rem 送信元アドレス
    @rem 送信先アドレス
    @rem 件名
    @rem 内容
    @rem 送信元アドレス、送信先アドレスの両方とも省略した場合は、postmasterのアドレスが使用される
    echo %DATE%-%TIME: =0% : Excecuting ... %0 %*
    
    setlocal enabledelayedexpansion
    
    if "%~4" == "" (
      set MailFrom="postmaster@domain.com"
      set MailTo="postmaster@domain.com"
    
      if not "%~1" == "" set Title=%~1
      if not "%~2" == "" set TxtBody=%~2
    ) else (
      if not "%~1" == "" set MailFrom=%~1
      if not "%~2" == "" set MailTo=%~2
      if not "%~3" == "" set Title=%~3
      if not "%~4" == "" set TxtBody=%~4
    )
    
    @echo powershell -file %~dp0SendMail.ps1 !MailFrom! !MailTo! "!Title!" "!TxtBody!"
          powershell -file %~dp0SendMail.ps1 !MailFrom! !MailTo! "!Title!" "!TxtBody!"
    
    endlocal
    
    exit /b %ERRORLEVEL%

     電子メールを送信するPowerShellスクリプト(SendMail.ps1)

    Param($from, $to, $subject, $body)
    
    $ary = $from.Split("@")
    $server = $ary[1]
    $port = 587
    $user = "xxx"
    $password ="xxx"
    
    $securepassword = ConvertTo-SecureString $password -AsPlainText -Force
    $credential = New-Object System.Management.Automation.PSCredential(
      $user, $securepassword)
    
    Send-MailMessage `
      -From $from `
      -To $to `
      -Subject $subject `
      -Body $body `
      -Encoding UTF8 `
      -SmtpServer $server `
      -Port $port `
      -UseSsl `
      -Credential $credential
    

      タスクスケジューラーライブラリのwin-acme renew (acme-v02.api.letsencrypt.org)の操作に、win-acme_checknew.batを追加し、win-acme.exeの後に実行するようにする。

     Windows Server 2016上で実行したときは、SYSTEMアカウントで実行するとログファイルにアクセスできないようだったので、Administratorアカウントにて実行させた。

     なお、win-acmeや電子証明書が更新された場合はタスクスケジューラーからこのバッチファイルの設定が削除されるかもしれないので、そういう場合は再確認しておく。