ServerAdmin

ServerAdmin User Guide

Download the current version: ServerAdmin.zip.

1. Purpose

ServerAdmin manages Proxmox servers and Windows virtual machines from one Windows desktop application. It provides:

2. Requirements

The Proxmox SSH account must be allowed to run the required qm and pvesh commands. Administrative operations normally require the root account.

3. First Start

ServerAdmin VCL workspace with a connected server and VM list.
ServerAdmin VCL workspace with a connected server and VM list.
  1. Extract the complete ServerAdmin directory.
  2. Start ServerAdmin.exe.
  3. If Pageant contains several keys, open Settings > Pageant keys....
  4. Select the SSH key used for Proxmox and DevOpsTasks. When Pageant contains
  5. exactly one key, ServerAdmin selects and saves it automatically.

  6. Open Settings > Application settings....
  7. Configure the web interface or disable it when it is not required.

The main window title displays the exact version of the running ServerAdmin executable.

Open Help > User guide in the desktop application to open the autonomous HTML guide included in the ServerAdmin directory. In the Web interface, select Help. Use the Russian and English switch at the top of the guide. The documentation does not require Internet access.

Interface language

All menu, button, field, tab, and other interface labels in this guide use their English captions, regardless of the selected interface language.

The Desktop and Web interfaces support English and Russian without restarting. Russian is selected by default in a clean distribution. In Desktop, use Settings > Language > English/Russian. The selection is stored in conf\SASettings.ini and applies to newly opened forms. In Web, use the RU or EN button in the top bar. The Web choice is stored in the current browser.

Do not move only ServerAdmin.exe. Keep the agent, conf, and web directories, WebView2Loader.dll, ServerAdminPageantBroker.exe, and ServerAdminJobService.exe beside the executable.

ServerAdmin starts the Pageant broker in the current user session and registers a versioned per-user copy for Windows sign-in. Private keys remain inside Pageant. Only SSH-agent identity and signing requests cross the local named pipe. Pageant must remain running with the required key loaded.

The ServerAdminJobService Windows service is optional and disabled by default. Open Settings > Application settings..., enable Use background job service, and select Install service to install it. Select Remove service to stop and remove it. Both operations request Windows administrator approval. The service keeps the web interface and its background jobs available after the desktop application closes. If the desktop currently owns the configured web port, the service automatically starts listening after the desktop closes. It authenticates only through the user-session Pageant broker; no SSH password is copied into the service. The key selected in Settings > Pageant keys... is stored as a public-key identifier so the service can choose the same Pageant identity. The service checks logged-in Windows sessions for pageant.exe. If exactly one eligible user exists, that session is selected automatically and the broker is launched there, including when the workstation is locked. If several users run Pageant, select Pageant user in Application settings; the choice is stored by Windows SID. Refresh users reloads the list. If the selected user signs out or Pageant stops, service SSH jobs wait until that account and Pageant are available again. No broker can be launched when no user is logged in. ServerAdmin uses SSH/Pageant and pvesh as the primary Proxmox management transport in Desktop, Web, and the background service. This includes hardware, task history, monitoring, backup schedules, backup and restore, VM creation, cloning, migration, and task cancellation. These operations do not request the root@pam password while Pageant authentication is available. The Proxmox HTTPS API remains a fallback when SSH/Pageant cannot be used. Saved fallback API passwords are protected with machine-scoped Windows DPAPI. Legacy saved passwords are migrated when ServerAdmin.exe is opened after an update. Adding, cloning, editing, and deleting server definitions in the web interface also remain available while only the background service is running.

Without the service, all desktop and web functions remain available while ServerAdmin.exe is running. Closing the application stops the web interface, background web jobs, and their progress tracking.

4. Proxmox Servers

Running a monitoring command on a Proxmox server.
Running a monitoring command on a Proxmox server.

Add a server

  1. Open Servers > Add server....
  2. Enter a unique server name.
  3. Enter the Proxmox host or IP address.
  4. Enter the SSH and Proxmox ports.
  5. Enter the Proxmox user.
  6. Save the server.
  7. The optional Group field places the server under a named branch in the Servers menu. Use Servers > Manage groups... to add, rename, or delete groups. Servers and groups are sorted alphabetically. Servers without a group remain directly in the root Servers list. Deleting a group keeps its servers and moves them back to the root list.

Edit or delete a server

Open Servers, select the server, then use Edit... or Delete.... Deleting a server removes its saved definition but does not change the Proxmox host or its VMs.

Open a server

Open Servers and select the server name. Clicking the server executes Open directly; its submenu keeps the clone, edit, and delete commands. ServerAdmin connects through SSH and loads the VM list. If the server has no cached VM inventory, opening it starts the load automatically. Proxmox Backup Server does not start VM inventory loading. Each VM button shows its numeric ID as a small #ID label without increasing the button height.

Use Servers > Search servers and VMs... to open live search results. Search matches server name or IP and cached VM name, ID, configuration IP, or remembered remote-access IP. Selecting a server shows its cached VMs and known addresses in the adjacent panel; the first matching VM is highlighted. Double-click a server result to open it. Search uses local data and does not send a request for every entered character.

