Outils pour utilisateurs

Outils du site


reseau:cloud:proxmox:apirestpowershell

Utiliser l'API REST de Proxmox avec Powershell

Ressources

Documentation de l'API Proxmox : https://pve.proxmox.com/wiki/Proxmox_VE_API

Utilisation avec Powersell :https://github.com/Corsinvest/cv4pve-api-powershell

Créer un clé API

* sans séparation de privilège

Installation de Powershell 7

* Rechercher la dernière version de Powershell Core

winget search Microsoft.PowerShell
  • Installer Powershell
winget install --id Microsoft.PowerShell --source winget

Install du module POwershell

Ouvrir une console Powershell

PS > Install-Module -Name Corsinvest.ProxmoxVE.Api

Vérifier l'installation du module

PS > Get-Module -ListAvailable Corsinvest.ProxmoxVE.Api

Connexion au cluster

  • Connexion au cluster en indiquant un jeton d'API
PS> Import-Module Corsinvest.ProxmoxVE.Api
 
PS > $ticket = Connect-PveCluster -HostsAndPorts 10.xxx.xxx.xxx:8006 -SkipCertificateCheck -ApiToken nom_jeton=valeur_jeton
 
#return Ticket, default set $Global:PveTicketLast
#this is useful when connections to multiple clusters are needed use parameter -SkipRefreshPveTicketLast
 
 
# visualiser le ticket
 
PS> $ticket
HostName             : 1.0xxx.xxx.xxx
Port                 : 8006
SkipCertificateCheck : True
CSRFPreventionToken  :
ApiToken             : nom_jeton=valeur_jeton
CSRFPreventionToken  : 
 
#For disable output call Connect-PveCluster > $null
 
#Get version
PS > $ret = Get-PveVersion
 
#$ret return a class PveResponse
 
#Show data
PS > $ret.Response.data
 
version repoid           release
------- ------           -------
8.1.4   ec5affc9e41f1d79 8.1
 
#Show data 2
PS /home/frank> $ret.ToTable()
version repoid           release
------- ------           -------
8.1.4   ec5affc9e41f1d79 8.1

Lister les VM d'un noeud

PS > (Get-PveNodesQemu -node siohyp2 -Full).ToTable()
 
      mem   diskread status  disk cpu   diskwrite     netout cpus     maxmem qmpstatus      netin uptime     maxdisk name                 vmid
       ---   -------- ------  ---- ---   ---------     ------ ----     ------ ---------      ----- ------     ------- ----                 ----
         0          0 stopped    0   0           0          0    4 2147483648 stopped            0      0 34359738368 WinCouderchon         262
         0          0 stopped    0   0           0          0    2 4194304000 stopped            0      0 53687091200 ServeurAD             214
         0          0 stopped    0   0           0          0    4 1073741824 stopped            0      0 10737483776 SNS                   105

Lister les conteneurs LXC d'un noeud

(Get-PveNodeslxc -node siohyp2).ToTable()

  netin       maxmem type uptime     maxdisk name                     vmid            mem  diskread status   diskwrite  netout       disk  cpu     swap      maxswap cpus
   -----       ------ ---- ------     ------- ----                     ----            ---  -------- ------   ---------  ------       ----  ---     ----      ------- ----
       0    536870912 lxc       0  8589934592 abdessamad.elbouzrati    669               0         0 stopped          0       0          0    0        0    536870912    1
       0    536870912 lxc       0  8589934592 debian-client-11         150               0         0 stopped          0       0          0    0        0    536870912    1
       0    536870912 lxc       0  8589934592 debian-routeur           166               0         0 stopped          0       0          0    0        0    536870912    1

Afficher que les Vmid

PS C:\Users\boulesteix.fabien> (Get-PveNodeslxc -node siohyp2).response.data | Select-Object vmid

Lister les pools de ressources

(Get-PvePools).todata()

Lister les VM d'un pool de ressources

(Get-PvePools -Poolid nompool).Response.data.members | where-Object type -EQ "qemu" | Select-Object vmid

Lister les conteneurs d'un pool de ressources

(Get-PvePools -Poolid nompool).Response.data.members | where-Object type -EQ "lxc" | Select-Object vmid

Supprimer un conteneur LXC

Remove-PveNodesLxc -DestroyUnreferencedDisks -Force -Node siohyp1 -Purge -Vmid 188

Response            : @{data=UPID:siohyp1:00189780:20ABFE12:66DC528F:vzdestroy:188:nom_jeton:}
StatusCode          : 200
ReasonPhrase        :
IsSuccessStatusCode : True
RequestResource     : /nodes/siohyp1/lxc/188
Parameters          : {[force, 1], [purge, 1], [destroy-unreferenced-disks, 1]}
Method              : Delete
ResponseType        : json

Supprimer les conteneurs LXC d'un pool de ressources

