Without the right the service fails with error 1069. **secedit** exports the local policy, and the edited file is imported with **/configure**, which is the scriptable way to add the account.
$sid = (New-Object System.Security.Principal.NTAccount('svc-app')).Translate([System.Security.Principal.SecurityIdentifier]).Value
secedit /export /cfg C:\temp\secpol.inf /areas USER_RIGHTS
$cur = (Get-Content C:\temp\secpol.inf | Select-String '^SeServiceLogonRight').Line
(Get-Content C:\temp\secpol.inf) -replace '^SeServiceLogonRight.*', ($cur + ",*$sid") | Set-Content C:\temp\secpol-new.inf
secedit /configure /db C:\temp\secpol.sdb /cfg C:\temp\secpol-new.inf /areas USER_RIGHTS
Select-String -Path C:\temp\secpol.inf -Pattern 'SeServiceLogonRight'