Invoke-AzVMRunCommand and Start-Process under specific user on remote VM using Azure Runbook

大憨熊 提交于 2020-05-17 08:29:44

问题


I need to run Start-Process on a remote VM with specific user account using Azure Powershell Runbook

function Install-Postgres {

$username = "aact-import-vm1\aact-importer"

$password = "ChangeMe!"


    $cred = New-Object System.Management.Automation.PSCredential -ArgumentList `
        @($username,(ConvertTo-SecureString -String $password -AsPlainText -Force))

    write-output $cred
    # run pg installer
    Start-Process "C:\Program Files\WindowsPowerShell\Modules\Install-Postgres\postgresql.exe" -ArgumentList `
     "--mode unattended", "--unattendedmodeui none",`
     "--prefix `"C:\Program Files\PostgreSQL\10`"", "--datadir `"C:\Program Files\PostgreSQL\10\data`"", 
     "--superpassword `"ChangeMe!`"",`
     "--servicename `"postgres`"", "--serviceaccount `"postgres`"", "--servicepassword `"ChangeMe!`""`
     -Wait -Credential $cred;
}

$script = Get-Content Function:\Install-Postgres
Out-File -FilePath Install.ps1 -InputObject $script

#Note that the -ScriptPath should not point to the remote path(in remote vm), it should point to the local path where you execute the command Invoke-AzureRmVMRunCommand
$output = Invoke-AzVMRunCommand -ResourceGroupName $resourceGroupName -Name $vmName -CommandId 'RunPowerShellScript' -ScriptPath Install.ps1
write-output $output.Value

#after execution, you can remove the file
Remove-Item -Path Install.ps1

The script above produces the following error:

Start-Process : This command cannot be run due to the error: Access is denied.

If I run the script above without specific credentials the postgres installer produces this error in the log:

Executing icacls "C:\Windows\Temp/postgresql_installer_1ef9b3f2c6" /T /Q /grant "WORKGROUP\aact-import-vm1$:(OI)(CI)F"
Script exit code: 1332

Script output:
 Successfully processed 0 files; Failed processing 1 files

Script stderr:
 WORKGROUP\aact-import-vm1**$**: No mapping between account names and security IDs was done.

Please notice that there is symbol $ instead of user name.

However, if I run it on the VM it works fine and produces this line in the log:

Executing icacls "C:\Users\aact-importer\AppData\Local\Temp\2/postgresql_installer_2662c862ff" /T /Q /grant "aact-import-vm1\aact-importer:(OI)(CI)F"
Script exit code: 0

As far as I can see, If I run runbook script remotely without credentials it runs under NTAUTHORITY\SYSTEM that's why there is symbol $ instead of user name in the postgres installer log. If I run it locally it uses proper user and everything works fine.

The question is: how can I specify a user account to run Start-Process on the remote VM?

Same question on msdn https://social.msdn.microsoft.com/Forums/en-US/a7fa0ca8-5cba-42bb-8076-9a8d4a654beb/invokeazvmruncommand-and-startprocess-under-specific-user-on-remote-vm-using-azure-runbook?forum=azureautomation#a7fa0ca8-5cba-42bb-8076-9a8d4a654beb


回答1:


For those who are interested:

After investigation with MS support they confirmed that runbook (not hybrid) always runs under NTAUTHORITY\SYSTEM



来源:https://stackoverflow.com/questions/59226683/invoke-azvmruncommand-and-start-process-under-specific-user-on-remote-vm-using-a

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!