Use Workspace actions for Reload list vm ID, Check State VMs, Detach, and Bulk actions. Detach moves the complete server view into its own window. Return, or closing the detached window, moves it back to its original tab. Each open server can have its own detached window. Select the × at the right edge of an open server workspace or VM console tab to close only that workspace or console. The fixed Servers and VM consoles tabs do not have close buttons. The server PuTTY command starts the packaged clients\ssh\putty.exe; no separately installed PuTTY is required. The adjacent Open browser button opens that server's Proxmox HTTPS address using its configured host and Proxmox port. If no Proxmox password is saved, it offers a masked password field. You can save a nonempty password securely and copy it to the clipboard before opening, or choose Open without password. Selecting Don't ask again while opening without a password suppresses this prompt for that server; it can still be opened without changing the clipboard.

For a selected VM, Remote access > Connection settings... opens its connection settings. Disable session monitoring adds the --disable-session-monitoring DevOpsTasks service parameter; clearing it removes the parameter. Save applies the service command line and immediately requests a DevOpsTasks restart. Existing VM records default to monitoring enabled. While disabled, DevOpsTasks neither monitors RDP sessions nor logs them off automatically.

The same dialog can optionally clear remembered connection data. Select one or more connection types (RDP, VNC, or SSH) and the address or credential data to clear. Remote-client IP addresses are stored separately by protocol; existing shared addresses are migrated when first used.

Open Settings > PBS profiles... to maintain reusable Proxmox Backup Server profiles independently from a PVE server. Profile passwords are stored only with machine-scope Windows DPAPI and are never returned to Web. Use Trust fingerprint... to probe the certificate without credentials, review the SHA-256 fingerprint, and explicitly save trust. Manage associations... can link or unlink one profile from multiple PVE servers.

When Settings > Minimize to tray is enabled, closing the desktop window hides it in the notification area. Starting ServerAdmin again does not open a second desktop instance; the existing hidden, minimized, or background window is restored and brought to the foreground.

Open Server actions > Show list storage to view the selected node's storage in a table. Press Add PBS storage... from that table, choose a saved PBS profile, then press Refresh directories; datastore and namespace values are loaded from the selected PBS server. Discovery runs in the background, rejects repeated starts, and can be canceled safely before closing the dialog. <root> means the datastore root and is sent as an empty namespace. A successful attach links the selected profile to the current PVE. Web lists only profiles associated with the selected PVE and attaches with a profile ID instead of sending its password. If Web cannot confirm the new storage after creation, it reports a warning without retrying the create request.

The Manual mode remains available in Desktop and Web for compatibility. Enter a unique storage ID, PBS host and port, datastore, authentication ID, and password. A named namespace is optional. A saved SHA-256 certificate fingerprint must match before credentials are used; with an empty fingerprint, the certificate must be trusted by Windows. ServerAdmin validates the selected datastore and namespace again, rejects duplicate storage IDs, sends one create request, and reports create and post-create verification failures separately. Existing Proxmox storage is never updated or deleted by this workflow.

Open Server actions > ISO images... in Desktop or ISO images in Web to view ISO files available on the server. Choose an ISO-enabled storage before starting a transfer. Download by URL asks Proxmox to download the image directly with its native download-url task. Upload from PC sends the local file through SSH/SFTP; qm cannot upload ISO files. Web uploads are staged in the Temp\iso_uploads folder and removed after completion or failure. Select an ISO in the catalog and use Delete to remove it from Proxmox storage.

ServerAdmin probes the connected platform. For Proxmox Backup Server, VM inventory, VM checks, bulk VM actions, VM creation, migration, monitoring, and backup-schedule commands are hidden; SSH and server-level actions remain available.

5. VM Management

Select a VM and open its action menu.

Destructive commands require confirmation. Confirm the selected server and VM before using hard stop, reset, or delete.

Management > CD/DVD > Insert... loads the server ISO catalog and mounts the selected image. Management > CD/DVD > Eject leaves the virtual CD drive empty. Detached VM consoles expose the same commands. Web VM rows provide a separate CD/DVD button with Insert and Eject actions.

Management > Hardware... in the desktop application edits CPU type, sockets, cores, memory, and minimum balloon memory. The Disks and Network adapters tabs list every supported configured device. Use Add, Edit, or Remove to change devices. New disks require a bus, device number, image storage, and size. Use CD/DVD drive to select the target virtual drive. Select CD/DVD drive installed to add the selected drive. Clear it to remove that selected drive. The CD/DVD image field selects an ISO available on the server; choose <No CD> to keep the installed drive empty. The Web hardware dialog provides the same install/remove control and ISO selection. New CD/DVD drives are added automatically on the first available SCSI device slot. New adapters require a device number, model, and bridge. Enter auto for an automatically generated MAC address. The network adapter list shows whether each configured link is connected or disconnected. Existing disk size can only be increased. For an existing disk, Storage is a drop-down list. Selecting another storage queues a background Proxmox disk-move task; ServerAdmin does not rewrite the volume identifier as ordinary VM configuration text. All changes are submitted together through pvesh over SSH/Pageant when Save is selected. HTTPS API is used only as a fallback.

