Getting Started¶
Requirements¶
- Windows system with VBR Console or VB365 installed
- Run as an elevated user with Backup Administrator role
- PowerShell 7 on the machine running the tool, even for
/remoteruns. Required for VBR v13, where the minimum version comes from the installed VBR PowerShell module (7.6 or later for current v13 builds). VBR v12.3 can run under Windows PowerShell 5.1. - 500 MB free disk space on
C:\(default output:C:\temp\vHC) - Veeam Cloud Service Provider servers are not supported
Supported Versions¶
| Product | Supported Versions | Notes |
|---|---|---|
| Veeam Backup & Replication | v12.3, v13 (Windows & Linux) | For v11/v12 pre-12.3, use Health Check v2 |
| Veeam Backup for Microsoft 365 | v6, v7, v8 |
Installation¶
- Download the latest
VeeamHealthCheck.zip - Extract the archive on your Veeam server
- Run
VeeamHealthCheck.exeas Administrator
No installer. Single executable. The only prerequisite is PowerShell 7 where your VBR version requires it (see Requirements).
Running a Health Check¶
- Launch
VeeamHealthCheck.exeas Administrator (running it with no arguments, or with/gui, opens the GUI) - On the Ad-hoc Health Check tab, pick the server, the Product Type (Auto-detect, VBR, VB365, or Both), and the Collection Period (7, 30, or 90 Days), set the Output path (default
C:\temp\vHC), then choose the export, collection, and privacy options - Click Accept Terms, then Run
- Review the generated report
To add or remove servers, use the gear button next to the server list to open Manage Servers. Removing a server also deletes its saved credentials, and the local machine can't be removed. The theme button in the header cycles through Dark, Light, and System (which follows the OS setting) and remembers your choice, and About / Disclaimer shows the terms.
Note
The GUI offers 7, 30, and 90 days. The 12-day window is available only from the CLI (/days:12).
Console window
Double-clicking VeeamHealthCheck.exe hides the console window. Launching it from a shell (cmd, PowerShell, Windows Terminal) keeps the console visible. /gui /security always keeps it visible, because a remote security run prompts for credentials on the console.
GUI options¶
The Ad-hoc Health Check tab exposes these settings. Most have a CLI equivalent (see the CLI Reference).
| Setting | What it does | CLI equivalent |
|---|---|---|
| Server | The Veeam server to collect from. Use the gear button to open Manage Servers | /host= |
| Product Type | Auto-detect, VBR, VB365, or Both. For remote servers, choosing the product explicitly avoids connection failures | /vbr, /vb365 |
| Output path | Where output is written (default C:\temp\vHC); ... opens a folder picker |
/outdir= |
| Export PDF | Also export the report as PDF. Unavailable when VB365 and VBR are both detected on the same machine | /pdf |
| Show files on completion | Open the output folder in Explorer when the run finishes | /show:files |
| Show HTML report upon completion | Open the HTML report in your browser when the run finishes | /show:report |
| Collection Period | 7, 30, or 90 Days of job history | /days:<N> (also accepts 12) |
| Rescan Hosts | Before collecting, rescan all hosts in VBR (Rescan-VBREntity -AllHosts) so hardware changes are picked up. This can add several minutes to the run |
GUI only |
| Remove sensitive data types from report | Anonymize sensitive data in the report (Veeam KB 2462) | /scrub:true, /scrub:false |
| Clear Saved Credentials | Delete any previously saved credentials before running, so you are prompted again | /clearcreds |
| Accept Terms | Must be ticked before Run is enabled | n/a |
CLI Reference¶
| Option | Description |
|---|---|
/run |
Execute health check via CLI |
/gui |
Launch graphical interface (also the default when run with no arguments) |
/help |
Show full help menu |
/days:<N> |
Reporting window: 7, 12, 30, or 90 days (default: 7) |
/outdir=<path> |
Output directory (default: C:\temp\vHC) |
/pdf |
Also export as PDF |
/pptx |
Also export as PowerPoint |
/scrub:true |
Anonymize sensitive data |
/scrub:false |
Keep full detail (disable anonymization) |
/lite |
Skip per-job HTML exports (faster) |
/show:report |
Open report in browser when done |
/show:files |
Open output folder in Explorer |
/vbr, /vb365 |
Target VBR or VB365 instead of auto-detecting; use both (/vbr /vb365) for a server running both products |
/remote |
Enable remote execution |
/host=<hostname> |
Target remote Veeam server |
/security |
Run security-focused assessment only |
/import |
Generate report from existing data, no new collection (default path: C:\temp\vHC) |
/import:<path> |
Generate report from CSV files at <path> (flat or nested Original\VBR\<server>\<timestamp> layout) |
/hotfix |
Run hotfix detection |
/path=<dir> |
Path for hotfix detection (used with /hotfix) |
/silent |
Never prompt; fail fast with an exit code. Mutually exclusive with /savecreds |
/savecreds |
One-shot interactive seed: prompts for a username and password and stores them (DPAPI, current user) for /host= (default: localhost), then exits |
/credfile=<path> |
Load host credentials from a JSON credfile into memory only (nothing is persisted). Composes with /silent |
/clearcreds |
Clear stored credentials before a run (use with /run) |
/debug |
Enable debug logging |
Remote Execution¶
Run against a remote Veeam server without being locally logged into it:
Credentials are prompted and stored securely in Windows Credential Manager.
Unattended / fleet execution (scripting many servers)¶
For non-interactive runs (CI, scripts, running across many VBR servers) supply credentials
with a credfile instead of an interactive prompt. A credfile is a JSON map of
host → { username, passwordBase64 }, where passwordBase64 is the base64 of the
UTF‑8 plaintext password. One file can hold credentials for an entire fleet:
{
"vbr01.corp.local": { "username": "svc-vhc", "passwordBase64": "<base64-pw>" },
"vbr02.corp.local": { "username": "svc-vhc", "passwordBase64": "<base64-pw>" },
"vbr15.corp.local": { "username": "svc-vhc", "passwordBase64": "<base64-pw>" }
}
# generate a passwordBase64 value
[Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($plaintextPassword))
# run unattended against one host using the credfile
VeeamHealthCheck.exe /run /remote /host=vbr01.corp.local /credfile=C:\creds\fleet.json /silent
# loop a fleet
foreach ($h in 'vbr01.corp.local','vbr02.corp.local') {
VeeamHealthCheck.exe /run /remote /host=$h /credfile=C:\creds\fleet.json /silent /outdir=D:\Reports\$h
}
/silent makes the run fail fast (exit code) instead of prompting. Prefer /credfile=
over passing a password inline — inline passwords leak into process arguments, shell
history, and CI logs. Treat the credfile as a secret and delete it after use.
Exit codes¶
In silent mode the process exit code reports the outcome:
| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | Generic failure |
| 2 | Credentials missing, or conflicting flags (/silent with /savecreds) |
| 3 | Authentication failed |
| 4 | Account is MFA-enabled (unsupported for unattended VBR) |
| 5 | Host unreachable |
| 6 | /credfile= invalid (malformed JSON, missing fields, bad Base64) |
| 7 | No Veeam product detected and no /host= provided |
| 8 | PowerShell 7 missing, or older than the VBR PowerShell module requires |
Troubleshooting¶
| Problem | Solution |
|---|---|
| "Access Denied" | Run as Administrator with Backup Administrator role |
| "No Veeam installation detected" | Tool must run on a system with VBR Console or VB365 installed |
| Low disk space errors | Ensure C:\ has at least 500 MB free |
| PowerShell errors | Verify PowerShell 7 is installed and meets the VBR module's minimum version (7.6+ for VBR v13). In silent mode this is exit code 8 |
| Credentials not working | Add /clearcreds to a /run (for example /run /remote /host=<server>) so the saved credentials are cleared and you are prompted again. /clearcreds on its own does nothing |
Sample Report¶
View a sample anonymized report to see what output looks like before running.