Назад | Перейти на главную страницу

Удаленное удаление теневых копий

Я сейчас использую 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() метод.

РЕДАКТИРОВАТЬ: Чтобы было ясно, мне бы хотелось, чтобы объекты, которыми я мог управлять с помощью PowerShell, были.

Командлет Get-WMIObject можно использовать для удаленного удаления теневых копий. Пример ниже демонстрирует, как это может работать. Следует отметить, что командлет Get-WMIObject возвращал нулевой объект в том случае, если не было доступных удаленных теневых копий. Это означает, что для удаленного создания теневых копий может потребоваться комбинация удаленного взаимодействия 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. Вы также можете использовать сетевое расположение для пути.