> For the complete documentation index, see [llms.txt](https://docs.verge.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.verge.io/learn-the-platform/fr/module-8-developpeur-et-devops/03-powershell-module.md).

# Module PowerShell (PSVergeOS)

**PSVergeOS** est un module PowerShell multiplateforme qui fournit **plus de 200 cmdlets** pour gérer l’infrastructure VergeOS via l’API REST. Si votre équipe utilise déjà PowerShell pour la gestion de Windows Server, Active Directory ou VMware, PSVergeOS vous permet d’étendre ces mêmes workflows et modèles de script à VergeOS — avec une prise en charge complète du pipeline, la complétion par tabulation et la `Verbe-Nom` convention de nommage des cmdlets.

## Prérequis et installation

| Exigence       | Version                    |
| -------------- | -------------------------- |
| **PowerShell** | 7.4 ou version ultérieure  |
| **VergeOS**    | 26.0 ou version ultérieure |
| **Plateforme** | Windows, macOS, Linux      |

### Depuis la PowerShell Gallery (recommandé)

```powershell
Install-Module -Name PSVergeOS -Scope CurrentUser
```

### Installation manuelle (développement)

```powershell
git clone https://github.com/verge-io/PSVergeOS.git
Import-Module ./PSVergeOS/PSVergeOS.psd1
```

### Vérifier l’installation

```powershell
Get-Module PSVergeOS -ListAvailable
Get-Command -Module PSVergeOS | Measure-Object  # Doit afficher plus de 200 cmdlets
```

## Authentification

PSVergeOS prend en charge plusieurs méthodes d’authentification pour s’adapter à différents environnements — des sessions administrateur interactives aux pipelines entièrement automatisés.

### Identifiants interactifs

Demandez le nom d’utilisateur et le mot de passe au moment de la connexion :

```powershell
Connect-VergeOS -Server "vergeos.example.com"
# Demande des identifiants de manière interactive
```

### Objet PSCredential

Stockez les identifiants de manière sécurisée pour les scripts non interactifs :

```powershell
$cred = Get-Credential
Connect-VergeOS -Server "vergeos.example.com" -Credential $cred
```

### Jeton API

Utilisez un jeton API pré-généré pour les pipelines d’automatisation :

```powershell
Connect-VergeOS -Server "vergeos.example.com" -Token $env:VERGEOS_TOKEN
```

### Certificats auto-signés

Pour les environnements de laboratoire et de développement avec des certificats auto-signés :

```powershell
Connect-VergeOS -Server "192.168.1.100" -Token $token -SkipCertificateCheck
```

{% hint style="warning" %}
Utilisez uniquement `-SkipCertificateCheck` dans les environnements de test. Pour les systèmes de production, configurez des certificats SSL valides.
{% endhint %}

## Gestion multi-serveurs

PSVergeOS peut gérer **plusieurs systèmes VergeOS** à partir d’une seule session PowerShell. Utilisez le `-PassThru` paramètre pour capturer des objets de connexion et le `-Server` paramètre pour cibler des systèmes spécifiques :

```powershell
# Connexion à plusieurs systèmes
$prod = Connect-VergeOS -Server "prod.vergeos.local" -Token $env:PROD_TOKEN -PassThru
$dev  = Connect-VergeOS -Server "dev.vergeos.local"  -Token $env:DEV_TOKEN  -PassThru

# Interroger les VM sur un serveur spécifique
Get-VergeVM -Server $prod
Get-VergeVM -Server $dev

# Changer la connexion par défaut
Set-VergeConnection -Server "prod.vergeos.local"
```

C’est particulièrement utile pour **les MSP** qui gèrent plusieurs environnements clients ou organisations avec des clusters VergeOS de production et de développement distincts.

## Catégories de cmdlets

Le module organise ses plus de 200 cmdlets en catégories fonctionnelles. Chaque catégorie couvre l’ensemble du cycle de vie CRUD ainsi que des actions spécifiques aux ressources.

| Catégorie                                | Description                                                                         |
| ---------------------------------------- | ----------------------------------------------------------------------------------- |
| **Connexion**                            | Se connecter, se déconnecter, gérer les connexions au serveur                       |
| **Machines virtuelles**                  | Cycle de vie, contrôle de l’alimentation, instantanés, disques, cartes NIC, clonage |
| **Réseau**                               | Réseaux virtuels, règles de pare-feu, DNS, DHCP, diagnostics                        |
| **VPN**                                  | Connexions/politiques IPSec, interfaces/peers WireGuard                             |
| **NAS et stockage**                      | Services NAS, volumes, partages CIFS/NFS, instantanés, synchronisation              |
| **Locataires**                           | Provisionnement, instantanés, allocation de blocs de stockage/réseau                |
| **Utilisateurs et groupes**              | Gestion des comptes, autorisations, clés API                                        |
| **Système**                              | Clusters, nœuds, licences, paramètres                                               |
| **Certificats**                          | Gestion des certificats SSL                                                         |
| **Balises**                              | Étiquetage et catégorisation des ressources                                         |
| **Webhooks**                             | Hooks d’automatisation pilotés par les événements                                   |
| **Surveillance et tâches**               | Alarmes, journaux, suivi des tâches asynchrones                                     |
| **Sauvegarde et reprise après sinistre** | Profils d’instantanés, instantanés cloud, gestion de site, synchronisation          |
| **Fichiers et médias**                   | Gestion des ISO, envois de fichiers                                                 |
| **Groupes de ressources**                | Regroupement logique des ressources                                                 |

### Cmdlets VPN (IPSec et WireGuard)

La catégorie VPN mérite une attention particulière — PSVergeOS fournit une gestion complète pour les implémentations VPN IPSec et WireGuard :

**IPSec :**

* `New-VergeIPSecConnection` / `Get-VergeIPSecConnection` / `Remove-VergeIPSecConnection`
* `New-VergeIPSecPolicy` / `Get-VergeIPSecPolicy` / `Remove-VergeIPSecPolicy`

**WireGuard :**

* `New-VergeWireGuardInterface` / `Get-VergeWireGuardInterface` / `Remove-VergeWireGuardInterface`
* `New-VergeWireGuardPeer` / `Get-VergeWireGuardPeer` / `Remove-VergeWireGuardPeer`

## Prise en charge du pipeline

L’un des plus grands atouts de PSVergeOS est **la prise en charge complète du pipeline PowerShell**. Les cmdlets acceptent l’entrée du pipeline et produisent une sortie de pipeline, ce qui permet des commandes en une ligne concises pour les opérations en masse :

```powershell
# Arrêter toutes les VM de développement
Get-VergeVM -Name "Dev-*" | Stop-VergeVM -Confirm:$false

# Créer un instantané de toutes les VM de production
Get-VergeVM -Name "Prod-*" | ForEach-Object {
    New-VergeVMSnapshot -VMName $_.Name -Name "Daily-$(Get-Date -Format 'yyyyMMdd')"
}

# Mettre sous tension toutes les VM d’un réseau spécifique
Get-VergeVM | Where-Object { $_.Network -eq "app-network" } | Start-VergeVM
```

La prise en charge du pipeline rend PSVergeOS particulièrement efficace pour **les tâches de maintenance planifiées** intégrées à Windows Task Scheduler ou aux tâches cron Linux.

## Exemples pratiques

### Instantané en masse avec rétention

```powershell
# Se connecter au système VergeOS
Connect-VergeOS -Server "vergeos.example.com" -Token $env:VERGEOS_TOKEN

# Créer un instantané de toutes les VM de production en cours d’exécution avec une rétention de 24 heures
$vms = Get-VergeVM -Name "Prod-*" | Where-Object { $_.PowerState -eq "Running" }

foreach ($vm in $vms) {
    $snapshot = New-VergeVMSnapshot -VMName $vm.Name `
        -Name "Nightly-$(Get-Date -Format 'yyyyMMdd-HHmm')" `
        -Retention 86400
    Write-Host "Instantané créé pour $($vm.Name) : $($snapshot.Name)"
}

Write-Host "$($vms.Count) instantanés terminés"
```

### Export CSV de l’inventaire des VM

```powershell
# Exporter l’inventaire complet des VM vers CSV pour le reporting
Get-VergeVM | Select-Object Name, PowerState, RAM, CPUCores, OS,
    @{N='DiskGB'; E={[math]::Round($_.DiskSize / 1GB, 2)}},
    Created, Description |
    Export-Csv -Path "vm-inventory-$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation

Write-Host "Inventaire exporté vers vm-inventory-$(Get-Date -Format 'yyyyMMdd').csv"
```

### Création de réseau avec règles de pare-feu

```powershell
# Créer un réseau interne avec DHCP et des règles de pare-feu
$network = New-VergeNetwork -Name "web-tier" `
    -NetworkAddress "10.20.1.0/24" `
    -IPAddress "10.20.1.1" `
    -DHCPEnabled $true

# Ajouter des règles de pare-feu
New-VergeNetworkRule -Network $network.Name `
    -Name "Allow HTTPS" -Action Accept -Protocol TCP -DestPort 443

New-VergeNetworkRule -Network $network.Name `
    -Name "Allow SSH" -Action Accept -Protocol TCP -DestPort 22

# Appliquer les règles et mettre en route
Invoke-VergeNetworkApplyRules -Network $network.Name
Start-VergeNetwork -Name $network.Name

Write-Host "Le réseau '$($network.Name)' est en ligne avec les règles de pare-feu appliquées"
```

### Rapport de ressources multi-locataires

```powershell
# Générer un résumé des ressources sur tous les locataires
$report = @()

foreach ($tenant in Get-VergeTenant) {
    $tenantVMs = Get-VergeVM -Tenant $tenant.Name
    $report += [PSCustomObject]@{
        Tenant    = $tenant.Name
        VMCount   = $tenantVMs.Count
        TotalRAM  = ($tenantVMs | Measure-Object -Property RAM -Sum).Sum
        TotalCPU  = ($tenantVMs | Measure-Object -Property CPUCores -Sum).Sum
        Running   = ($tenantVMs | Where-Object PowerState -eq "Running").Count
        Stopped   = ($tenantVMs | Where-Object PowerState -ne "Running").Count
    }
}

$report | Format-Table -AutoSize
$report | Export-Csv "tenant-report.csv" -NoTypeInformation
```

### Configuration VPN WireGuard

```powershell
# Créer une interface WireGuard sur le réseau externe
$wgInterface = New-VergeWireGuardInterface -Network "External" `
    -Name "Remote-Access" `
    -IPAddress "10.100.0.1/24" `
    -ListenPort 51820

# Ajouter un pair pour un utilisateur distant
New-VergeWireGuardPeer -Interface $wgInterface.Name `
    -Name "Engineer-1" `
    -AllowedIPs "10.100.0.2/32" `
    -AutoGenerateConfig $true

# Appliquer les règles réseau
Invoke-VergeNetworkApplyRules -Network "External"
```

## Intégration avec Task Scheduler

Les scripts PSVergeOS s’intègrent naturellement aux systèmes de tâches planifiées pour une automatisation sans intervention :

**Planificateur de tâches Windows :**

```powershell
# Enregistrer sous C:\\Scripts\\nightly-snapshot.ps1
Import-Module PSVergeOS
Connect-VergeOS -Server "vergeos.local" -Token $env:VERGEOS_TOKEN -SkipCertificateCheck
Get-VergeVM -Name "Prod-*" | ForEach-Object {
    New-VergeVMSnapshot -VMName $_.Name -Name "Nightly-$(Get-Date -Format 'yyyyMMdd')" -Retention 86400
}
Disconnect-VergeOS
```

**cron Linux (PowerShell 7.4+) :**

```bash
# Exécuter chaque nuit à 2 h 00
0 2 * * * /usr/bin/pwsh -File /opt/scripts/nightly-snapshot.ps1
```

## Cas d’utilisation courants

### Opérations de VM en masse

Arrêtez, démarrez, faites des instantanés ou migrez plusieurs VM avec des commandes en une ligne via le pipeline. Idéal pour les fenêtres de maintenance.

### Reporting d’infrastructure

Exportez l’inventaire des VM, l’utilisation des ressources et les données de configuration vers CSV pour l’audit et la planification des capacités.

### Automatisation réseau

Créez des réseaux, configurez DHCP, gérez les règles de pare-feu et configurez des tunnels VPN par programmation.

### Maintenance planifiée

Intégrez avec Task Scheduler ou cron pour des instantanés automatisés, le nettoyage et les vérifications de conformité.

{% hint style="info" %}
**Vous venez de VMware ou de Nutanix ?**

PSVergeOS utilise la convention standard PowerShell `Verbe-Nom` de sorte que la mémoire musculaire se transfère — `Get-VM | Stop-VM` devient `Get-VergeVM | Stop-VergeVM`. L’authentification prend en charge les invites interactives, `objets PSCredential` et des jetons API, de sorte que les mêmes modèles de script que vous utilisez déjà pour l’automatisation non interactive s’appliquent ici. Pour gérer plus d’un système VergeOS depuis une seule session, passez `-Server` sur chaque cmdlet pour cibler une connexion spécifique.
{% endhint %}

## Ressources supplémentaires

* [Dépôt GitHub](https://github.com/verge-io/PSVergeOS) — Code source, problèmes et 16 scripts d’exemple
* [PowerShell Gallery](https://www.powershellgallery.com/packages/PSVergeOS) — Dernière version et informations d’installation
* [Documentation PowerShell 7.4](https://learn.microsoft.com/en-us/powershell/) — Référence du runtime PowerShell


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.verge.io/learn-the-platform/fr/module-8-developpeur-et-devops/03-powershell-module.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
