This guide covers the steps to deploy the Workspace app with preconfigured Devolutions Server and Devolutions Hub Business data sources. Installation is handled through a RMM, followed by a PowerShell script to generate the necessary configuration file.
To be added, your Devolutions Server and Devolutions Hub Business must be accessible from the computer used for preconfiguration.
-
Install Workspace app using an RMM.
-
Execute the following PowerShell script after replacing the variables with your data.
To find the
organizationIdfor the PowerShell script, navigate tohttps://<hub_name>/api/server-configurations(only needed for Devolutions Hub Business).With Devolutions Hub Business:
#Requires -RunAsAdministrator $HUB_NAME = "<hub-name>" $ORGANIZATION_ID = "<org-id>" $ErrorActionPreference = 'Stop' try { $appDataPath = [System.Environment]::GetFolderPath('ApplicationData') $configDir = Join-Path $appDataPath 'net.devolutions\Workspace' $configFilePath = Join-Path $configDir 'Config.cfg' $logPath = Join-Path $configDir 'CreateConfigLog.txt' if (-not (Test-Path $configDir)) { New-Item -Path $configDir -ItemType Directory -Force | Out-Null } $timestamp = Get-Date -Format 'yyyy-MM-dd HH:mm:ss' "[$timestamp] Starting Hub configuration creation..." | Out-File -FilePath $logPath -Encoding UTF8 $configContent = @{ preventStartup = $true hubs = @(@{ url = "https://$HUB_NAME.devolutions.app" organizationId = if ($ORGANIZATION_ID) { $ORGANIZATION_ID } else { "" } }) dvls = @() } $json = $configContent | ConvertTo-Json -Compress -Depth 3 "[$timestamp] Hub configuration created: $json" | Out-File -FilePath $logPath -Append -Encoding UTF8 $json | Out-File -FilePath $configFilePath -Encoding UTF8 "[$timestamp] Configuration file created successfully at $configFilePath" | Out-File -FilePath $logPath -Append -Encoding UTF8 Write-Host "Hub configuration created successfully!" -ForegroundColor Green Write-Host "Hub: $HUB_NAME.devolutions.app" -ForegroundColor Cyan } catch { $timestamp = Get-Date -Format 'yyyy-MM-dd HH:mm:ss' "[$timestamp] Error creating config file: $($_.Exception.Message)" | Out-File -FilePath $logPath -Append -Encoding UTF8 Write-Error $_.Exception.Message exit 1 }With Devolutions Server:
#Requires -RunAsAdministrator $DVLS_SERVER_URL = "<DVLS-server-url>" $ErrorActionPreference = 'Stop' try { $appDataPath = [System.Environment]::GetFolderPath('ApplicationData') $configDir = Join-Path $appDataPath 'net.devolutions\Workspace' $configFilePath = Join-Path $configDir 'Config.cfg' $logPath = Join-Path $configDir 'CreateConfigLog.txt' if (-not (Test-Path $configDir)) { New-Item -Path $configDir -ItemType Directory -Force | Out-Null } $timestamp = Get-Date -Format 'yyyy-MM-dd HH:mm:ss' "[$timestamp] Starting DVLS configuration creation..." | Out-File -FilePath $logPath -Encoding UTF8 $configContent = @{ preventStartup = $true hubs = @() dvls = @(@{ name = 'Devolutions Server' serverUrl = $DVLS_SERVER_URL serverVersion = '' }) } $json = $configContent | ConvertTo-Json -Compress -Depth 3 "[$timestamp] DVLS configuration created: $json" | Out-File -FilePath $logPath -Append -Encoding UTF8 $json | Out-File -FilePath $configFilePath -Encoding UTF8 "[$timestamp] Configuration file created successfully at $configFilePath" | Out-File -FilePath $logPath -Append -Encoding UTF8 Write-Host "DVLS configuration created successfully!" -ForegroundColor Green Write-Host "Server URL: $DVLS_SERVER_URL" -ForegroundColor Cyan } catch { $timestamp = Get-Date -Format 'yyyy-MM-dd HH:mm:ss' "[$timestamp] Error creating config file: $($_.Exception.Message)" | Out-File -FilePath $logPath -Append -Encoding UTF8 Write-Error $_.Exception.Message exit 1 }For Devolutions Hub Business and Devolutions Server:
#Requires -RunAsAdministrator $ENABLE_HUB = $true $HUB_NAME = "<hub-name>" $ORGANIZATION_ID = "<org-id>" $ENABLE_DVLS = $true $DVLS_SERVER_URL = "<DVLS-server-url>" $ErrorActionPreference = 'Stop' try { if (-not $ENABLE_HUB -and -not $ENABLE_DVLS) { throw "At least one configuration (Hub or DVLS) must be enabled" } $appDataPath = [System.Environment]::GetFolderPath('ApplicationData') $configDir = Join-Path $appDataPath 'net.devolutions\Workspace' $configFilePath = Join-Path $configDir 'Config.cfg' $logPath = Join-Path $configDir 'CreateConfigLog.txt' if (-not (Test-Path $configDir)) { New-Item -Path $configDir -ItemType Directory -Force | Out-Null } $timestamp = Get-Date -Format 'yyyy-MM-dd HH:mm:ss' "[$timestamp] Starting configuration creation..." | Out-File -FilePath $logPath -Encoding UTF8 $configContent = @{ preventStartup = $true } if ($ENABLE_HUB) { $configContent.hubs = @(@{ url = "https://$HUB_NAME.devolutions.app" organizationId = if ($ORGANIZATION_ID) { $ORGANIZATION_ID } else { "" } }) "[$timestamp] Hub configuration enabled: $HUB_NAME.devolutions.app" | Out-File -FilePath $logPath -Append -Encoding UTF8 Write-Host "✓ Hub configuration enabled" -ForegroundColor Green Write-Host " Hub: $HUB_NAME.devolutions.app" -ForegroundColor Cyan } else { $configContent.hubs = @() Write-Host "✗ Hub configuration disabled" -ForegroundColor Yellow } if ($ENABLE_DVLS) { $configContent.dvls = @(@{ name = 'Devolutions Server' serverUrl = $DVLS_SERVER_URL serverVersion = '' }) "[$timestamp] DVLS configuration enabled: $DVLS_SERVER_URL" | Out-File -FilePath $logPath -Append -Encoding UTF8 Write-Host "✓ DVLS configuration enabled" -ForegroundColor Green Write-Host " Server URL: $DVLS_SERVER_URL" -ForegroundColor Cyan } else { $configContent.dvls = @() Write-Host "✗ DVLS configuration disabled" -ForegroundColor Yellow } $json = $configContent | ConvertTo-Json -Compress -Depth 3 "[$timestamp] Configuration created: $json" | Out-File -FilePath $logPath -Append -Encoding UTF8 $json | Out-File -FilePath $configFilePath -Encoding UTF8 "[$timestamp] Configuration file created successfully at $configFilePath" | Out-File -FilePath $logPath -Append -Encoding UTF8 Write-Host "`nConfiguration created successfully!" -ForegroundColor Green Write-Host "File: $configFilePath" -ForegroundColor Cyan } catch { $timestamp = Get-Date -Format 'yyyy-MM-dd HH:mm:ss' "[$timestamp] Error creating config file: $($_.Exception.Message)" | Out-File -FilePath $logPath -Append -Encoding UTF8 Write-Error $_.Exception.Message exit 1 } -
The script will generate a configuration file in the user AppData folder. For example:
C:\Users\USERNAME\AppData\Roaming\net.devolutions\Workspace\Config.cfg -
Launch Workspace desktop app.
-
Devolutions Server and Devolutions Hub Business spaces are created.
-
Open the spaces and connect to it.
When deploying Workspace desktop app using the MSI installer, you can add a Devolutions Server or a Devolutions Hub Business data source by providing it as an argument during installation.
Devolutions Server:
msiexec /i "installer.msi" DVLS_SERVER_URL=https://dvlsurl.comDevolutions Hub Business:
msiexec /i "installer.msi" HUB_NAME=workspace ORGANIZATION_ID=devolutions