{"id":642,"date":"2016-12-16T15:55:47","date_gmt":"2016-12-16T14:55:47","guid":{"rendered":"http:\/\/vblog.hochsticher.de\/?p=642"},"modified":"2016-12-16T17:10:23","modified_gmt":"2016-12-16T16:10:23","slug":"restore-vms-via-powershell","status":"publish","type":"post","link":"https:\/\/vblog.hochsticher.de\/?p=642","title":{"rendered":"Restore VMs via PowerShell"},"content":{"rendered":"<p>Today I had the challenge to restore once a week multiple VMs that are used for VPN Client Testing.<\/p>\n<p>I would like to share my script with you \ud83d\ude09<\/p>\n<p><!--more--><\/p>\n<pre class=\"lang:ps decode:true \"># Restore VMs for VPN Client Test\r\n\r\n#Load PS Modules\r\nAdd-PSSnapin VMware.VimAutomation.Core\r\nAdd-PSSnapin VeeamPSSnapin\r\n \r\n#Timer start\r\n$StartTime = Get-Date\r\n \r\n#Define Logging Vars\r\n$verboseLogFile = 'c:\\temp\\myReports\\older-reports\\Restore-VM-Log_' + (Get-Date -Format yyyy-MM-dd) + '.txt'\r\n$LastverboseLogFile = 'c:\\temp\\myReports\\Restore-VM_latest.txt'\r\nFunction My-Logger {\r\n    param(\r\n    [Parameter(Mandatory=$true)]\r\n    [String]$message\r\n    )\r\n \r\n    $timeStamp = Get-Date -Format \"yyyy-MM-dd_HH:mm:ss\"\r\n \r\n    Write-Host -NoNewline -ForegroundColor White \"[$timestamp]\"\r\n    Write-Host -ForegroundColor Green \" $message\"\r\n    $logMessage = \"[$timeStamp] $message\"\r\n    $logMessage | Out-File -Append -LiteralPath $verboseLogFile\r\n}\r\n \r\n#Start Processing ...\r\nMy-Logger \"Start VPN Client VMs restore\"\r\n \r\n \r\n##Connect Veeam &amp; vCenter Server\r\nMy-Logger \"Connect vCenter Server\"\r\n#Connect vCenter Server\r\nConnect-VIServer -server my-vCenterServer.mydomain.local\r\nMy-Logger \"Connect Veeam Server\"\r\n#Connect Veeam Server\r\nConnect-VBRServer -Server my-VeeamServer.mydomain.local\r\n \r\n## Define Vars\r\n$BackupName = \"MyBackup-01\" #Enter Backupname here\r\nMy-Logger \"Backup Name: $BackupName\"\r\n$vmfolder = \"MyVMFolder\" #VMware Folder\r\nMy-Logger \"VMware Folder: $vmfolder\"\r\n## Fix Vars\r\n$vmarray = '@' #Create Array\r\n$vmarray = Get-VBRBackup -Name ($BackupName) | Get-VBRRestorePoint -Name * | select VmName #select VMs\r\nMy-Logger \"VMs to restore ...\"\r\n$vmarray *&gt;&gt; $verboseLogFile\r\n \r\n \r\n# Loop through all of the array Items to perform Restore\r\nforeach ($vm in $vmarray) {\r\n   # Get VMName from array\r\n   $Name = $vm.VmName\r\n   My-Logger \"Restoreing VM: $Name\"\r\n \r\n   #Get a list of available restore points, select the last restore point and save it into a variable\r\n   $RestorePoint = Get-VBRBackup -Name ($BackupName) | Get-VBRRestorePoint -Name ($Name) | select -Last (1)\r\n   \r\n   #Perform Restore of the VM:\r\n   Start-VBRRestoreVM -RestorePoint ($RestorePoint) -Reason \"Scheduled VPN Client VMs restore\" -ToOriginalLocation -StoragePolicyAction Default\r\n}\r\n \r\nMy-Logger \"Restore Complete!\"\r\nMy-Logger \"Poweron VMs ...\"\r\n#Power On VMs\r\n$poweronvm = Get-Folder $vmfolder | Get-VM | Where-Object {$_.PowerState -eq 'PoweredOff'}\r\n$poweronvm *&gt;&gt; $verboseLogFile\r\nStart-VM -VM $poweronvm -Confirm:$false -RunAsync\r\n#Log powererd on VMs\r\nMy-Logger \"Show Poweredon VMs ...\"\r\nGet-Folder $vmfolder | Get-VM *&gt;&gt; $verboseLogFile\r\n \r\n#Calculate Time\r\n$EndTime = Get-Date\r\n$duration = [math]::Round((New-TimeSpan -Start $StartTime -End $EndTime).TotalMinutes,2)\r\n \r\nMy-Logger \"StartTime: $StartTime\"\r\nMy-Logger \"  EndTime: $EndTime\"\r\nMy-Logger \" Duration: $duration Minutes\"\r\nMy-Logger \"Complete!\"\r\n \r\n#Archive\r\nCopy-Item $verboseLogFile $LastverboseLogFile\r\n \r\n#Disconnect\r\nDisconnect-VIServer * -Confirm:$false\r\nDisconnect-VBRServer<\/pre>\n<p>The log would look like this:<\/p>\n<pre class=\"lang:default highlight:0 decode:true \">[2016-12-16_14:16:19] Start VPN Client VMs restore\r\n[2016-12-16_14:16:19] Connect vCenter Server\r\n[2016-12-16_14:16:19] Connect Veeam Server\r\n[2016-12-16_14:16:19] Backup Name: MyBackup-01\r\n[2016-12-16_14:16:19] VMware Folder: MyFolder\r\n[2016-12-16_14:16:19] VMs to restore ...\r\n\r\nVmName                                                                                                                                                                                                                                                                               \r\n------                                                                                                                                                                                                                                                                               \r\nMy-TestVM01\r\nMy-TestVM02                                                                                                                                                                                                                                                              \r\nMy-TestVM03                                                                                                                                                                                                                                                              \r\n[2016-12-16_14:16:19] Restoreing VM: My-TestVM01\r\n[2016-12-16_14:22:15] Restoreing VM: My-TestVM02\r\n[2016-12-16_14:33:36] Restoreing VM: My-TestVM03\r\n[2016-12-16_14:42:54] Restore Complete!\r\n[2016-12-16_14:42:54] Poweron VMs ...\r\n\r\nName                 PowerState Num CPUs MemoryGB       \r\n----                 ---------- -------- --------       \r\nMy-TestVM01\t\t\t PoweredOff 2        8,000          \r\nMy-TestVM02\t\t\t PoweredOff 2        8,000          \r\nMy-TestVM03\t\t\t PoweredOff 2        8,000          \r\n[2016-12-16_14:42:57] Show Poweredon VMs ...\r\n\r\nName                 PowerState Num CPUs MemoryGB       \r\n----                 ---------- -------- --------       \r\nMy-TestVM01\t\t\t PoweredOn  2        8,000          \r\nMy-TestVM02\t\t\t PoweredOn  2        8,000          \r\nMy-TestVM03\t\t\t PoweredOn  2        8,000          \r\n\r\n\r\n[2016-12-16_14:42:59] StartTime: 12\/16\/2016 14:16:19\r\n[2016-12-16_14:42:59]   EndTime: 12\/16\/2016 14:42:59\r\n[2016-12-16_14:42:59]  Duration: 26.67 minutes\r\n[2016-12-16_14:42:59] Complete!\r\n<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Today I had the challenge to restore once a week multiple VMs that are used for VPN Client Testing. I would like to share my script with you \ud83d\ude09<\/p>\n","protected":false},"author":1,"featured_media":645,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[4,6],"tags":[],"class_list":["post-642","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-powercli","category-veeam"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vblog.hochsticher.de\/index.php?rest_route=\/wp\/v2\/posts\/642","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vblog.hochsticher.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vblog.hochsticher.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vblog.hochsticher.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vblog.hochsticher.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=642"}],"version-history":[{"count":3,"href":"https:\/\/vblog.hochsticher.de\/index.php?rest_route=\/wp\/v2\/posts\/642\/revisions"}],"predecessor-version":[{"id":646,"href":"https:\/\/vblog.hochsticher.de\/index.php?rest_route=\/wp\/v2\/posts\/642\/revisions\/646"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vblog.hochsticher.de\/index.php?rest_route=\/wp\/v2\/media\/645"}],"wp:attachment":[{"href":"https:\/\/vblog.hochsticher.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=642"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vblog.hochsticher.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=642"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vblog.hochsticher.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=642"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}