VMware.Community.VCSA.Update.psm1
Function Get-VCSAUpdatePolicy { <# .NOTES =========================================================================== Created by: David Stamen Organization: VMware Blog: www.davidstamen.com Twitter: @davidstamen =========================================================================== .SYNOPSIS This function checks for information about the VCSA Update Policy. .DESCRIPTION Function to return details about the update policy .EXAMPLE Connect-CisServer -Server 192.168.1.51 -User administrator@vsphere.local -Password VMware1! Get-VCSAUpdatePolicy #> if ($Global:DefaultCisServers -eq $null) { Write-Warning "You are not connected to any servers: Use Connect-CisServer to connect to your VCSA" } else { $servers = $Global:DefaultCisServers foreach ($server in $servers) { $systemUpdateAPI = Get-CisService -Name 'com.vmware.appliance.update.policy' -Server $server.Name $results = $systemUpdateAPI.get() $summaryResult = [pscustomobject] @{ "Server" = $server.Name; "Default URL" = $results.default_url; "Custom URL" = $results.custom_url; "Auto Stage" = $results.auto_stage; "Auto Update" = $results.auto_update; "Check Schedule" = $results.check_schedule } $summaryResult } } } Function Set-VCSAUpdatePolicy { <# .NOTES =========================================================================== Created by: David Stamen Organization: VMware Blog: www.davidstamen.com Twitter: @davidstamen =========================================================================== .SYNOPSIS This function checks for information about the VCSA Update Policy. .DESCRIPTION Function to return details about the update policy .EXAMPLE Connect-CisServer -Server 192.168.1.51 -User administrator@vsphere.local -Password VMware1! Set-VCSAUpdatePolicy -AutoStage $True .EXAMPLE Connect-CisServer -Server 192.168.1.51 -User administrator@vsphere.local -Password VMware1! Set-VCSAUpdatePolicy -CustomURL https://linktocustomurl Set-VCSAUpdatePolicy -CustomURL Clear .EXAMPLE Connect-CisServer -Server 192.168.1.51 -User administrator@vsphere.local -Password VMware1! Set-VCSAUpdatePolicy -UsernameURL admin Set-VCSAUpdatePolicy -PasswordURL Password .EXAMPLE Connect-CisServer -Server 192.168.1.51 -User administrator@vsphere.local -Password VMware1! Set-VCSAUpdatePolicy -CheckSchedule Daily Set-VCSAUpdatePolicy -CheckSchedule WeeklySunday Set-VCSAUpdatePolicy -CheckSchedule WeeklyMonday Set-VCSAUpdatePolicy -CheckSchedule WeeklyTuesday Set-VCSAUpdatePolicy -CheckSchedule WeeklyWednesday Set-VCSAUpdatePolicy -CheckSchedule WeeklyThursday Set-VCSAUpdatePolicy -CheckSchedule WeeklyFriday Set-VCSAUpdatePolicy -CheckSchedule WeeklySaturday #> Param( [parameter(Mandatory=$false)] [string] $AutoStage, [parameter(Mandatory=$false)] [string] $CustomURL, [parameter(Mandatory=$false)] [string] $UsernameURL, [parameter(Mandatory=$false)] [string] $PasswordURL, [parameter(Mandatory=$false)] [string] $CheckSchedule ) if ($Global:DefaultCisServers -eq $null) { Write-Warning "You are not connected to any servers: Use Connect-CisServer to connect to your VCSA" } else { $servers = $Global:DefaultCisServers foreach ($server in $servers) { $systemUpdateAPI = Get-CisService -Name 'com.vmware.appliance.update.policy' -Server $server.Name $results = $systemUpdateAPI.get() $policy = $systemUpdateAPI.help.set.policy.Create() $policy.custom_url = $results.custom_url $policy.username = $results.username $policy.password = $results.password $policy.check_schedule = $results.check_schedule $policy.auto_stage = $results.auto_stage if ($AutoStage) { $policy.auto_stage = $AutoStage Write-Host "Updating VCSA Update Policy Autostage to $AutoStage" } if ($CustomURL) { if ($CustomURL -like "Clear") { $policy.custom_url = $null Write-Host "Updating VCSA Update Policy Custom URL to Cleared" } else { $policy.custom_url = $CustomURL Write-Host "Updating VCSA Update Policy Custom URL to $CustomURL" } } if ($UsernameURL) { $policy.username = $UsernameURL Write-Host "Updating VCSA Update Policy Username to $UsernameURL" } if ($PasswordURL) { [VMware.VimAutomation.Cis.Core.Types.V1.Secret]$policy.password = $PasswordURL Write-Host "Updating VCSA Update Policy Password to $PasswordURL" } if ($CheckSchedule) { if ($CheckSchedule -like "Daily") { $policy.check_schedule[0] = @{hour=0;minute=0;day="EVERYDAY"} Write-Host "Updating VCSA Update Policy Custom URL to $CheckSchedule" } elseif ($CheckSchedule -like "WeeklyMonday") { $policy.check_schedule[0] = @{hour=0;minute=0;day="MONDAY"} Write-Host "Updating VCSA Update Policy Custom URL to $CheckSchedule" } elseif ($CheckSchedule -like "WeeklyTuesday") { $policy.check_schedule[0] = @{hour=0;minute=0;day="TUESDAY"} Write-Host "Updating VCSA Update Policy Custom URL to $CheckSchedule" } elseif ($CheckSchedule -like "WeeklyWednesday") { $policy.check_schedule[0] = @{hour=0;minute=0;day="WEDNESDAY"} Write-Host "Updating VCSA Update Policy Custom URL to $CheckSchedule" } elseif ($CheckSchedule -like "WeeklyThursday") { $policy.check_schedule[0] = @{hour=0;minute=0;day="THURSDAY"} Write-Host "Updating VCSA Update Policy Custom URL to $CheckSchedule" } elseif ($CheckSchedule -like "WeeklyFriday") { $policy.check_schedule[0] = @{hour=0;minute=0;day="FRIDAY"} Write-Host "Updating VCSA Update Policy Custom URL to $CheckSchedule" } elseif ($CheckSchedule -like "WeeklySaturday") { $policy.check_schedule[0] = @{hour=0;minute=0;day="SATURDAY"} Write-Host "Updating VCSA Update Policy Custom URL to $CheckSchedule" } elseif ($CheckSchedule -like "WeeklySunday") { $policy.check_schedule[0] = @{hour=0;minute=0;day="SUNDAY"} Write-Host "Updating VCSA Update Policy Custom URL to $CheckSchedule" } } $results = $systemUpdateAPI.set($policy) $results $summaryResult = [pscustomobject] @{ "Server" = $server.Name; "Status" = "Policy Updated" } $summaryResult } } } Function Get-VCSAUpdateStatus { <# .NOTES =========================================================================== Created by: David Stamen Organization: VMware Blog: www.davidstamen.com Twitter: @davidstamen =========================================================================== .SYNOPSIS This function checks for information about the latest VCSA Update Status. .DESCRIPTION Function to return details about the update status .EXAMPLE Connect-CisServer -Server 192.168.1.51 -User administrator@vsphere.local -Password VMware1! Get-VCSAUpdateStatus #> if ($Global:DefaultCisServers -eq $null) { Write-Warning "You are not connected to any servers: Use Connect-CisServer to connect to your VCSA" } else { $servers = $Global:DefaultCisServers foreach ($server in $servers) { $systemUpdateAPI = Get-CisService -Name 'com.vmware.appliance.update' -Server $server.Name $results = $systemUpdateAPI.get() $summaryResult = [pscustomobject] @{ "Server" = $server.Name; "State" = $results.state; "Version" = $results.version; "Last Check" = $results.latest_query_time; "Stage Task" = $results.task.subtasks.stage; "Install Task" = $results.task.subtasks.install; "Progress" = $results.task.progress; "Operation" = $results.task.operation } $summaryResult } } } Function Get-VCSAUpdate { <# .NOTES =========================================================================== Created by: David Stamen Organization: VMware Blog: www.davidstamen.com Twitter: @davidstamen =========================================================================== .SYNOPSIS This function checks for information about the latest VCSA Updates. .DESCRIPTION Function to return details about the available updates. If No Source is Specified, it defaults to Online .EXAMPLE Connect-CisServer -Server 192.168.1.51 -User administrator@vsphere.local -Password VMware1! Get-VCSAUpdate .EXAMPLE Connect-CisServer -Server 192.168.1.51 -User administrator@vsphere.local -Password VMware1! Get-VCSAUpdate -Source "Online" .EXAMPLE Connect-CisServer -Server 192.168.1.51 -User administrator@vsphere.local -Password VMware1! Get-VCSAUpdate -Source "Local" #> Param( [parameter(Mandatory=$false)] [String] $Source ) if ($Source -eq "Local") { $SourceType = "LOCAL" } else { $SourceType = "LOCAL_AND_ONLINE" } if ($Global:DefaultCisServers -eq $null) { Write-Warning "You are not connected to any servers: Use Connect-CisServer to connect to your VCSA" } else { $servers = $Global:DefaultCisServers foreach ($server in $servers) { try { $systemUpdateAPI = Get-CisService -Name 'com.vmware.appliance.update.pending' -Server $server.Name $results = $systemUpdateAPI.list($SourceType) ForEach($result in $results) { $summaryResult = [pscustomobject] @{ "Server" = $server.Name; "Release Date" = $result.release_date; "Version" = $result.version; "Update Type" = $result.update_type; "Severity" = $result.severity; "Priority" = $result.priority; "SizeGB" = [math]::Round(([int]$result.size / 1024),2) "Reboot Required" = $result.reboot_required; "Description" = $result.description.args } $summaryResult } } catch { $e=$_ if ($e.Exception -like "*com.vmware.vapi.std.errors.not_found*") { Write-Warning "No applicable update found" } elseif ($e.Exception -like "*com.vmware.vapi.std.errors.unauthenticated *") { Write-Warning "Session is not authenticated" } elseif ($e.Exception -like "*com.vmware.vapi.std.errors.unauthorized*") { Write-Warning "Session is not authorized to perform this operation" } else { Write-Warning "You have encountered an error, please validate server." } } } } } Function Get-VCSAUpdateDetail { <# .NOTES =========================================================================== Created by: David Stamen Organization: VMware Blog: www.davidstamen.com Twitter: @davidstamen =========================================================================== .SYNOPSIS This function checks for information about the latest VCSA Update. .DESCRIPTION Function to return details about the update .EXAMPLE Connect-CisServer -Server 192.168.1.51 -User administrator@vsphere.local -Password VMware1! Get-VCSAUpdateDetail -Version "6.7.0.20000" #> Param( [parameter(Mandatory=$true)] [String] $Version ) if ($Global:DefaultCisServers -eq $null) { Write-Warning "You are not connected to any servers: Use Connect-CisServer to connect to your VCSA" } else { $servers = $Global:DefaultCisServers foreach ($server in $servers) { $systemUpdateAPI = Get-CisService -Name 'com.vmware.appliance.update.pending' -Server $server.Name $result = $systemUpdateAPI.get($Version) $summaryResult = [pscustomobject] @{ "Server" = $server.Name; "Release Date" = $result.release_date; "Contents" = $result.contents; "Update Type" = $result.update_type; "Severity" = $result.severity; "Priority" = $result.priority; "SizeGB" = [math]::Round(([int]$result.size / 1024),2) "Reboot Required" = $result.reboot_required; "Staged" = $result.staged; "Description" = $result.description.args; "Services Affected" = $result.services_will_be_stopped.service } $summaryResult } } } Function Get-VCSAUpdateStaged { <# .NOTES =========================================================================== Created by: David Stamen Organization: VMware Blog: www.davidstamen.com Twitter: @davidstamen =========================================================================== .SYNOPSIS This function checks for information about the staged VCSA Update. .DESCRIPTION Function to return details about the staged update .EXAMPLE Connect-CisServer -Server 192.168.1.51 -User administrator@vsphere.local -Password VMware1! Get-VCSAUpdateStaged #> if ($Global:DefaultCisServers -eq $null) { Write-Warning "You are not connected to any servers: Use Connect-CisServer to connect to your VCSA" } else { $servers = $Global:DefaultCisServers foreach ($server in $servers) { try { $systemUpdateAPI = Get-CisService -Name 'com.vmware.appliance.update.staged' -Server $server.Name $result = $systemUpdateAPI.get() $summaryResult = [pscustomobject] @{ "Server" = $server.Name; "Version" = $result.version; "Staging Complete" = $result.staging_complete; "Update Type" = $result.update_type; "Severity" = $result.severity; "Priority" = $result.priority; "SizeGB" = [math]::Round(([int]$result.size / 1024 / 1024 / 1024),2) "Reboot Required" = $result.reboot_required; "Description" = $result.description.args; } $summaryResult } catch { $e=$_ if ($e.Exception -like "*com.vmware.vapi.std.errors.not_allowed_in_current_state*") { Write-Warning "Nothing is Staged" } elseif ($e.Exception -like "*com.vmware.vapi.std.errors.unauthenticated *") { Write-Warning "Session is not authenticated" } elseif ($e.Exception -like "*com.vmware.vapi.std.errors.unauthorized*") { Write-Warning "Session is not authorized to perform this operation" } else { Write-Warning "You have encountered an error, please validate server." } } } } } Function Copy-VCSAUpdate { <# .NOTES =========================================================================== Created by: David Stamen Organization: VMware Blog: www.davidstamen.com Twitter: @davidstamen =========================================================================== .SYNOPSIS This function stages the specified VCSA Update. .DESCRIPTION Function to download and stage update .EXAMPLE Connect-CisServer -Server 192.168.1.51 -User administrator@vsphere.local -Password VMware1! Copy-VCSAUpdate -Version "6.7.0.20000" #> Param( [parameter(Mandatory=$true)] [String] $Version ) if ($Global:DefaultCisServers -eq $null) { Write-Warning "You are not connected to any servers: Use Connect-CisServer to connect to your VCSA" } else { $servers = $Global:DefaultCisServers foreach ($server in $servers) { $systemUpdateAPI = Get-CisService -Name 'com.vmware.appliance.update.pending' -Server $server.Name $results = $systemUpdateAPI.stage($Version) $summaryResult = [pscustomobject] @{ "Server" = $server.Name; "Status" = "Update is being Staged, Run Get-VCSAUpdateStaged or Get-VCSAUpdateStatus for current status." } $summaryResult } } } Function Remove-VCSAUpdate { <# .NOTES =========================================================================== Created by: David Stamen Organization: VMware Blog: www.davidstamen.com Twitter: @davidstamen =========================================================================== .SYNOPSIS This function removes a staged VCSA update. .DESCRIPTION Function to delete staged update on VCSA .EXAMPLE Connect-CisServer -Server 192.168.1.51 -User administrator@vsphere.local -Password VMware1! Remove-VCSAUpdate #> if ($Global:DefaultCisServers -eq $null) { Write-Warning "You are not connected to any servers: Use Connect-CisServer to connect to your VCSA" } else { $servers = $Global:DefaultCisServers foreach ($server in $servers) { try { $systemUpdateAPI = Get-CisService -Name 'com.vmware.appliance.update.staged' -Server $server.Name $result = $systemUpdateAPI.delete() $summaryResult = [pscustomobject] @{ "Server" = $server.Name; "Status" = "Staged update has been deleted" } $summaryResult } catch { $e=$_ if ($e.Exception -like "*com.vmware.vapi.std.errors.not_allowed_in_current_state*") { Write-Warning "Nothing is Staged" } elseif ($e.Exception -like "*com.vmware.vapi.std.errors.unauthenticated *") { Write-Warning "Session is not authenticated" } elseif ($e.Exception -like "*com.vmware.vapi.std.errors.unauthorized*") { Write-Warning "Session is not authorized to perform this operation" } else { Write-Warning "You have encountered an error, please validate server." } } } } } Function Start-VCSAUpdatePrecheck { <# .NOTES =========================================================================== Created by: David Stamen Organization: VMware Blog: www.davidstamen.com Twitter: @davidstamen =========================================================================== .SYNOPSIS This function executues the VCSA Update prechecks. .DESCRIPTION Function to run built-in prechecks .EXAMPLE Connect-CisServer -Server 192.168.1.51 -User administrator@vsphere.local -Password VMware1! Start-VCSAUpdatePrecheck -Version "6.7.0.20000" #> Param( [parameter(Mandatory=$true)] [String] $Version ) if ($Global:DefaultCisServers -eq $null) { Write-Warning "You are not connected to any servers: Use Connect-CisServer to connect to your VCSA" } else { $servers = $Global:DefaultCisServers foreach ($server in $servers) { $systemUpdateAPI = Get-CisService -Name 'com.vmware.appliance.update.pending' -Server $server.Name $result = $systemUpdateAPI.precheck($Version) $summaryResult = [pscustomobject] @{ "Server" = $server.Name; "Check Time" = $result.check_time; "Reboot Required" = $result.reboot_required; "Estimated Time to Install" = $result.estimated_time_to_install; "Estimated Time to Rollback" = $result.estimated_time_to_rollback; "Questions" = $result.questions; "Precheck Errors" = $result.issues.errors; "Precheck Warnings" = $result.issues.warnings; "Precheck Info" = $result.issues.info; } $summaryResult } } } Function Start-VCSAUpdateValidate { <# .NOTES =========================================================================== Created by: David Stamen Organization: VMware Blog: www.davidstamen.com Twitter: @davidstamen =========================================================================== .SYNOPSIS This function validates the VCSA Update . .DESCRIPTION Function to run built-in validation .EXAMPLE Connect-CisServer -Server 192.168.1.51 -User administrator@vsphere.local -Password VMware1! Start-VCSAUpdateValidate -Version "6.7.0.20000" -SSODomainPass "VMware1!" #> Param( [parameter(Mandatory=$true)] [String] $Version, [parameter(Mandatory=$true)] [String] $SSODomainPass ) if ($Global:DefaultCisServers -eq $null) { Write-Warning "You are not connected to any servers: Use Connect-CisServer to connect to your VCSA" } else { $servers = $Global:DefaultCisServers foreach ($server in $servers) { $systemUpdateAPI = Get-CisService -Name 'com.vmware.appliance.update.pending' -Server $server.Name $UserData = $systemUpdateAPI.help.validate.user_data.Create() $UserData.add("vmdir.password",$SSODomainPass) $result = $systemUpdateAPI.validate($Version,$UserData) $summaryResult = [pscustomobject] @{ "Server" = $server.Name; "Info" = $result.info "Warnings" = $result.warnings "Errors" = $result.errors } $summaryResult } } } Function Start-VCSAUpdateInstall { <# .NOTES =========================================================================== Created by: David Stamen Organization: VMware Blog: www.davidstamen.com Twitter: @davidstamen =========================================================================== .SYNOPSIS This function installs the VCSA Update specified. .DESCRIPTION Function to install VCSA Update. This requires update to be manually staged. .EXAMPLE Connect-CisServer -Server 192.168.1.51 -User administrator@vsphere.local -Password VMware1! Start-VCSAUpdateInstall -Version "6.7.0.20000" -SSODomainPass "VMware1!" #> Param( [parameter(Mandatory=$true)] [String] $Version, [parameter(Mandatory=$true)] [String] $SSODomainPass ) if ($Global:DefaultCisServers -eq $null) { Write-Warning "You are not connected to any servers: Use Connect-CisServer to connect to your VCSA" } else { $servers = $Global:DefaultCisServers foreach ($server in $servers) { $systemUpdateAPI = Get-CisService -Name 'com.vmware.appliance.update.pending' -Server $server.Name $UserData = $systemUpdateAPI.help.install.user_data.Create() $UserData.add("vmdir.password",$SSODomainPass) $result = $systemUpdateAPI.install($Version,$UserData) $summaryResult = [pscustomobject] @{ "Server" = $server.Name; "Status" = "Update Install has started. Run Get-VCSAUpdateStatus for the latest status." } $summaryResult Write-Warning "During the update process your session will be disconnected. Please reconnect to your server after a few minutes." } } } Function Start-VCSAUpdateStageandInstall { <# .NOTES =========================================================================== Created by: David Stamen Organization: VMware Blog: www.davidstamen.com Twitter: @davidstamen =========================================================================== .SYNOPSIS This function stages and installs the VCSA Update specified. .DESCRIPTION Function to stage and install VCSA Update .EXAMPLE Connect-CisServer -Server 192.168.1.51 -User administrator@vsphere.local -Password VMware1! Start-VCSAUpdateStageandInstall -Version "6.7.0.20000" -SSODomainPass "VMware1!" #> Param( [parameter(Mandatory=$true)] [String] $Version, [parameter(Mandatory=$true)] [String] $SSODomainPass ) if ($Global:DefaultCisServers -eq $null) { Write-Warning "You are not connected to any servers: Use Connect-CisServer to connect to your VCSA" } else { $servers = $Global:DefaultCisServers foreach ($server in $servers) { $systemUpdateAPI = Get-CisService -Name 'com.vmware.appliance.update.pending' -Server $server.Name $UserData = $systemUpdateAPI.help.stage_and_install.user_data.Create() $UserData.add("vmdir.password",$SSODomainPass) $result = $systemUpdateAPI.stage_and_install($Version,$UserData) $summaryResult = [pscustomobject] @{ "Server" = $server.Name; "Status" = "Update Install has started. Run Get-VCSAUpdateStatus for the latest status." } $summaryResult Write-Warning "During the update process your session will be disconnected. Please reconnect to your server after a few minutes." } } } Function Stop-VCSAUpdate { <# .NOTES =========================================================================== Created by: David Stamen Organization: VMware Blog: www.davidstamen.com Twitter: @davidstamen =========================================================================== .SYNOPSIS This function cancels an update task that is cancelable. .DESCRIPTION Function to cancel update task .EXAMPLE Connect-CisServer -Server 192.168.1.51 -User administrator@vsphere.local -Password VMware1! Stop-VCSAUpdate #> if ($Global:DefaultCisServers -eq $null) { Write-Warning "You are not connected to any servers: Use Connect-CisServer to connect to your VCSA" } else { $servers = $Global:DefaultCisServers foreach ($server in $servers) { try { $systemUpdateAPI = Get-CisService -Name 'com.vmware.appliance.update' -Server $server.Name $results = $systemUpdateAPI.cancel() echo $results $summaryResult = [pscustomobject] @{ "Server" = $server.Name; "Status" = "Task has been cancelled" } $summaryResult } catch { $e=$_ if ($e.Exception -like "*com.vmware.vapi.std.errors.not_allowed_in_current_state*") { Write-Warning "Current task is not cancelable" } elseif ($e.Exception -like "*com.vmware.vapi.std.errors.unauthenticated *") { Write-Warning "Session is not authenticated" } elseif ($e.Exception -like "*com.vmware.vapi.std.errors.unauthorized*") { Write-Warning "Session is not authorized to perform this operation" } else { Write-Warning "You have encountered an error, please validate server." } } } } } |