Windows11 24H2以降でシャドウコピーをコマンドラインで作成する方法

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でやろうとすると、エスケープがめんどくさすぎる。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です