Создание задач по репликации Veeam B&R с помощью Powershell

Мне довелось создать реплику виртуальных машин средствами Veeam B&R. Забавно то что используя GUI это делается за пару кликов, однако задача состояла в том что бы создать реплики на более чем 15 машин при этом каждая машина должна быть отдельной джобой. Что бы не терять большое количество времени, я решил написать небольшой скрипт на Powershell который сделает это за меня. Я постарался максимально унифицировать этот скриптик, но думаю можно будет сделать это еще эффективнее. Тело скрипта под катом.

Тыкни
function New-ReplicaJob {
    param (
        [string]$JobName, 
        [string]$TargetServerIP, 
        [string]$VMName, 
        [string]$TargetDatastore,
        [string]$SourceIP, 
        [string]$SourceMask, 
        [string]$ReIpTargetIP, 
        [string]$ReIpTargetMask,
        [string]$ReIpGateway, 
        [string]$ReIpDNS, 
        [string]$SourceNetwork, 
        [string]$TargetNetwork,
        [string]$SourceProxy, 
        [string]$TargetProxy, 
        [string]$Repository = "DefaultRepo"
    )

    $Description = "$JobName replication job"
    $RestorePointsToKeep = 7

    $TargetServer = Get-VBRServer -Name    $TargetServerIP
    $VMObject = Find-VBRViEntity -Name $VMName
    $Datastore = Find-VBRViDatastore -Name $TargetDatastore -Server $TargetServerIP
    $ReIpRule = New-VBRViReplicaReIpRule -SourceIp $SourceIP -SourceMask $SourceMask -TargetIp $ReIpTargetIP -TargetMask $ReIpTargetMask -TargetGateway $ReIpGateway -DNS $ReIpDNS

    $SrcNetwork = Get-VBRViServerNetworkInfo -Server $VMObject.VmHostName | Where-Object { $_.Name -eq $SourceNetwork }
    $TgtNetwork = Get-VBRViServerNetworkInfo -Server $TargetServer.Name | Where-Object { $_.Name -eq $TargetNetwork }

    $SrcProxy = Get-VBRViProxy -Name $SourceProxy
    $TgtProxy = Get-VBRViProxy -Name $TargetProxy

    Add-VBRViReplicaJob -Name $JobName `
                        -Server $TargetServer `
                        -Entity $VMObject `
                        -Datastore $Datastore `
                        -Suffix "_replica" `
                        -BackupRepository $Repository `
                        -Description $Description `
                        -EnableNetworkMapping `
                        -SourceNetwork $SrcNetwork `
                        -TargetNetwork $TgtNetwork `
                        -SourceProxy $SrcProxy `
                        -TargetProxy $TgtProxy `
                        -RestorePointsToKeep $RestorePointsToKeep `
                        -ReIpRule $ReIpRule `
                        -HighPriority `
                        -Force
}

Connect-VIServer "$(Read-Host 'Enter vCenter hostname or IP')" -Credential (Get-Credential)
Connect-VBRServer -Server "$(Read-Host 'Enter Veeam hostname or IP')" -Credential (Get-Credential)

$VMList = @(
"$(Read-Host 'Enter VM names to replicate, separated by comma (no spaces)')".Split(",") | Where-Object { $_ -ne '' }
)

foreach ($VM in $VMList) {
    $GuestIP = (Get-VM $VM).Guest.IPAddress[0]
    $GuestNet = (Get-VM $VM).Guest.Nics.NetworkName[0]
    $LastOctet = $GuestIP.Split(".")[-1]
    $NewTargetIP = "192.168.100.$LastOctet"
    $NewGateway = "192.168.100.1"

    New-ReplicaJob -JobName $VM `
                   -TargetServerIP "192.168.0.10" `
                   -VMName $VM `
                   -TargetDatastore "TargetDatastore" `
                   -SourceIP $GuestIP `
                   -SourceMask "255.255.255.0" `
                   -ReIpTargetIP $NewTargetIP `
                   -ReIpTargetMask "255.255.255.0" `
                   -ReIpGateway $NewGateway `
                   -ReIpDNS "192.168.100.10" `
                   -SourceNetwork $GuestNet `
                   -TargetNetwork "TargetNetworkName" `
                   -SourceProxy "SourceProxyName" `
                   -TargetProxy "TargetProxyName" `
                   -Repository "DefaultRepo"
}

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *