Public/Start-AnyStackVmBackup.ps1
|
function Start-AnyStackVmBackup { <# .SYNOPSIS Starts a VM backup. .DESCRIPTION Creates a snapshot for backup. .PARAMETER Server vCenter Server hostname or VIServer object. Uses active connection if omitted. .PARAMETER VmName Name of the virtual machine. .PARAMETER SnapshotName Name of the snapshot. .EXAMPLE PS> Start-AnyStackVmBackup -VmName 'DB-01' .OUTPUTS PSCustomObject .NOTES Author: The AnyStack Architect Requires: VCF.PowerCLI 9.0+, vSphere 8.0 U3+ #> [CmdletBinding(SupportsShouldProcess=$true)] [OutputType([PSCustomObject])] param( [Parameter(Mandatory=$false, ValueFromPipeline=$true)] [ValidateNotNull()] $Server, [Parameter(Mandatory=$true)] [string]$VmName, [Parameter(Mandatory=$false)] [string]$SnapshotName = "AnyStack-Backup-$(Get-Date -f yyyyMMdd-HHmm)" ) begin { $vi = Get-AnyStackConnection -Server $Server $ErrorActionPreference = 'Stop' } process { try { if ($PSCmdlet.ShouldProcess($VmName, "Create backup snapshot $SnapshotName")) { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Creating backup snapshot on $($vi.Name)" $vm = Invoke-AnyStackWithRetry -ScriptBlock { Get-View -Server $vi -ViewType VirtualMachine -Filter @{Name=$VmName} } $task = Invoke-AnyStackWithRetry -ScriptBlock { $vm.CreateSnapshot_Task($SnapshotName, 'AnyStack automated backup', $false, $false) } [PSCustomObject]@{ PSTypeName = 'AnyStack.VmBackup' Timestamp = (Get-Date) Server = $vi.Name VmName = $VmName SnapshotName = $SnapshotName BackupJobId = $task.Value Status = 'Created' } } } catch { $PSCmdlet.ThrowTerminatingError([System.Management.Automation.ErrorRecord]::new(function Start-AnyStackVmBackup { <# .SYNOPSIS Starts a VM backup. .DESCRIPTION Creates a snapshot for backup. .PARAMETER Server vCenter Server hostname or VIServer object. Uses active connection if omitted. .PARAMETER VmName Name of the virtual machine. .PARAMETER SnapshotName Name of the snapshot. .EXAMPLE PS> Start-AnyStackVmBackup -VmName 'DB-01' .OUTPUTS PSCustomObject .NOTES Author: The AnyStack Architect Requires: VCF.PowerCLI 9.0+, vSphere 8.0 U3+ #> [CmdletBinding(SupportsShouldProcess=$true)] [OutputType([PSCustomObject])] param( [Parameter(Mandatory=$false, ValueFromPipeline=$true)] [ValidateNotNull()] $Server, [Parameter(Mandatory=$true)] [string]$VmName, [Parameter(Mandatory=$false)] [string]$SnapshotName = "AnyStack-Backup-$(Get-Date -f yyyyMMdd-HHmm)" ) begin { $vi = Get-AnyStackConnection -Server $Server $ErrorActionPreference = 'Stop' } process { try { if ($PSCmdlet.ShouldProcess($VmName, "Create backup snapshot $SnapshotName")) { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Creating backup snapshot on $($vi.Name)" $vm = Invoke-AnyStackWithRetry -ScriptBlock { Get-View -Server $vi -ViewType VirtualMachine -Filter @{Name=$VmName} } $task = Invoke-AnyStackWithRetry -ScriptBlock { $vm.CreateSnapshot_Task($SnapshotName, 'AnyStack automated backup', $false, $false) } [PSCustomObject]@{ PSTypeName = 'AnyStack.VmBackup' Timestamp = (Get-Date) Server = $vi.Name VmName = $VmName SnapshotName = $SnapshotName BackupJobId = $task.Value Status = 'Created' } } } catch { $PSCmdlet.ThrowTerminatingError([System.Management.Automation.ErrorRecord]::new($_, 'UnexpectedError', [System.Management.Automation.ErrorCategory]::NotSpecified, $null)) } } } .Exception, 'UnexpectedError', [System.Management.Automation.ErrorCategory]::NotSpecified, $null)) } } } |