DNS API Powershell example
22.07.2022
Skip to main content
DNS API Powershell example
Vous trouverez ci-dessous des exemples d’utilisation de l’API DNS avec PowerShell.
Authentification
Utiliser la cle API (recommande)
Vous trouverez votre cle API dans votre profil client sous Compte > Profil client > Acces API. Activez l’acces API et copiez la cle API affichee.
$apiKey = "VOTRE_CLE_API_DE_WHMCS"
$headers = @{"X-API-Key"=$apiKey; "Content-Type"="application/json"}
Alternative: Basic Auth (non recommande avec caracteres speciaux dans le mot de passe)
$username = "votre-email@example.ch"
$password = "votre-mot-de-passe"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password)))
$headers = @{Authorization=("Basic {0}" -f $base64AuthInfo); "Content-Type"="application/json"}
Lister toutes les zones
$result = Invoke-RestMethod -Headers $headers -Uri "https://api.firestorm.ch/dns/v1/zones" $result.zones | Format-Table id, name
Obtenir l’ID de zone par nom de domaine
$domain = "example.ch"
$zones = Invoke-RestMethod -Headers $headers -Uri "https://api.firestorm.ch/dns/v1/zones"
$zoneId = ($zones.zones | Where-Object { $_.name -eq $domain }).id
if ($zoneId) {
Write-Host "ID de zone pour $domain est: $zoneId"
} else {
Write-Host "Zone non trouvee!"
}
Lister les enregistrements d’une zone
$domain = "example.ch"
$zones = Invoke-RestMethod -Headers $headers -Uri "https://api.firestorm.ch/dns/v1/zones"
$zoneId = ($zones.zones | Where-Object { $_.name -eq $domain }).id
$result = Invoke-RestMethod -Headers $headers -Uri "https://api.firestorm.ch/dns/v1/zone/$zoneId/records"
$result.records | Format-Table name, type, data, ttl
Ajouter un enregistrement
$domain = "example.ch"
$zones = Invoke-RestMethod -Headers $headers -Uri "https://api.firestorm.ch/dns/v1/zones"
$zoneId = ($zones.zones | Where-Object { $_.name -eq $domain }).id
$body = @{
name = "test.$domain"
type = "A"
data = "192.168.1.1"
ttl = 3600
} | ConvertTo-Json
$result = Invoke-RestMethod -Method Post -Headers $headers -Uri "https://api.firestorm.ch/dns/v1/zone/$zoneId/record" -Body $body
Write-Host "ID d'enregistrement: $($result.record_id)"
Mettre a jour un enregistrement
$domain = "example.ch"
$zones = Invoke-RestMethod -Headers $headers -Uri "https://api.firestorm.ch/dns/v1/zones"
$zoneId = ($zones.zones | Where-Object { $_.name -eq $domain }).id
$body = @{
name = "test.$domain"
type = "A"
old_data = "192.168.1.1"
data = "192.168.1.2"
ttl = 3600
} | ConvertTo-Json
Invoke-RestMethod -Method Put -Headers $headers -Uri "https://api.firestorm.ch/dns/v1/zone/$zoneId/record" -Body $body
Supprimer un enregistrement
$domain = "example.ch"
$zones = Invoke-RestMethod -Headers $headers -Uri "https://api.firestorm.ch/dns/v1/zones"
$zoneId = ($zones.zones | Where-Object { $_.name -eq $domain }).id
$body = @{
name = "test.$domain"
type = "A"
data = "192.168.1.2"
} | ConvertTo-Json
Invoke-RestMethod -Method Delete -Headers $headers -Uri "https://api.firestorm.ch/dns/v1/zone/$zoneId/record" -Body $body
ACME DNS-01 Challenge (Let’s Encrypt)
Propagation automatique: Pour les enregistrements _acme-challenge.*, l’API attend automatiquement que tous les serveurs DNS aient l’enregistrement. La reponse contient les details de propagation.
# Configuration - copier la cle API du profil client WHMCS
$apiKey = "VOTRE_CLE_API_DE_WHMCS"
$headers = @{"X-API-Key"=$apiKey; "Content-Type"="application/json"}
$domain = "example.ch"
$token = "votre-token-acme-ici"
# Obtenir l'ID de zone
$zones = Invoke-RestMethod -Headers $headers -Uri "https://api.firestorm.ch/dns/v1/zones"
$zoneId = ($zones.zones | Where-Object { $_.name -eq $domain }).id
# Ajouter le token ACME challenge
$body = @{
name = "_acme-challenge.$domain"
type = "TXT"
data = "`"$token`""
ttl = 60
} | ConvertTo-Json
$result = Invoke-RestMethod -Method Post -Headers $headers -Uri "https://api.firestorm.ch/dns/v1/zone/$zoneId/record" -Body $body
# Verifier si la propagation a reussi
if ($result.propagation.propagated) {
Write-Host "DNS propage en $($result.propagation.time) secondes"
Start-Sleep -Seconds 5
} else {
Write-Host "Attention: Propagation non complete!"
}
# === Effectuer la validation ACME ici ===
# Apres validation: supprimer le token
$body = @{
name = "_acme-challenge.$domain"
type = "TXT"
} | ConvertTo-Json
Invoke-RestMethod -Method Delete -Headers $headers -Uri "https://api.firestorm.ch/dns/v1/zone/$zoneId/record" -Body $body
Script complet en fonction
function Set-FirestormDnsRecord {
param(
[string]$ApiKey,
[string]$Domain,
[string]$RecordName,
[string]$RecordType,
[string]$RecordData,
[int]$TTL = 3600
)
$headers = @{"X-API-Key"=$ApiKey; "Content-Type"="application/json"}
# Obtenir l'ID de zone
$zones = Invoke-RestMethod -Headers $headers -Uri "https://api.firestorm.ch/dns/v1/zones"
$zoneId = ($zones.zones | Where-Object { $_.name -eq $Domain }).id
if (-not $zoneId) {
throw "Zone $Domain non trouvee!"
}
# Ajouter l'enregistrement
$body = @{
name = $RecordName
type = $RecordType
data = $RecordData
ttl = $TTL
} | ConvertTo-Json
return Invoke-RestMethod -Method Post -Headers $headers -Uri "https://api.firestorm.ch/dns/v1/zone/$zoneId/record" -Body $body
}
# Utilisation:
Set-FirestormDnsRecord -ApiKey "VOTRE_CLE_API_DE_WHMCS" -Domain "example.ch" -RecordName "test.example.ch" -RecordType "A" -RecordData "192.168.1.1"
Remarque
Avant d’utiliser l’API, vous devez activer l’acces API dans le panneau d’administration sous Compte > Profil client > Acces API. Apres l’activation, votre cle API personnelle sera affichee.