我目前用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 查询快照的方法,无论是本地还是远程。我想这样做将涉及使用 CMDletGet-WMIObject
从 WMI 查询相关信息,但我只能找到方法Win32_ShadowCopy.Create()
。
编辑:要清楚的是,我想要的是可以使用 PowerShell 操作的对象。
答案1
您可以使用 Get-WMIObject cmdlet 远程删除卷影副本。下面的示例演示了它的工作方式。需要注意的是,在没有可用的远程卷影副本的情况下,Get-WMIObject cmdlet 返回一个空对象。这意味着可能仍然需要结合使用 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
答案2
您可以使用 diskshadow 远程执行此操作。为此,请编写一个包含所需命令的批处理文件并将其放在目标服务器上的某个位置,然后:psexec \\remotehost diskshadow /s C:\path\to\script.bat
。您也可以使用网络位置作为路径。