(Get-PvePools -Poolid nom_pool).Response.data.members | where-Object type -EQ "lxc" | Select-Object vmid, node | foreach-object { Remove-PveNodesLxc -DestroyUnreferencedDisks -Force -Node $PSItem.node -Purge -Vmid $PSItem.vmid}

Supprimer les conteneurs LXC de plusieurs pools de ressources

PS > (Get-PvePools).todata() | Where-Object poolid -like "*2022*" | foreach-object {(Get-PvePools -Poolid $PSItem.poolid).Response.data.members } | where-Object type -EQ "lxc" | foreach-object { Remove-PveNodesLxc -DestroyUnreferencedDisks -Force -Node $PSItem.node -Purge -Vmid $PSItem.vmid}

Code alternatif car cela ne semble pas fonctionner :

#$ticket = Connect-PveCluster -HostsAndPorts 10.187.36.12:8006 -SkipCertificateCheck -ApiToken techer.charles@Valadon!powershell=dd5e96f7-fcd9-4fea-ad12-7bbdbd08760d

# Définir un tableau de pools
$poolList = @("nompool1", "nompool2", "nompool3")

# Boucle sur chaque Pool
foreach ($pool in $poolList) {
    Write-Host "Traitement du Pool $pool"

    # appel API de Corsinvest.ProxmoxVE.Api
    (Get-PvePools -Poolid $pool).Response.data.members | where-Object type -EQ "lxc" | Select-Object vmid, node | foreach-object { Remove-PveNodesLxc -DestroyUnreferencedDisks -Force -Node $PSItem.node -Purge -Vmid $PSItem.vmid}
    Write-Host "Pool supprimé : $pool"
  
  
    #arrêter les VM
    (Get-PvePools -Poolid $pool).Response.data.members | where-Object type -EQ "qemu" | Select-Object vmid, node | foreach-object { Stop-PveVm -VmIdOrName $PSItem.vmid}
    
    #supprimer les VM
    (Get-PvePools -Poolid $pool).Response.data.members | where-Object type -EQ "qemu" | Select-Object vmid, node | foreach-object { Remove-PveNodesQemu -DestroyUnreferencedDisks -Node $PSItem.node -Purge -Vmid $PSItem.vmid}

    #supprimer le pool
    Remove-PvePools -Poolid $pool
    Write-Host "Pool $pool supprimé"

}

Code à améliorer car dans les faits, il faut relancer plusieurs fois le script, le temps que les conteneurs LXC et les VM soient effectivement supprimés piur pouvoir supprimer leur pool.

Arrêter et supprimer les VM d'un pool de ressources

#arrêter les VM
(Get-PvePools -Poolid nom_pool).Response.data.members | where-Object type -EQ "qemu" | Select-Object vmid, node | foreach-object { Stop-PveVm -VmIdOrName $PSItem.vmid}

#supprimer les VM
(Get-PvePools -Poolid nom_pool).Response.data.members | where-Object type -EQ "qemu" | Select-Object vmid, node | foreach-object { Remove-PveNodesQemu -DestroyUnreferencedDisks -Node $PSItem.node -Purge -Vmid $PSItem.vmid}

Arrêter et supprimer les VM de plusieurs pools de ressources

#Arrêter toutes les VM concernées
PS > (Get-PvePools).todata() | Where-Object poolid -like "*2022*" | foreach-object {(Get-PvePools -Poolid $PSItem.poolid).Response.data.members} | where-Object type -EQ "qemu" | Select-Object vmid, node | foreach-object { Stop-PveVm -VmIdOrName $PSItem.vmid}

#supprimer toutes les VM concernées
PS > (Get-PvePools).todata() | Where-Object poolid -like "*2022*" | foreach-object {(Get-PvePools -Poolid $PSItem.poolid).Response.data.members} | where-Object type -EQ "qemu" | Select-Object vmid, node | foreach-object { Remove-PveNodesQemu -DestroyUnreferencedDisks -Node $PSItem.node -Purge -Vmid $PSItem.vmid}

Supprimer plusieurs pools de ressources

#Arrêter toutes les VM concernées
PS > (Get-PvePools).todata() | Where-Object poolid -like "*2022*" | foreach-object {Remove-PvePools -Poolid $PSItem.poolid }

===== Lister les étudiants d'une promotion  =====
<code powershell>
PS > (Get-PveAccessusers -full).Response.data | Where-Object  groups -eq 'BTSSIO2022'  | Select-Object userid

userid
------
toto.florian@Valadon
tata@Valadon

Lister les permissions d'un compte

PS > (Get-PveAccesspermissions -Userid haj.ma@Valadon).Response.data

Créer un pool et affecter des permissions

 
 
reseau/cloud/proxmox/apirestpowershell.txt · Dernière modification : 2025/09/08 23:10 de admin