Skip to content

Instantly share code, notes, and snippets.

@mritsurgeon
Created August 13, 2020 08:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mritsurgeon/3ecd6d1bfbaeae535776f6257d5ea40b to your computer and use it in GitHub Desktop.
Save mritsurgeon/3ecd6d1bfbaeae535776f6257d5ea40b to your computer and use it in GitHub Desktop.
Script to replicate to azure using Veeam VBR & Veeam VBA
# Auth Get Token
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Authorization", "Bearer")
$headers.Add("Content-Type", "application/x-www-form-urlencoded")
add-type @"
using System.Net;
using System.Security.Cryptography.X509Certificates;
public class TrustAllCertsPolicy : ICertificatePolicy {
public bool CheckValidationResult(
ServicePoint srvPoint, X509Certificate certificate,
WebRequest request, int certificateProblem) {
return true;
}
}
"@
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
$body = "grant_type=password&username=(VBA USERNAME)&password=(VBA PASSWORD)"
$response = Invoke-RestMethod 'https://(VBA IP OR HOSTNAME)/api/oauth2/token' -Method 'POST' -Headers $headers -Body $body
$response | ConvertTo-Json
$Access_token = $response.access_token
#Start Backup Policiy
$headerspol = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headerspol.Add("Authorization", "Bearer $Access_token " )
$responsepol = Invoke-RestMethod 'https://(VBA IP OR HOSTNAME)/api/v1/policies/(YOUR VBA POLICY ID)/start' -Method 'POST' -Headers $headerspol -Body $bodypol
$responsepol | ConvertTo-Json
$Jobsession = $responsepol._links.self.href
#Gets Session status
$headersSes = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headersSes.Add("Authorization", "Bearer $Access_token " )
$responseSes = Invoke-RestMethod -Uri $Jobsession -Method 'GET' -Headers $headersSes
$responseSes | ConvertTo-Json
$status = $responseSes.status
Write-Host " Policy running , pause for 2 min "
$colors = @("Green","Cyan","Red","Magenta","Yellow","White")
for (($x=''),($fgcolor = $colors | Get-Random) ;$x.length -le 30;($x=$x+'x'),($fgcolor = $colors | Get-Random)){
Write-Host $x -ForegroundColor $fgcolor
}
Start-Sleep -s 120
#Recheck session
$headersSes = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headersSes.Add("Authorization", "Bearer $Access_token " )
$responseSes = Invoke-RestMethod -Uri $Jobsession -Method 'GET' -Headers $headersSes
$responseSes | ConvertTo-Json
$status = $responseSes.status
if ($status -eq "Running") {
write-host "Job Still Busy"
$colors = @("Green","Cyan","Red","Magenta","Yellow","White")
for (($x=''),($fgcolor = $colors | Get-Random) ;$x.length -le 30;($x=$x+'x'),($fgcolor = $colors | Get-Random)){
Write-Host $x -ForegroundColor $fgcolor
}
Write-Host "Waiting for another 2min "
Start-Sleep -s 120
}
Else {write-host "job completed"}
Write-Host " New Replica VM Processing "
#Set azure Variables
$User = "yourname@yourcompany.com"
$PWord = ConvertTo-SecureString -String "*******" -AsPlainText -Force
$azCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, $PWord
$accountCloud = Get-VBRAzureAccount -Type ResourceManager -Name "yourname@yourcompany.com"
$subscription = Get-VBRAzureSubscription -Account $accountCloud -Name "your subscription"
$storageaccount = Get-VBRAzureStorageAccount -Subscription $subscription -Name "africasouth"
$location = Get-VBRAzureLocation -Subscription $subscription -Name "southafricanorth"
$vmsizeSMALL = Get-VBRAzureVMSize -Subscription $subscription -Location $location -Name Standard_A2_v2
#$vmsizeMEDIUM = Get-VBRAzureVMSize -Subscription $subscription -Location $location -Name Standard_A4_v2
#$vmsizeLARGE = Get-VBRAzureVMSize -Subscription $subscription -Location $location -Name Standard_A8_v2
$network = Get-VBRAzureVirtualNetwork -Subscription $subscription -Name "Africa-vnet"
$subnet = Get-VBRAzureVirtualNetworkSubnet -Network $network -Name "default"
$resourcegroup = Get-VBRAzureResourceGroup -Subscription $subscription -Name "Africa"
$nsg = Get-VBRAzureNetworkSecurityGroup -Subscription $subscription -Name "vbrafrica*"
#Connect to azure
Connect-AzAccount -Credential $azCredential
$VMrep = Get-AzVM -ResourceGroupName $resourcegroup -Name "win-replica"
#Stop and remove Azure objects
Stop-AzVM -ResourceGroupName $resourcegroup -Name $VMrep.Name -Force
Remove-AzVM -ResourceGroupName $resourcegroup -Name $VMrep.Name -Force
$NetInt = Get-AzNetworkInterface -ResourceGroupName $resourcegroup -Name "win-replica*"
Remove-AzNetworkInterface -ResourceGroupName $resourcegroup -Name $Netint.Name -Force
$repdisk = Get-AzDisk -ResourceGroupName $resourcegroup -Name "win-replica*"
$PIP = Get-AzPublicIpAddress -ResourceGroupName $resourcegroup -Name "win-replica*"
#Remove-AzPublicIpAddress -ResourceGroupName $resourcegroup -Name $pip.Name -Force
Remove-AzDisk -ResourceGroupName $resourcegroup -Name $repdisk.Name -force
#connect to veeam
Add-PSSnapin VeeamPSSnapin
Connect-VBRServer -Server "YOUR VEEAM SERVER HOSTNAME"
#begin new restore
$restorepoint = Get-VBRBackup -Name "vmware" | Get-VBRRestorePoint -Name "win2azure" | where {$_.FindStorage().ExternalContentMode -eq 'External'} | Select -last 1
Start-VBRVMRestoreToAzure -RestorePoint $restorepoint -Subscription $subscription -StorageAccount $storageaccount -StorageType Managed -VmSize $vmsizeSMALL -VirtualNetwork $network -VirtualSubnet $subnet -ResourceGroup $resourcegroup -NetworkSecurityGroup $nsg -VmName "win-replica" -Reason "TESTING MY NEW SCRIPT" -ShutdownVM
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment