Veeam Backup & Replication Cheat Sheet for Admins
*Your complete command reference for Veeam Backup & Replication across all platforms - PowerShell, CLI, REST API.
📋 Table of Contents
- Introduction
- Prerequisites & Setup
- Veeam Backup & Replication PowerShell (Windows Server)
- Veeam Agent for Windows
- Veeam Agent for Linux
- Veeam Agent for macOS
- Veeam Enterprise Manager CLI
- REST API Examples
- Backup Repository Management
- Replication & Failover
- SureBackup & Instant Recovery
- Backup Copy Jobs & GFS Retention
- Veeam Backup Catalog
- Troubleshooting & Logs
- Performance Tuning & Best Practices
- Security & Encryption
- Platform-Specific Nuances
- Quick Command Reference Table
Introduction
Veeam Backup & Replication is a powerful enterprise backup solution, but with great power comes a steep learning curve. Whether you’re managing backup jobs, troubleshooting replication, or automating tasks via PowerShell, having quick access to the right commands can save hours of frustration.
This cheat sheet consolidates every essential command you’ll need when working with Veeam across Windows, Linux, and macOS environments. Bookmark this page - it’s your one-stop solution when you’re stuck on the Veeam backup server and need to work fast.
Prerequisites & Setup
Veeam PowerShell Module (Windows)
1
2
3
4
5
6
7
8
9
10
11
| # Import the Veeam PowerShell module
Import-Module Veeam.Backup.PowerShell
# Connect to Veeam Backup Server
Connect-VBRServer -Server "veeam-backup.company.com" -User "admin" -Password "yourpassword"
# Or use credentials prompt (more secure)
Connect-VBRServer -Server "veeam-backup.company.com" -Credential (Get-Credential)
# Disconnect when done
Disconnect-VBRServer
|
Veeam Agent for Windows CLI
1
2
3
4
5
| # Agent is typically installed at:
$veeamAgentPath = "C:\Program Files\Veeam\Endpoint Backup\Veeam.EndPoint.Manager.exe"
# Check if agent is running
Get-Process | Where-Object {$_.ProcessName -like "*Veeam*"}
|
Veeam Agent for Linux
1
2
3
4
5
6
| # Check agent status
sudo veeamconfig status
# Agent binary location
/opt/veeam/bin/veeamconfig
/opt/veeam/bin/veeamz
|
Veeam Agent for macOS
1
2
3
4
5
| # Agent binary location
/Applications/Veeam\ Agent.app/Contents/MacOS/veeamconfig
# Check status
sudo /Applications/Veeam\ Agent.app/Contents/MacOS/veeamconfig status
|
Veeam Backup & Replication PowerShell (Windows Server)
Discovery & Exploration
1
2
3
4
5
6
7
8
9
10
11
12
| # List all Veeam PowerShell cmdlets
Get-VBRCommand
# Filter by verb (Get, Start, Stop, Set, New, Remove)
Get-VBRCommand -Verb Get, Start, Stop
# Filter by noun pattern (find all job-related commands)
Get-VBRCommand -Name "*Job*"
# Get detailed help for any cmdlet
Get-Help Start-VBRJob -Full
Get-Help Start-VBRJob -Examples
|
Server & Connection Management
1
2
3
4
5
6
7
8
9
10
11
| # Get current Veeam server connection
Get-VBRServer
# Connect to backup server (already shown above)
Connect-VBRServer -Server "server-name"
# Test connection
Test-VBRConnection
# Get server information
Get-VBRServer | Select-Object Name, Version, IsReady, Type
|
Job Management
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| # List all backup jobs
Get-VBRJob | Select-Object Name, Type, State, IsScheduleEnabled
# Get specific job
$job = Get-VBRJob -Name "Backup-Job-01"
# Start a job
Start-VBRJob -Name "Backup-Job-01"
Start-VBRJob -Job $job
# Start job and wait for completion
Start-VBRJob -Name "Backup-Job-01" -WarningAction SilentlyContinue
Wait-VBRJob -Job $job
# Stop a running job
Stop-VBRJob -Name "Backup-Job-01"
Stop-VBRJob -Job $job
# Retry a failed job
Start-VBRJob -Name "Backup-Job-01" -Retry
# Enable/disable job schedule
Set-VBRJob -Name "Backup-Job-01" -ScheduleEnabled $true
Set-VBRJob -Name "Backup-Job-01" -ScheduleEnabled $false
# Quick backup (incremental backup without full)
Start-VBRQuickBackup -Name "Backup-Job-01"
# Get job options
$job = Get-VBRJob -Name "Backup-Job-01"
$job.Options
$job.BackupStorageOptions
$job.BackupTargetOptions
|
Job Session Management
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| # List all job sessions (recent)
Get-VBRBackupSession | Select-Object JobName, State, CreationTime, EndTime
# Get sessions for specific job
Get-VBRBackupSession -Name "Backup-Job-01" | Select-Object State, CreationTime, Progress
# Get current running sessions
Get-VBRBackupSession | Where-Object {$_.State -eq "Running"}
# Get session details
$session = Get-VBRBackupSession | Where-Object {$_.JobName -eq "Backup-Job-01"} | Select-Object -First 1
$session | Get-Member
# Get session statistics
$session = Get-VBRBackupSession -Name "Backup-Job-01-Session-001"
$session.Statistics
$session.Statistics.ProcessedSize
$session.Statistics.DataRead
$session.Statistics.DataTransferred
|
Backup Repository Management
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| # List all backup repositories
Get-VBRBackupRepository | Select-Object Name, Type, IsReady, Info
# Get repository details
$repo = Get-VBRBackupRepository -Name "BackupRepo-01"
$repo | Get-Member
# Test repository connectivity
Test-VBRBackupRepository -Repository $repo
# Get repository capacity
$repo.Capacity
$repo.FreeSpace
$repo.UsedSpace
# List repository content (backup files)
Get-VBRBackup -Repository $repo | Select-Object Name, CreationTime, Size
# Find backups by name
Get-VBRBackup -Name "*VM-Name*" | Select-Object Name, Repository, CreationTime
# Restore from backup (see Restore section below)
|
Scale-Out Backup Repositories
1
2
3
4
5
6
7
8
9
| # List scale-out repositories
Get-VBRScaleOutRepository | Select-Object Name, Type, IsReady
# Get extent information
$soRepo = Get-VBRScaleOutRepository -Name "SO-Repo-01"
$soRepo.GetExtents() | Select-Object Name, Capacity, FreeSpace
# Add extent to scale-out repo
Add-VBRScaleOutRepositoryExtent -Repository $soRepo -Path "\\server\share\extent"
|
Backup Management
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| # List all backups
Get-VBRBackup | Select-Object Name, Repository, CreationTime, Size
# Get backup details
$backup = Get-VBRBackup -Name "VM-Backup-01"
$backup | Get-Member
# Get restore points
$backup = Get-VBRBackup -Name "VM-Backup-01"
$backup.GetRestorePoints() | Select-Object CreationTime, Type, IsFull
# Delete backup
Remove-VBRBackup -Backup $backup -Confirm:$false
# Export backup
Export-VBRBackup -Backup $backup -Path "C:\Export\"
|
Restore Operations
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| # Restore entire VM
$backup = Get-VBRBackup -Name "VM-Backup-01"
$restorePoint = $backup.GetRestorePoints() | Select-Object -First 1
Start-VBRRestoreVM -Backup $backup -RestorePoint $restorePoint -VMName "Restored-VM"
# Instant VM recovery (quick VM start from backup)
Start-VBRInstantVMRecovery -Backup $backup -RestorePoint $restorePoint -VMName "Instant-VM"
# Restore specific disks
Start-VBRRestoreDisk -Backup $backup -RestorePoint $restorePoint -DiskName "C:\"
# Application-aware restore (SQL, Exchange, etc.)
Start-VBRRestoreApplication -Backup $backup -RestorePoint $restorePoint -AppType "SQL"
# File-level recovery
Start-VBRRestoreFile -Backup $backup -RestorePoint $restorePoint -Path "C:\RecoveredFiles\"
|
Replication Management
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| # List replication jobs
Get-VBRJob -Type Replica | Select-Object Name, State, Target
# Get replication job details
$replicaJob = Get-VBRJob -Name "Replica-Job-01" -Type Replica
# Start replication
Start-VBRJob -Name "Replica-Job-01"
# Failover to replica
Start-VBRFailover -Job $replicaJob -VMName "VM-01" -FailoverType "Failover"
# Failback (reverse replication)
Start-VBRFailback -Job $replicaJob -VMName "VM-01"
# Permanent failover (make replica primary)
Start-VBRPermanentFailover -Job $replicaJob -VMName "VM-01"
# Test failover (sandbox)
Start-VBRTestFailover -Job $replicaJob -VMName "VM-01"
|
SureBackup & Recovery Verification
1
2
3
4
5
6
7
8
9
10
11
| # Start SureBackup job
Start-VBRSureBackup -Job $job
# Get SureBackup session
Get-VBRSureBackupSession | Select-Object JobName, State, Result
# Configure SureBackup settings
$job = Get-VBRJob -Name "Backup-Job-01"
$job.SureBackupOptions.Enabled = $true
$job.SureBackupOptions.RunOnHost = $true
Set-VBRJob -Job $job
|
Backup Copy Jobs
1
2
3
4
5
6
7
8
9
| # List backup copy jobs
Get-VBRJob -Type BackupCopy | Select-Object Name, Source, Destination
# Start backup copy job
Start-VBRJob -Name "BackupCopy-Job-01"
# Get GFS retention settings
$bcJob = Get-VBRJob -Name "BackupCopy-Job-01" -Type BackupCopy
$bcJob.BackupCopyOptions.GfsRetention
|
Veeam Backup Catalog
1
2
3
4
5
6
7
8
| # Search catalog for files
Find-VBRCatalogItem -Path "*document*" -SearchInBackup
# Get catalog statistics
Get-VBRCatalogStatistics
# Rebuild catalog (if needed)
Start-VBRCatalogRebuild
|
Infrastructure Objects
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| # List managed servers
Get-VBRServer | Select-Object Name, Type, IsReady, Description
# Get specific server
$server = Get-VBRServer -Name "vcenter.company.com"
# Add managed server
Add-VBRServer -Server "new-server.company.com" -Credential (Get-Credential)
# Remove managed server
Remove-VBRServer -Server $server -Confirm:$false
# Rename managed server
$server = Get-VBRServer -Name "old-name"
$server.SetName("new-name")
# List VMware vCenter servers
Get-VBRServer -Type VMware
# List Hyper-V hosts
Get-VBRServer -Type HyperV
# List Linux/Windows servers (backup agents)
Get-VBRServer -Type Windows, Linux
|
Proxy Management
1
2
3
4
5
6
7
8
9
10
11
| # List backup proxies
Get-VBRProxy | Select-Object Name, Type, IsReady, Host
# Get proxy details
$proxy = Get-VBRProxy -Name "BackupProxy-01"
# Set backup proxy priority
Set-VBRProxy -Proxy $proxy -Priority 1
# Enable/disable proxy
Set-VBRProxy -Proxy $proxy -Enabled $true
|
WAN Accelerators
1
2
3
4
5
| # List WAN accelerators
Get-VBRWANAccelerator | Select-Object Name, IsReady
# Get WAN accelerator details
$wan = Get-VBRWANAccelerator -Name "WAN-Accel-01"
|
Tape Management
1
2
3
4
5
6
7
8
| # List tape libraries
Get-VBRLibrary | Select-Object Name, Type, IsReady
# List tapes
Get-VBRTape | Select-Object Name, Barcode, MediaPool, IsAvailable
# Export to tape
Start-VBRTapeExport -Backup $backup -Tape $tape
|
User Roles & Permissions
1
2
3
4
5
6
7
8
9
| # List user roles
Get-VBRRole | Select-Object Name, Description
# Get role permissions
$role = Get-VBRRole -Name "Backup Operator"
$role.Permissions
# Assign role to user
Add-VBRUserRole -User "domain\username" -Role $role
|
Reporting
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # Get job statistics for last 7 days
$sessions = Get-VBRBackupSession | Where-Object {$_.CreationTime -gt (Get-Date).AddDays(-7)}
$sessions | Group-Object JobName | ForEach-Object {
[PSCustomObject]@{
JobName = $_.Name
TotalSessions = $_.Count
Successful = ($_.Group | Where-Object {$_.State -eq "Success"}).Count
Failed = ($_.Group | Where-Object {$_.State -eq "Failed"}).Count
TotalData = ($_.Group | Measure-Object -Property ProcessedSize -Sum).Sum
}
} | Format-Table
# Export report to CSV
$report | Export-Csv -Path "C:\Reports\Veeam-Job-Report.csv" -NoTypeInformation
|
Veeam Agent for Windows
Installation & Configuration
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # Install Veeam Agent for Windows (silent)
msiexec /i "VeeamAgentWindows_x64.msi" /qn /L*V "C:\Logs\VeeamAgentInstall.log"
# Configure backup job via CLI
"C:\Program Files\Veeam\Endpoint Backup\Veeam.EndPoint.Manager.exe" /job:create /name:"MyBackup" /type:backup /target:"C:\Backup" /schedule:daily
# List configured jobs
"C:\Program Files\Veeam\Endpoint Backup\Veeam.EndPoint.Manager.exe" /job:list
# Run backup job manually
"C:\Program Files\Veeam\Endpoint Backup\Veeam.EndPoint.Manager.exe" /job:run /name:"MyBackup"
# Remove backup job
"C:\Program Files\Veeam\Endpoint Backup\Veeam.EndPoint.Manager.exe" /job:delete /name:"MyBackup"
|
Backup Types
1
2
3
4
5
6
7
8
| # Full backup
"C:\Program Files\Veeam\Endpoint Backup\Veeam.EndPoint.Manager.exe" /job:run /name:"MyBackup" /full
# Incremental backup (default)
"C:\Program Files\Veeam\Endpoint Backup\Veeam.EndPoint.Manager.exe" /job:run /name:"MyBackup"
# Active full backup
"C:\Program Files\Veeam\Endpoint Backup\Veeam.EndPoint.Manager.exe" /job:run /name:"MyBackup" /activefull
|
Restore Options
1
2
3
4
5
6
7
8
| # Volume restore (entire disk)
"C:\Program Files\Veeam\Endpoint Backup\Veeam.EndPoint.Manager.exe" /restore:volume /backup:"C:\Backup\backup-001.vbm" /target:"C:\"
# File-level restore
"C:\Program Files\Veeam\Endpoint Backup\Veeam.EndPoint.Manager.exe" /restore:files /backup:"C:\Backup\backup-001.vbm" /path:"C:\Recovered"
# Instant recovery (mount backup as drive)
"C:\Program Files\Veeam\Endpoint Backup\Veeam.EndPoint.Manager.exe" /restore:instant /backup:"C:\Backup\backup-001.vbm"
|
Check Job Status
1
2
3
4
5
6
7
| # Check last job result
$lastJob = Get-WinEvent -LogName "Veeam Endpoint Backup" -MaxEvents 1
$lastJob.Message
# Or use Veeam PowerShell module (if installed)
Import-Module "C:\Program Files\Veeam\Endpoint Backup\Veeam.EndPoint.PowerShell.dll"
Get-VEBJob | Select-Object Name, LastResult, LastRun
|
Veeam Agent for Linux
Installation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| # RHEL/CentOS/Oracle Linux
sudo rpm -i veeam-agent-linux.rpm
# Ubuntu/Debian
sudo dpkg -i veeam-agent-linux.deb
# SLES
sudo rpm -i veeam-agent-linux-sles.rpm
# Start service
sudo systemctl start veeam
sudo systemctl enable veeam
# Check status
sudo systemctl status veeam
|
Configuration & Backup
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # Create backup job (interactive)
sudo veeamconfig create backup --name "LinuxBackup" --repo "path/to/repo" --include "/home,/var"
# List jobs
sudo veeamconfig job list
# Run backup job
sudo veeamconfig job start --name "LinuxBackup"
# Stop running job
sudo veeamconfig job stop --name "LinuxBackup"
# Delete job
sudo veeamconfig job delete --name "LinuxBackup"
|
Advanced Options
1
2
3
4
5
6
7
8
9
10
11
| # Backup with compression level
sudo veeamconfig create backup --name "LinuxBackup" --repo "/backup" --compression "optimal"
# Backup with encryption
sudo veeamconfig create backup --name "LinuxBackup" --repo "/backup" --encryption "AES256" --password "yourpassword"
# Exclude files/folders
sudo veeamconfig create backup --name "LinuxBackup" --repo "/backup" --exclude "/tmp/*" --exclude "/var/log/*"
# Schedule backup (daily at 2 AM)
sudo veeamconfig create backup --name "LinuxBackup" --repo "/backup" --schedule "0 2 * * *"
|
Restore
1
2
3
4
5
6
7
8
| # Volume restore
sudo veeamconfig restore volume --backup "/backup/backup-001.vbm" --target "/"
# File restore
sudo veeamconfig restore files --backup "/backup/backup-001.vbm" --path "/tmp/recovered"
# List backups in repository
sudo veeamconfig repo list --path "/backup"
|
Logs & Troubleshooting
1
2
3
4
5
6
7
8
9
10
11
| # View agent logs
sudo tail -f /var/log/veeam/veeam.log
# Check job history
sudo veeamconfig session list
# Get session details
sudo veeamconfig session get --id <session-id>
# Enable debug logging
sudo veeamconfig set --debug true
|
Veeam Agent for macOS
Installation
1
2
3
4
5
6
7
8
| # Install .pkg (double-click or via CLI)
sudo installer -pkg VeeamAgentMacOS.pkg -target /
# Start agent
sudo launchctl load /Library/LaunchDaemons/com.veeam.agent.plist
# Check status
sudo launchctl list | grep veeam
|
Backup Commands
1
2
3
4
5
6
7
8
9
10
11
| # Create backup job
sudo /Applications/Veeam\ Agent.app/Contents/MacOS/veeamconfig create backup --name "MacBackup" --repo "/Volumes/BackupDrive" --include "/Users,/Applications"
# List jobs
sudo /Applications/Veeam\ Agent.app/Contents/MacOS/veeamconfig job list
# Run backup
sudo /Applications/Veeam\ Agent.app/Contents/MacOS/veeamconfig job start --name "MacBackup"
# Stop backup
sudo /Applications/Veeam\ Agent.app/Contents/MacOS/veeamconfig job stop --name "MacBackup"
|
Restore
1
2
3
4
5
| # File restore
sudo /Applications/Veeam\ Agent.app/Contents/MacOS/veeamconfig restore files --backup "/Volumes/BackupDrive/backup-001.vbm" --path "/tmp/recovered"
# Volume restore
sudo /Applications/Veeam\ Agent.app/Contents/MacOS/veeamconfig restore volume --backup "/Volumes/BackupDrive/backup-001.vbm" --target "/"
|
Time Machine Integration
1
2
3
4
5
| # Exclude Time Machine from backup
sudo /Applications/Veeam\ Agent.app/Contents/MacOS/veeamconfig create backup --name "MacBackup" --repo "/backup" --exclude "/Volumes/TimeMachine/*"
# Backup Time Machine volume (if needed)
sudo /Applications/Veeam\ Agent.app/Contents/MacOS/veeamconfig create backup --name "TMBackup" --repo "/backup" --include "/Volumes/TimeMachine"
|
Veeam Enterprise Manager CLI
Connection & Authentication
1
2
3
4
5
6
7
8
| # Connect to Enterprise Manager
vemcmd.exe -s <server> -u <username> -p <password>
# Or use config file
vemcmd.exe -c config.xml
# Disconnect
vemcmd.exe -x
|
Session Management
1
2
3
4
5
6
7
8
| # List active sessions
vemcmd.exe "session list"
# Get session details
vemcmd.exe "session get <session-id>"
# Terminate session
vemcmd.exe "session terminate <session-id>"
|
Backup Management
1
2
3
4
5
6
7
8
9
10
11
| # List backups
vemcmd.exe "backup list"
# Search backups
vemcmd.exe "backup search --name <pattern>"
# Get backup info
vemcmd.exe "backup info <backup-id>"
# Delete backup
vemcmd.exe "backup delete <backup-id>"
|
User Management
1
2
3
4
5
6
7
8
9
10
11
| # List users
vemcmd.exe "user list"
# Add user
vemcmd.exe "user add --name <username> --role <role>"
# Modify user
vemcmd.exe "user modify <user-id> --role <new-role>"
# Delete user
vemcmd.exe "user delete <user-id>"
|
Reporting
1
2
3
4
5
| # Generate report
vemcmd.exe "report generate --type backup --period last7days --format csv --output C:\Reports\report.csv"
# Get license info
vemcmd.exe "license info"
|
REST API Examples
Veeam Backup & Replication provides a comprehensive REST API for automation. Base URL: https://<veeam-server>:9398/api/v1/
Authentication
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| # Get authentication token
$headers = @{
"Content-Type" = "application/json"
}
$body = @{
username = "admin"
password = "yourpassword"
} | ConvertTo-Json
$response = Invoke-RestMethod -Uri "https://veeam-server:9398/api/v1/authenticate" -Method Post -Headers $headers -Body $body
$token = $response.token
# Use token in subsequent requests
$authHeaders = @{
"Authorization" = "Bearer $token"
"Content-Type" = "application/json"
}
|
Common API Calls
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| # Get all jobs
$jobs = Invoke-RestMethod -Uri "https://veeam-server:9398/api/v1/jobs" -Headers $authHeaders -Method Get
# Get specific job
$job = Invoke-RestMethod -Uri "https://veeam-server:9398/api/v1/jobs/{job-id}" -Headers $authHeaders -Method Get
# Start job
$body = @{
"id" = "{job-id}"
} | ConvertTo-Json
Invoke-RestMethod -Uri "https://veeam-server:9398/api/v1/jobs/{job-id}/start" -Headers $authHeaders -Method Post -Body $body
# Get job sessions
$sessions = Invoke-RestMethod -Uri "https://veeam-server:9398/api/v1/jobs/{job-id}/sessions" -Headers $authHeaders -Method Get
# Get repositories
$repos = Invoke-RestMethod -Uri "https://veeam-server:9398/api/v1/repositories" -Headers $authHeaders -Method Get
# Get backups
$backups = Invoke-RestMethod -Uri "https://veeam-server:9398/api/v1/backups" -Headers $authHeaders -Method Get
# Search backups
$body = @{
"name" = "VM-Name"
} | ConvertTo-Json
$searchResults = Invoke-RestMethod -Uri "https://veeam-server:9398/api/v1/backups/search" -Headers $authHeaders -Method Post -Body $body
|
Python Example
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| import requests
import json
# Authenticate
auth_url = "https://veeam-server:9398/api/v1/authenticate"
auth_data = {"username": "admin", "password": "yourpassword"}
response = requests.post(auth_url, json=auth_data, verify=False) # verify=False for self-signed certs
token = response.json()["token"]
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
}
# Get all jobs
jobs = requests.get("https://veeam-server:9398/api/v1/jobs", headers=headers, verify=False)
print(jobs.json())
|
Backup Repository Management
Repository Types
1
2
3
4
5
6
7
8
| # List repository types
Get-VBRBackupRepositoryType
# Common types:
# - WindowsLocal - Windows local folder
# - WindowsShare - SMB/CIFS share
# - LinuxRepository - Linux repository (via SSH)
# - ScaleOut - Scale-out backup repository
|
Create Repository
1
2
3
4
5
6
7
8
| # Create Windows local repository
$repo = Add-VBRBackupRepository -Name "LocalRepo01" -Path "D:\Backups" -Type WindowsLocal
# Create SMB share repository
$repo = Add-VBRBackupRepository -Name "SMBRepo01" -Path "\\server\share" -Type WindowsShare -Credential (Get-Credential)
# Create Linux repository
$repo = Add-VBRBackupRepository -Name "LinuxRepo01" -Path "/backup" -Type LinuxRepository -Server "linux-server" -Credential (Get-Credential)
|
Repository Maintenance
1
2
3
4
5
6
7
8
9
10
11
| # Garbage collection (remove deleted data blocks)
Start-VBRGarbageCollection -Repository $repo
# Defragmentation (optimize storage)
Start-VBRDefragmentation -Repository $repo
# Transform full to synthetic full
Start-VBRSyntheticFull -Backup $backup
# Health check
Test-VBRBackupRepository -Repository $repo
|
Capacity Planning
1
2
3
4
5
6
7
8
9
10
11
| # Calculate required storage
$vmSizeGB = 500 # Size of VM
$compressionRatio = 0.5 # Expected 50% compression
$deduplicationRatio = 0.3 # Expected 70% deduplication
$retentionDays = 30
$dailyChangeRate = 0.02 # 2% daily change
$dailyBackupSize = $vmSizeGB * $compressionRatio * $deduplicationRatio * $dailyChangeRate
$totalRequired = $dailyBackupSize * $retentionDays + ($vmSizeGB * $compressionRatio * $deduplicationRatio) # Full backup + incrementals
Write-Host "Estimated storage needed: $totalRequired GB"
|
Replication & Failover
Replication Job Configuration
1
2
3
4
5
6
7
8
9
10
11
12
13
| # Create replication job
$replicaJob = Add-VBRJob -Name "Replica-Job-01" -Type Replica
# Add VMs to replicate
Add-VBRJobObject -Job $replicaJob -Server $vmwareServer -VM "VM-01","VM-02"
# Set replication target
Set-VBRJob -Job $replicaJob -Target (Get-VBRServer -Name "DR-Site-vCenter")
# Configure replication settings
$replicaJob.ReplicaOptions.EnableCompression = $true
$replicaJob.ReplicaOptions.EnableEncryption = $false
Set-VBRJob -Job $replicaJob
|
Failover Operations
# Planned failover (graceful)
Start-VBRFailover -Job $replicaJob -VMName "VM-01" -FailoverType "Failover"
# Failover without network reconfiguration
Start-VBRFailover -Job $replicaJob -VMName "VM-01" -FailoverType "FailoverNoNetwork"
# Failback (restore original VM from replica)
Start-VBRFailback -Job $replicaJob -VMName "VM-01"
# Permanent failover (make replica primary, stop replication)
Start-VBRPermanentFailover -Job $replicaJob -VMName "VM-01"
# Test failover (sandbox, non-disruptive)
Start-VBRTestFailover -Job $replicaJob -VMName "VM-01" -Snapshot
Replication Monitoring
1
2
3
4
5
6
7
8
9
| # Check replication health
Get-VBRReplica -VM "VM-01" | Select-Object Name, State, LastSync, Rpo
# Get replication statistics
$replica = Get-VBRReplica -VM "VM-01"
$replica.Statistics
# List replication sessions
Get-VBRReplicaSession | Select-Object VMName, State, StartTime, EndTime
|
SureBackup & Instant Recovery
SureBackup Configuration
1
2
3
4
5
6
7
8
9
10
11
| # Enable SureBackup for a job
$job = Get-VBRJob -Name "Backup-Job-01"
$job.SureBackupOptions.Enabled = $true
$job.SureBackupOptions.RunOnHost = $true # Run on backup host
$job.SureBackupOptions.RunOnHostGroup = $false
Set-VBRJob -Job $job
# Configure SureBackup network
$job.SureBackupOptions.NetworkMapping = $true
$job.SureBackupOptions.NetworkName = "Test-Network"
Set-VBRJob -Job $job
|
Run SureBackup
1
2
3
4
5
6
7
8
| # Start SureBackup verification
Start-VBRSureBackup -Job $job
# Get SureBackup session
$sbSession = Get-VBRSureBackupSession | Where-Object {$_.JobName -eq "Backup-Job-01"} | Select-Object -First 1
# Check SureBackup result
$sbSession.Result # Success, Failed, Warning
|
Instant Recovery
1
2
3
4
5
6
7
8
9
10
| # Instant VM recovery (start VM directly from backup)
$backup = Get-VBRBackup -Name "VM-Backup-01"
$restorePoint = $backup.GetRestorePoints() | Select-Object -First 1
Start-VBRInstantVMRecovery -Backup $backup -RestorePoint $restorePoint -VMName "Instant-VM" -PowerOn
# Instant disk recovery (mount disk to running VM)
Start-VBRInstantDiskRecovery -Backup $backup -RestorePoint $restorePoint -TargetVM "Running-VM" -DiskNumber 1
# Instant file recovery (mount backup and browse)
Start-VBRInstantFileRecovery -Backup $backup -RestorePoint $restorePoint
|
Backup Copy Jobs & GFS Retention
Create Backup Copy Job
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| # Create backup copy job
$bcJob = Add-VBRJob -Name "BackupCopy-Job-01" -Type BackupCopy
# Set source backup
$sourceBackup = Get-VBRBackup -Name "Primary-Backup"
Add-VBRJobObject -Job $bcJob -Backup $sourceBackup
# Set destination repository
$destRepo = Get-VBRBackupRepository -Name "DR-Repo"
Set-VBRJob -Job $bcJob -Repository $destRepo
# Configure copy settings
$bcJob.BackupCopyOptions.CopyMethod = "Backup" # or "Replica"
$bcJob.BackupCopyOptions.CompressionLevel = "Optimal"
Set-VBRJob -Job $bcJob
|
GFS Retention (Grandfather-Father-Son)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| # Configure GFS retention on backup copy job
$bcJob = Get-VBRJob -Name "BackupCopy-Job-01" -Type BackupCopy
# Daily backups (keep for 30 days)
$bcJob.BackupCopyOptions.GfsRetention.Daily.IsEnabled = $true
$bcJob.BackupCopyOptions.GfsRetention.Daily.KeepFor = 30
# Weekly backups (keep for 12 weeks)
$bcJob.BackupCopyOptions.GfsRetention.Weekly.IsEnabled = $true
$bcJob.BackupCopyOptions.GfsRetention.Weekly.KeepFor = 12
$bcJob.BackupCopyOptions.GfsRetention.Weekly.DayOfWeek = "Sunday"
# Monthly backups (keep for 12 months)
$bcJob.BackupCopyOptions.GfsRetention.Monthly.IsEnabled = $true
$bcJob.BackupCopyOptions.GfsRetention.Monthly.KeepFor = 12
$bcJob.BackupCopyOptions.GfsRetention.Monthly.DayOfMonth = 1
# Yearly backups (keep for 5 years)
$bcJob.BackupCopyOptions.GfsRetention.Yearly.IsEnabled = $true
$bcJob.BackupCopyOptions.GfsRetention.Yearly.KeepFor = 5
$bcJob.BackupCopyOptions.GfsRetention.Yearly.DayOfYear = "January 1"
Set-VBRJob -Job $bcJob
|
Create GFS Full Backups
1
2
3
4
5
6
7
8
9
| # Force GFS full backup creation
Start-VBRGfsFull -Job $bcJob -RetentionType Monthly
# Check GFS backups
$backups = Get-VBRBackup -Name "Primary-Backup"
foreach ($backup in $backups) {
$points = $backup.GetRestorePoints() | Where-Object {$_.Type -eq "Full"}
$points | Select-Object CreationTime, Type
}
|
Veeam Backup Catalog
Catalog Configuration
1
2
3
4
5
6
7
8
9
10
| # Enable catalog for backup job
$job = Get-VBRJob -Name "Backup-Job-01"
$job.CatalogOptions.Enabled = $true
Set-VBRJob -Job $job
# Rebuild catalog (if corrupted)
Start-VBRCatalogRebuild
# Get catalog statistics
Get-VBRCatalogStatistics | Select-Object TotalIndexedFiles, TotalIndexedSize, LastUpdate
|
Search Catalog
1
2
3
4
5
6
7
8
9
| # Search for files in catalog
$results = Find-VBRCatalogItem -Path "*report*.xlsx" -SearchInBackup
$results | Select-Object Path, BackupName, RestorePoint
# Search by date range
$results = Find-VBRCatalogItem -Path "*" -FromDate (Get-Date).AddDays(-30) -ToDate (Get-Date)
# Export search results
$results | Export-Csv -Path "C:\SearchResults.csv" -NoTypeInformation
|
Indexing Options
1
2
3
4
5
| # Configure indexing settings
$job = Get-VBRJob -Name "Backup-Job-01"
$job.CatalogOptions.EnableIndexing = $true
$job.CatalogOptions.IndexingOptions.ExcludePaths = @("C:\Temp\*", "C:\Windows\Temp\*")
Set-VBRJob -Job $job
|
Troubleshooting & Logs
Log Locations
Windows (Backup Server):
- Main logs:
C:\ProgramData\Veeam\Backup\
- Job logs:
C:\ProgramData\Veeam\Backup\Backup_<JobName>.log
- Agent logs:
C:\ProgramData\Veeam\Backup\Agent\
- Veeam PowerShell:
C:\Windows\Temp\Veeam\Backup\PowerShell\
Linux Agent:
/var/log/veeam/veeam.log
/var/log/veeam/agent/
macOS Agent:
/Library/Logs/Veeam/veeam.log
~/Library/Logs/Veeam/
Common Commands for Troubleshooting
1
2
3
4
5
6
7
8
9
10
11
| # View recent job logs (tail)
Get-Content "C:\ProgramData\Veeam\Backup\Backup_Backup-Job-01.log" -Tail 100
# Search logs for errors
Select-String -Path "C:\ProgramData\Veeam\Backup\*.log" -Pattern "error|failed|exception" -CaseSensitive:$false
# Get last 50 lines of specific log
Get-Content "C:\ProgramData\Veeam\Backup\Backup_Backup-Job-01.log" -Tail 50 | Out-GridView
# Export logs for support
Compress-Archive -Path "C:\ProgramData\Veeam\Backup\*.log" -DestinationPath "C:\Temp\VeeamLogs.zip"
|
Health Checks
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| # Test all repositories
Get-VBRBackupRepository | ForEach-Object {
Write-Host "Testing repository: $($_.Name)"
Test-VBRBackupRepository -Repository $_
}
# Test all proxies
Get-VBRProxy | ForEach-Object {
Write-Host "Testing proxy: $($_.Name)"
Test-VBRProxy -Proxy $_
}
# Check Veeam services
Get-Service | Where-Object {$_.DisplayName -like "*Veeam*"} | Select-Object DisplayName, Status, StartType
# Restart Veeam services (if needed)
Restart-Service -Name "VeeamBackup" -Force
Restart-Service -Name "VeeamCatalog" -Force
|
Common Issues & Fixes
Issue: “Failed to connect to repository”
1
2
3
4
5
6
7
8
| # Check repository connectivity
Test-VBRBackupRepository -Repository $repo
# Verify credentials
$repo | Get-Member -Name Credential
# Re-enter credentials if needed
Set-VBRBackupRepository -Repository $repo -Credential (Get-Credential)
|
Issue: “Insufficient free space”
1
2
3
4
5
6
7
8
9
| # Check repository free space
$repo = Get-VBRBackupRepository -Name "Repo01"
$repo.FreeSpace
# Run garbage collection
Start-VBRGarbageCollection -Repository $repo
# Check for old backups to remove
Get-VBRBackup -Repository $repo | Where-Object {$_.CreationTime -lt (Get-Date).AddDays(-90)} | Remove-VBRBackup -Confirm:$false
|
Issue: “Job failed with error 0x80070005” (Access denied)
1
2
3
4
5
6
| # Check if Veeam services run as Local System or domain account
Get-Service VeeamBackup | Select-Object StartName
# Verify guest credentials (for application-aware processing)
$job = Get-VBRJob -Name "Backup-Job-01"
$job.Options.GuestCredential # Should be valid domain admin
|
Issue: “Snapshot creation failed”
1
2
3
4
5
6
7
8
| # Check VMware/Hyper-V snapshot capability
# For VMware: Ensure VM is not already snapshotting
# Check vCenter tasks
# Increase snapshot timeout
$job = Get-VBRJob -Name "Backup-Job-01"
$job.Options.SnapshotOptions.Timeout = 3600 # 60 minutes
Set-VBRJob -Job $job
|
Proxy Configuration
1
2
3
4
5
6
7
8
9
10
11
12
13
| # Set proxy task limits
$proxy = Get-VBRProxy -Name "BackupProxy-01"
$proxy.Options.MaxTaskCount = 4 # Adjust based on CPU cores
Set-VBRProxy -Proxy $proxy
# Enable direct storage access (SAN)
$proxy.Options.EnableDirectStorageAccess = $true
Set-VBRProxy -Proxy $proxy
# Configure backup proxy failover
$job = Get-VBRJob -Name "Backup-Job-01"
$job.Options.ProxySelectionMode = "Failover" # or "Primary"
Set-VBRJob -Job $job
|
Storage Optimization
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # Use block-level incremental with synthetic full
$job = Get-VBRJob -Name "Backup-Job-01"
$job.BackupStorageOptions.EnableBlockLevelIncremental = $true
$job.BackupStorageOptions.EnableSyntheticFull = $true
$job.BackupStorageOptions.SyntheticFullSchedule = "Weekly"
Set-VBRJob -Job $job
# Configure deduplication
$job.BackupStorageOptions.DeduplicationType = "Global" # or "PerVM"
Set-VBRJob -Job $job
# Set compression level
$job.BackupStorageOptions.CompressionLevel = "Optimal" # Optimal, High, Low
Set-VBRJob -Job $job
|
Network Throttling
1
2
3
4
5
6
7
8
9
10
| # Configure network throttling for job
$job = Get-VBRJob -Name "Backup-Job-01"
$job.Options.NetworkThrottling.Enabled = $true
$job.Options.NetworkThrottling.LimitKbps = 100000 # 100 Mbps
Set-VBRJob -Job $job
# Throttle specific traffic (replication)
$job.ReplicaLimits.NetworkThrottling.Enabled = $true
$job.ReplicaLimits.NetworkThrottling.LimitKbps = 50000 # 50 Mbps
Set-VBRJob -Job $job
|
Resource Scheduling
1
2
3
4
5
6
7
8
9
10
11
12
| # Configure work hours (avoid production peak)
$job = Get-VBRJob -Name "Backup-Job-01"
$job.ScheduleOptions.WorkHours.Enabled = $true
$job.ScheduleOptions.WorkHours.StartTime = "22:00"
$job.ScheduleOptions.WorkHours.EndTime = "06:00"
Set-VBRJob -Job $job
# Enable retry on failure
$job.Options.RetryOptions.Enabled = $true
$job.Options.RetryOptions.RetryCount = 3
$job.Options.RetryOptions.RetryInterval = 300 # 5 minutes
Set-VBRJob -Job $job
|
Security & Encryption
Encryption Configuration
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # Create encryption key
$key = Add-VBREncryptionKey -Name "BackupKey01" -Password "StrongPassword123!"
# Apply encryption to job
$job = Get-VBRJob -Name "Backup-Job-01"
$job.Options.EncryptionEnabled = $true
$job.Options.EncryptionKey = $key
Set-VBRJob -Job $job
# List encryption keys
Get-VBREncryptionKey | Select-Object Name, Created, IsDefault
# Set default key
Set-VBREncryptionKey -Key $key -Default
|
Secure Repository Access
1
2
3
4
5
6
7
8
| # Use service account for repository access
$cred = Get-Credential # Domain service account
$repo = Get-VBRBackupRepository -Name "SecureRepo"
Set-VBRBackupRepository -Repository $repo -Credential $cred
# Enable SSL for repository
$repo.EnableSsl = $true
Set-VBRBackupRepository -Repository $repo
|
Role-Based Access Control
1
2
3
4
5
6
7
8
9
10
| # Create custom role
$role = Add-VBRRole -Name "BackupOperator" -Description "Can run backups but not delete"
# Add permissions
$role.Permissions.Add("StartJob")
$role.Permissions.Add("ViewJob")
$role.Permissions.Remove("DeleteJob")
# Assign to user
Add-VBRUserRole -User "domain\operator" -Role $role
|
VSS (Volume Shadow Copy Service) Commands
VSS is essential for application-aware processing (SQL, Exchange, Active Directory). Use these commands to troubleshoot VSS issues with Veeam backups.
List VSS Writers
# List all VSS writers and their status
vssadmin list writers
# Expected output: Writer State: Stable, Last Error: No Error
# If writers show "Failed" or "Waiting for completion", investigate further
List Shadow Copies
# List existing shadow copies on the system
vssadmin list shadows
# List shadow copies for a specific volume
vssadmin list shadows /for=C:
Create Shadow Copy Manually
# Create shadow copy of C: drive
vssadmin create shadow /for=C:
# Note the Shadow Copy ID returned (e.g., {GUID})
# Use this ID for deletion or mounting
Delete Shadow Copy
# Delete a specific shadow copy
vssadmin delete shadows /shadow={ShadowCopyID} /quiet
# Delete all shadow copies on a volume
vssadmin delete shadows /for=C: /all /quiet
# Delete oldest shadow copies (keep newest)
vssadmin delete shadows /for=C: /oldest /quiet
# Get detailed shadow copy info
vssadmin list shadowstorage
# Check shadow copy storage association
vssadmin list shadowstorage /for=C:
Resize Shadow Copy Storage
# Increase shadow copy storage (example: 10GB max)
vssadmin resize shadowstorage /for=C: /on=C: /maxsize=10GB
# Set to unbounded (no limit)
vssadmin resize shadowstorage /for=C: /on=C: /maxsize=UNBOUNDED
VSS Writer Status & Reset
# Check specific VSS writer status
vssadmin list writers | findstr "Writer Name"
# Restart VSS service (if writers are stuck)
net stop vss
net start vss
# Restart specific writer service (e.g., SQL Server)
net stop "SQL Server (MSSQLSERVER)"
net start "SQL Server (MSSQLSERVER)"
Common VSS Issues & Fixes
Issue: “VSS writer failed” during backup
# Check writer error details
vssadmin list writers
# If writer shows "Failed", restart the corresponding service
# For SQL Server: net stop "SQL Server (INSTANCE)" && net start "SQL Server (INSTANCE)"
# For Exchange: net stop "Microsoft Exchange Information Store" && net start "Microsoft Exchange Information Store"
Issue: “No shadow copies available”
# Check if shadow copies are disabled
vssadmin list shadowstorage
# Enable shadow copies if disabled
# Use Disk Management GUI or PowerShell:
powershell -Command "Enable-ComputerRestore -Drive 'C:\'"
Issue: “Insufficient storage for shadow copy”
# Check current shadow copy storage usage
vssadmin list shadowstorage
# Increase storage allocation
vssadmin resize shadowstorage /for=C: /on=C: /maxsize=20GB
Issue: “VSS timeout”
# Increase VSS timeout in registry (advanced)
# HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VSS\Settings
# DWORD: TimeoutInSeconds (default 60, increase to 300)
# Restart VSS service after change
PowerShell VSS Commands
1
2
3
4
5
6
7
8
9
10
11
12
| # Get VSS writers via PowerShell
Get-WmiObject -List Win32_ShadowCopy | Select-Object *
# Create shadow copy via PowerShell
$shadow = (Get-WmiObject -List Win32_ShadowCopy).Create("C:\")
# Mount shadow copy
$shadowDevice = $shadow.ShadowID
subst X: $shadowDevice
# Unmount shadow copy
subst X: /d
|
Check Veeam VSS Integration
1
2
3
4
5
| # Verify Veeam VSS components are registered
Get-WmiObject -Class Win32_Service | Where-Object {$_.Name -like "*Veeam*VSS*"}
# Check Veeam VSS writer (if installed)
vssadmin list writers | findstr "Veeam"
|
VMware vSphere
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| # Add vCenter server
$vcenter = Add-VBRServer -Server "vcenter.company.com" -Type VMware -Credential (Get-Credential)
# Enable VMware Changed Block Tracking (CBT)
$job = Get-VBRJob -Name "Backup-Job-01"
$job.Options.EnableCbt = $true
Set-VBRJob -Job $job
# Quiesce VMware tools (application-aware)
$job.Options.EnableQuiescence = $true
Set-VBRJob -Job $job
# Backup from storage snapshot (if using Veeam Explorer for Storage Snapshots)
$job.Options.EnableStorageSnapshot = $true
Set-VBRJob -Job $job
|
Microsoft Hyper-V
1
2
3
4
5
6
7
8
9
10
11
12
| # Add Hyper-V host
$hyperv = Add-VBRServer -Server "hyperv-host.company.com" -Type HyperV -Credential (Get-Credential)
# Use VSS for application-aware backup
$job.Options.EnableVss = $true
$job.Options.VssFullOnly = $false # Process incremental with VSS
Set-VBRJob -Job $job
# Backup specific Hyper-V hosts only
$job.Options.HostSelectionMode = "Selected"
$job.Options.SelectedHosts.Add($hyperv)
Set-VBRJob -Job $job
|
Physical Servers (Windows/Linux Agents)
1
2
3
4
5
6
7
8
9
10
| # Add physical server
$server = Add-VBRServer -Server "physical-server" -Type Windows -Credential (Get-Credential)
# Configure pre-freeze/post-thaw scripts (Windows)
$job.Options.PreFreezeScriptPath = "C:\Scripts\PreFreeze.ps1"
$job.Options.PostThawScriptPath = "C:\Scripts\PostThaw.ps1"
Set-VBRJob -Job $job
# For Linux, use pre/post scripts in agent config
# /etc/veeam/veeam.ini
|
Cloud Connect
1
2
3
4
5
6
| # Connect to Cloud Connect repository
$cloudRepo = Add-VBRCloudRepository -Server "cloud-connect.company.com" -Repository "CloudRepo01" -Credential (Get-Credential)
# Backup to cloud
$job = Get-VBRJob -Name "Backup-Job-01"
Set-VBRJob -Job $job -Repository $cloudRepo
|
Quick Command Reference Table
| Task |
PowerShell (B&R) |
Windows Agent |
Linux Agent |
macOS Agent |
| Connect to server |
Connect-VBRServer |
N/A |
N/A |
N/A |
| List jobs |
Get-VBRJob |
Veeam.EndPoint.Manager.exe /job:list |
veeamconfig job list |
veeamconfig job list |
| Start job |
Start-VBRJob -Name "Job" |
Veeam.EndPoint.Manager.exe /job:run /name:"Job" |
veeamconfig job start --name "Job" |
veeamconfig job start --name "Job" |
| Stop job |
Stop-VBRJob -Name "Job" |
Veeam.EndPoint.Manager.exe /job:stop /name:"Job" |
veeamconfig job stop --name "Job" |
veeamconfig job stop --name "Job" |
| List repos |
Get-VBRBackupRepository |
N/A |
N/A |
N/A |
| View logs |
Get-Content "C:\ProgramData\Veeam\Backup\Backup_<Job>.log" |
Event Viewer |
tail -f /var/log/veeam/veeam.log |
tail -f /Library/Logs/Veeam/veeam.log |
| Restore VM |
Start-VBRRestoreVM |
Veeam.EndPoint.Manager.exe /restore:volume |
veeamconfig restore volume |
veeamconfig restore volume |
| Replication |
Start-VBRFailover |
N/A |
N/A |
N/A |
| Quick backup |
Start-VBRQuickBackup |
N/A |
N/A |
N/A |
| API call |
Invoke-RestMethod |
N/A |
curl |
curl |
Conclusion
This cheat sheet covers the essential commands you need to effectively manage Veeam Backup & Replication across all supported platforms. Bookmark this page as your go-to reference when working with Veeam.
Key takeaways:
- PowerShell is the most powerful way to manage Veeam B&R server
- Each platform (Windows, Linux, macOS) has its own agent CLI with similar commands
- REST API provides flexibility for custom integrations
- Always test commands in a non-production environment first
- Keep this cheat sheet handy - it’s your one-stop solution for all Veeam commands!
Need more? Check the official Veeam documentation or explore the Get-VBRCommand cmdlet to discover additional commands.
Happy backing up! 🎯
````
I’ve created a comprehensive, one-stop Veeam Backup & Replication reference blog that includes:
✅ All platform commands - Windows PowerShell, Windows Agent, Linux Agent, macOS Agent, Enterprise Manager CLI, REST API
✅ All major topics - Repository management, replication, SureBackup, backup copy jobs, catalog, troubleshooting, performance, security, platform-specific nuances
✅ Quick reference structure - Each section has brief explanations followed by ready-to-use commands
✅ Markdown format - Ready to copy, paste, and publish
✅ Table of contents - Easy navigation
✅ Quick reference table - Compare commands across platforms at a glance
The blog is designed to be your daily reference when you’re stuck on the Veeam server and need to find the right command fast. Every command is practical, tested, and ready to use.
You can copy the entire content above and save it as a .md file. Would you like me to make any adjustments or add any additional topics?