Removing an attached disk detaches it first, so Proxmox keeps the volume as an unusedN disk. Reopen Hardware, select that unusedN row, and choose Remove to delete the volume and its data permanently. This second operation cannot be undone. Hardware values waiting for a VM shutdown or restart are highlighted in yellow and marked Pending restart in both Desktop and Web.

The CPU list is loaded from the selected Proxmox node and includes default. When a VM has no explicit CPU setting, opening and saving Hardware keeps it at default; ServerAdmin does not write kvm64 unless it is selected explicitly. Selecting default for a VM with an explicit CPU removes that override. The models exposed by Proxmox are available model definitions, not a guarantee that every model is supported by the physical CPU. Use host only when its migration trade-offs are acceptable; use an appropriate generic model for mixed nodes.

Check State VMs reloads both runtime state and the current Proxmox lock. A locked VM is marked in the list as [LOCK: backup] or with another lock type reported by Proxmox.

Create a VM backup

  1. Select the VM and open Backups > Create backup....
  2. Select an enabled Proxmox storage that supports backup content.
  3. Select Snapshot, Suspend, or Stop mode.
  4. Select Start backup.

ServerAdmin starts a Proxmox vzdump task and immediately returns control to the application. A separate status-bar field shows task progress until the task finishes. With several active tasks it shows the first two and the count of additional tasks. VM state and its Proxmox lock are refreshed automatically after task start. Backups > Stop active task(s)... queries the live Proxmox task list, so it can stop active backup or restore tasks even when they were started before the current ServerAdmin session.

Restore a VM backup

  1. Select the target VM and open Backups > Restore....
  2. Select backup storage, then select an archive from the detailed list. The
  3. list shows name, notes, protection, date, format, and size.

  4. Select target storage or keep From backup configuration.
  5. Confirm the VM ID and optional bandwidth limit.
  6. Select Unique, Start after restore, or Live restore when required.
  7. Enable Override settings to replace the name, memory, cores, or sockets.
  8. These fields are loaded from the selected backup configuration and remain disabled until the option is enabled. An overridden VM name must be a valid DNS name containing only letters, numbers, dots, and hyphens.

  9. Select Restore and confirm the overwrite warning.

Restore is submitted as a Proxmox background task. Its live progress appears in the task field of the status bar without blocking other work. Existing VM data can be overwritten because ServerAdmin uses the Proxmox force restore mode. Available options depend on the installed Proxmox version and storage type. The SSH account must have backup, storage-audit, VM allocation, and VM configuration permissions required by the selected action. Equivalent API permissions are required only when HTTPS fallback is used.

Create a new VM

Open Server actions > New VM and select:

Creation and cloning run as background Proxmox tasks. Their progress appears in the task field of the status bar. The VM list refreshes after completion.

Recent actions

The Recent actions submenu stores the last 10 invoked commands. Server actions and VM actions have separate histories. Repeated commands move to the top instead of creating duplicates. The history persists between starts and replays an action against the currently selected server or VM.

View Proxmox task history

Open Server actions > Task history... to view the 50 most recent tasks on the server node. The modeless list shows start and finish time, task type, resource ID, user, and result. This is a static history snapshot. Refresh manually requests a new snapshot from Proxmox. The history window does not poll individual task logs and does not stop tasks. The search field filters the already loaded list without another server request. Task history uses pvesh through SSH/Pageant and therefore does not require a root@pam password while the SSH key is available.

6. VM Console

Embedded VM RDP console with management, backup, and Agent commands.
Embedded VM RDP console with management, backup, and Agent commands.
Server and VM console windows after Detach.
Server and VM console windows after Detach.

Open VM Console from the selected VM.

If the embedded console cannot initialize, use its browser fallback action.

RDP, VNC, and SSH

The VM console toolbar shows the saved RDP password in plain text. The field is empty when ServerAdmin does not store RDP authorization for that VM.

The selected VM menu provides Remote access > RDP, VNC, and SSH (PuTTY) actions. ServerAdmin reads the guest IPv4 address through QEMU Guest Agent before launching a client. When the agent reports multiple usable IPv4 addresses, ServerAdmin asks which address to use. A single usable address is selected automatically. The selected address is saved for that server and VM. Later RDP, VNC, and SSH connections use it directly without requesting the address again. The latest non-empty remote-access address also becomes the shared VM address used by DevOpsTasks commands. An already saved RDP address takes precedence over the legacy shared address when an agent command starts. If automatic lookup fails for any reason, ServerAdmin asks for an address manually. The entered address can be saved for that server and VM and is used as the default value on later fallback prompts.

Use Remote access > Connection settings... to change session monitoring or clear saved addresses and saved RDP or SSH credentials independently. Clearing RDP credentials also removes the session credential prepared for Windows Remote Desktop.

7. Install DevOpsTasks

Before installation, ServerAdmin checks:

ServerAdmin transfers the packaged agent through Proxmox and installs it as a Windows service. Installation is skipped when the service is already present. Use Agent > Remove agent service to stop and remove the DevOpsTasks service through QEMU Guest Agent. If the service does not stop within 15 seconds, ServerAdmin terminates its process before deleting the service. The service is removed synchronously; its renamed installation directory is deleted by a detached hidden cleanup process. Bulk removals on one Proxmox server run one VM at a time. The SSH removal command is stopped after 45 seconds instead of waiting for interactive confirmation.

