19

Windows 7 で Windows Power Shell を使用して、ボリューム シャドウ コピーのスナップショットを作成してアクセスしようとしています。以前のスーパーユーザーの質問により、以下を使用してスナップショットを作成できることがわかりました。

(Get-WmiObject -list win32_shadowcopy).create("C:\","ClientAccessible")

を使用してシャドウ コピーをドライブ文字にマップできるように、シャドウ コピーを「公開」に設定できることを示すドキュメントを見つけることができませんWMI。同じ質問にリンクされている記事は、ジャンクションを使用してスナップショットにアクセスするハックを示しています。

シンボリックリンクにアクセスしようとすると、次のようになります。

PS C:\Windows\system32> ls C:\shadowcopy
Get-ChildItem : The parameter is incorrect.

At line:1 char:3
+ ls <<<<  C:\shadowcopy
    + CategoryInfo          : ReadError: (C:\shadowcopy:String) [Get-ChildItem], IOException
    + FullyQualifiedErrorId : DirIOError,Microsoft.PowerShell.Commands.GetChildItemCommand

スナップショットに直接アクセスしようとすると、次のようになります。

PS C:\Windows\system32> ls '\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy14'
Get-ChildItem : Paths that begin with \\?\GlobalRoot are internal to the kernel and should not be opened by managed applications.
At line:1 char:3
+ ls <<<<  '\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy14'
    + CategoryInfo          : NotSpecified: (:) [Get-ChildItem], ArgumentException
    + FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.GetChildItemCommand

powershell スクリプトから VSS スナップショットにアクセスするにはどうすればよいですか?

4

4 に答える 4

31

どのようにシンボリックリンクを作成しましたか? その記事で説明されているように、末尾にバックスラッシュを付けてデバイス パスを指定する必要があります。

$s1 = (Get-WmiObject -List Win32_ShadowCopy).Create("C:\\", "ClientAccessible")
$s2 = Get-WmiObject Win32_ShadowCopy | Where-Object { $_.ID -eq $s1.ShadowID }
$d  = $s2.DeviceObject + "\\"

次に$d、ボリューム文字指定子です。

cmd /c mklink /d C:\shadowcopy "$d"

この後、マウントされたシャドウコピーに問題なくアクセスできましたC:\shadowcopy

$s2.Delete()@KeyszerS がコメントで指摘したように、シャドウ コピー呼び出しをアンマウントするには。

于 2013-01-08T10:49:48.180 に答える