If there's a better version floating around please direct me to it and I'll delete this.
I haven't tested the sample data in the csv below, hopefully I didn't make any typos.
Code: Select all
Virtual Labs.csv
LabName,LabDescription,LabHostName,LabDataStorename,ApplianceName,AppliancePoolname,ApplianceFolderName,ApplianceProductionNetworkName,ApplianceIPAddress,ApplianceSubnetMask,ApplianceDefaultGateway,AppliancePreferredDNSServer,ApplianceAlternateDNSServer
A_Lab,Lab for SureBackup of A,vmwarehostforveeamsurebackup.example.com,datastore1,A_Lab,A Lab,A Lab,VM Network,10.1.1.2,255.255.255.0,10.1.1.1,8.8.8.8,8.8.4.4
B_Lab,Lab for SureBackup of B,vmwarehostforveeamsurebackup.example.com,datastore1,B_Lab,B Lab,B Lab,VM Network,10.1.1.3,255.255.255.0,10.1.1.1,8.8.8.8,8.8.4.4
Code: Select all
Virtual Lab Network Mappings.csv
LabName,ProductionHostName,ProductionNetworkName,ApplianceIPAddress,ApplianceIPSubnet,IsolatedNetworkName,IsolatedNetworkVlanId,IsolatedMasqueradeAddress
A_Lab,productionvmwarehost.example.com,VM Network,10.1.1.1,255.255.255.0,A_Lab VM Network,88,10.255.0.0
A_Lab,productionvmwarehost.example.com,VM Network 2,10.2.1.1,255.255.255.0,A_Lab VM Network 2,99,10.255.128.0
B_Lab,productionvmwarehost.example.com,VM Network,10.1.1.1,255.255.255.0,B_Lab VM Network,88,10.255.64.0
B_Lab,productionvmwarehost.example.com,VM Network 2,10.2.1.1,255.255.255.0,B_Lab VM Network 2,99,10.255.192.0
Code: Select all
$veeamserver="veeam.example.com"
Connect-VBRServer -Server $veeamserver
$ThisLabName="A_Lab"
$Labs=import-csv 'Virtual Labs.csv'
$LabNetworkMappings=import-csv 'Virtual Lab Network Mappings.csv'
foreach ($Lab in $Labs) {
  # comment out the below to make all the labs.
  if ($lab.LabName -ne $ThisLabName )
  {
    continue
  }
  
  $LabHost = Get-VBRServer -Type ESXi -Name $lab.Labhostname
  if (-not $Labhost)
  {
    write "Host not found"
	continue
  }
  # Get the data store information
  $LabDataStore = Find-VBRViDatastore -Name $lab.LabDataStoreName -Server $LabHost
  if (-not $LabDataStore)
  {
    write "Datastore not found"
    continue
  }
  # Get the Production Network
  $ApplianceProductionNetwork = Get-VBRViServerNetworkInfo -Server $Labhost | where NetworkName -eq $lab.ApplianceProductionNetworkName
  if (-not $ApplianceProductionNetwork )
  {
    write "Production Network not found"
    continue
  }
  $MappingRules=@()
  $MappingNetworkOptions=@()
  foreach ($LabNetworkMapping in $LabNetworkMappings)
  {
    if ($LabNetworkMapping.LabName -ne $lab.Labname)
	{
	  continue
	}
    
	$VBRProductionServer = Get-VBRServer -Type ESXi -Name $LabNetworkMapping.ProductionHostName
    if ( -not $VBRProductionServer )
	{
	  write "Production host not found"
	  continue
  	}
    
	$ProductionNetworkInfo = Get-VBRViServerNetworkInfo -Server $VBRProductionServer | where NetworkName -eq $LabNetworkMapping.ProductionNetworkName
    if ( -not $ProductionNetworkInfo )
	{
	  write "Production network not found"
	  continue
	}
    $MappingRule=New-VBRViNetworkMappingRule -Server $LabHost -ProductionNetwork $ProductionNetworkinfo -IsolatedNetworkName $LabNetworkMapping.IsolatedNetworkname -VLANID $LabNetworkMapping.IsolatednetworkVlanId
    $MappingRules+=$MappingRule
          
    $MappingNetworkOptions+=New-VBRViVirtualLabNetworkOptions -NetworkMappingRule $MappingRule `
      -IPAddress $LabNetworkMapping.ApplianceIPAddress `
   	  -SubnetMask $LabNetworkMapping.ApplianceIPSubnet `
   	  -MasqueradeIPAddress $LabNetworkMapping.IsolatedMasqueradeAddress
  }
  # Define the Appliance
  # V11 doesn't have a  "-EnableIPv4Interface" remove it if using 11
  $LabProxyAppliance = New-VBRViVirtualLabProxyAppliance -Server $Labhost `
    -Name $lab.Labname `
    -Datastore $Labdatastore `
    -Network $Applianceproductionnetwork `
    -EnableIPv4Interface `
    -IPAddress $lab.ApplianceIPAddress `
    -SubnetMask $lab.ApplianceSubnetMask `
    -DefaultGateway $lab.ApplianceDefaultGateway `
    -PreferredDNSServer $lab.AppliancePreferredDNSServer `
    -AlternateDNSServer $lab.ApplianceAlternateDNSServer
  
  # Create the Lab using the appliance
  Add-VBRViAdvancedVirtualLab -Server $Labhost `
    -Name $lab.Labname `
    -Description $lab.LabDescription `
    -DesignatedResourcePoolName $lab.AppliancePoolName `
    -DesignatedVMFolderName $lab.ApplianceFolderName `
    -ProxyAppliance $LabProxyAppliance `
    -NetworkMappingRule $MappingRules `
    -NetworkOptions $MappingNetworkOptions `
    -CacheDatastore $Labdatastore `
    -EnableRoutingBetweenvNics `
    -Force
}