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 :
- Demander un client API Citrix Cloud
- Écrivez un script PowerShell pour sauvegarder vos ensembles de configuration
- 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.
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.
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.
É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
.