「以前のバージョンの復元」をpowershellで実現できないでしょうか?
質問
2012年1月6日金曜日 9:03
(1)復元ポイントのシーケンス番号を以下のコマンドで取得した後、
((get-computerrestorepoint)[-1]).sequencenumber
(2)このシーケンス番号のshadowimageを使って、powershellで特定のディレクトリ(orファイル)を別ディレクトリへコピー
することはできないでしょうか?
restore-computerコマンドですと、すべて復元されてしまいますので。。。
もしご存じの方、ご教示いただきたく、よろしくお願いいたします。
すべての返信 (2)
2012年1月8日日曜日 21:10 ✅回答済み | 3 票
たとえばC:\doc\test.txtの「以前のバージョン」は、
\localhost\C$\GMT-2012.01.07-03.00.12\doc\test.txt
のようにデフォルト共有からシャドウコピーのフォルダやファイルにUNCパスでアクセスできるので、Copy-Itemコマンドレットを使えばコピーできます。
シャドウコピーの生成日時(ここではGMT-2012.01.07-03.00.12の部分)がわからないとUNCパスもわからないので、これだけ何らかの方法で調べてやる必要があります。
get-computerrestorepointコマンドレットで返却されるSystemRestoreオブジェクトのCreationTimeプロパティの値を見てやればいいように思いますが、実際はシャドウコピー作成時刻とシステム復元ポイント作成時刻はずれるので、この値は使えません。
よって
Get-WmiObject Win32_ShadowCopy
としてWin32_ShadowCopyオブジェクトの配列を取ってきて、そのInstallDateプロパティの値を抽出してやればいいかなと思います。
InstallDateプロパティの値はWMIの日付時刻表現になっているので、ConvertToDateTimeメソッドなどを使って.NETのDateTime型に変換し、さらにこの値はJSTなのでGMTに変換(.AddHours(-9))してやればいいと思います。
これらが面倒ならばWindows Server 2003のリソースキットに含まれるvolrest.exeコマンドを使うのでもいいのではないでしょうか。
volrestコマンドでシャドウ・コピーから以前のバージョンのファイルを取り出す - @IT
2012年1月10日火曜日 6:57
ご親切にありがとうございます。
以下のように実装できました。
# 「以前のバージョンの復元」の実行日時を取得
$a = Get-WmiObject Win32_ShadowCopy | Select-Object InstallDate | sort-object InstallDate -Descending
# 最新の「以前のバージョンの復元」のdatetimeを取得
$b = [System.Management.ManagementDateTimeConverter]::ToDateTime($a[0].InstallDate).ToUniversalTime().ToString("yyyy.MM.dd-HH.mm.ss")
# バックアップ
copy-item [\localhost\c$\GMT-$b\](file://\localhost\c$@GMT-$b) x:\バックアップ先 -recurse
本当にありがとうございました。