web-dev-qa-db-ja.com

シャドウコピーをリモートで削除する

現在、DISKSHADOWを使用して、Hyper-Vサーバーからシャドウコピーを削除しています。これを行うには、サーバーにログオンする必要がありますが、psexecが機能しません。

_psexec \\hyper-v-server diskshadow
DISKSHADOW> Error reading from console. Win32 error: 0x6
The handle is invalid.
_

vssadminは上記のように機能すると思いますが、PowerShellを使用してこれをスクリプト化し、シャドウコピーを選択的に削除したいと思います。これらのツールはどちらも、PowerShellで使用可能な出力を提供しません。

少し調べましたが、PowerShellを使用してローカルまたはリモートでスナップショットをクエリする方法が見つかりませんでした。これを行うには、_Get-WMIObject_ CMDletを使用してWMIから関連情報を照会する必要があると思いますが、Win32_ShadowCopy.Create()メソッドしか見つかりません。

EDIT:明確にするために、PowerShellを使用して操作できるオブジェクトが必要です。

3
john

Get-WMIObjectコマンドレットを使用して、シャドウコピーをリモートで削除できます。以下の例は、それがどのように機能するかを示しています。使用可能なリモートシャドウコピーがない場合、Get-WMIObjectコマンドレットがnullオブジェクトを返すことに注意してください。つまり、シャドウコピーをリモートで作成するには、PowerShellリモート処理とvssadminツールの組み合わせが必要になる可能性があります。

ターゲットサーバーで(管理者特権のコマンドプロンプトから)、最初にシャドウコピーを作成して、使用できるようにします。

vssadmin create shadow /for=c:

管理サーバーから:

$shadowCopies = Get-WMIObject -Class Win32_ShadowCopy -Computer <TARGET SERVER NAME>
$shadowCopies | % {$_.DeviceObject}  # Lists out just the names of the copies
$shadowCopies | Get-Member -View All # Lists all members even hidden ones such as "delete"
$shadowCopies[0].Delete()            # Deletes the first shadow copy when more than one exists
$shadowCopies.Delete()               # Works when only a single shadow copy exists
4
user113230

これは、diskshadowを使用してリモートで実行できます。これを実現するには、必要なコマンドを含むバッチファイルを作成し、ターゲットサーバーのどこかに配置します。次に:psexec \\remotehost diskshadow /s C:\path\to\script.bat。パスにネットワークロケーションを使用することもできます。

3
Nathan C