############################# # # Backup Intranet # ############################# # Setting path for vboxmanage $Env:Path = "c:\Program Files\Oracle\VirtualBox\" # creating backup paths $remoteBackupPath = "\\freenas\programas\VM_Backup" $backupDriveLetterMount = "L" $backupFilename = $backupDriveLetterMount + ":\" + [string](Get-Date).Year + [string](Get-Date).Month + [string](Get-Date).Day + "_Intranet_Backup.ova" $vmName = "2018_intranet" $logFile = "c:\logs\vm_backup.log" "################ Starting Intranet Backup at $Time ######################" | out-file $logFile -append # mounting backup path New-PSDrive -Name L -Root \\freenas\programas\VM_Backup\ -Persist -PSProvider FileSystem Try { New-PSDrive -Name $backupDriveLetterMount -Root $remoteBackupPath -Persist -PSProvider FileSystem $Time=Get-Date "[Success] Mounting Backup Path at $Time" | out-file $logFile -append } Catch { $Time=Get-Date "[Error] Mounting Backup Path at $Time" | out-file $logFile -append $_.Exception.Message | out-file $logFile -append $_.Exception.ItemName | out-file $logFile -append Break } # Stopping VM Try { $vmanagerStopVM = "VBoxManage.exe" $vmanagerStopVM += @(" controlvm ") $vmanagerStopVM += @($vmName) $vmanagerStopVM += @(" poweroff") Write-host "$vmanagerStopVM" Invoke-Expression "$vmanagerStopVM" $Time=Get-Date "[Success] Stop VM at $Time" | out-file $logFile -append } Catch { $Time=Get-Date "[Error] to Stop VM at $Time" | out-file $logFile -append $_.Exception.Message | out-file $logFile -append $_.Exception.ItemName | out-file $logFile -append Break } # Backing Up VM Try { $vmanagerBackup = "VBoxManage.exe" $vmanagerBackup += @(" export ") $vmanagerBackup += @($vmName) $vmanagerBackup += @(" --ovf10") $vmanagerBackup += @(" -o ") $vmanagerBackup += @([string]$backupFilename) Write-host "$vmanagerBackup" Invoke-Expression "$vmanagerBackup" $Time=Get-Date "[Success] Backing Up VM at $Time" | out-file $logFile -append } Catch { $Time=Get-Date "[Error] Backing Up VM at $Time" | out-file $logFile -append $_.Exception.Message | out-file $logFile -append $_.Exception.ItemName | out-file $logFile -append Break } # Start VM after Backup Try { $vmanagerStart = "VBoxManage.exe" $vmanagerStart += @(" startvm ") $vmanagerStart += @($vmName) $vmanagerStart += @(" -type headless") Write-host "$vmanagerStart" Invoke-Expression "$vmanagerStart" $Time=Get-Date "[Success] Starting VM at $Time" | out-file $logFile -append } Catch { $Time=Get-Date "[Error] Starting VM at $Time" | out-file $logFile -append $_.Exception.Message | out-file $logFile -append $_.Exception.ItemName | out-file $logFile -append Break } # remove old Backups $backupFileCount = ( Get-ChildItem -Filter *.ova $remoteBackupPath | Measure-Object ).Count $backupPath = $backupDriveLetterMount + ":\" DO { $Item = Get-ChildItem -Path $remoteBackupPath -Filter *.ova | Sort CreationTime | select -First 1 Write-Host "Oldest file/folder in $FolderName is $($Item.FullName)" Try { Remove-Item -Path $($Item.FullName) -Force $Time=Get-Date "[Success] Deleting old backup at $Time" | out-file $logFile -append } Catch { $Time=Get-Date "[Error] Deleting old backup at $Time" | out-file $logFile -append $_.Exception.Message | out-file $logFile -append $_.Exception.ItemName | out-file $logFile -append Break } $backupFileCount = ( Get-ChildItem -Filter *.ova $remoteBackupPath | Measure-Object ).Count } While ($backupFileCount -gt 3) # removing Network drive Try { Remove-PSDrive -Name $backupDriveLetterMount } Catch { $Time=Get-Date "[Error] Umounting Network drive at $Time" | out-file $logFile -append $_.Exception.Message | out-file $logFile -append $_.Exception.ItemName | out-file $logFile -append Break }