@@ -1,204 +1,539 @@
|
||||
Function Backup-VCSAToFile {
|
||||
Function Backup-VCSAToFile {
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created by: Brian Graf
|
||||
Date: October 30, 2016
|
||||
Date: October 30, 2016
|
||||
Organization: VMware
|
||||
Blog: www.vtagion.com
|
||||
Twitter: @vBrianGraf
|
||||
Blog: www.vtagion.com
|
||||
Twitter: @vBrianGraf
|
||||
Modifed by: Michael Dunsdon
|
||||
Twitter: @MJDunsdon
|
||||
Date: September 21, 2020
|
||||
===========================================================================
|
||||
|
||||
.SYNOPSIS
|
||||
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
|
||||
Use this function to backup your VCSA to a remote location
|
||||
|
||||
.EXAMPLE
|
||||
[VMware.VimAutomation.Cis.Core.Types.V1.Secret]$BackupPassword = "VMw@re123"
|
||||
$Comment = "First API Backup"
|
||||
$LocationType = "FTP"
|
||||
$location = "10.144.99.5/vcsabackup-$((Get-Date).ToString('yyyy-MM-dd-hh-mm'))"
|
||||
$LocationUser = "admin"
|
||||
[VMware.VimAutomation.Cis.Core.Types.V1.Secret]$locationPassword = "VMw@re123"
|
||||
[VMware.VimAutomation.Cis.Core.Types.V1.Secret]$BackupPassword = "VMw@re123"
|
||||
$Comment = "First API Backup"
|
||||
$LocationType = "FTP"
|
||||
$location = "10.144.99.5/vcsabackup-$((Get-Date).ToString('yyyy-MM-dd-hh-mm'))"
|
||||
$LocationUser = "admin"
|
||||
[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
|
||||
|
||||
|
||||
.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
|
||||
You must be connected to the CisService for this to work, if you are not connected, the function will prompt you for your credentials
|
||||
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
|
||||
A CisService can also be supplied as a parameter.
|
||||
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)
|
||||
-ShowProgress will give you a progressbar as well as updates in the console
|
||||
-CommonBackup will only backup the config whereas -Fullbackup grabs the historical data as well
|
||||
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
|
||||
-CommonBackup will only backup the config whereas -Fullbackup grabs the historical data as well
|
||||
#>
|
||||
param (
|
||||
[Parameter(ParameterSetName=’FullBackup’)]
|
||||
[switch]$FullBackup,
|
||||
[Parameter(ParameterSetName=’CommonBackup’)]
|
||||
[switch]$CommonBackup,
|
||||
[ValidateSet('FTPS', 'HTTP', 'SCP', 'HTTPS', 'FTP')]
|
||||
$LocationType = "FTP",
|
||||
$Location,
|
||||
$LocationUser,
|
||||
[VMware.VimAutomation.Cis.Core.Types.V1.Secret]$LocationPassword,
|
||||
[VMware.VimAutomation.Cis.Core.Types.V1.Secret]$BackupPassword,
|
||||
$Comment = "Backup job",
|
||||
[switch]$ShowProgress
|
||||
)
|
||||
Begin {
|
||||
if (!($global:DefaultCisServers)){
|
||||
Add-Type -Assembly System.Windows.Forms
|
||||
[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 = Connect-CisServer $global:DefaultVIServer
|
||||
} else {
|
||||
$Connection = $global:DefaultCisServers
|
||||
}
|
||||
if ($FullBackup) {$parts = @("common","seat")}
|
||||
if ($CommonBackup) {$parts = @("common")}
|
||||
}
|
||||
Process{
|
||||
$BackupAPI = Get-CisService com.vmware.appliance.recovery.backup.job
|
||||
$CreateSpec = $BackupAPI.Help.create.piece.CreateExample()
|
||||
$CreateSpec.parts = $parts
|
||||
$CreateSpec.backup_password = $BackupPassword
|
||||
$CreateSpec.location_type = $LocationType
|
||||
$CreateSpec.location = $Location
|
||||
$CreateSpec.location_user = $LocationUser
|
||||
$CreateSpec.location_password = $LocationPassword
|
||||
$CreateSpec.comment = $Comment
|
||||
try {
|
||||
$BackupJob = $BackupAPI.create($CreateSpec)
|
||||
}
|
||||
catch {
|
||||
throw $_.Exception.Message
|
||||
}
|
||||
|
||||
|
||||
If ($ShowProgress){
|
||||
do {
|
||||
$BackupAPI.get("$($BackupJob.ID)") | select id, progress, state
|
||||
$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"
|
||||
start-sleep -seconds 5
|
||||
} until ($BackupAPI.get("$($BackupJob.ID)").progress -eq 100 -or $BackupAPI.get("$($BackupJob.ID)").state -ne "INPROGRESS")
|
||||
|
||||
Write-Progress -Activity "Backing up VCSA" -Completed
|
||||
$BackupAPI.get("$($BackupJob.ID)") | select id, progress, state
|
||||
}
|
||||
Else {
|
||||
$BackupJob | select id, progress, state
|
||||
}
|
||||
}
|
||||
End {}
|
||||
param (
|
||||
[Parameter(ParameterSetName=’FullBackup’)]
|
||||
[switch]$FullBackup,
|
||||
[Parameter(ParameterSetName=’CommonBackup’)]
|
||||
[switch]$CommonBackup,
|
||||
[ValidateSet('FTPS', 'HTTP', 'SCP', 'HTTPS', 'FTP')]
|
||||
$LocationType = "FTP",
|
||||
$Location,
|
||||
$LocationUser,
|
||||
[VMware.VimAutomation.Cis.Core.Types.V1.Secret]$LocationPassword,
|
||||
[VMware.VimAutomation.Cis.Core.Types.V1.Secret]$BackupPassword,
|
||||
$Comment = "Backup job",
|
||||
[Parameter(Mandatory=$false)]$CisServer = $global:DefaultCisServers,
|
||||
[switch]$ShowProgress
|
||||
)
|
||||
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)"
|
||||
}
|
||||
if ($FullBackup) {$parts = @("common","seat")}
|
||||
if ($CommonBackup) {$parts = @("common")}
|
||||
}
|
||||
Process{
|
||||
$BackupAPI = Get-CisService 'com.vmware.appliance.recovery.backup.job'
|
||||
$CreateSpec = $BackupAPI.Help.create.piece.CreateExample()
|
||||
$CreateSpec.parts = $parts
|
||||
$CreateSpec.backup_password = $BackupPassword
|
||||
$CreateSpec.location_type = $LocationType
|
||||
$CreateSpec.location = $Location
|
||||
$CreateSpec.location_user = $LocationUser
|
||||
$CreateSpec.location_password = $LocationPassword
|
||||
$CreateSpec.comment = $Comment
|
||||
try {
|
||||
$BackupJob = $BackupAPI.create($CreateSpec)
|
||||
} catch {
|
||||
throw $_.Exception.Message
|
||||
}
|
||||
If ($ShowProgress){
|
||||
do {
|
||||
$BackupAPI.get("$($BackupJob.ID)") | Select-Object id, progress, state
|
||||
$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"
|
||||
Start-Sleep -seconds 5
|
||||
} until ($BackupAPI.get("$($BackupJob.ID)").progress -eq 100 -or $BackupAPI.get("$($BackupJob.ID)").state -ne "INPROGRESS")
|
||||
Write-Progress -Activity "Backing up VCSA" -Completed
|
||||
$BackupAPI.get("$($BackupJob.ID)") | Select-Object id, progress, state
|
||||
} Else {
|
||||
$BackupJob | Select-Object id, progress, state
|
||||
}
|
||||
}
|
||||
End {}
|
||||
}
|
||||
|
||||
Function Get-VCSABackupJobs {
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created by: Brian Graf
|
||||
Date: October 30, 2016
|
||||
Organization: VMware
|
||||
Blog: www.vtagion.com
|
||||
Twitter: @vBrianGraf
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created by: Brian Graf
|
||||
Date: October 30, 2016
|
||||
Organization: VMware
|
||||
Blog: www.vtagion.com
|
||||
Twitter: @vBrianGraf
|
||||
Modifed by: Michael Dunsdon
|
||||
Twitter: @MJDunsdon
|
||||
Date: September 21, 2020
|
||||
===========================================================================
|
||||
|
||||
.SYNOPSIS
|
||||
Get-VCSABackupJobs returns a list of all backup jobs VCSA has ever performed (vSphere 6.5 and higher)
|
||||
|
||||
.DESCRIPTION
|
||||
Get-VCSABackupJobs returns a list of all backup jobs VCSA has ever performed
|
||||
|
||||
.EXAMPLE
|
||||
PS C:\> Get-VCSABackupJobs
|
||||
|
||||
.EXAMPLE
|
||||
PS C:\> Get-VCSABackupJobs -ShowNewest -CisServer "vcserver.sphere.local"
|
||||
.NOTES
|
||||
The values returned are read as follows:
|
||||
YYYYMMDD-hhmmss-vcsabuildnumber
|
||||
You can pipe the results of this function into the Get-VCSABackupStatus function
|
||||
Get-VCSABackupJobs | select -First 1 | Get-VCSABackupStatus <- Most recent backup
|
||||
YYYYMMDD-hhmmss-vcsabuildnumber
|
||||
You can pipe the results of this function into the Get-VCSABackupStatus function
|
||||
Get-VCSABackupJobs | select -First 1 | Get-VCSABackupStatus <- Most recent backup
|
||||
#>
|
||||
param (
|
||||
[switch]$ShowNewest
|
||||
)
|
||||
Begin {
|
||||
if (!($global:DefaultCisServers)){
|
||||
[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 = Connect-CisServer $global:DefaultVIServer
|
||||
} else {
|
||||
$Connection = $global:DefaultCisServers
|
||||
}
|
||||
}
|
||||
Process{
|
||||
|
||||
$BackupAPI = Get-CisService com.vmware.appliance.recovery.backup.job
|
||||
|
||||
try {
|
||||
if ($ShowNewest) {
|
||||
$results = $BackupAPI.list()
|
||||
$results[0]
|
||||
} else {
|
||||
$BackupAPI.list()
|
||||
}
|
||||
}
|
||||
catch {
|
||||
Write-Error $Error[0].exception.Message
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
End {}
|
||||
param (
|
||||
[Parameter(Mandatory=$false)][switch]$ShowNewest,
|
||||
[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{
|
||||
$BackupAPI = Get-CisService 'com.vmware.appliance.recovery.backup.job'
|
||||
try {
|
||||
if ($ShowNewest) {
|
||||
$results = $BackupAPI.list()
|
||||
$results[0]
|
||||
} else {
|
||||
$BackupAPI.list()
|
||||
}
|
||||
} catch {
|
||||
Write-Error $Error[0].exception.Message
|
||||
}
|
||||
}
|
||||
End {}
|
||||
}
|
||||
|
||||
Function Get-VCSABackupStatus {
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created by: Brian Graf
|
||||
Date: October 30, 2016
|
||||
Organization: VMware
|
||||
Blog: www.vtagion.com
|
||||
Twitter: @vBrianGraf
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created by: Brian Graf
|
||||
Date: October 30, 2016
|
||||
Organization: VMware
|
||||
Blog: www.vtagion.com
|
||||
Twitter: @vBrianGraf
|
||||
Modifed by: Michael Dunsdon
|
||||
Twitter: @MJDunsdon
|
||||
Date: September 21, 2020
|
||||
===========================================================================
|
||||
|
||||
.SYNOPSIS
|
||||
Returns the ID, Progress, and State of a VCSA backup (vSphere 6.5 and higher)
|
||||
|
||||
.DESCRIPTION
|
||||
Returns the ID, Progress, and State of a VCSA backup
|
||||
|
||||
.EXAMPLE
|
||||
.EXAMPLE
|
||||
PS C:\> $backups = Get-VCSABackupJobs
|
||||
$backups[0] | Get-VCSABackupStatus
|
||||
|
||||
$backups[0] | Get-VCSABackupStatus
|
||||
.NOTES
|
||||
The BackupID can be piped in from the Get-VCSABackupJobs function and can return multiple job statuses
|
||||
#>
|
||||
Param (
|
||||
[parameter(ValueFromPipeline=$True)]
|
||||
[string[]]$BackupID
|
||||
)
|
||||
Begin {
|
||||
if (!($global:DefaultCisServers)){
|
||||
[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 = Connect-CisServer $global:DefaultVIServer
|
||||
} else {
|
||||
$Connection = $global:DefaultCisServers
|
||||
}
|
||||
|
||||
$BackupAPI = Get-CisService com.vmware.appliance.recovery.backup.job
|
||||
}
|
||||
Process{
|
||||
|
||||
foreach ($id in $BackupID) {
|
||||
$BackupAPI.get("$id") | select id, progress, state
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
End {}
|
||||
Param (
|
||||
[parameter(Mandatory=$false,ValueFromPipeline=$True)][string[]]$BackupID,
|
||||
[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{
|
||||
$BackupAPI = Get-CisService 'com.vmware.appliance.recovery.backup.job'
|
||||
Foreach ($id in $BackupID) {
|
||||
$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 {}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user