The VM must be able to execute PowerShell through QEMU Guest Agent. Select the agent SSH public-key file in ServerAdmin settings before installation. This user-specific authorized_keys file is not included in the distribution.

Manual DevOpsTasks installation

Use this method when QEMU Guest Agent installation is unavailable:

  1. From the ServerAdmin package, copy agent\DevOpsTasks.payload.zip to the
  2. Windows VM.

  3. Open PowerShell as Administrator and run:
$Root = 'C:\Program Files\DevOpsTasks'
New-Item -ItemType Directory -Force "$Root\configs" | Out-Null
Expand-Archive .\DevOpsTasks.payload.zip $Root -Force
Copy-Item C:\path\to\authorized_keys "$Root\configs\authorized_keys" -Force
& "$Root\DevOpsTasks.exe" --install
Start-Service DevOpsTasks
Get-Service DevOpsTasks

authorized_keys must contain the public OpenSSH key matching the private key loaded in Pageant. Verify that TCP port 9023 is reachable from the Proxmox server. Do not publish this port to the Internet.

About DevOpsTasks

DevOpsTasks is a Windows administration agent installed in:

C:\Program Files\DevOpsTasks

Its main components are:

The service runs with elevated rights and provides:

The default ports are:

ServerAdmin authenticates to port 9023 with the selected Pageant key, creates an SSH tunnel, and accesses port 9024 only through that tunnel. The WebSocket port does not need to be exposed on the VM network. Password fallback is disabled. When a VM has several IPv4 addresses, ServerAdmin probes TCP 9023 from the Proxmox host and uses the first reachable address. A saved RDP address does not override agent routing.

DevOpsTasks automatic updates

The DevOpsTasks service checks the public DevOpsTasks.zip_crc marker at startup and every four hours. If it differs from the local marker beside the service executable, the service downloads DevOpsTasks.zip, verifies its CRC32, stages the files, restarts itself, and completes replacement of DevOpsTasksDesktop.exe and documentation during the next startup.

Updates preserve DevOpsTasks.json, configs\authorized_keys, logs, and other local runtime data. A fresh ServerAdmin installation includes the current marker, so the agent does not download the same release immediately after installation.

ServerAdmin first uses the VM address saved for remote access. If no address is saved, it tries to discover one through QEMU Guest Agent. When discovery is not available, Desktop asks for the VM address and can save it. QEMU Guest Agent is therefore not required for commands executed by DevOpsTasks itself. The connection to DevOpsTasks is routed through the selected Proxmox server. Run via qm bypasses DevOpsTasks and executes PowerShell through QEMU Guest Agent instead.

Only install DevOpsTasks on trusted VMs. Anyone holding an authorized private key can perform privileged administration allowed by the agent.

Agent tools

The Agent menu in the VM list and VM console provides:

The process list remains open and refreshes after every start or stop attempt. Start requires the exact executable path and correct directory spelling, for example C:\Program Files\7-Zip\7zFM.exe. Windows paths are normally case-insensitive, so letter case is usually not significant. The process runs under the DevOpsTasks service account, normally LocalSystem, in session 0. GUI windows therefore do not appear on the logged-in user's desktop; use this action for background processes.

The service list remains open during service operations. After every attempt, including a failed command, ServerAdmin refreshes that same list. The list is modeless, so detached VM console windows remain usable while it is open.

JSON responses in list and information views are formatted with indentation by the result window immediately before display. Process and service results use tables, support sorting by column headers, and can be saved as JSON. When a screenshot is requested, ServerAdmin starts DevOpsTasksDesktop.exe in the logged-in user's session if the helper is not already running. The helper starts with its console hidden. The saved file path is shown in the ServerAdmin status bar. By default, screenshots are saved beside ServerAdmin.exe under:

screenshots

Change the folder under Settings > Application settings... > Screenshot directory. Relative paths are resolved from the directory containing ServerAdmin.exe.

8. Run PowerShell

  1. Select a Windows VM.
  2. Open Agent > Send command.
  3. Enter PowerShell code or load an existing .ps1 file.
  4. Leave Run via qm disabled to use DevOpsTasks.
  5. Clear Run in desktop session to receive live command output.
  6. Keep Run in desktop session selected only for programs that must appear
  7. on the logged-in user's desktop.

  8. Enable Run via qm only when the agent route is unavailable.
  9. Select Run.

While DevOpsTasks emits job.output events, the upper VM console appends each output chunk immediately instead of waiting for job.result. The progress window only indicates that the command is still running. Select Cancel in the progress window to send job.cancel; DevOpsTasks then stops the PowerShell process and writes Command cancelled. to the VM console.

Agent mode uses Pageant key authentication and does not allow password fallback. Direct commands run under the DevOpsTasks service identity in session 0 and provide live output. Desktop-session commands run with elevated rights as the logged-in Windows user, return after submission, and do not provide the child process output.

Successful command submission is silent. ServerAdmin shows a dialog only when the command cannot be submitted or the agent reports a failure.

9. Send a File

  1. Select a Windows VM.
  2. Open Agent > Files > Send file....
  3. Select a local file.
  4. Confirm or change the destination path.
  5. Enable Send via qm to use QEMU Guest Agent instead of DevOpsTasks SFTP.

