1. Резервное копирование.

1.1. Устанавливаем компоненты встроенного Windows Server Backup:

PS c:\> Install-WindowsFeature Windows-Server-Backup -IncludeManagementTools

1.2. Создаём бекап всех машин на сетевом хранилище \\192.168.1.100\VMBackup:

1.2.1. Создаём задание бэкапа:

PS c:\> $profiles = New-WBPolicy

1.2.2. Создаём и добавляем в задание бэкапа архивируемую папку:

PS c:\> $VirtualMachines = Get-WBVirtualMachine
PS c:\> Add-WBFileSpec -Policy $profiles -FileSpec $VirtualMachines

Если нужно добавить какую-то определённую ВМ то пишем надо будет подправить команду выше: PS c:\> $VirtualMachines = Get-WBVirtualMachine | ? VMName -eq TestVM01 , где TestVM01 — имя ВМ, которую будем бекапить.

1.2.3. Указываем локальный том, на который будет копироваться архив:

PS c:\> $target = New-WBBackupTarget -NetworkPath "\\192.168.1.100\VMBackup"
PS c:\> Add-WBBackupTarget -Policy $profiles -Target $target

1.2.4. Выполняем бэкап:

PS c:\> Start-WBBackup -Policy $profiles

1.3. Мой скрипт для планировщика задач wbadmin-backup.ps1:

# Константы и переменные
$Date = Get-Date -format yyyy.MM.dd
$Path = "\\192.168.1.100\VMBackup"

# Устанавливаем пути
$BackupPath =  $Path + "\" + $Date
$LogPath = $BackupPath + "\BackupLogs\"

# Создаём папки бекапа и логов
New-Item -ItemType Directory -Force -Path $BackupPath
New-Item -ItemType Directory -Force -Path $LogPath

# Создаём задание бэкапа
$policy = New-WBPolicy
# Указываем локальный том, на который будет копироваться архив
$target = New-WBBackupTarget -NetworkPath $BackupPath
# Создаем список виртуальных машин
$VirtualMachines = Get-WBVirtualMachine
# Собираем политику 
Add-WBVirtualMachine -Policy $policy -VirtualMachine $VirtualMachines
Add-WBBackupTarget -Policy $policy -Target $target
# Запускаем бекап
Start-WBBackup -Policy $policy

# Перемещение логов
Move-Item -Path "c:\Windows\Logs\WindowsServerBackup\Backup*" -Destination ($LogPath)

Скрипт бекапит все ВМ на хосте и переносить к ним логи из папки c:\Windows\Logs\WindowsServerBackup\ .

2. Восстановление из копии.

2.1. Получаем список версий бекапов:

PS c:\> Get-WBBackupSet

VersionId        : 11/26/2021-18:45
BackupTime       : 11/26/2021 10:45:12 AM
BackupTarget     : C:
RecoverableItems : Volumes, Applications, Files
Volume           : {VMs (D:)}
Application      : {HyperV TestVM01}
VssBackupOption  : VssCopyBackup
SnapshotId       : 5f5788ea-7c1c-4812-818f-2148df0c453d
BackupSetId      : de4b71dc-df16-4900-91f3-bc65d6bb54e9

VersionId        : 11/26/2021-19:03
BackupTime       : 11/26/2021 11:03:13 AM
BackupTarget     : C:
RecoverableItems : Volumes, Applications, Files
Volume           : {VMs (D:)}
Application      : {HyperV TestVM01}
VssBackupOption  : VssCopyBackup
SnapshotId       : fb828ce0-243f-41e9-948b-bef8f2e19054
BackupSetId      : 53b2e1e6-9b35-4154-8580-429ec74fb3b9

Копируем отсюда VersionId: 11/26/2021-18:45 . Он нам понадобиться для следующей команды.

2.2. Заносим необходимый BackupSet в переменную:

PS c:\> $set = Get-WBBackupSet | ? VersionId -eq 11/26/2021-18:45

2.3. Заносим компоненты всех ВМ в переменную:

PS c:\> $vms = ($set.Application | ? Identifier -eq HyperV).Component

Для восстановления конкретной ВМ необходимо последнюю команду модернизировать следующим образом: PS c:\> $vms = ($set.Application | ? Identifier -eq HyperV).Component | ? VMName -eq TestVM01 , где TestVM01 — имя восстанавливаемой ВМ.

2.4. Запускаем восстановление:

PS c:\> Start-WBHyperVRecovery -BackupSet $set -VMInBackup $vms

3. Удаление резервных копий.

3.1. В случае если мы хотим удалить все бекапы то набираем команду:

PS c:\> Remove-WBBackupSet

3.2. В случае если мы хотим удалить определенную версию, то:

3.2.1. Получаем список версий бекапов:

PS c:\> Get-WBBackupSet

VersionId        : 11/27/2021-20:22
BackupTime       : 11/27/2021 12:22:56 PM
BackupTarget     : C:
RecoverableItems : Volumes, Applications, Files
Volume           : {VMs (D:)}
Application      : {HyperV TestVM01, HyperV TestVM02}
VssBackupOption  : VssCopyBackup
SnapshotId       : 6e7ab46d-4dae-4ee7-9292-d5dee3cd1332
BackupSetId      : e02fca1c-5cde-410e-a6fc-11024b351024

Копируем отсюда VersionId: 11/27/2021-20:22 . Он нам понадобиться для следующей команды.

3.2.2. Удаляем резервную копию определенной версии:

PS c:\> Get-WBBackupSet | ? VersionId -eq 11/27/2021-20:22 | Remove-WBBackupSet