Мне довелось создать реплику виртуальных машин средствами 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"
}
Добавить комментарий