ことしもよろしく

ことしもよろしく
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や電子証明書が更新された場合はタスクスケジューラーからこのバッチファイルの設定が削除されるかもしれないので、そういう場合は再確認しておく。
ある日、突然Windows10のバックアップを行うと、VSSなどのエラーが出て途中で終わってしまうようになった。バックアップが短時間でエラーになり、オプションで以下のようなメッセージが表示される
シャドウコピーを作成できませんでした。詳細については、"VSS"および"SPP"のアプリケーションイベントログを確認してください。
詳細:ライターで一時的なエラーが発生しました。バックアップ処理を再試行すると、エラーは発生しない可能性があります。
ディスク管理ツールなどでストレージのコピーを行うとGPTのパーティション情報が壊れて起きるようになるらしい。
以下を参考に修正を行った。
https://qiita.com/kenichiuda/items/b6d92a6352c0ee5e37c1
https://community.acer.com/en/discussion/comment/423300#Comment_423300
以下からgptfdiskをダウンロードする。
https://sourceforge.net/projects/gptfdisk/
パーティション情報を見てみると名前のところが文字化けしている。
C:\xxx>gdisk64.exe 0: GPT fdisk (gdisk) version 1.0.8 The protective MBR's 0xEE partition is oversized! Auto-repairing. Partition table scan: MBR: protective BSD: not present APM: not present GPT: present Found valid GPT with protective MBR; using GPT. Command (? for help): ? b back up GPT data to a file c change a partition's name d delete a partition i show detailed information on a partition l list known partition types n add a new partition o create a new empty GUID partition table (GPT) p print the partition table q quit without saving changes r recovery and transformation options (experts only) s sort partitions t change a partition's type code v verify disk w write table to disk and exit x extra functionality (experts only) ? print this menu Command (? for help): i Partition number (1-2): 1 Partition GUID code: EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (Microsoft basic data) Partition unique GUID: xxxx First sector: 63 (at 31.5 KiB) Last sector: 468656270 (at 223.5 GiB) Partition size: 468656208 sectors (223.5 GiB) Attribute flags: 0000000000000000 Partition name: '・ーホャ'
正常と思われる名前に書き換える。
Command (? for help): c Partition number (1-2): 1 Enter name: Basic data partition
Partition GUID code:のGUIDでパーティションの種類が分かるので、名前を以下のようにつけておくといいかもしれない。
Partition GUID code: DE94BBA4-06D1-4D40-A16A-BFD50179D6AC (Windows RE) Partition name: 'Basic data partition' Partition GUID code: C12A7328-F81F-11D2-BA4B-00A0C93EC93B (EFI system partition) Partition name: 'EFI system partition' Partition GUID code: E3C9E316-0B5C-4DB8-817D-F92DF00215AE (Microsoft reserved) Partition name: 'Microsoft reserved partition' Partition GUID code: EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (Microsoft basic data) Partition name: 'Basic data partition'
これを全パーティションに対して、確認・修正を行う。
書き込みをするとgptfdiskは終了する。
Command (? for help): w Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!! Do you want to proceed? (Y/N): y OK; writing new GUID partition table (GPT) to \\.\physicaldrive0. Disk synchronization succeeded! The computer should now use the new partition table. The operation has completed successfully.
さらに、PCに接続されている全GPTドライブも修正する。
PCを再起動してバックアップを実行する。