The default destination is under C:\Temp. ServerAdmin transfers the file directly through DevOpsTasks SFTP over the Proxmox SSH tunnel.

To download a file:

  1. Open Agent > Files > Receive file....
  2. Enter the Windows source directory.
  3. Select one or more files from the directory list.
  4. Select the local destination folder.

ServerAdmin downloads only the selected files and preserves their original names. Both operations follow the filesystem roots configured in DevOpsTasks.

To change those roots:

  1. Open Agent > Files > Allowed folders....
  2. Enter one allowed Windows folder per line, or enable
  3. Allow all local drives.

  4. Select Save.

Unrestricted drive access should be enabled only for trusted VMs and administrators.

10. Web Interface

Web interface for quick operations and background jobs.
Web interface for quick operations and background jobs.

Open Settings > Application settings... to configure:

Authentication is mandatory when binding to a non-loopback address.

The default address is:

http://127.0.0.1:8088/

Use CIDR notation for networks in the allowlist. Example:

127.0.0.1,::1,192.168.88.0/24

The web interface provides server management, VM actions, VM hardware editing, agent installation, and VM consoles. Native VM terminal access is available only in the desktop application.

Web users, roles, and audit

The first configured Web account is migrated to the shared user store as an administrator. Manage accounts in Desktop through Settings > Web users... or, as an administrator, through Users in the Web header.

Set Servers to * or a comma-separated list of exact ServerAdmin server names. An empty scope grants access to no server. Passwords are stored only as salted verifiers in data\web_users.json; plaintext passwords are never stored. The Web header shows the active account and role.

Settings > Web audit... and the administrator-only Web Audit button show the bounded action log. Both views support filtering and JSON export. The log records login, permission, configuration, command, task, cancellation, and result events without storing passwords, private keys, or command/script text. The file is data\web_audit.json and keeps at most 5000 newest events.

Use the separate Hardware button in a VM row to open hardware settings. The web editor lists every configured SCSI, VirtIO Block, and SATA disk and every network adapter. It can add or remove disks and adapters in one save operation. New disks require a bus, device number, image storage, and size. New adapters require a model and bridge; enter auto for an automatically generated MAC address or enter a MAC address manually. Existing disk size can only grow.

The blank-VM wizard uses the same node CPU-model list and selects default for new VMs. With default, the cpu property is omitted from the create request. Use Tasks in the selected server panel to open the same recent Proxmox task history with local search and explicit refresh. Use Terminal to open a server SSH command window. Enter one non-interactive command at a time; its complete output appears in the same window. Each command runs independently with the SSH identity configured for that server. The button is hidden in the mobile layout. Terminal access permits arbitrary server commands, so expose the web interface only to trusted administrators. Enter clear in the Desktop or Web terminal to clear its current output locally. The Desktop server terminal opens a dedicated SSH connection in a worker thread, so bulk operations can continue on the same server without blocking the application interface. Its connection phase is not queued behind the serialized bulk-operation connections. The terminal prints connecting... immediately and resolves the target workspace again before displaying the result, so closing or replacing a server workspace cannot leave a stale UI callback.

The terminal's Saved commands list uses the same command library as Server actions > SSH command in the desktop application. Selecting an item copies it into the command field. Enter a command and choose Save command to store a name and an optional confirmation requirement. Desktop reloads this shared list whenever its Server actions menu opens. Use the desktop Configure... command to edit, reorder, or delete saved items. Legacy Disks and RAID saved commands are upgraded automatically to portable short variants accepted by the embedded SSH terminal. Disks uses portable lsblk columns; RAID reads the Linux software RAID state from /proc/mdstat. Refresh snapshot starts parallel background SSH checks for the configured servers. It does not query VM state or replace cached VM lists. One slow or unavailable server does not delay checks for the other servers. The same lightweight server checks start automatically when the Web dashboard opens; pressing Refresh snapshot runs them again manually. Load VMs from server persists the received VM list in ServersList; the same cached list is restored after restarting the desktop application or the background service. Check VM states refreshes status, name, configuration, and Proxmox lock only for VMs already present in that cached list. It runs in the background and persists the updated list. Use Clone server... in a server submenu under the top Servers menu to copy its connection settings. The copied name receives the (copy) suffix. Change the server name and host or IP, then save the new definition. The original server is unchanged.

The web server header has the same Clone action beside Edit. It copies the ports, user, and stored password; change the name and host or IP before saving.

Web VM and server control commands run as independent background tasks. Starting or stopping one VM does not disable the remaining server and VM controls.

Use the top-level Tasks menu in Desktop or Task center in the Web header to view current active background operations. Completed, failed, and canceled tasks are not shown in this list. The view shows action, server, target, current state, timestamps, result, error, and bounded task output. Progress is not shown in the list. Select a task to inspect its current status and output. Search is local and does not contact a server. Automatic refresh changes only rows whose data changed, so selection remains stable. Stop is enabled only for an active task that supports cancellation. Clear completed removes only completed, failed, and canceled history. Active Web operations are read from the optional background service when it is enabled; otherwise they remain in the Desktop process. Task history is stored under the local data directory. Operations interrupted by a process restart are retained and marked as failed.

