Windowsでシャドウコピーをコマンドラインで作成するには、Windows11 23H2以前なら、以下のコマンドが使える。
wmic shadowcopy call create volume=C:\
WMICコマンドは非推奨とのことらしく、Windows11 24H2では標準でサポートされなくなってしまった(追加インストールは可能)ので、その代替案を探してみる。
Windows クライアントの非推奨の機能 | Microsoft Learn
もくじ
PowerShellでシャドウコピーを作成
代わりにpowershellで以下のコマンドを使えば出来るという話。
(Get-WmiObject -list win32_shadowcopy).Create("C:\","ClientAccessible")
Windows10でVSS(volume shadow copy)を任意のタイミングで取得する方法
PowerShell上でのシャドウコピーの作成 – べんきょうめも
PowerShellじゃなくてcmdやタスクスケジューラから直接実行したい場合は、以下のように”と\のエスケープが必要になる。
powershell (Get-WmiObject -list win32_shadowcopy).Create(\"C:\\\",\"ClientAccessible\")
タスクスケジューラに登録してみた。
タスクスケジューラに登録も自動化
管理しているマシンの数が多かったりすると、いちいちGUIでポチポチするのも大変+ミスの元なので、上のコマンドをschtasksでタスクスケジューラに登録する。
schtasksにコマンドを渡す時にも、”と\エスケープが必要になる。
schtasks /create /sc daily /tn CreateShadowCopy_C /tr "powershell.exe (Get-WmiObject -list win32_shadowcopy).Create(\\\"C:\\\\\\\",\\\"ClientAccessible\\\")" /ru "NT AUTHORITY\SYSTEM" /st 22:00 /f
これをPowerShellスクリプト内で実行しようとすると、更に”のエスケープが必要になる。
$targetDrive = "C"
$taskName = "CreateShadowCopy_$targetDrive"
$taskCmd=("powershell.exe (Get-WmiObject -list win32_shadowcopy).Create(\\\"""+ $targetDrive + ":\\\\\\\"",\\\""ClientAccessible\\\"")")schtasks /create /sc daily /tn $taskName /tr $taskCmd /st 22:00 /ru "NT AUTHORITY\SYSTEM" /rl HIGHEST /f
結論:
wmicだとここまでエスケープのことを考えなくて良かったけど、PowerShellでやろうとすると、エスケープがめんどくさすぎる。