reseau:cloud:proxmox:apirestpowershell
Table des matières
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