-
- Enthusiast
- Posts: 61
- Liked: 4 times
- Joined: Apr 29, 2011 3:55 pm
- Full Name: Shawn Nix
- Contact:
File Level Restore Script and Getting a Folder Path
I am trying to automate restoring a file from a windows VM and copy it out. I have a working Jerry rigged script I have been using but I was hoping to rehash an old post from six plus months ago:
http://forums.veeam.com/powershell-f26/ ... 18913.html
In the post I was trying to find a way to get a path to the file that is sitting in the restore session. At the time I was on v6 and tsightler posted some code that was supposed to do it in V7. I wrote around it and eventually upgraded to V7. I am now going back into the script to see if I can update the code with the recommended solution and find I am in the same boat where I don't see the “MountedDevices” nor “FirstDrive” options. Has anyone tried this and gotten it to work under V7?
http://forums.veeam.com/powershell-f26/ ... 18913.html
In the post I was trying to find a way to get a path to the file that is sitting in the restore session. At the time I was on v6 and tsightler posted some code that was supposed to do it in V7. I wrote around it and eventually upgraded to V7. I am now going back into the script to see if I can update the code with the recommended solution and find I am in the same boat where I don't see the “MountedDevices” nor “FirstDrive” options. Has anyone tried this and gotten it to work under V7?
-
- Product Manager
- Posts: 20400
- Liked: 2298 times
- Joined: Oct 26, 2012 3:28 pm
- Full Name: Vladimir Eremin
- Contact:
Re: File Level Restore Script and Getting a Folder Path
For sure it worked at the time when the topic was created, as both Tom and I tested the script in our environment. What exact product version you're using? Also, you can query the $result variable, using Get-Member command, in order to see what particular properties are present.
Thanks.
Thanks.
-
- Veeam Software
- Posts: 1818
- Liked: 655 times
- Joined: Mar 02, 2012 1:40 pm
- Full Name: Timothy Dewin
- Contact:
Re: File Level Restore Script and Getting a Folder Path
Was curious so tested in my lab. Maybe check if you have "enough permissions" (run powershell as administrator for example). Also check that you are getting back restore point e.g, run with the start-vbrwindowsfilerestore or check if you see your backup being mounted under c:\veeamflr
Code that is working
Code that is working
Code: Select all
asnp veeampssnapin
$result = Get-VBRRestorePoint | ? { $_.name -eq "exchange" -and $_.getbackup().jobtype -eq "Backup"} | sort Creationtime -descending | select -first 1 | Start-VBRWindowsFileRestore
$mountpoint = $($result.mountsession.mounteddevices | ? { $_.Driveletter -eq "C:" }).MountPoint
ls ("{0}\{1}" -f $mountpoint,"windows")
-
- Enthusiast
- Posts: 61
- Liked: 4 times
- Joined: Apr 29, 2011 3:55 pm
- Full Name: Shawn Nix
- Contact:
Re: File Level Restore Script and Getting a Folder Path
Thanks for your help and testing, I think this was a PEBKAC problem. I was going off some of the code from the old post combined with my modified code to test and I was testing on the wrong variable. I was able to get .MountSession.MountedDevices to work once I changed the variable to what I had it labeled.
Just in case anyone is interested here is the code I came up with. We use it to get a the latest copy of our production database and copy it over to our one of our testing SQL servers to refresh our testing environment with fresh data. This script is helpful when restoring multiple files to the same destination.
I ended up changing tsightler code and making "Start-VBRWindowsFileRestore" it's own variable so I could pull info like $result.CreationTimeString from the $result into an email that would let me know for sure what restore point was used to pull the copied files from. I also think this is what tripped me up when I was testing for .MountSession.MountedDevices code.
Just in case anyone is interested here is the code I came up with. We use it to get a the latest copy of our production database and copy it over to our one of our testing SQL servers to refresh our testing environment with fresh data. This script is helpful when restoring multiple files to the same destination.
Code: Select all
# Loads Veeam Powershell Snapin
Add-PSSnapin -Name VeeamPSSnapIn
$vmName = "<Restore VM Name>"
$originalFiles = "M:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DBFile.mdf", "L:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data\DBFile_log.ldf"
$destPath = "\\TestSQLServer\mssql\DATA\"
# Loads the latest restore point for the server
$result = Get-VBRBackup | Get-VBRRestorePoint | sort CreationTime -Descending | where {$_.VMName -eq "$vmName"} | select -First 1
$restore = $result | Start-VBRWindowsFileRestore
# Copies the DB files to KTESTDB
foreach ($file in $originalFiles) {
# Find the FLR mount point for the specific drive letter
$flrmountpoint = ($restore.MountSession.MountedDevices | ? {$_.DriveLetter -eq (Split-Path $file -Qualifier)}).MountPoint
# Build the path to the file via the FLR mount point
$file = $flrmountpoint + (Split-Path $file -NoQualifier)
#Copy/Restore the files to KTESTDB
Copy-Item $file $destPath -Force
}
# Stop the FLR process
Stop-VBRWindowsFileRestore $restore
I ended up changing tsightler code and making "Start-VBRWindowsFileRestore" it's own variable so I could pull info like $result.CreationTimeString from the $result into an email that would let me know for sure what restore point was used to pull the copied files from. I also think this is what tripped me up when I was testing for .MountSession.MountedDevices code.
-
- Product Manager
- Posts: 20400
- Liked: 2298 times
- Joined: Oct 26, 2012 3:28 pm
- Full Name: Vladimir Eremin
- Contact:
Re: File Level Restore Script and Getting a Folder Path
FYI, sometimes it even happens that widely-used parameter isn't present in particular environment. Such issues are typically related to the absence of the latest Windows Manager Framework. (most commonly, on the default version of powershell on Windows 2008R2). So, it's always recommended to install, at least, Windows Framework 3.0.
Thanks.
Thanks.
-
- Novice
- Posts: 8
- Liked: 1 time
- Joined: Sep 30, 2013 7:11 am
- Full Name: Network Consulting
- Contact:
[MERGED] : Restore Windows Guest Files in Powershell
Hi,
i needed to restore some Windows Guests Files from a Veeam backup. But i needed to do it by script.
So i wrote one, searching from among lot of scripts that did apply to V6 but not to V7.
Here is what i achieved to do:
This script results to restore a folder.
It mounts the Backup from a Veeam Backup, copy the folder with replacement and then Stops the restore process to release the mount point.
i needed to restore some Windows Guests Files from a Veeam backup. But i needed to do it by script.
So i wrote one, searching from among lot of scripts that did apply to V6 but not to V7.
Here is what i achieved to do:
Code: Select all
$Job = "myBackupJob"
$VM = "myVirtualMachine"
$Files = "C:\myFolderToRestoreFromBackup\"
$Destination = "C:\WhereToPutFilesOnThisServer\"
$result=Get-VBRBackup | where {$_.jobname -eq $Job} | Get-VBRRestorePoint | where {$_.name -eq $VM} | Sort-Object creationtime -Descending | Select-Object -First 1 | Start-VBRWindowsFileRestore
$flrmountpoint = ($result.MountSession.MountedDevices | ? {$_.DriveLetter -eq (split-path -qualifier $Files)})
$file = $flrmountpoint.MountPoint + (split-path -NoQualifier $Files)
Copy $file $Destination -recurse -force
Stop-VBRWindowsFileRestore $result
It mounts the Backup from a Veeam Backup, copy the folder with replacement and then Stops the restore process to release the mount point.
-
- Lurker
- Posts: 2
- Liked: never
- Joined: Mar 14, 2024 3:39 am
- Contact:
Re: File Level Restore Script and Getting a Folder Path
I tested above script with the file path exist in the restore vm server... but getting error complaining path not exist, and I noticed there was C:\VeeamFLR showing in the path as well as vloume1, which i did not specified. Any idea?
$Files = "C:\Temp\POBT_AsBuilt BaseLine\"
$Destination = "\\Servername\C:\Scripts\"
Copy : Cannot find path 'C:\VeeamFLR\<server name>_dc5155d9\Volume1\Temp\POBT_AsBuilt BaseLine\' because it does not exist.
At C:\Scripts\Untitled2.ps1:9 char:1
+ Copy $file $Destination -recurse -force
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\VeeamFLR\AIA...Built BaseLine\:String) [Copy-Item], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.CopyItemCommand
$Files = "C:\Temp\POBT_AsBuilt BaseLine\"
$Destination = "\\Servername\C:\Scripts\"
Copy : Cannot find path 'C:\VeeamFLR\<server name>_dc5155d9\Volume1\Temp\POBT_AsBuilt BaseLine\' because it does not exist.
At C:\Scripts\Untitled2.ps1:9 char:1
+ Copy $file $Destination -recurse -force
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\VeeamFLR\AIA...Built BaseLine\:String) [Copy-Item], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.CopyItemCommand
-
- Veeam Software
- Posts: 2123
- Liked: 513 times
- Joined: Jun 28, 2016 12:12 pm
- Contact:
Re: File Level Restore Script and Getting a Folder Path
Hi @chengeel,
Run the script line by line and check the result of this command:
$flrmountpoint = ($result.MountSession.MountedDevices | ? {$_.DriveLetter -eq (split-path -qualifier $Files)})
Check the path there and make sure it aligns with the mount point for the FLR. Veeam will always mount the disks from backup for FLR to C:\VeeamFLR. My guess is that something in the $flrmountpoint variable was built wrong.
I've not used the -qualifier parameter before but it looks like it just returns the Qualifier, which is like drive letter or reference path of the Files you're trying to restore, and it's trying to find which mount point it should be under VeeamFLR. I've not done it this way before, but I suspect that's where it's breaking as it might be returning a qualifier that isn't mapped in MountSession.MountedDevices, but print the outputs one by one and see what's incorrect.
Run the script line by line and check the result of this command:
$flrmountpoint = ($result.MountSession.MountedDevices | ? {$_.DriveLetter -eq (split-path -qualifier $Files)})
Check the path there and make sure it aligns with the mount point for the FLR. Veeam will always mount the disks from backup for FLR to C:\VeeamFLR. My guess is that something in the $flrmountpoint variable was built wrong.
I've not used the -qualifier parameter before but it looks like it just returns the Qualifier, which is like drive letter or reference path of the Files you're trying to restore, and it's trying to find which mount point it should be under VeeamFLR. I've not done it this way before, but I suspect that's where it's breaking as it might be returning a qualifier that isn't mapped in MountSession.MountedDevices, but print the outputs one by one and see what's incorrect.
David Domask | Product Management: Principal Analyst
Who is online
Users browsing this forum: Semrush [Bot] and 15 guests