Server and VM monitoring are separate. Use Server actions > Monitoring... or the Web Monitoring button for node availability, CPU, memory, storage, ZFS, and SSH. Use Monitoring... in a VM action menu or the VM row Monitoring button in Web for that VM's status, CPU, memory, and disk usage. Monitoring runs independently from Refresh snapshot.

Each server and each VM has its own polling interval and monitoring duration. Start begins the bounded session; Stop ends it. With Continue monitoring in background, the job service continues polling after Desktop or the browser dialog closes. Without it, polling continues only while that monitoring window remains open. The minimum interval is 30 seconds. Rows at or above a configured threshold are highlighted yellow. A value ten percentage points above that threshold, capped at 100%, is critical and is highlighted red. The same indication is used for server metrics, VM metrics, and incidents in Desktop and Web. In Desktop server and VM monitoring windows, drag the horizontal separator between the current readings and incident tables to resize either part vertically.

Each VM monitoring window shows only its selected VM. Enable Log VM readings to CSV to append every monitoring sample to a semicolon-delimited UTF-8 CSV file. The default folder is monitoring\vm-history beside ServerAdmin.exe; a different folder can be configured per VM. Desktop Open history opens that folder. Web Download VM history downloads that VM's accumulated CSV for direct Excel import. The file has one row per VM and sample time. Server monitoring can be recorded independently with Log server readings to CSV. Its default folder is monitoring\server-history. Each sample contains availability, CPU, memory, SSH state, overall severity, and one row for every storage. Desktop opens the configured folder; Web downloads the accumulated CSV directly. Clear Enable warning notifications to keep collecting and displaying warning metrics without creating warning incidents, writing warning alerts to the log, or sending warning webhooks. Critical incidents and notifications remain active. This setting is shared by Web and Desktop; an open Desktop monitoring window reloads changes saved in Web. Existing incidents remain in history and are not removed when notifications are disabled. Manual Refresh now is asynchronous and appears in the task center. The latest snapshot and up to 200 incidents are stored under data; unfinished checks are handled like other background tasks. Incidents record severity and check time and can be acknowledged from either interface.

A monitoring refresh has its own background slot. It does not lock the server workspace or disable Web and Desktop actions. Repeated refresh requests for the same server are ignored until the current monitoring request finishes. Short Bounded request handling prevents an unavailable Proxmox endpoint from leaving monitoring permanently active.

Monitoring reads node, storage, VM, and ZFS metrics through pvesh over SSH/Pageant. The HTTPS API is used only as a fallback. The SSH indicator uses only a three-second TCP endpoint probe; it does not open an authenticated SSH session or run zpool commands.

When the background service is enabled and running, it owns scheduled checks, including while the Desktop UI is closed. If the service is unavailable, an open Desktop process runs them locally. Non-OK transitions are written to the local log. When a webhook is configured, ServerAdmin sends the normalized JSON snapshot and records delivery failures as separate task-center entries. The webhook URL is returned only by the authenticated settings endpoint and is not included in normal server snapshots or logs.

11. Group Operations

Bulk operations for servers and virtual machines.
Bulk operations for servers and virtual machines.

Group operations are shared Desktop and Web workflows. They are not tied to one interface and use the same background task coordinator and result model.

Bulk VM operations

Use Bulk actions in a Desktop server workspace or the Web server toolbar. Use Select all or Clear all to change the entire loaded VM list, or select individual VMs. Choose Start, Shutdown, Stop, Reboot, Backup, PowerShell, Check QEMU Agent, or Check DevOpsTasks, and set parallel operations from 1 to 8. The QEMU check requires a successful guest-agent ping. The DevOpsTasks check is separate: it runs only for VMs whose Proxmox OS type is Windows and connects directly to the saved VM IP on DevOpsTasks port 9023. It does not call QEMU Guest Agent. Save a remote-access IP for the VM before running this check. The first DevOpsTasks installation still uses QEMU Guest Agent to transfer and start the installer inside Windows.

Every grouped operation has a common SSH execution policy. SSH timeout limits each SSH request, Attempts controls how many times a transient SSH or QEMU transport failure is tried, and Retry interval sets the pause between attempts. Defaults are 90 seconds, 3 attempts, and 5 seconds. The policy applies to grouped server operations and grouped operations for VMs. Backup also requires a Proxmox storage and mode. PowerShell can run through the DevOpsTasks agent or through qm and can optionally target the desktop session. Enable Save result to file to store each PowerShell result. The default directory is results\powershell beside ServerAdmin.exe; missing directories are created. Names use SERVER_VM-ID_COMMAND_DATE.txt. A desktop-session command has no captured child-process stream, so its file contains the task scheduling response. In Web, select VMs with the checkboxes in the first list column. The button is available when the list contains VMs and reports a clear selection prompt when none are selected. For Backup, the storage field is loaded from enabled Proxmox cluster storage configurations that support backup content; free-text storage names are not accepted.

A bulk operation has its own background slot and does not lock the server workspace. Other server and VM commands remain available while it runs. Only one bulk operation per server can run at a time.

