Function Install-AcronisRemotely
{
[CmdletBinding(SupportsShouldProcess = $True)]
Param
(
[Parameter (Mandatory=$True,
ValueFromPipeline=$True,
ValueFromPipelineByPropertyName=$True,
HelpMessage=‘Input the computer name(s), separated by commas, on which to run the command’)]
[Alias(‘host’)]
[string]$Computername,
[Parameter (Mandatory=$False,
ValueFromPipeline=$True,
ValueFromPipelineByPropertyName=$True,
HelpMessage='Input credentials with which to run the command')]
[Alias('user')]
[System.Management.Automation.CredentialAttribute()]$Credential = "$env:USERDOMAIN\$env:USERNAME",
[Parameter (Mandatory=$True,
ValueFromPipeline=$True,
ValueFromPipelineByPropertyName=$True,
HelpMessage='Input the Acronis server name')]
[Alias('server')]
[string]$AcrServer,
[Parameter (Mandatory=$True,
ValueFromPipeline=$True,
ValueFromPipelineByPropertyName=$True,
HelpMessage='Input the Acronis database name')]
[Alias('database')]
[string]$AcrDatabase,
[Parameter (Mandatory=$True,
ValueFromPipeline=$True,
ValueFromPipelineByPropertyName=$True,
HelpMessage='Input an account (domain\username) with administrative privileges on all computers listed in $Computername')]
[string]$LocalAccount,
[Parameter (Mandatory=$True,
ValueFromPipeline=$True,
ValueFromPipelineByPropertyName=$True,
HelpMessage='Input the password for $LocalAccount')]
[string]$LocalPassword,
[Parameter (Mandatory=$True,
ValueFromPipeline=$True,
ValueFromPipelineByPropertyName=$True,
HelpMessage='Input an account (domain\username) in the Acronis Remote Users group on the Acronis Server')]
[string]$AcrAccount,
[Parameter (Mandatory=$True,
ValueFromPipeline=$True,
ValueFromPipelineByPropertyName=$True,
HelpMessage='Input the password for $AcrAccount')]
[string]$AcrPassword,
[Parameter (Mandatory=$True,
ValueFromPipeline=$True,
ValueFromPipelineByPropertyName=$True,
HelpMessage='Input the file path to your Acronis install .MSI and .MST files')]
[Alias('folder','directory')]
[string]$Path
)
Begin
{
If (!$Credential)
{
Break
}
If ($Computername -like “,”)
{
$Computername = @($Computername -split “,”)
}
If (-not(Test-Path -Path "$env:USERPROFILE\Desktop\Acronis Powershell Install Logs" -PathType Container))
{
New-Item -Path "$env:USERPROFILE\Desktop\Acronis Powershell Install Logs" -ItemType Directory -Force -Verbose
}
}#end begin
Process
{
$date = Get-Date -Format MMM-dd-yyyy
ForEach ($Computer in $Computername)
{
If ((Get-WmiObject -Class Win32_ComputerSystem -ComputerName $Computer -Credential $Credential -Property SystemType).SystemType -like “86”)
{
$AcronisPath = "\$computer\C$\Program Files\Acronis\BackupAndRecovery"
}
ElseIf ((Get-WmiObject -Class Win32_ComputerSystem -ComputerName $Computer -Credential $Credential -Property SystemType).SystemType -like “64”)
{
$AcronisPath = "\$computer\C$\Program Files (x86)\Acronis\BackupAndRecovery"
}
Else
{
$AcronisPath = "\$computer\C$\Program Files\Acronis\BackupAndRecovery"
}
$InstallCountdownCore = 0
$InstallCountdownWindows = 0
If ((Test-Connection -ComputerName $Computer -Quiet) -eq $False)
{
Write-Host -ForegroundColor Yellow “Acronis was not installed. A network connection could not be established to $computer on $(Get-Date)”
“Acronis was not installed. A network connection could not be established to $computer on $(Get-Date)” | Out-File -FilePath “$env:USERPROFILE\Desktop\Acronis Powershell Install Logs\Acronis_Powershell_Install_$date.log” -Append
Write-Error “Acronis was not installed. A network connection could not be established to $computer on $(Get-Date)”
“Acronis was not installed. A network connection could not be established to $computer on $(Get-Date)” | Out-File -FilePath “$env:USERPROFILE\Desktop\Acronis Powershell Install Logs\Acronis_Powershell_Install_$date.log” -Append
Continue
}#end if
Else
{
Delete-ManagedMachine -Computername $Computer -AcrServer $AcrServer -AcrDatabase $AcrDatabase -Verbose
Try
{
$MSIFileCore = Get-ChildItem -Path $Path | Where-Object {$.BaseName -like “AcronisAgentCore” -and $.Extension -like “.msi”}
$MSTFileCore = Get-ChildItem -Path $Path | Where-Object {$.BaseName -like “AcronisAgentCore” -and $.Extension -like “.mst”}
$MSIFileWindows = Get-ChildItem -Path $Path | Where-Object {$.BaseName -like “AcronisAgentWindows” -and $.Extension -like “.msi”}
$MSTFileWindows = Get-ChildItem -Path $Path | Where-Object {$.BaseName -like “AcronisAgentWindows” -and $.Extension -like “.mst”}
Copy-Item -Path $($MSIFileCore.FullName) -Destination \$Computer\C$\Windows\TEMP -Container -Force -Verbose
Copy-Item -Path $($MSTFileCore.FullName) -Destination \$Computer\C$\Windows\TEMP -Container -Force -Verbose
Copy-Item -Path $($MSIFileWindows.FullName) -Destination \$Computer\C$\Windows\TEMP -Container -Force -Verbose
Copy-Item -Path $($MSTFileWindows.FullName) -Destination \$Computer\C$\Windows\TEMP -Container -Force -Verbose
}#end try
Catch
{
Write-Host -ForegroundColor Yellow “Acronis was not installed. The install file copy to $computer failed on $(Get-Date)”
“Acronis was not installed. The install file copy to $computer failed on $(Get-Date)” | Out-File -FilePath “$env:USERPROFILE\Desktop\Acronis Powershell Install Logs\Acronis_Powershell_Install_$date.log” -Append
Write-Error $Error[0]
$Error[0] | Out-File -FilePath “$env:USERPROFILE\Desktop\Acronis Powershell Install Logs\Acronis_Powershell_Install_$date.log” -Append
Continue
}#end catch
Try
{
$InstallStringCore = "msiexec.exe /i c:\windows\temp\$($MSIFileCore.Name) /quiet /l* c:\acronis-core_setup_$date.log TRANSFORMS=c:\windows\temp\$($MSTFileCore.Name)"
Write-Host -ForegroundColor Yellow "Starting MSI install for Acronis Agent Core..."
(Get-WMIObject -ComputerName $computer -Credential $Credential -List -Verbose | Where-Object {$_.Name -eq "Win32_Process"}).InvokeMethod("Create","$InstallStringCore")
}#end try
Catch
{
Write-Host -ForegroundColor Yellow "Acronis Agent Core was not installed on $computer. An error occurred during MSI installation check C:\acronis-core_setup_$date.log for further troubleshooting."
"Acronis Agent Core was not installed. An error occurred during MSI installation check C:\acronis-core_setup_$date.log for further troubleshooting." | Out-File -FilePath "$env:USERPROFILE\Desktop\Acronis Powershell Install Logs\Acronis_Powershell_Install_$date.log" -Append
Write-Error $Error[0]
$Error[0] | Out-File -FilePath "$env:USERPROFILE\Desktop\Acronis Powershell Install Logs\Acronis_Powershell_Install_$date.log" -Append
Continue
}#end catch
Write-Host -ForegroundColor Yellow -NoNewline "Searching for Acronis Agent Core Install log. Please wait..."
Do
{
Start-Sleep -Seconds 1
}#end do
Until ((Test-Path -Path "\\$computer\C$\acronis-core_setup_$date.log" -PathType Leaf) -eq $True)
"`r`n"
Write-Host -ForegroundColor Yellow "Querying log file for install progress..."
Do
{
$CoreLogContent = Get-Content -Path "\\$computer\C$\acronis-core_setup_$date.log" -ErrorAction SilentlyContinue
$InstallCountdownCore += 1
Start-Sleep -Seconds 1
Write-Progress -Id 1 -Activity "Installing Acronis Agent Core. Please wait..." -Status "Seconds elapsed: $InstallCountdownCore"
}#end do
Until (($CoreLogContent | Select-Object -Last 5) -like "*Logging stopped*" -and (Get-ChildItem -Path $AcronisPath -Force) -like "MMS.EXE")
Write-Progress -Id 1 -Activity "Installing Acronis Agent Core. Please wait..." -Completed
If ($CoreLogContent -like "*Installation failed*")
{
Write-Host -ForegroundColor Yellow "Acronis Agent Core was not installed on $computer. An error occurred during MSI installation check C:\acronis-core_setup_$date.log for further troubleshooting."
"Acronis Agent Core was not installed. An error occurred during MSI installation check C:\acronis-core_setup_$date.log for further troubleshooting." | Out-File -FilePath "$env:USERPROFILE\Desktop\Acronis Powershell Install Logs\Acronis_Powershell_Install_$date.log" -Append
Write-Host -ForegroundColor Magenta $($CoreLogContent | Select-Object -Last 3)
$($CoreLogContent | Select-Object -Last 3) | Out-File -FilePath "$env:USERPROFILE\Desktop\Acronis Powershell Install Logs\Acronis_Powershell_Install_$date.log" -Append
Continue
}#end if
"`r`n"
Try
{
$InstallStringWindows = "msiexec.exe /i c:\windows\temp\$($MSIFileWindows.Name) /quiet /l* c:\acronis-windows_setup_$date.log TRANSFORMS=c:\windows\temp\$($MSTFileWindows.Name)"
Write-Host -ForegroundColor Yellow "Starting MSI install for Acronis Windows Agent..."
(Get-WMIObject -ComputerName $computer -Credential $Credential -List -Verbose | Where-Object {$_.Name -eq "Win32_Process"}).InvokeMethod("Create","$InstallStringWindows")
}#end try
Catch
{
Write-Host -ForegroundColor Yellow "Acronis Windows Agent was not installed on $computer. An error occurred during MSI installation check C:\acronis-windows_setup_$date.log for further troubleshooting."
"Acronis Windows Agent was not installed. An error occurred during MSI installation check C:\acronis-windows_setup_$date.log for further troubleshooting." | Out-File -FilePath "$env:USERPROFILE\Desktop\Acronis Powershell Install Logs\Acronis_Powershell_Install_$date.log" -Append
Write-Error $Error[0]
$Error[0] | Out-File -FilePath "$env:USERPROFILE\Desktop\Acronis Powershell Install Logs\Acronis_Powershell_Install_$date.log" -Append
Continue
}#end catch
Write-Host -ForegroundColor Yellow -NoNewline "Searching for Acronis Windows Agent Install log. Please wait..."
Do
{
Start-Sleep -Seconds 1
}#end do
Until ((Test-Path -Path "\\$computer\C$\acronis-windows_setup_$date.log" -PathType Leaf) -eq $True)
"`r`n"
Write-Host -ForegroundColor Yellow "Querying log file for install progress..."
Do
{
$WindowsLogContent = Get-Content -Path "\\$computer\C$\acronis-windows_setup_$date.log" -ErrorAction SilentlyContinue
$InstallCountdownWindows += 1
Start-Sleep -Seconds 1
Write-Progress -Id 1 -Activity "Installing Acronis Windows Agent. Please wait..." -Status "Seconds elapsed: $InstallCountdownWindows"
}#end do
Until (($WindowsLogContent | Select-Object -Last 5) -like "*Logging stopped*" -and (Get-ChildItem -Path $AcronisPath -Force) -like "BackupandRecoveryMonitor.exe")
Write-Progress -Id 1 -Activity "Installing Acronis Windows Agent. Please wait..." -Completed
If ($WindowsLogContent -like "*Installation failed*")
{
Write-Host -ForegroundColor Yellow "Acronis Windows Agent was not installed on $computer. An error occurred during MSI installation check C:\acronis-windows_setup_$date.log for further troubleshooting."
"Acronis Windows Agent was not installed. An error occurred during MSI installation check C:\acronis-windows_setup_$date.log for further troubleshooting." | Out-File -FilePath "$env:USERPROFILE\Desktop\Acronis Powershell Install Logs\Acronis_Powershell_Install_$date.log" -Append
Write-Host -ForegroundColor Magenta $($WindowsLogContent | Select-Object -Last 3)
$($WindowsLogContent | Select-Object -Last 3) | Out-File -FilePath "$env:USERPROFILE\Desktop\Acronis Powershell Install Logs\Acronis_Powershell_Install_$date.log" -Append
Continue
}#end if
"`r`n"
Write-Host -ForegroundColor Yellow "Restarting Acronis services for program stability."
Reset-AcronisAgent -Computername $Computer -Credential $Credential -AcrServer $AcrServer -AcrDatabase $AcrDatabase -LocalAccount $LocalAccount -LocalPassword $LocalPassword -AcrAccount $AcrAccount -AcrPassword $AcrPassword -Verbose
"`r`n"
Write-Host -ForegroundColor Green "Acronis installed correctly on $computer on $(Get-Date)"
"Acronis installed correctly on $computer on $(Get-Date)" | Out-File -FilePath "$env:USERPROFILE\Desktop\Acronis Powershell Install Logs\Acronis_Powershell_Install_$date.log" -Append
$($CoreLogContent | Select-Object -Last 3) | Out-File -FilePath "$env:USERPROFILE\Desktop\Acronis Powershell Install Logs\Acronis_Powershell_Install_$date.log" -Append
$($WindowsLogContent | Select-Object -Last 3) | Out-File -FilePath "$env:USERPROFILE\Desktop\Acronis Powershell Install Logs\Acronis_Powershell_Install_$date.log" -Append
Start-Sleep -Seconds 5
}#end else
}#end foreach
}#end process
}#end function
#FILL OUT THE PARAMETER INFO FOR YOUR ENVIRONMENT!!!
Install-AcronisRemotely -Computername CommaSeparatedListOfComputersBeingInstalledOn -AcrServer NameOfDeviceHostingAcronisManagmentServer -AcrDatabase ActualAcronisDatabaseNameE.G.ACRONIS -LocalAccount AdminAccountForAllComputersBeingInstalledOn -LocalPassword PasswordFor`$LocalAccount -AcrAccount AccountInAcronisRemoteUsersGroupOnAcronisServer -AcrPassword PasswordFor`$AcrAccount -Path \Path\to\share\containing\install\files -Verbose
Can all this be performed using dsc??