Я сейчас использую 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
. Вы также можете использовать сетевое расположение для пути.