Workspace Environment Management

Sauvegardez automatiquement les ensembles de configuration à l’aide des API WEM et de Windows PowerShell

En tant qu’administrateur de gestion de l’environnement de travail (WEM), vous devrez peut-être sauvegarder régulièrement vos ensembles de configuration pour éviter que les paramètres ne soient perdus. Vous souhaiterez peut-être déclencher la sauvegarde, par exemple, toutes les 12 heures, et gérer les fichiers de sauvegarde localement et automatiquement. En utilisant les API publiques WEM et Windows PowerShell, vous pouvez atteindre cet objectif.

Un flux de travail général est le suivant :

  1. Demander un client API Citrix Cloud
  2. Écrivez un script PowerShell pour sauvegarder vos ensembles de configuration
  3. Configurer une tâche planifiée pour exécuter le script

Logiciels requis

Avant de commencer, assurez-vous de connaître votre ID client Citrix et les URL de base de l’API associées.

Connectez-vous à Citrix Cloud, accédez à Gestion des identités et des accès > Accès APIet recherchez votre ID client Citrix.

ID client Citrix

Les URL de base de l’API, y compris l’URL de base de l’API Citrix Auth et l’URL de base de l’API WEM, sont liées à la région de Citrix Cloud à laquelle vous vous connectez. La région est déterminée lors de votre connexion à Citrix Cloud. Vous pouvez également interroger votre région dans Paramètres du compte.

Région

Vous pouvez trouver les URL de base de l’API en consultant le tableau suivant.

Région URL de base de l’API d’authentification Citrix URL de base de l’API WEM
États-Unis (US) api-us.cloud.com api.wem.cloud.com
Union européenne (UE) api-eu.cloud.com eu-api.wem.cloud.com
Asie Pacifique Sud (AP-S) api-ap-s.cloud.com aps-api.wem.cloud.com
Japon (JP) api.citrixcloud.jp jp-api.wem.citrixcloud.jp

Pour plus d’informations sur les URL de base de l’API, consultez Prise en main des API Citrix Cloud et Présentation de l’API WEM.

Demander un client API Citrix Cloud

Accédez à Gestion des identités et des accès > Accès API. Tapez le nom de votre client sécurisé, cliquez sur Créer un clientet enregistrez l’ID client sécurisé et le secret client localement.

Client sécurisé API

Écrivez un script PowerShell pour sauvegarder vos ensembles de configuration

Utilisez le script PowerShell suivant et enregistrez-le sous Invoke-WEMConfigSetBackupAPI.ps1. Assurez-vous de remplacer les variables au début du 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-->

Pour plus d’informations sur les jetons porteurs, consultez Premiers pas avec les API Citrix Cloud.

Pour plus d’informations sur l’utilisation de l’API WEM pour sauvegarder l’ensemble de configuration, voir Exportation de l’API de l’ensemble de configuration WEM.

Remarque :

Chaque jeton porteur expire après une heure. Pour éviter d’appeler fréquemment les API d’authentification Citrix Cloud et les API WEM, mettez en cache le jeton porteur et réutilisez-le si la durée de sauvegarde prend moins d’une heure.

Si vous rencontrez l’erreur 504 Gateway Time-out, cela signifie probablement que votre ensemble de configuration est trop volumineux, ce qui entraîne un dépassement du délai d’expiration de l’API d’une minute. Dans de tels cas, essayez plutôt d’utiliser le script PowerShell suivant. Notez que ce script utilise des API qui ne sont pas actuellement publiques et que ces API peuvent changer à l’avenir.


  # 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-->

Configurer une tâche planifiée pour exécuter le script

Sur une machine avec accès à Citrix Cloud, démarrez Planificateur de tâches à partir du menu Démarrer de Windows ** ou démarrez taskchd.msc à partir de l’invite de commande **Windows .

Vous pouvez créer un dossier nommé Tâche planifiée WEM.

Dans le dossier, créez une tâche nommée lancez Invoke-WEMConfigSetBackupAPI.ps1. Ajoutez un nouveau déclencheur répété toutes les 12 heures pendant une durée de 1 jour et ajoutez une nouvelle action de démarrage du script Invoke-WEMConfigSetBackupAPI.ps1.

Planificateur de tâches

Sauvegardez automatiquement les ensembles de configuration à l’aide des API WEM et de Windows PowerShell