Acronis Deployment Options

For a couple of reasons, using a policy and script is not working well for us to deploy the Acronis agent. I see two other options - Intune as a LOB application, or via the Acronis Cloud console via the Microsoft tenant integration.

For Intune, I haven’t found a ready to use option and it seems we would need to package this ourselves. I’d rather not go that route as packaging isn’t a capability we have matured.

Using the Acronis integration, we get as far as the deployment step. The Acronis console tells us we don’t have an account for the (Acronis?) tenant with the correct permissions. It seems this may be in how our (as a provider) tenant is configured either by Syncro or by Acronis.

I have a ticket opened with support. I was hoping to find some input here as well. Has anyone been successful in using either of these methods to deploy the agent? If so, I would be grateful if you would share some tips!

I have successfully been able to deploy via scripts. When you go to add a device for a customer in Acronis, it brings up a list of installers. Go all the way to the bottom and generate a registration token.
image

Add a customer custom field for Acronis and add that token.

I use these variables in my script, the first one is pointed to the customer field you created.

My script is just a modified version of the one provided by Syncro so that it looks to see if the field is empty and exits if so.

if ($RegistrationToken -eq ""){
        write-host "No Registration Token Detected"
        Exit 1
}

function Get-AgentInstallerUrl
{
    $Instance = "us5-cloud.acronis.com"
    switch($Region)
    {
        "CA"
        {
            $Instance = "ca01-cloud.acronis.com"
        }
        "UK"
        {
            $Instance = "eu-cloud.acronis.com"
        }
        "US"
        {
            $Instance = "us5-cloud.acronis.com"
        }
    }
    
    $response = Invoke-RestMethod -Uri "${instance}/bc/api/ams/links/list" -Method Get
    foreach ($agent in $response.agents)
    {
        if ($agent.system -eq "exe" -and $agent.architecture -eq (32, 64)[[System.Environment]::Is64BitOperatingSystem])
        {
            return $agent.url
        }
    }
}

function Get-BaseUrl
{
    $BaseUrl = "https://us5-cloud.acronis.com"
    switch($Region)
    {
        "CA"
        {
            $BaseUrl = "https://ca01-cloud.acronis.com"
        }
        "UK"
        {
            $BaseUrl = "https://eu-cloud.acronis.com"
        }
        "US"
        {
            $BaseUrl = "https://us5-cloud.acronis.com"
        }
    }
     return $BaseUrl
}

#Download URL For Acronis Agent
$AgentURL = Get-AgentInstallerUrl

#Acronis Cloud Instance
$BaseUrl = Get-BaseUrl

#Download Path For Acronis Agent Installer
$DownloadFilePath = "$($ENV:TEMP)\AcronisInstaller.exe"

#Delete Old Downloaded Acronis Agent Installer If Present
Write-Host "Checking for existing Acronis agent installer..."
if (Test-Path $DownloadFilePath)
{
    Write-Host "Previous Acronis agent installer detected..."
    Remove-Item $DownloadFilePath
    Write-Host "Previous Acronis agent installer deleted..."
    Write-Host "Downloading new Acronis agent installer..."
}
else
{
  Write-Host "No previous Acronis agent installer detected, downloading..."
}

#Download And Run The Acronis Agent Installer Silently And Apply Registration Token
(New-Object System.Net.WebClient).DownloadFile( $AgentURL, $DownloadFilePath)
& "$($ENV:TEMP)\AcronisInstaller.exe" --quiet --registration by-token --reg-token $RegistrationToken --reg-address=$BaseUrl

Lastly, I posted 3 scripts over here that I run after I install because the System account that Acronis uses can cause random errors to occur. https://community.syncromsp.com/t/acronis-user-scripts/8200

Thanks, Jimmy. Due to some environmental issues that we are not able to control, we see a 15% success rate will the script method for a key client. We need an alternative method for this scenario. If the script retried until success, it would be somewhat more useful. Manually assigning the script repeatedly and hoping isn’t an option.

You can run the script on a schedule and have it check for Acronis and exit if found. I do this with some software. This is just a snippet of another code, but hopefully it gives the idea. Else at the end and have it write that it’s already installed and exit. Or it might be easier to reverse it and have it exit at the top if the statement is true.

$SoftwareName = "Acronis Cyber Protect"
$IsInstalled =  (Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Where { $_.DisplayName -eq $SoftwareName }) + (Get-ItemProperty HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Where { $_.DisplayName -eq $SoftwareName }) 

#Begin installation process
if (-Not $IsInstalled)  
    {
    Write-Host $SoftwareName "is not installed and will be installed."
}
#If software is installed, exit
else
    {
    Write-Host $SoftwareName "is already installed and script is exiting"
    }

We are also in the process of finding another vendor, the Hyper-V backups are not stable. Brand new servers will warn or error out randomly. Acronis site is slow a lot of times or just won’t load anything. I get regular emails about service degradations. It was great when we first joined, but it’s gotten pretty bad for us lately. I’m also about ready to drop agentless backups in favor of agent backups. Had another backup program that uses checkpoints, same as Acronis, and a client killed the battery backup in the middle of the backup when it was on an AVHDX file and corrupted the server. Luckily I was able to create a new VM and point to the VHDX file and get them up rather quickly, but still a risk when it’s running on a checkpoint and your client wants hourly backups.