# Dans Veeam Replica safe test - Version 1.9 # http://www.a2-alpha.co.uk # Version 1.9 # Set Errors to Silently Continue $erroractionpreference = "silentlycontinue" # Add VI-toolkit if not loaded $snapins = get-pssnapin | select Name foreach($snapin in $snapins) { if($snapin.Name -eq "VMware.VimAutomation.Core") { $result = "Yes" } else { $result = "No" } } if($result -eq "No") { Add-PSsnapin VMware.VimAutomation.Core Initialize-VIToolkitEnvironment.ps1 } #ENTER VC AND CREDENTIALS clear " " " " " ** Replica Test Utility **" " ** www.a2-alpha.co.uk **" " ** Version 1.9 **" " " " " $vc = read-host "Enter vCenter or ESX name or IP Address" " " $us = read-host "Enter Username" $pw = read-host "Enter Password" -assecurestring:$true $cred = New-Object System.Management.Automation.PSCredential -ArgumentList $us,$pw #CLEAR ERROR LOGS $Error.clear() #LOG INTO VCENTER Connect-VIServer -Server $vc -Credential $cred -erroraction SilentlyContinue $E = $Error $E = $E | out-string if($E.Contains("connect")) { clear " " " " "There was an error Connecting to the VI Server or Host, Please check Name and Resolution." " " " " } Else { CLEAR #LIST AVAILABLE VIRTUAL MACHINES $vms = get-vm $VMsArray = @() $VMs | ForEach-Object { $VMsArray += $_.Name } Write-Output "" Write-Output "Here are the virtual machines to choose from:" Write-Output "" For ($i = 0; $i -lt $VMsArray.Length; $i++ ) { Write-Output "$i $($VMsArray[$i])"} Write-Output "" #AQUIRE THE VIRTUAL MACHINE FROM NUMBER INPUT " " " " #CHECK INPUTED VIRTUAL MACHINE IS A VALID MACHINE While($selectedNum -ge $VMsArray.Length -or $selectedNum -lt "0") { [int]$selectedNum = read-host "Enter the number of the Virtual Machine to Test Replica of" } $SelectedVM = $VMsArray[$SelectedNum] IF((get-vm $selectedVM).PowerState -eq "PoweredOn") { " " "This Virtual Machine is powered on, please select a VM which is powered off." " " } ELSE { $Error.clear() get-vm $selectedVM -ErrorAction silentlycontinue $E = $Error $E = $E | out-string if($E.Contains("get-vm")) { clear " " " " "I don't think this is a valid Virtual Machine, please check name and rerun." " " " " } Else { #TAKE A SNAPSHOT OF THE VIRTUAL MACHINE clear $Error.clear() new-snapshot -Name "Pre Replica Power On Test" -VM $selectedVM -confirm:$false -ErrorAction silentlycontinue $E = $Error $E = $E | out-string if($E.Contains("snapshot")) { clear " " " " "There was a problem creating the snapshot, please check the ability to create a snapshot and rerun." " " " " } Else { #MAKE DECISION ABOUT NETWORK CARDS CLEAR " " " " " What would you like to do about the network adapters in the machine," " By default all network cards will be disconnected prior to powering up." " " $netdecision = read-host "Disconnect or Connect to different Network (D / C) " " " " " if($netdecision -eq "C") { $vpge = get-virtualportgroup -VM $selectedVM clear "You have chosen to connect to a network on boot" " " "This VM is currently connected to $vpge" " " $vmhost = get-vmhost -VM (Get-VM -Name $selectedVM) | select-object Name $vmhostn = $vmhost.name $vpgo = get-virtualportgroup -VMhost $vmhostn | select Name #$vpgo = $vpgo | out-string $vpgoarray = @() $vpgo | foreach-object { $vpgoarray += $_.Name } " " "Here are the new Port groups to connect to" "NOTE: You cannot connect to the Service Console or VMkernel Ports" " " For ($i = 0; $i -lt $vpgoarray.Length; $i++) {write-output "$i $($vpgoarray[$i])"} " " $vpgoarraylength = $vpgoarray.Length while ($vpgs -lt 0 -or $vpgs -ge $vpgoarraylength) { [int]$vpgs = read-host "Enter the Number of the Port group to connect to Default[0]" } $netadapters = get-networkadapter -VM $selectedVM #CHECK INPUTED NUMBER IS VALID $selectedPortGroup = $vpgo["$vpgs"] #output test $selectedPortGroupName = $selectedPortGroup.Name "You have selected to Connect to $selectedPortGroupName on PowerOn" $netadapters = get-networkadapter -VM $selectedVM ForEach($netadapter in $netadapters) { set-networkadapter -NetworkAdapter $netadapter -NetworkName $selectedPortGroupName -StartConnected:$TRUE -confirm:$false } } Else { "The Virtual Machine $selectedVM will start with Disconnected Network Adapters" #IDENTIFY AND DISCONNECT THE NETWORK ADAPTERS $netadapters = get-networkadapter -VM $selectedVM ForEach($netadapter in $netadapters) { set-networkadapter -NetworkAdapter $netadapter -StartConnected:$FALSE -confirm:$false } } $E = $Error $E = $E | out-string if($E.Contains("network")) { clear " " " " "An error has occured setting the network, make sure that the name is correct and rerun" " " " " } Else { #POWER ON THE VIRTUAL MACHINE start-vm -VM $selectedVM clear #WAIT FOR BUTTON PRESS WHEN TESTING IS COMPLETE [void][reflection.assembly]::LoadWithPartialName("System.Windows.Forms") $form = new-object Windows.Forms.Form $form.Size = New-Object System.Drawing.Size(200,100) $form.Text = "Dans Replica Test for Veeam Replication" $button = new-object Windows.Forms.Button $button.text="Click Here when testing is Complete" $button.Dock="fill" $button.add_click({$form.close()}) $form.controls.add($button) $form.Add_Shown({$form.Activate()}) $form.ShowDialog() clear #SHUTDOWN THE VIRTUAL MACHINE Stop-VM -VM $selectedVM -Confirm:$false #REVERT AND REMOVE THE SNAPSHOT $snapshot = Get-Snapshot -VM $selectedVM -Name "Pre Replica Power On Test" set-vm -VM $selectedVM -Snapshot $snapshot -confirm:$false remove-snapshot -snapshot $snapshot -confirm:$false #ASSIGN NOTES TO THE VIRTUAL MACHINE TO SHOW REPLICA TEST IS COMPLETE $date = get-date set-vm -VM $selectedVM -description "Failover test occured on $date" -confirm:$false #ENDING COMMENTS disconnect-viserver -force -confirm:$false clear " " clear " " "Thankyou for using this Script to test your Veeam Replica" " " "Dan" " " } } } } } #END