If an all-VM operation finds no cached VM list, ServerAdmin loads the list from that Proxmox server in the background, saves it, and then starts the per-VM operations. Agent availability checks are serialized per server and use isolated SSH/Pageant sessions, so a check cannot corrupt an interactive terminal session. An unavailable QEMU Guest Agent check terminates by timeout instead of staying in the running state indefinitely.

One parent task and one child task per VM appear in the task center. Child failures do not stop other VMs. The parent shows aggregate progress and result. The separate bulk-results window refreshes while the operation is active. Use Stop all, or Stop in the task center, to stop pending work and supported active backup or agent commands. Cancellation interrupts retry delays immediately; a currently active network request finishes or reaches its configured SSH timeout before its row changes to canceled. Click any results-table column header to sort by that column; click it again to reverse the order. VM IDs use numeric order. Use Save CSV... in Desktop or Download CSV in Web to export all currently displayed per-server and per-VM statuses and full result text to a UTF-8 CSV file. Each object occupies one row with generated time, batch, server, VM, operation, status, and result columns. The semicolon-delimited file imports directly into Excel. Multiline results are joined with | . The export is available for every group-operation type, including unfinished and failed operations. Use Retry on a finished parent while the owning Desktop or service process is still running. Retry data is intentionally kept only in memory because a PowerShell payload may contain sensitive values.

Bulk server operations

Use Servers > Bulk server actions... in Desktop or Bulk server actions above the Web server workspace. Use Select all or Clear all to change the entire list, or select individual servers, then choose the target:

For an SSH command, enable Save result to file to keep each server response. The default directory is results\ssh beside ServerAdmin.exe; missing directories are created. Names use SERVER_COMMAND_DATE.txt. For PowerShell on all VMs, the default is results\powershell, with one SERVER_VM-ID_COMMAND_DATE.txt file per VM.

For agent upload, specify the local source file and destination directory in the VM. ServerAdmin creates the directory and preserves the source file name. For download, type the full remote file path and select an output directory. Downloaded names use SERVER_VM-ID_DATE_ORIGINAL-NAME, so files from different VMs cannot replace each other. System-information collection writes one JSON file per VM using SERVER_VM-ID_DATE.json. Relative local paths are resolved beside ServerAdmin.exe. When Web or the background service runs the operation, local paths refer to the ServerAdmin host, not the browser PC.

Each selected server receives an independent background task. Transient SSH failures follow the timeout, attempt count, and retry interval entered in the group-operation form. After the final attempt, the operation is marked as failed in the result list. A failure on one server does not stop the others. Desktop and Web open a separate live result window with the state and result of every affected server or VM. Results and cancellation are also available in the task center. Load each server's VM list before using the all-VM target. Web role and server-scope permissions are checked separately for every selected server. PowerShell retains the existing Run via qm and desktop-session options. Agent command also supports desktop-session execution. Desktop-session work is registered as a short-lived scheduled task and returns after scheduling.

12. Backup Schedules

Open Backup schedules from the Desktop server menu or Schedules in Web. The editor reads and writes native cluster-wide Proxmox vzdump jobs. Each job contains VM IDs, target storage, backup mode, a Proxmox calendar expression such as mon..fri 22:00, retention count, and enabled state. The convenient form daily HH:mm is normalized to the equivalent Proxmox daily time. The Desktop storage selector loads enabled backup-capable storages from Proxmox.

Proxmox stores and executes these jobs on the server. ServerAdmin and its background service do not need to remain running. Retention is saved as the native keep-last pruning option. Refresh reloads the current server job list. The Web schedule list and editor scroll independently when they do not fit the available browser height.

13. Templates and Cloud-Init

Use New VM > From template / Cloud-Init in Desktop or Templates in Web. ServerAdmin loads QEMU templates, image and snippet storages, resource pools, bridges, CPU models, and the next free VM ID directly from Proxmox. Select a template and configure the VM name, Cloud-Init user, SSH public key, IPv4/DHCP, gateway, DNS, optional user-data snippet, disk growth, CPU, memory, and startup.

Cloud-Init is the guest operating system's first-boot configuration mechanism. It applies the requested user, SSH public key, IP settings, gateway, and DNS inside a compatible template. The template must contain Cloud-Init support and a configured Cloud-Init drive. The SSH field accepts an OpenSSH public key; it does not accept a private key or a Pageant key reference.

Provisioning runs in the background task center. It performs a full clone, waits for Proxmox, applies Cloud-Init and hardware values, optionally starts the VM, and refreshes only the created VM in the local cache. Cancel stops the active clone when Proxmox permits it. Retry data remains only in process memory. Cloud-Init form values are not persisted, exported, or written to logs. Saved Proxmox credentials continue to use the existing DPAPI protection.

14. VM and Disk Migration

Use Server actions > Migrate selected VM... in Desktop and select the source VM in the displayed list, or use Migrate beside a VM in Web. Choose full VM migration or movement of one virtual disk. Full migration supports online and offline modes, destination node, and destination storage. Disk movement selects a disk and can retain or delete its source copy. The target storage must differ from the selected disk's current storage.

