PSProxmox
PSProxmox is a PowerShell module for managing Proxmox VE clusters. It provides a comprehensive set of cmdlets for managing virtual machines, storage, networks, users, roles, and more.
Install / Use
/learn @Grace-Solutions/PSProxmoxREADME
PSProxmox
PSProxmox is a C#-based PowerShell module for managing Proxmox VE clusters. It provides a comprehensive set of cmdlets for interacting with Proxmox VE API, featuring structured return objects, mass deployment tools, automatic IP management, and more.
Features
- Session Management: Authenticate and persist sessions with Proxmox VE clusters
- Core CRUD Operations: Manage VMs, LXC Containers, Storage, Network, Users, Roles, SDN, and Clusters
- VM Guest Agent Support: Comprehensive guest agent data retrieval with network interface information
- Templates: Create and use VM deployment templates
- Cloud Images: Download, customize, and create templates from cloud images
- Cloud-Init Support: Configure VMs with Cloud-Init for easy customization
- LXC Containers: Create and manage Linux Containers with full CRUD operations
- TurnKey Templates: Download and use TurnKey Linux templates for LXC containers
- Mass Creation: Bulk create VMs with prefix/counter
- IP Management: CIDR parsing, subnetting, FIFO IP queue assignment
- Structured Objects: All outputs are typed C# classes (PowerShell-native)
- Pipeline Support: Cmdlets support pipeline input where appropriate
- Clean Codebase: 100% compilation success with zero errors and warnings
Project Structure
- Module/: Contains the PowerShell module files
- PSProxmox/: Contains the C# source code for the module
- Documentation/: Contains detailed documentation and examples
- Scripts/: Contains build and installation scripts
- Release/: Contains built releases (created by build script)
Installation
From PowerShell Gallery (Recommended)
# Install from PowerShell Gallery
Install-Module -Name PSProxmox -Scope CurrentUser
Manual Installation
# Clone the repository
git clone https://github.com/Grace-Solutions/PSProxmox.git
cd PSProxmox
# Build the module
.\Scripts\build.ps1
# Install the module
.\Scripts\Install-PSProxmox.ps1
Getting Started
Connecting to a Proxmox VE Server
# Connect using username and password
$securePassword = ConvertTo-SecureString "password" -AsPlainText -Force
Connect-ProxmoxServer -Server "proxmox.example.com" -Username "root" -Password $securePassword -Realm "pam"
# Connect using a credential object
$credential = Get-Credential
Connect-ProxmoxServer -Server "proxmox.example.com" -Credential $credential -Realm "pam"
# Test the connection
Test-ProxmoxConnection -Detailed
Managing Virtual Machines
# Get all VMs (uses the default connection automatically)
$vms = Get-ProxmoxVM
# Get a specific VM
$vm = Get-ProxmoxVM -VMID 100
# Create a new VM
$vm = New-ProxmoxVM -Node "pve1" -Name "test-vm" -Memory 2048 -Cores 2 -DiskSize 32 -Start
# Create a new VM using the builder pattern
$builder = New-ProxmoxVMBuilder -Name "web-server"
$builder.WithMemory(4096)
.WithCores(2)
.WithDisk(50, "local-lvm")
.WithNetwork("virtio", "vmbr0")
.WithIPConfig("192.168.1.10/24", "192.168.1.1")
.WithStart($true)
$vm = New-ProxmoxVM -Node "pve1" -Builder $builder
# Start, stop, and restart VMs
Start-ProxmoxVM -Node "pve1" -VMID 100
Stop-ProxmoxVM -Node "pve1" -VMID 100
Restart-ProxmoxVM -Node "pve1" -VMID 100
# Remove a VM
Remove-ProxmoxVM -Node "pve1" -VMID 100 -Confirm:$false
Working with VM Guest Agent
# Get VM with guest agent information (use -IncludeGuestAgent for detailed network info)
$vm = Get-ProxmoxVM -VMID 100 -IncludeGuestAgent
# Check if guest agent is available and running
if ($vm.GuestAgent -and $vm.GuestAgent.Status -eq "running") {
Write-Host "Guest Agent is running"
# Display network interfaces from guest agent
foreach ($interface in $vm.GuestAgent.NetIf) {
Write-Host "Interface: $($interface.Name)"
Write-Host " IPv4 Addresses: $($interface.IPv4Addresses -join ', ')"
Write-Host " IPv6 Addresses: $($interface.IPv6Addresses -join ', ')"
Write-Host " MAC Address: $($interface.MacAddress)"
}
} else {
Write-Host "Guest Agent not available or not running"
}
# Get all VMs with active guest agents
$vmsWithGuestAgent = Get-ProxmoxVM -IncludeGuestAgent | Where-Object {
$_.GuestAgent -and $_.GuestAgent.Status -eq "running"
}
# Performance comparison: fast vs detailed queries
Measure-Command { $fastVMs = Get-ProxmoxVM } # Fast query
Measure-Command { $detailedVMs = Get-ProxmoxVM -IncludeGuestAgent } # Detailed query
# Find VMs by IP address using guest agent data
$searchIP = "192.168.1.100"
$foundVMs = $vmsWithGuestAgent | Where-Object {
$vm = $_
$found = $false
if ($vm.GuestAgent.NetIf) {
foreach ($interface in $vm.GuestAgent.NetIf) {
if ($interface.IPv4Addresses -contains $searchIP -or
$interface.IPv6Addresses -contains $searchIP) {
$found = $true
break
}
}
}
return $found
}
Managing Templates
# Create a template from an existing VM
$template = New-ProxmoxVMTemplate -VMID 100 -Name "Ubuntu-Template" -Description "Ubuntu 20.04 Template"
# Get all templates
$templates = Get-ProxmoxVMTemplate
# Create a VM from a template
$vm = New-ProxmoxVMFromTemplate -Node "pve1" -TemplateName "Ubuntu-Template" -Name "web01" -Start
# Create multiple VMs from a template
$vms = New-ProxmoxVMFromTemplate -Node "pve1" -TemplateName "Ubuntu-Template" -Prefix "web" -Count 3 -Start
Working with Cloud Images
# List available cloud images
Get-ProxmoxCloudImage -Distribution "ubuntu" -Release "22.04"
# Download a cloud image
$imagePath = Save-ProxmoxCloudImage -Distribution "ubuntu" -Release "22.04" -Variant "server"
# Customize the cloud image (resize to 20GB)
$customizedImagePath = Invoke-ProxmoxCloudImageCustomization -ImagePath $imagePath -Resize 20 -ConvertTo "qcow2"
# Create a template from the cloud image
$template = New-ProxmoxCloudImageTemplate -Node "pve1" -Name "ubuntu-22.04" -ImagePath $customizedImagePath -Storage "local-lvm" -Memory 2048 -Cores 2 -DiskSize 20
# Alternatively, download and create a template in one step
$template = New-ProxmoxCloudImageTemplate -Node "pve1" -Name "ubuntu-22.04" -Distribution "ubuntu" -Release "22.04" -Storage "local-lvm" -Memory 2048 -Cores 2 -DiskSize 20
# Configure Cloud-Init for a VM
$password = ConvertTo-SecureString "SecurePassword123!" -AsPlainText -Force
$sshKey = Get-Content -Path "~/.ssh/id_rsa.pub"
Set-ProxmoxVMCloudInit -Node "pve1" -VMID 100 -Username "admin" -Password $password -SSHKey $sshKey -IPConfig "dhcp" -DNS "8.8.8.8,8.8.4.4"
# Create a VM from the template with static IP
$vm = New-ProxmoxVMFromTemplate -Node "pve1" -TemplateName "ubuntu-22.04" -Name "web01"
Set-ProxmoxVMCloudInit -Node "pve1" -VMID $vm.VMID -Username "admin" -Password $password -IPConfig "ip=192.168.1.100/24,gw=192.168.1.1"
Start-ProxmoxVM -Node "pve1" -VMID $vm.VMID
Managing Storage
# Get all storage
$storage = Get-ProxmoxStorage
# Get storage on a specific node
$storage = Get-ProxmoxStorage -Node "pve1"
# Create a new storage
$storage = New-ProxmoxStorage -Name "backup" -Type "dir" -Path "/mnt/backup" -Content "backup,iso"
# Remove a storage
Remove-ProxmoxStorage -Name "backup" -Confirm:$false
Managing Networks
# Get all network interfaces on a node
$networks = Get-ProxmoxNetwork -Node "pve1"
# Create a new bridge interface
$network = New-ProxmoxNetwork -Node "pve1" -Interface "vmbr1" -Type "bridge" -BridgePorts "eth1" -Method "static" -Address "192.168.2.1" -Netmask "255.255.255.0" -Autostart
# Remove a network interface
Remove-ProxmoxNetwork -Node "pve1" -Interface "vmbr1" -Confirm:$false
Managing Users and Roles
# Get all users
$users = Get-ProxmoxUser
# Create a new user
$securePassword = ConvertTo-SecureString "password" -AsPlainText -Force
$user = New-ProxmoxUser -Username "john" -Realm "pam" -Password $securePassword -FirstName "John" -LastName "Doe" -Email "john.doe@example.com"
# Remove a user
Remove-ProxmoxUser -UserID "john@pam" -Confirm:$false
# Get all roles
$roles = Get-ProxmoxRole
# Create a new role
$role = New-ProxmoxRole -RoleID "Developer" -Privileges "VM.Allocate", "VM.Config.Disk", "VM.Config.CPU", "VM.PowerMgmt"
# Remove a role
Remove-ProxmoxRole -RoleID "Developer" -Confirm:$false
Managing SDN
# Get all SDN zones
$zones = Get-ProxmoxSDNZone
# Create a new SDN zone
$zone = New-ProxmoxSDNZone -Zone "zone1" -Type "vlan" -Bridge "vmbr0"
# Remove an SDN zone
Remove-ProxmoxSDNZone -Zone "zone1" -Confirm:$false
# Get all SDN VNets
$vnets = Get-ProxmoxSDNVnet
# Create a new SDN VNet
$vnet = New-ProxmoxSDNVnet -VNet "vnet1" -Zone "zone1" -IPv4 "192.168.1.0/24" -Gateway "192.168.1.1"
# Remove an SDN VNet
Remove-ProxmoxSDNVnet -VNet "vnet1" -Confirm:$false
Managing Clusters
# Get cluster information
$cluster = Get-ProxmoxCluster
# Join a node to a cluster
$securePassword = ConvertTo-SecureString "password" -AsPlainText -Force
Join-ProxmoxCluster -ClusterName "cluster1" -HostName "pve1" -Password $securePassword
# Leave a cluster
Leave-ProxmoxCluster -Force
# Create a cluster backup
$backup = New-ProxmoxClusterBackup -Compress -Wait
# Restore a cluster backup
Restore-ProxmoxClusterBackup -BackupID "vzdump-cluster-2023_04_28-12_00_00.vma.lzo" -Force -Wait
Managing IP Addresses
# Create a new IP pool
$pool = New-ProxmoxIPPool -Name "Production" -CIDR "192.168.1.0/24" -ExcludeIPs "192.168.1.1", "192.168.1.254"
# Get all IP pools
$pools = Get-ProxmoxIPPool
# Get a specific IP pool
$pool = Get-ProxmoxIPPool -Name "Production"
# Clear an IP pool
Clear-ProxmoxIPPool -Name "Production"
Managing LXC Containers
# Get all LXC containers
$containers = Get-ProxmoxContainer
# Get a specific c
Related Skills
node-connect
346.8kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
107.6kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
346.8kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
346.8kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
