When attempting to manage or automate recovery tasks using the PowerCLI SRM module (Connect-SrmServer), the connection fails despite the following conditions being met:
VMware Live Cyber Recovery (VLCR) is active and correctly integrated with vCenter Server in the Web UI.
Protected virtual machines and protection groups are visible and healthy in the Cloud Console.
Recovery plans and failovers execute successfully via the Web UI.
VMware vCenter Server 8.x/9.x
VMware Live Cyber Recovery (formerly VCDR)
VMware PowerCLI
This is by design. VMware Live Cyber Recovery is a SaaS-based offering. The PowerCLI SRM module (VMware.VimAutomation.Srm) communicates with a local, on-premises Site Recovery Manager appliance. Because VLCR operates via a cloud-based management plane, there is no local SRM service for PowerCLI to "link" to.
Live Cyber Recovery utilizes a specific REST API rather than the PowerCLI SRM module. This API allows users to retrieve a full list of component types and specific component information.
Detailed information on API availability and current limitations can be found in the official documentation: VMware Live Cyber Recovery API Latest
************* Attached Sample script below. ***************
Note, this script is not production ready and requires review and authorization by the user before implementing outside of a test environment. Using the below code snippet is at the initiators own risk. Furthermore, this is not a script that VMware by Broadcom claims as their own or can be further supported by VMware by Broadcom or its representatives. The script has been provided purely as an example and is meant to be iterated on and re-scripted according to the user's needs.
<# -- @date: 2026-04-13 @description: Connect to Live Cyber Recovery and get the details of all objects in the cloud file system using the REST API in Powershell#>
# Set variables$LCR_API_TOKEN = "your_api_token" # Get API token from https://console.cloud.vmware.com/csp/gateway/portal/#/user/tokens$LCR_AUTH_URL = "https://console.cloud.vmware.com/csp/gateway/am/api/auth/api-tokens/authorize?refresh_token="$LCR_AUTH_URL += $LCR_API_TOKEN$CRO_FQDN = "vcdr-xxx-xxx-xxx-xxx.app.vcdr.vmware.com" # Cyber Recovery Orchestrator FQDN, the hostname in the VMware Live Cyber Recovery web UI$LCR_API_URL = "https://$CRO_FQDN/api/vcdr/v1"
# Retrieve LCR access token# https://developer.broadcom.com/xapis/vmware-live-cyber-recovery-api/latest/api-security-schema/$auth_head = @{ "Content-Type" = "application/json" "Accept" = "application/json"}
try { Write-Host "Attempting to retrieve access token for Live Cyber Recovery API..." $auth_response = Invoke-WebRequest -Uri $LCR_AUTH_URL -Headers $auth_head -Method Post
$access_token = $auth_response.Content | ConvertFrom-Json | Select-Object -ExpandProperty access_token Write-Host "Access token retrieved successfully." Write-Host "Access token: $access_token"} catch { Write-Host "Something went wrong." Write-Host "Error: $($_.Exception.Message)" Write-Host "Error details: $($_.ErrorDetails.Message)" Write-Host "Error response: $($_.Response.Content)" return}
$api_head = @{ "x-da-access-token" = $access_token}
# Get all objects in the cloud file systemtry { Write-Host "Attempting to get all objects in the cloud file system..." $cloudfs_url = $LCR_API_URL + "/cloud-file-systems" $api_response = Invoke-WebRequest -Uri $cloudfs_url -Headers $api_head -Method Get $cloudfs_data = $api_response.Content | ConvertFrom-Json
if ($api_response.StatusCode -eq 200) { Write-Host "Cloud file system objects retrieved successfully." # $cloudfs_data PS object will look like this: # cloud_file_systems # ------------------ # {@{id=e87ed6b5-24f8-4600-9618-1683f8d1f9e5; name=va-dr-cfs-02}, @{id=5ffbb902-835d-4362-93c6-e2559a0800d7; name=va-dr-cfs-01}} Write-Host "Number of cloud file systems: $($cloudfs_data.cloud_file_systems.Count)" Write-Host "Cloud file system objects: $($cloudfs_data.cloud_file_systems)" } else { Write-Host "Something went wrong." Write-Host "Error: $($_.Exception.Message)" Write-Host "Error details: $($_.ErrorDetails.Message)" Write-Host "Error response: $($_.Response.Content)" return }} catch { Write-Host "Error: $($_.Exception.Message)" Write-Host "Error details: $($_.ErrorDetails.Message)" Write-Host "Error response: $($_.Response.Content)" return}
# Retrieve details of all cloud file system objectstry { Write-Host "Attempting to get details of all cloud file system objects..." foreach ($object in $cloudfs_data.cloud_file_systems) { Write-Host "Retrieving details of object: $($object.name)..." $object_url = $cloudfs_url + "/$($object.id)" $object_response = Invoke-WebRequest -Uri $object_url -Headers $api_head -Method Get $object_data = $object_response.Content | ConvertFrom-Json Write-Host "File System $($object.name) details: $($object_data)" }} catch { Write-Host "Error: $($_.Exception.Message)" Write-Host "Error details: $($_.ErrorDetails.Message)" Write-Host "Error response: $($_.Response.Content)" return}# Get Protected VMs$VMList= @()
Foreach ($cloud_id in $cloudfs_data.cloud_file_systems.id) { $cloudvm_url=$cloudfs_url + "/" + $cloud_id + "/protected-vms" $api_response = Invoke-WebRequest -Uri $cloudvm_url -Headers $api_head -Method Get $VMList += ($api_response.Content | ConvertFrom-Json).vms}$VMList