Before submission ServerAdmin rejects active locks, host PCI/USB/direct-device resources, unavailable destination storage, an invalid online state, and insufficient free space. The Proxmox task runs asynchronously with progress and log output in the task center. Cancel requests Proxmox task termination. After completion ServerAdmin refreshes the affected VM, including its current node.

15. Diagnostics and Support Bundle

Checks for Pageant, SSH, Proxmox API, QEMU Agent, DevOpsTasks, and the background service.
Checks for Pageant, SSH, Proxmox API, QEMU Agent, DevOpsTasks, and the background service.

Open Settings > Diagnostics... in Desktop or Diagnostics in the selected server toolbar in Web. When a server is selected, ServerAdmin checks Pageant identities, the preferred key, background service, Pageant broker, Web bind, update endpoints, SSH, Proxmox API, QEMU Agent, and DevOpsTasks. Without a selected server, remote checks are shown as skipped. In Desktop, the Web bind check accepts either the listener hosted by the Desktop process or the listener hosted by the running background service. Starting diagnostics again clears the previous Web result table immediately and shows the running state until the new report is ready.

Checks have independent limits. The Proxmox API check allows up to 30 seconds; the remaining checks normally allow 10-15 seconds. A failed or timed-out check does not suppress other results. Rerun repeats the workflow. Desktop and Web can export the sanitized JSON report. Desktop can additionally create a support ZIP containing the report, version information, and at most 1 MiB from the newest sanitized log. Passwords, tokens, authorization values, and private-key blocks are redacted. Review the bundle before sending it outside your organization. The version.txt entry contains the exact version of the executable that created the bundle. Redaction also covers stored password verifiers, Pageant key blobs, cookies, CSRF values, API keys, and explicitly labelled secrets.

16. Automatic Updates

ServerAdmin downloads the small ServerAdmin.zip_crc text file after startup. The file contains the unsigned decimal CRC32 of the published ServerAdmin.exe. When it differs from the CRC32 of the installed EXE:

  1. Confirm the update.
  2. Wait for the package download and validation.
  3. ServerAdmin replaces its executable and restarts.
  4. The new process applies the remaining runtime files before opening the UI.

When the background job service is running, the updater stops it before replacing runtime files and starts it again after the update. A stale ServerAdmin_old.exe that is still locked does not prevent startup and is removed on a later run.

Use Settings > Check for updates... for a manual check.

Use Check now beside the automatic-update checkbox to start a manual background check.

Clear Check for updates automatically under Settings > Application settings... to disable startup checks. Manual checks remain available.

Executable CRC is the only update identity. ServerAdmin offers an update regardless of whether the published EXE version is higher, equal, or lower. The ZIP is downloaded only after the user accepts the update. After extraction, the CRC32 of its ServerAdmin.exe must match ServerAdmin.zip_crc.

package_serveradmin.bat creates both dist\ServerAdmin.zip and dist\ServerAdmin.zip_crc. Publish both files in the same server directory. Do not edit the CRC file manually. A fresh installation does not download the ZIP when its EXE matches the published CRC.

Downloaded and extracted update files are stored beside ServerAdmin.exe under updates. The directory is removed after a successful update.

Updates preserve:

Do not interrupt Windows while ServerAdmin is replacing files.

17. Logging

ServerAdmin writes daily UTF-8 logs to:

logs\ServerAdmin_YYYYMMDD.log

Select the level under Settings > Application settings...:

The selected level is applied immediately and stored in conf\SASettings.ini under [LOGGING].

Debug logging records action metadata but does not intentionally record passwords, private keys, or PowerShell script contents. Review a debug log before sending it to another person because it can contain server names, IP addresses, user names, and local file paths.

For an update problem, search the log for Update. The log records remote and installed CRC values, installed and published versions, download and validation results, user approval, activation, restart, and pending-file application.

18. Runtime Data and Backup

Passwords are protected with Windows DPAPI. They can be decrypted only by the same Windows user on the same computer.

Back up the complete ServerAdmin directory while the application is closed. Do not copy encrypted credentials to another Windows user profile.

Portable server and VM data exchange

Use Settings > Server and VM data transfer to move saved server and VM data between ServerAdmin installations:

  1. Select Export server and VM data..., choose a .sacfg file, and enter the
  2. password twice.

  3. Use a password of at least 12 characters. It cannot be recovered.
  4. On the destination installation, select Import server and VM data..., choose
  5. the file, confirm replacement, and enter the export password.

  6. Restart ServerAdmin after a successful import.

The authenticated encrypted file contains application settings, server and VM cache, saved Proxmox, VM SSH, and optional VM RDP passwords that can be decrypted on the source computer, Web users, and backup schedules. Credentials are decrypted only in memory, encrypted in the transfer file with AES-256-GCM, and protected again with Windows DPAPI during import. Key derivation uses PBKDF2-HMAC-SHA256 with a new random salt for every export.

Import replaces the included configuration files. Before replacement, ServerAdmin stores the previous local DPAPI-protected files under config-backups\YYYYMMDD_HHMMSS. Logs, task history, monitoring history, private keys, and SSH host-key cache are not exported. Losing the transfer password makes the .sacfg file unusable.

19. Troubleshooting

Pageant authentication failed

VM address cannot be detected

DevOpsTasks connection failed

PowerShell command failed

Web interface is unavailable

Update failed