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