Powershell Script with API Token

Hello everyone,

I have trouble with the API by using powershell script. I would like to add devices by using the API, but when i make the post request, it doesn’t work. When i use the get, it works. I don’t know what is wrong.

I have this error :

Invoke-RestMethod : {“error”:“not_found”}
Au caractère C:\Users\SPASH\Downloads\test.ps1:54 : 13

  • $response = Invoke-RestMethod -Uri $firezoneApiUrl -Method Post -Head …
  •         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    • CategoryInfo : InvalidOperation : (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
    • FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand

If you can help me it would be great. Thanks in advance.
Please find below the powershell script i use (sorry commentary are in French :slight_smile: ) :

Le token d’authentification

$token = “blabla”

URL de l’API Firezone (remplacez par l’URL de votre instance)

$firezoneApiUrl = “https://myfirezone.com/v0/devices

Générer une clé privée et l’enregistrer dans un fichier

$privateKeyPath = “C:\Script\privatekey”

wg genkey | Out-File -Encoding ASCII $privateKeyPath

Lire la clé privée

$privateKey = Get-Content -Path $privateKeyPath

Dériver la clé publique à partir de la clé privée

$publicKey = $privateKey | wg pubkey

Enregistrer la clé publique dans un fichier

$publicKeyPath = “C:\Script\publickey”
$publicKey | Out-File -Encoding ASCII $publicKeyPath

Données du nouvel appareil à ajouter (sans l’adresse IP pour que Firezone l’attribue automatiquement)

$deviceData = @{
‘device’ = @{
‘name’ = ‘DeviceName’
‘use_default_allowed_ips’= ‘true’
‘use_default_dns’ = ‘true’
‘use_default_endpoint’ = ‘true’
‘use_default_mtu’ = ‘true’
‘use_default_persistent_keepalive’ = ‘true’
‘user_id’ = ‘myidfirezone’
‘public_key’ = $publickey
‘preshared_key’= $publicKey
‘ipv4’=‘’
‘description’=‘test’
‘endpoint’=‘’
}
}

Convertir les données en JSON

$deviceJson = $deviceData | ConvertTo-Json

Write-Host $deviceJson

Préparer l’en-tête avec le token d’authentification

$headers = @{
“Authorization” = “Bearer $token”
“Content-Type” = “application/json”
}

Envoyer la requête POST pour ajouter le device

$response = Invoke-RestMethod -Uri $firezoneApiUrl -Method Post -Headers $headers -Body $deviceJson

Afficher la réponse

$response

Thanks for your help.