Update Backup-VCSA.psm1
Updated Code based on Comments
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
Function Backup-VCSAToFile {
|
Function Backup-VCSAToFile {
|
||||||
<#
|
<#
|
||||||
.NOTES
|
.NOTES
|
||||||
===========================================================================
|
===========================================================================
|
||||||
@@ -7,15 +7,16 @@
|
|||||||
Organization: VMware
|
Organization: VMware
|
||||||
Blog: www.vtagion.com
|
Blog: www.vtagion.com
|
||||||
Twitter: @vBrianGraf
|
Twitter: @vBrianGraf
|
||||||
|
Modifed by: Michael Dunsdon
|
||||||
|
Twitter: @MJDunsdon
|
||||||
|
Date: September 21, 2020
|
||||||
===========================================================================
|
===========================================================================
|
||||||
|
|
||||||
.SYNOPSIS
|
.SYNOPSIS
|
||||||
This function will allow you to create a full or partial backup of your
|
This function will allow you to create a full or partial backup of your
|
||||||
VCSA appliance. (vSphere 6.5 and higher)
|
VCSA appliance. (vSphere 6.5 and higher)
|
||||||
|
|
||||||
.DESCRIPTION
|
.DESCRIPTION
|
||||||
Use this function to backup your VCSA to a remote location
|
Use this function to backup your VCSA to a remote location
|
||||||
|
|
||||||
.EXAMPLE
|
.EXAMPLE
|
||||||
[VMware.VimAutomation.Cis.Core.Types.V1.Secret]$BackupPassword = "VMw@re123"
|
[VMware.VimAutomation.Cis.Core.Types.V1.Secret]$BackupPassword = "VMw@re123"
|
||||||
$Comment = "First API Backup"
|
$Comment = "First API Backup"
|
||||||
@@ -24,11 +25,10 @@
|
|||||||
$LocationUser = "admin"
|
$LocationUser = "admin"
|
||||||
[VMware.VimAutomation.Cis.Core.Types.V1.Secret]$locationPassword = "VMw@re123"
|
[VMware.VimAutomation.Cis.Core.Types.V1.Secret]$locationPassword = "VMw@re123"
|
||||||
PS C:\> Backup-VCSAToFile -BackupPassword $BackupPassword -LocationType $LocationType -Location $location -LocationUser $LocationUser -LocationPassword $locationPassword -Comment "This is a demo" -ShowProgress -FullBackup
|
PS C:\> Backup-VCSAToFile -BackupPassword $BackupPassword -LocationType $LocationType -Location $location -LocationUser $LocationUser -LocationPassword $locationPassword -Comment "This is a demo" -ShowProgress -FullBackup
|
||||||
|
|
||||||
|
|
||||||
.NOTES
|
.NOTES
|
||||||
Credit goes to @AlanRenouf for sharing the base of this function with me which I was able to take and make more robust as well as add in progress indicators
|
Credit goes to @AlanRenouf for sharing the base of this function with me which I was able to take and make more robust as well as add in progress indicators
|
||||||
You must be connected to the CisService for this to work, if you are not connected, the function will prompt you for your credentials
|
You must be connected to the CisService for this to work, if you are not connected, the function will prompt you for your credentials
|
||||||
|
A CisService can also be supplied as a parameter.
|
||||||
If a -LocationType is not chosen, the function will default to FTP.
|
If a -LocationType is not chosen, the function will default to FTP.
|
||||||
The destination location for a backup must be an empty folder (easiest to use the get-date cmdlet in the location)
|
The destination location for a backup must be an empty folder (easiest to use the get-date cmdlet in the location)
|
||||||
-ShowProgress will give you a progressbar as well as updates in the console
|
-ShowProgress will give you a progressbar as well as updates in the console
|
||||||
@@ -46,21 +46,30 @@
|
|||||||
[VMware.VimAutomation.Cis.Core.Types.V1.Secret]$LocationPassword,
|
[VMware.VimAutomation.Cis.Core.Types.V1.Secret]$LocationPassword,
|
||||||
[VMware.VimAutomation.Cis.Core.Types.V1.Secret]$BackupPassword,
|
[VMware.VimAutomation.Cis.Core.Types.V1.Secret]$BackupPassword,
|
||||||
$Comment = "Backup job",
|
$Comment = "Backup job",
|
||||||
|
[Parameter(Mandatory=$false)]$CisServer = $global:DefaultCisServers,
|
||||||
[switch]$ShowProgress
|
[switch]$ShowProgress
|
||||||
)
|
)
|
||||||
Begin {
|
Begin {
|
||||||
if (!($global:DefaultCisServers)){
|
if ($CisServer.IsConnected) {
|
||||||
Add-Type -Assembly System.Windows.Forms
|
Write-Verbose "Connected to $($CisServer.Name)"
|
||||||
[System.Windows.Forms.MessageBox]::Show("It appears you have not created a connection to the CisServer. You will now be prompted to enter your vCenter credentials to continue" , "Connect to CisServer") | out-null
|
$connection = $CisServer
|
||||||
|
} elseif ($CisServer.gettype().name -eq "String") {
|
||||||
|
Write-Host "Prompting for CIS Server credentials. Connecting to $($CisServer)."
|
||||||
|
$Connection = Connect-CisServer $CisServer
|
||||||
|
} elseif ($global:DefaultCisServers) {
|
||||||
|
$connection = $global:DefaultCisServers
|
||||||
|
} elseif ($global:DefaultVIServer) {
|
||||||
|
Write-Host "Prompting for CIS Server credentials. Connecting to $($global:DefaultVIServer.name)."
|
||||||
$Connection = Connect-CisServer $global:DefaultVIServer
|
$Connection = Connect-CisServer $global:DefaultVIServer
|
||||||
} else {
|
}
|
||||||
$Connection = $global:DefaultCisServers
|
if (!$Connection) {
|
||||||
|
Write-Error "It appears you have not created a connection to the CisServer. Please Connect First and try command again. (Connect-CisServer)"
|
||||||
}
|
}
|
||||||
if ($FullBackup) {$parts = @("common","seat")}
|
if ($FullBackup) {$parts = @("common","seat")}
|
||||||
if ($CommonBackup) {$parts = @("common")}
|
if ($CommonBackup) {$parts = @("common")}
|
||||||
}
|
}
|
||||||
Process{
|
Process{
|
||||||
$BackupAPI = Get-CisService com.vmware.appliance.recovery.backup.job
|
$BackupAPI = Get-CisService 'com.vmware.appliance.recovery.backup.job'
|
||||||
$CreateSpec = $BackupAPI.Help.create.piece.CreateExample()
|
$CreateSpec = $BackupAPI.Help.create.piece.CreateExample()
|
||||||
$CreateSpec.parts = $parts
|
$CreateSpec.parts = $parts
|
||||||
$CreateSpec.backup_password = $BackupPassword
|
$CreateSpec.backup_password = $BackupPassword
|
||||||
@@ -71,25 +80,20 @@
|
|||||||
$CreateSpec.comment = $Comment
|
$CreateSpec.comment = $Comment
|
||||||
try {
|
try {
|
||||||
$BackupJob = $BackupAPI.create($CreateSpec)
|
$BackupJob = $BackupAPI.create($CreateSpec)
|
||||||
}
|
} catch {
|
||||||
catch {
|
|
||||||
throw $_.Exception.Message
|
throw $_.Exception.Message
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
If ($ShowProgress){
|
If ($ShowProgress){
|
||||||
do {
|
do {
|
||||||
$BackupAPI.get("$($BackupJob.ID)") | select id, progress, state
|
$BackupAPI.get("$($BackupJob.ID)") | Select-Object id, progress, state
|
||||||
$progress = ($BackupAPI.get("$($BackupJob.ID)").progress)
|
$progress = ($BackupAPI.get("$($BackupJob.ID)").progress)
|
||||||
Write-Progress -Activity "Backing up VCSA" -Status $BackupAPI.get("$($BackupJob.ID)").state -PercentComplete ($BackupAPI.get("$($BackupJob.ID)").progress) -CurrentOperation "$progress% Complete"
|
Write-Progress -Activity "Backing up VCSA" -Status $BackupAPI.get("$($BackupJob.ID)").state -PercentComplete ($BackupAPI.get("$($BackupJob.ID)").progress) -CurrentOperation "$progress% Complete"
|
||||||
start-sleep -seconds 5
|
Start-Sleep -seconds 5
|
||||||
} until ($BackupAPI.get("$($BackupJob.ID)").progress -eq 100 -or $BackupAPI.get("$($BackupJob.ID)").state -ne "INPROGRESS")
|
} until ($BackupAPI.get("$($BackupJob.ID)").progress -eq 100 -or $BackupAPI.get("$($BackupJob.ID)").state -ne "INPROGRESS")
|
||||||
|
|
||||||
Write-Progress -Activity "Backing up VCSA" -Completed
|
Write-Progress -Activity "Backing up VCSA" -Completed
|
||||||
$BackupAPI.get("$($BackupJob.ID)") | select id, progress, state
|
$BackupAPI.get("$($BackupJob.ID)") | Select-Object id, progress, state
|
||||||
}
|
} Else {
|
||||||
Else {
|
$BackupJob | Select-Object id, progress, state
|
||||||
$BackupJob | select id, progress, state
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
End {}
|
End {}
|
||||||
@@ -104,17 +108,19 @@ Function Get-VCSABackupJobs {
|
|||||||
Organization: VMware
|
Organization: VMware
|
||||||
Blog: www.vtagion.com
|
Blog: www.vtagion.com
|
||||||
Twitter: @vBrianGraf
|
Twitter: @vBrianGraf
|
||||||
|
Modifed by: Michael Dunsdon
|
||||||
|
Twitter: @MJDunsdon
|
||||||
|
Date: September 21, 2020
|
||||||
===========================================================================
|
===========================================================================
|
||||||
|
|
||||||
.SYNOPSIS
|
.SYNOPSIS
|
||||||
Get-VCSABackupJobs returns a list of all backup jobs VCSA has ever performed (vSphere 6.5 and higher)
|
Get-VCSABackupJobs returns a list of all backup jobs VCSA has ever performed (vSphere 6.5 and higher)
|
||||||
|
|
||||||
.DESCRIPTION
|
.DESCRIPTION
|
||||||
Get-VCSABackupJobs returns a list of all backup jobs VCSA has ever performed
|
Get-VCSABackupJobs returns a list of all backup jobs VCSA has ever performed
|
||||||
|
|
||||||
.EXAMPLE
|
.EXAMPLE
|
||||||
PS C:\> Get-VCSABackupJobs
|
PS C:\> Get-VCSABackupJobs
|
||||||
|
.EXAMPLE
|
||||||
|
PS C:\> Get-VCSABackupJobs -ShowNewest -CisServer "vcserver.sphere.local"
|
||||||
.NOTES
|
.NOTES
|
||||||
The values returned are read as follows:
|
The values returned are read as follows:
|
||||||
YYYYMMDD-hhmmss-vcsabuildnumber
|
YYYYMMDD-hhmmss-vcsabuildnumber
|
||||||
@@ -122,20 +128,28 @@ Function Get-VCSABackupJobs {
|
|||||||
Get-VCSABackupJobs | select -First 1 | Get-VCSABackupStatus <- Most recent backup
|
Get-VCSABackupJobs | select -First 1 | Get-VCSABackupStatus <- Most recent backup
|
||||||
#>
|
#>
|
||||||
param (
|
param (
|
||||||
[switch]$ShowNewest
|
[Parameter(Mandatory=$false)][switch]$ShowNewest,
|
||||||
|
[Parameter(Mandatory=$false)]$CisServer = $global:DefaultCisServers
|
||||||
)
|
)
|
||||||
Begin {
|
Begin {
|
||||||
if (!($global:DefaultCisServers)){
|
if ($CisServer.IsConnected) {
|
||||||
[System.Windows.Forms.MessageBox]::Show("It appears you have not created a connection to the CisServer. You will now be prompted to enter your vCenter credentials to continue" , "Connect to CisServer") | out-null
|
Write-Verbose "Connected to $($CisServer.Name)"
|
||||||
|
$connection = $CisServer
|
||||||
|
} elseif ($CisServer.gettype().name -eq "String") {
|
||||||
|
Write-Host "Prompting for CIS Server credentials. Connecting to $($CisServer)."
|
||||||
|
$Connection = Connect-CisServer $CisServer
|
||||||
|
} elseif ($global:DefaultCisServers) {
|
||||||
|
$connection = $global:DefaultCisServers
|
||||||
|
} elseif ($global:DefaultVIServer) {
|
||||||
|
Write-Host "Prompting for CIS Server credentials. Connecting to $($global:DefaultVIServer.name)."
|
||||||
$Connection = Connect-CisServer $global:DefaultVIServer
|
$Connection = Connect-CisServer $global:DefaultVIServer
|
||||||
} else {
|
}
|
||||||
$Connection = $global:DefaultCisServers
|
if (!$Connection) {
|
||||||
|
Write-Error "It appears you have not created a connection to the CisServer. Please Connect First and try command again. (Connect-CisServer)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Process{
|
Process{
|
||||||
|
$BackupAPI = Get-CisService 'com.vmware.appliance.recovery.backup.job'
|
||||||
$BackupAPI = Get-CisService com.vmware.appliance.recovery.backup.job
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if ($ShowNewest) {
|
if ($ShowNewest) {
|
||||||
$results = $BackupAPI.list()
|
$results = $BackupAPI.list()
|
||||||
@@ -143,13 +157,10 @@ Function Get-VCSABackupJobs {
|
|||||||
} else {
|
} else {
|
||||||
$BackupAPI.list()
|
$BackupAPI.list()
|
||||||
}
|
}
|
||||||
}
|
} catch {
|
||||||
catch {
|
|
||||||
Write-Error $Error[0].exception.Message
|
Write-Error $Error[0].exception.Message
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
End {}
|
End {}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -162,43 +173,367 @@ Function Get-VCSABackupStatus {
|
|||||||
Organization: VMware
|
Organization: VMware
|
||||||
Blog: www.vtagion.com
|
Blog: www.vtagion.com
|
||||||
Twitter: @vBrianGraf
|
Twitter: @vBrianGraf
|
||||||
|
Modifed by: Michael Dunsdon
|
||||||
|
Twitter: @MJDunsdon
|
||||||
|
Date: September 21, 2020
|
||||||
===========================================================================
|
===========================================================================
|
||||||
|
|
||||||
.SYNOPSIS
|
.SYNOPSIS
|
||||||
Returns the ID, Progress, and State of a VCSA backup (vSphere 6.5 and higher)
|
Returns the ID, Progress, and State of a VCSA backup (vSphere 6.5 and higher)
|
||||||
|
|
||||||
.DESCRIPTION
|
.DESCRIPTION
|
||||||
Returns the ID, Progress, and State of a VCSA backup
|
Returns the ID, Progress, and State of a VCSA backup
|
||||||
|
|
||||||
.EXAMPLE
|
.EXAMPLE
|
||||||
PS C:\> $backups = Get-VCSABackupJobs
|
PS C:\> $backups = Get-VCSABackupJobs
|
||||||
$backups[0] | Get-VCSABackupStatus
|
$backups[0] | Get-VCSABackupStatus
|
||||||
|
|
||||||
.NOTES
|
.NOTES
|
||||||
The BackupID can be piped in from the Get-VCSABackupJobs function and can return multiple job statuses
|
The BackupID can be piped in from the Get-VCSABackupJobs function and can return multiple job statuses
|
||||||
#>
|
#>
|
||||||
Param (
|
Param (
|
||||||
[parameter(ValueFromPipeline=$True)]
|
[parameter(Mandatory=$false,ValueFromPipeline=$True)][string[]]$BackupID,
|
||||||
[string[]]$BackupID
|
[Parameter(Mandatory=$false)]$CisServer = $global:DefaultCisServers
|
||||||
)
|
)
|
||||||
Begin {
|
Begin {
|
||||||
if (!($global:DefaultCisServers)){
|
if ($CisServer.IsConnected) {
|
||||||
[System.Windows.Forms.MessageBox]::Show("It appears you have not created a connection to the CisServer. You will now be prompted to enter your vCenter credentials to continue" , "Connect to CisServer") | out-null
|
Write-Verbose "Connected to $($CisServer.Name)"
|
||||||
|
$connection = $CisServer
|
||||||
|
} elseif ($CisServer.gettype().name -eq "String") {
|
||||||
|
Write-Host "Prompting for CIS Server credentials. Connecting to $($CisServer)."
|
||||||
|
$Connection = Connect-CisServer $CisServer
|
||||||
|
} elseif ($global:DefaultCisServers) {
|
||||||
|
$connection = $global:DefaultCisServers
|
||||||
|
} elseif ($global:DefaultVIServer) {
|
||||||
|
Write-Host "Prompting for CIS Server credentials. Connecting to $($global:DefaultVIServer.name)."
|
||||||
$Connection = Connect-CisServer $global:DefaultVIServer
|
$Connection = Connect-CisServer $global:DefaultVIServer
|
||||||
} else {
|
|
||||||
$Connection = $global:DefaultCisServers
|
|
||||||
}
|
}
|
||||||
|
if (!$Connection) {
|
||||||
$BackupAPI = Get-CisService com.vmware.appliance.recovery.backup.job
|
Write-Error "It appears you have not created a connection to the CisServer. Please Connect First and try command again. (Connect-CisServer)"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Process{
|
Process{
|
||||||
|
$BackupAPI = Get-CisService 'com.vmware.appliance.recovery.backup.job'
|
||||||
foreach ($id in $BackupID) {
|
Foreach ($id in $BackupID) {
|
||||||
$BackupAPI.get("$id") | select id, progress, state
|
$BackupAPI.get("$id") | Select-Object id, progress, state
|
||||||
|
}
|
||||||
|
}
|
||||||
|
End {}
|
||||||
|
}
|
||||||
|
|
||||||
|
Function New-VCSASchedule {
|
||||||
|
<#
|
||||||
|
.NOTES
|
||||||
|
===========================================================================
|
||||||
|
Original Created by: Brian Graf
|
||||||
|
Blog: www.vtagion.com
|
||||||
|
Twitter: @vBrianGraf
|
||||||
|
Organization: VMware
|
||||||
|
Created / Modifed by: Michael Dunsdon
|
||||||
|
Twitter: @MJDunsdon
|
||||||
|
Date: September 21, 2020
|
||||||
|
===========================================================================
|
||||||
|
|
||||||
|
.SYNOPSIS
|
||||||
|
This function will allow you to create a scheduled to backup your
|
||||||
|
VCSA appliance. (vSphere 6.7 and higher)
|
||||||
|
.DESCRIPTION
|
||||||
|
Use this function to create a schedule to backup your VCSA to a remote location
|
||||||
|
.EXAMPLE
|
||||||
|
The Below Create a schedule on Monday @11:30pm to FTP location 10.1.1.10:/vcsabackup/vcenter01
|
||||||
|
and keep 4 backups with a Encryption Passowrd of "VMw@re123"
|
||||||
|
|
||||||
|
$location = "ftp://10.1.1.10/vcsabackup/vcenter01"
|
||||||
|
$LocationUser = "admin"
|
||||||
|
[VMware.VimAutomation.Cis.Core.Types.V1.Secret]$locationPassword = "VMw@re123"
|
||||||
|
$BHour = 23
|
||||||
|
$BMin = 30
|
||||||
|
$BDays = @("Monday")
|
||||||
|
$MaxCount = 4
|
||||||
|
[VMware.VimAutomation.Cis.Core.Types.V1.Secret]$BackupPassword = "VMw@re123"
|
||||||
|
|
||||||
|
PS C:\> New-VCSASchedule -Location $location -LocationUser $LocationUser -LocationPassword $locationPassword -BackupHour $BHour -BackupMinute $BMin -backupDays $BDays -MaxCount $MaxCount -BackupPassword $BackupPassword
|
||||||
|
.EXAMPLE
|
||||||
|
The Below Create a schedule on Sunday & Wednesday @5:15am
|
||||||
|
to NFS location 10.1.1.10:/vcsabackup/vcenter01
|
||||||
|
keep 10 backups with a Encryption Passowrd of "VMw@re123"
|
||||||
|
with Event Data included (Seat) and will delete any existing schedule.
|
||||||
|
|
||||||
|
$location = "nfs://10.1.1.10/vcsabackup/vcenter01"
|
||||||
|
$LocationUser = "admin"
|
||||||
|
[VMware.VimAutomation.Cis.Core.Types.V1.Secret]$locationPassword = "VMw@re123"
|
||||||
|
$BHour = 5
|
||||||
|
$BMin = 15
|
||||||
|
$BDays = @("Sunday", "Monday")
|
||||||
|
$MaxCount = 10
|
||||||
|
[VMware.VimAutomation.Cis.Core.Types.V1.Secret]$BackupPassword = "VMw@re123"
|
||||||
|
|
||||||
|
PS C:\> New-VCSASchedule -IncludeSeat -force -Location $location -LocationUser $LocationUser -LocationPassword $locationPassword -BackupHour $BHour -BackupMinute $BMin -backupDays $BDays -MaxCount $MaxCount -BackupPassword $BackupPassword -CisServer "vcserver.sphere.local"
|
||||||
|
.NOTES
|
||||||
|
Credit goes to @AlanRenouf & @vBrianGraf for sharing the base of this function.
|
||||||
|
You must be connected to the CisService for this to work, if you are not connected, the function will prompt you for your credentials
|
||||||
|
#>
|
||||||
|
[CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')]
|
||||||
|
param (
|
||||||
|
[Parameter(Mandatory=$true)]$Location,
|
||||||
|
[Parameter(Mandatory=$true)]$LocationUser,
|
||||||
|
[Parameter(Mandatory=$true)][VMware.VimAutomation.Cis.Core.Types.V1.Secret]$LocationPassword,
|
||||||
|
[Parameter(Mandatory=$true)][VMware.VimAutomation.Cis.Core.Types.V1.Secret]$BackupPassword,
|
||||||
|
[Parameter(Mandatory=$true)][ValidateRange(0,23)]$BackupHour,
|
||||||
|
[Parameter(Mandatory=$true)][ValidateRange(0,59)]$BackupMinute,
|
||||||
|
[Parameter(Mandatory=$true)][ValidateSet('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday')][Array]$BackupDays = $null,
|
||||||
|
[Parameter(Mandatory=$true)][Integer]$MaxCount,
|
||||||
|
[Parameter(Mandatory=$false)]$BackupID = "default",
|
||||||
|
[Parameter(Mandatory=$false)]$CisServer = $global:DefaultCisServers,
|
||||||
|
[Parameter(Mandatory=$false)][switch]$IncludeSeat,
|
||||||
|
[Parameter(Mandatory=$false)][switch]$Force
|
||||||
|
)
|
||||||
|
Begin {
|
||||||
|
if ($CisServer.IsConnected) {
|
||||||
|
Write-Verbose "Connected to $($CisServer.Name)"
|
||||||
|
$connection = $CisServer
|
||||||
|
} elseif ($CisServer.gettype().name -eq "String") {
|
||||||
|
Write-Host "Prompting for CIS Server credentials. Connecting to $($CisServer)."
|
||||||
|
$Connection = Connect-CisServer $CisServer
|
||||||
|
} elseif ($global:DefaultCisServers) {
|
||||||
|
$connection = $global:DefaultCisServers
|
||||||
|
} elseif ($global:DefaultVIServer) {
|
||||||
|
Write-Host "Prompting for CIS Server credentials. Connecting to $($global:DefaultVIServer.name)."
|
||||||
|
$Connection = Connect-CisServer $global:DefaultVIServer
|
||||||
|
}
|
||||||
|
if (!$Connection) {
|
||||||
|
Write-Error "It appears you have not created a connection to the CisServer. Please Connect First and try command again. (Connect-CisServer)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Process{
|
||||||
|
if (!(Test-VCSAScheduleSupport)) {
|
||||||
|
Write-Error "This VCSA does not support Backup Schedules."
|
||||||
|
return
|
||||||
|
}
|
||||||
|
$BackupAPI = Get-CisService -name 'com.vmware.appliance.recovery.backup.schedules'
|
||||||
|
$CreateSpec = $BackupAPI.Help.create.spec.Create()
|
||||||
|
$CreateSpec.backup_password = $BackupPassword
|
||||||
|
$CreateSpec.location = $Location
|
||||||
|
$CreateSpec.location_user = $LocationUser
|
||||||
|
$CreateSpec.location_password = $LocationPassword
|
||||||
|
$CreateSpec.Enable = $true
|
||||||
|
$CreateSpec.recurrence_info.Hour = $BackupHour
|
||||||
|
$CreateSpec.recurrence_info.Minute = $BackupMinute
|
||||||
|
$CreateSpec.recurrence_info.Days = $BackupDays
|
||||||
|
$CreateSpec.retention_info.max_count = $MaxCount
|
||||||
|
if ($IncludeSeat) {
|
||||||
|
$CreateSpec.parts = @("seat")
|
||||||
|
} else {
|
||||||
|
$CreateSpec.parts = @()
|
||||||
|
}
|
||||||
|
$CurrentSchedule = $BackupAPI.list()
|
||||||
|
|
||||||
|
|
||||||
|
if ($CurrentSchedule.keys.value) {
|
||||||
|
if($Force -or $PSCmdlet.ShouldContinue($CurrentSchedule.keys.value,'Delete Old Schedule')){
|
||||||
|
$BackupAPI.delete($CurrentSchedule.keys.value)
|
||||||
|
} else {
|
||||||
|
Write-Error "There is an exisiting Schedule. Please delete before Creating a new one."
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($PSCmdlet.ShouldProcess($BackupID, 'Create New Schedule.')) {
|
||||||
|
try {
|
||||||
|
$BackupJob = $BackupAPI.create($BackupID, $CreateSpec)
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
throw $_.Exception.Message
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($BackupJob) {
|
||||||
|
Write-Host "Backup up Job Created."
|
||||||
|
return $BackupJob
|
||||||
|
}
|
||||||
|
}
|
||||||
|
End {}
|
||||||
|
}
|
||||||
|
|
||||||
|
Function Get-VCSASchedule {
|
||||||
|
<#
|
||||||
|
.NOTES
|
||||||
|
===========================================================================
|
||||||
|
Original Created by: Brian Graf
|
||||||
|
Blog: www.vtagion.com
|
||||||
|
Twitter: @vBrianGraf
|
||||||
|
Organization: VMware
|
||||||
|
Created / Modifed by: Michael Dunsdon
|
||||||
|
Twitter: @MJDunsdon
|
||||||
|
Date: September 21, 2020
|
||||||
|
===========================================================================
|
||||||
|
|
||||||
|
.SYNOPSIS
|
||||||
|
This function will allow you to Get the scheduled backup of your
|
||||||
|
VCSA appliance. (vSphere 6.7 and higher)
|
||||||
|
.DESCRIPTION
|
||||||
|
Use this function to Get the backup schedule for your VCSA appliance.
|
||||||
|
.EXAMPLE
|
||||||
|
PS C:\> Get-VCSASchedule
|
||||||
|
.EXAMPLE
|
||||||
|
PS C:\> Get-VCSASchedule -ScheduleID 1 -CisServer "vcserver.sphere.local"
|
||||||
|
.NOTES
|
||||||
|
Credit goes to @AlanRenouf & @vBrianGraf for sharing the base of this function.
|
||||||
|
Returns a simplified object with the schedule details.
|
||||||
|
You must be connected to the CisService for this to work, if you are not connected, the function will prompt you for your credentials
|
||||||
|
#>
|
||||||
|
param (
|
||||||
|
[Parameter(Mandatory=$False,HelpMessage="Will Filter List By ScheduleID")]$ScheduleID,
|
||||||
|
[Parameter(Mandatory=$false)]$CisServer = $global:DefaultCisServers
|
||||||
|
)
|
||||||
|
Begin {
|
||||||
|
if ($CisServer.IsConnected) {
|
||||||
|
Write-Verbose "Connected to $($CisServer.Name)"
|
||||||
|
$connection = $CisServer
|
||||||
|
} elseif ($CisServer.gettype().name -eq "String") {
|
||||||
|
Write-Host "Prompting for CIS Server credentials. Connecting to $($CisServer)."
|
||||||
|
$Connection = Connect-CisServer $CisServer
|
||||||
|
} elseif ($global:DefaultCisServers) {
|
||||||
|
$connection = $global:DefaultCisServers
|
||||||
|
} elseif ($global:DefaultVIServer) {
|
||||||
|
Write-Host "Prompting for CIS Server credentials. Connecting to $($global:DefaultVIServer.name)."
|
||||||
|
$Connection = Connect-CisServer $global:DefaultVIServer
|
||||||
|
}
|
||||||
|
if (!$Connection) {
|
||||||
|
Write-Error "It appears you have not created a connection to the CisServer. Please Connect First and try command again. (Connect-CisServer)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Process{
|
||||||
|
if (!(Test-VCSAScheduleSupport)) {
|
||||||
|
Write-Error "This VCSA does not support Backup Schedules."
|
||||||
|
return
|
||||||
|
}
|
||||||
|
$BackupAPI = Get-CisService -name 'com.vmware.appliance.recovery.backup.schedules'
|
||||||
|
$Schedules = $BackupAPI.list()
|
||||||
|
if ($Schedules.count -ge 1) {
|
||||||
|
$ObjSchedule = @()
|
||||||
|
foreach ($Schedule in $Schedules) {
|
||||||
|
$ObjSchedule += $Schedule.values | Select-Object *,@{N = "ID"; e = {"$($schedule.keys.value)"}} -ExpandProperty recurrence_info -ExcludeProperty Help | Select-Object * -ExcludeProperty recurrence_info,Help | Select-Object * -ExpandProperty retention_info | Select-Object * -ExcludeProperty retention_info,Help
|
||||||
|
}
|
||||||
|
if ($ScheduleID) {
|
||||||
|
$ObjSchedule = $ObjSchedule | Where-Object {$_.ID -eq $ScheduleID}
|
||||||
|
}
|
||||||
|
return $ObjSchedule
|
||||||
|
} else {
|
||||||
|
Write-Information "No Schedule Defined."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
End {}
|
||||||
|
}
|
||||||
|
|
||||||
|
Function Remove-VCSASchedule {
|
||||||
|
<#
|
||||||
|
.NOTES
|
||||||
|
===========================================================================
|
||||||
|
Original Created by: Brian Graf
|
||||||
|
Blog: www.vtagion.com
|
||||||
|
Twitter: @vBrianGraf
|
||||||
|
Organization: VMware
|
||||||
|
Created / Modifed by: Michael Dunsdon
|
||||||
|
Twitter: @MJDunsdon
|
||||||
|
Date: September 21, 2020
|
||||||
|
============================================================================
|
||||||
|
.SYNOPSIS
|
||||||
|
This function will remove any scheduled backups of your
|
||||||
|
VCSA appliance. (vSphere 6.7 and higher)
|
||||||
|
.DESCRIPTION
|
||||||
|
Use this function to remove the backup schedule for your VCSA appliance.
|
||||||
|
.EXAMPLE
|
||||||
|
PS C:\> Remove-VCSASchedule
|
||||||
|
.EXAMPLE
|
||||||
|
PS C:\> Remove-VCSASchedule -ScheduleID 1 -CisServer "vcserver.sphere.local"
|
||||||
|
.NOTES
|
||||||
|
Credit goes to @AlanRenouf & @vBrianGraf for sharing the base of this function.
|
||||||
|
You must be connected to the CisService for this to work, if you are not connected, the function will prompt you for your credentials
|
||||||
|
#>
|
||||||
|
[CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'High')]
|
||||||
|
param (
|
||||||
|
[Parameter(Mandatory=$false)]$ScheduleID = "default",
|
||||||
|
[Parameter(Mandatory=$false)]$CisServer = $global:DefaultCisServers
|
||||||
|
)
|
||||||
|
Begin {
|
||||||
|
if ($CisServer.IsConnected) {
|
||||||
|
Write-Verbose "Connected to $($CisServer.Name)"
|
||||||
|
$connection = $CisServer
|
||||||
|
} elseif ($CisServer.gettype().name -eq "String") {
|
||||||
|
Write-Host "Prompting for CIS Server credentials. Connecting to $($CisServer)."
|
||||||
|
$Connection = Connect-CisServer $CisServer
|
||||||
|
} elseif ($global:DefaultCisServers) {
|
||||||
|
$connection = $global:DefaultCisServers
|
||||||
|
} elseif ($global:DefaultVIServer) {
|
||||||
|
Write-Host "Prompting for CIS Server credentials. Connecting to $($global:DefaultVIServer.name)."
|
||||||
|
$Connection = Connect-CisServer $global:DefaultVIServer
|
||||||
|
}
|
||||||
|
if (!$Connection) {
|
||||||
|
Write-Error "It appears you have not created a connection to the CisServer. Please Connect First and try command again. (Connect-CisServer)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Process{
|
||||||
|
if (!(Test-VCSAScheduleSupport)) {
|
||||||
|
Write-Error "This VCSA does not support Backup Schedules."
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if ($PSCmdlet.ShouldProcess($ScheduleID, "Removes Current Backup Schedule")) {
|
||||||
|
$BackupAPI = Get-CisService -name 'com.vmware.appliance.recovery.backup.schedules'
|
||||||
|
$BackupAPI.delete($ScheduleID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
End {}
|
||||||
|
}
|
||||||
|
|
||||||
|
Function Test-VCSAScheduleSupport {
|
||||||
|
<#
|
||||||
|
.NOTES
|
||||||
|
===========================================================================
|
||||||
|
Original Created by: Brian Graf
|
||||||
|
Blog: www.vtagion.com
|
||||||
|
Twitter: @vBrianGraf
|
||||||
|
Organization: VMware
|
||||||
|
Created / Modifed by: Michael Dunsdon
|
||||||
|
Twitter: @MJDunsdon
|
||||||
|
Date: September 21, 2020
|
||||||
|
===========================================================================
|
||||||
|
.SYNOPSIS
|
||||||
|
This function will check to see if your VCSA supports Scheduled Backups.
|
||||||
|
(vSphere 6.7 and higher)
|
||||||
|
.DESCRIPTION
|
||||||
|
Use this function to check if your VCSA supports Scheduled Backups.
|
||||||
|
.EXAMPLE
|
||||||
|
PS C:\> Test-VCSAScheduleSupport
|
||||||
|
.EXAMPLE
|
||||||
|
PS C:\> Test-VCSAScheduleSupport -CisServer "vcserver.sphere.local"
|
||||||
|
.NOTES
|
||||||
|
Credit goes to @AlanRenouf & @vBrianGraf for sharing the base of this function.
|
||||||
|
You must be connected to the CisService for this to work, if you are not connected, the function will prompt you for your credentia
|
||||||
|
#>
|
||||||
|
param (
|
||||||
|
[Parameter(Mandatory=$false)]$CisServer = $global:DefaultCisServers
|
||||||
|
)
|
||||||
|
Begin {
|
||||||
|
if ($CisServer.IsConnected) {
|
||||||
|
Write-Verbose "Connected to $($CisServer.Name)"
|
||||||
|
$connection = $CisServer
|
||||||
|
} elseif ($CisServer.gettype().name -eq "String") {
|
||||||
|
Write-Host "Prompting for CIS Server credentials. Connecting to $($CisServer)."
|
||||||
|
$Connection = Connect-CisServer $CisServer
|
||||||
|
} elseif ($global:DefaultCisServers) {
|
||||||
|
$connection = $global:DefaultCisServers
|
||||||
|
} elseif ($global:DefaultVIServer) {
|
||||||
|
Write-Host "Prompting for CIS Server credentials. Connecting to $($global:DefaultVIServer.name)."
|
||||||
|
$Connection = Connect-CisServer $global:DefaultVIServer
|
||||||
|
}
|
||||||
|
if (!$Connection) {
|
||||||
|
Write-Error "It appears you have not created a connection to the CisServer. Please Connect First and try command again. (Connect-CisServer)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Process{
|
||||||
|
if ((Get-CisService).name -contains "com.vmware.appliance.recovery.backup.schedules" ) {
|
||||||
|
Write-Verbose "This VCSA does supports Backup Schedules."
|
||||||
|
return $true
|
||||||
|
} else {
|
||||||
|
Write-Verbose "This VCSA does not support Backup Schedules."
|
||||||
|
return $false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
End {}
|
End {}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user