private/Invoke-ArmaHeadless.ps1

[CmdletBinding(SupportsShouldProcess)]
param (
  [Parameter(Mandatory)]
  [ValidateScript({ If (Test-Path $_ -PathType Leaf) { $true } Else { Throw '-ConfigFilename not found' } })]
  [string]
  $ConfigFilename
)

$Config = Import-PowerShellDataFile $ConfigFilename
if (-not $Config.Headless) { return }

$Mods = ($config.Mods | & $PSScriptRoot/Get-AddonPath.ps1 -WorkshopPath $Config.WorkshopPath) -Join ';'
$ServerMods = ($config.ServerMods | & $PSScriptRoot/Get-AddonPath.ps1 -WorkshopPath $Config.WorkshopPath) -Join ';'
$ArmaExe = Join-Path $Config.MasterPath 'arma3server_x64.exe'

$Arguments = @(
  '-client'
  '-connect=localhost'
  "-port=$($Config.Port)"
  """-password=$($Config.Password)"""
  "-pid=$($Config.ConfigPath)\headless.pid"
  '-name=HC'
  "-profiles=$($Config.ProfilePath)"
  "-mod=${Mods};${ServerMods}"
)

Write-Verbose 'Start headless client process'
$Arguments | ConvertTo-Json | Write-Debug
$Process = Start-Process "${ArmaExe}" -ArgumentList ${Arguments} -PassThru
if ($null -ne $Process) {
  $Process.PriorityClass = 'High'
  $Process.ProcessorAffinity = $config.HeadlessAffinity
}