Deploy Workspace desktop app with preconfigured Devolutions Server and Devolutions Hub Business

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.

Deploy Workspace app

  1. Install Workspace app using an RMM.

  2. Execute the following PowerShell script after replacing the variables with your data.

    To find the organizationId for the PowerShell script, navigate to https://<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
    }
    
  3. The script will generate a configuration file in the user AppData folder. For example:

    C:\Users\USERNAME\AppData\Roaming\net.devolutions\Workspace\Config.cfg

  4. Launch Workspace desktop app.

  5. Devolutions Server and Devolutions Hub Business spaces are created.

  6. Open the spaces and connect to it.

Add a data source as an MSI argument

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.com

  • Devolutions Hub Business: msiexec /i "installer.msi" HUB_NAME=workspace ORGANIZATION_ID=devolutions

Devolutions Forum logo Give us Feedback