Workspace Environment Management

Realice copias de seguridad automáticas de los conjuntos de configuración mediante las API WEM y Windows PowerShell

Como administrador de Gestión del entorno del espacio de trabajo (WEM), es posible que necesite realizar copias de seguridad de sus conjuntos de configuración periódicamente para evitar que se pierdan las configuraciones. Es posible que desee activar la copia de seguridad, por ejemplo, cada 12 horas, y administrar los archivos de copia de seguridad de forma local y automática. Al utilizar las API públicas de WEM y Windows PowerShell, puede lograr ese objetivo.

Un flujo de trabajo general es el siguiente:

  1. Solicitar un cliente API de Citrix Cloud
  2. Escriba un script de PowerShell para realizar una copia de seguridad de sus conjuntos de configuración
  3. Configurar una tarea programada para ejecutar el script

Requisitos previos

Antes de comenzar, asegúrese de conocer su ID de cliente de Citrix y las URL de la base de API relacionadas.

Inicie sesión en Citrix Cloud, navegue hasta Administración de identidad y acceso > Acceso a APIy busque su ID de cliente de Citrix.

Identificación de cliente de Citrix

Las URL base de API, incluidas la URL base de API de Citrix Auth y la URL base de API de WEM, están relacionadas con la región de Citrix Cloud a la que se está conectando. La región se determina cuando se incorpora a Citrix Cloud. También puedes consultar tu región en Configuración de cuenta.

Región

Puede encontrar las URL base de la API consultando la siguiente tabla.

Región URL base de la API de autenticación de Citrix URL base de la API de WEM
Estados Unidos (EE.UU.) api-us.cloud.com api.wem.cloud.com
Unión Europea (UE) api-eu.cloud.com eu-api.wem.cloud.com
Asia Pacífico Sur (AP-S) api-ap-s.cloud.com aps-api.wem.cloud.com
Japón (JP) api.citrixcloud.jp jp-api.wem.citrixcloud.jp

Para obtener más información sobre las URL base de la API, consulte Introducción a las API de Citrix Cloud y Descripción general de la API de WEM.

Solicitar un cliente API de Citrix Cloud

Vaya a Gestión de identidad y acceso > Acceso a API. Escriba el nombre de su cliente seguro, haga clic en Crear clientey guarde el ID del cliente seguro y el secreto del cliente localmente.

Cliente seguro de API

Escriba un script de PowerShell para realizar una copia de seguridad de sus conjuntos de configuración

Utilice el siguiente script de PowerShell y guárdelo como Invoke-WEMConfigSetBackupAPI.ps1. Asegúrese de reemplazar las variables al comienzo del script.


  # replace the variables before running the script

  $CitrixCustomerId = 'your-citrix-customer-id'
  $CitrixAuthAPIBaseURL = 'api-us.cloud.com'
  $CitrixWEMAPIBaseURL = 'api.wem.cloud.com'
  $ClientId = 'your-api-client-id'
  $ClientSecret = 'your-api-client-secret'

  $ConfigSetsToBackUp = @('Default Site', 'MyConfigSet') # leave it empty if you want to back up all configuration sets
  $FolderToSaveBackup = 'C:\ProgramData'

  # get bearer token

  $ErrorActionPreference = 'Stop'

  $URL = "https://${CitrixAuthAPIBaseURL}/cctrustoauth2/${CitrixCustomerId}/tokens/clients"
  $Body = "grant_type=client_credentials&client_id=${ClientId}&client_secret=${ClientSecret}"
  $Response = Invoke-RestMethod -Method 'Post' -Uri $URL -Body $Body -ContentType 'application/x-www-form-urlencoded'

  $BearerToken = $Response.access_token

  if ([string]::IsNullOrEmpty($BearerToken))
  {
      throw 'Cannot retrieve bearer token.'
  }

  Write-Host "Retrieved bearer token successfully."

  # back up WEM configuration sets

  if (-not (Test-Path -Path $FolderToSaveBackup -PathType 'Container'))
  {
      throw 'The folder to save backup not exists.'
  }

  $Headers = @{
      'Citrix-CustomerId' = $CitrixCustomerId
      'Accept' = 'application/json'
      'Authorization' = "CWSAUTH bearer=${BearerToken}"
  }

  if ($ConfigSetsToBackUp.Count -eq 0 -or $ConfigSetsToBackUp -eq $null)
  {
      $URL = "https://${CitrixWEMAPIBaseURL}/services/wem/sites"
      $Response = Invoke-RestMethod -Method 'Get' -Uri $URL -Headers $Headers
      $ConfigSetsToBackUp = $Response.items |% { $_.name }
  }

  $ConfigSetsToBackUp | ForEach-Object {
      Write-Host "Backing up configuration set ""$_"""
      $URL = "https://${CitrixWEMAPIBaseURL}/services/wem/sites/%24export?name=$_"
      Write-Host "GET $URL"
      $Response = Invoke-RestMethod -Method 'Get' -Uri $URL -Headers $Headers
      $Timestamp = Get-Date -Format "yyyyMMddHHmmss"
      $Response | ConvertTo-Json -Depth 10 | Out-File (Join-Path $FolderToSaveBackup "${_}-${Timestamp}.json")
  }

<!--NeedCopy-->

Para obtener más información sobre los tokens al portador, consulte Introducción a las API de Citrix Cloud.

Para obtener más información sobre el uso de la API de WEM para realizar copias de seguridad del conjunto de configuración, consulte Exportación de la API del conjunto de configuración de WEM.

Nota:

Cada token al portador caduca después de una hora. Para evitar invocar con frecuencia las API de autenticación de Citrix Cloud y las API de WEM, almacene en caché el token portador y reutilícelo si la duración de la copia de seguridad toma menos de una hora.

Si encuentra el error 504 Gateway Time-out, probablemente significa que su conjunto de configuración es demasiado grande, lo que provoca que el tiempo de respaldo exceda el tiempo de espera de API de 1 minuto. En tales casos, intente utilizar el siguiente script de PowerShell. Tenga en cuenta que este script utiliza API que actualmente no son públicas y que pueden cambiar en el futuro.


  # replace the variables before running the script

  $CitrixCustomerId = 'your-citrix-customer-id'
  $CitrixAuthAPIBaseURL = 'api-us.cloud.com'
  $CitrixWEMAPIBaseURL = 'api.wem.cloud.com'
  $ClientId = 'your-api-client-id'
  $ClientSecret = 'your-api-client-secret'

  $ConfigSetsToBackUp = @('Default Site', 'MyConfigSet') # leave it empty if you want to back up all configuration sets
  $FolderToSaveBackup = 'C:\ProgramData'

  # get bearer token

  $ErrorActionPreference = 'Stop'

  $URL = "https://${CitrixAuthAPIBaseURL}/cctrustoauth2/${CitrixCustomerId}/tokens/clients"
  $Body = "grant_type=client_credentials&client_id=${ClientId}&client_secret=${ClientSecret}"
  $Response = Invoke-RestMethod -Method 'Post' -Uri $URL -Body $Body -ContentType 'application/x-www-form-urlencoded'

  $BearerToken = $Response.access_token

  if ([string]::IsNullOrEmpty($BearerToken))
  {
      throw 'Cannot retrieve bearer token.'
  }

  Write-Host "Retrieved bearer token successfully."

  # back up WEM configuration sets

  if (-not (Test-Path -Path $FolderToSaveBackup -PathType 'Container'))
  {
      throw 'The folder to save backup not exists.'
  }

  $Headers = @{
      'Citrix-CustomerId' = $CitrixCustomerId
      'Accept' = 'application/json'
      'Authorization' = "CWSAUTH bearer=${BearerToken}"
  }

  $URL = "https://${CitrixWEMAPIBaseURL}/services/wem/sites"
  $Response = Invoke-RestMethod -Method 'Get' -Uri $URL -Headers $Headers
  $Sites = $Response.items

  if ($ConfigSetsToBackUp -ne $null -and $ConfigSetsToBackUp.Count -gt 0)
  {
      $Sites = $Sites | Where-Object { $_.name -in $ConfigSetsToBackUp }
  }

  $Sites | ForEach-Object {
      $Name = $_.name
      Write-Host "Backing up configuration set `"$Name`""
      $URL = "https://${CitrixWEMAPIBaseURL}/services/wem/export/site?async=true"
      $FolderName = "BACKUPFOLDER-" + [Guid]::NewGuid().ToString()
      $Body = @{
          folderName = $FolderName
          id = $_.id
          name = $_.name
          type = 'Configuration set'
      } | ConvertTo-Json
      $Response = Invoke-RestMethod -Method 'Post' -Uri $URL -Headers $Headers -Body $Body -ContentType 'application/json; charset=utf-8'

      Write-Host "Waiting for the backup job to complete..."
      $URL = "https://${CitrixWEMAPIBaseURL}/services/wem/export/site/recentJobs"
      do
      {
          Start-Sleep -Seconds 5
          $Response = Invoke-RestMethod -Method 'Get' -Uri $URL -Headers $Headers
          $BackupJob = $Response.backup[0]
          $IsOnGoing = $BackupJob.id -eq $_.id -and $BackupJob.status -eq 'Running'
      } while ($IsOnGoing)

      $URL = "https://${CitrixWEMAPIBaseURL}/services/wem/export/site/contentView?name=${FolderName}"
      $Response = Invoke-RestMethod -Method 'Get' -Uri $URL -Headers $Headers

      $Timestamp = Get-Date -Format "yyyyMMddHHmmss"
      $Response | ConvertTo-Json -Depth 10 | Out-File (Join-Path $FolderToSaveBackup "${Name}-${Timestamp}.json") -Encoding utf8

      $URL = "https://${CitrixWEMAPIBaseURL}/services/wem/export?prefix=site%2F${FolderName}%2F"
      $Response = Invoke-RestMethod -Method 'Delete' -Uri $URL -Headers $Headers
  }

<!--NeedCopy-->

Configurar una tarea programada para ejecutar el script

En una máquina con acceso a Citrix Cloud, inicie Programador de tareas desde el menú Inicio de Windows o inicie taskchd.msc desde el símbolo del sistema de Windows .

Puede crear una carpeta llamada Tarea programada WEM.

En la carpeta, cree una tarea llamada launch Invoke-WEMConfigSetBackupAPI.ps1. Agregue un nuevo disparador que se repita cada 12 horas durante 1 día y agregue una nueva acción de inicio de script Invoke-WEMConfigSetBackupAPI.ps1.

Programador de tareas

Realice copias de seguridad automáticas de los conjuntos de configuración mediante las API WEM y Windows PowerShell