Вызвать фоновую команду на удаленной машине

Я хотел бы порождать процесс на удаленном хосте из скрипта powershell и продолжить этот процесс после выхода из локального скрипта. Удаленная команда является vmrun.exe Программа, поставляемая с VMware Workstation, которая запускает виртуальную машину и немедленно завершает работу.

Поведение, которое я наблюдаю, состоит в том, что процессы vmware уничтожаются, как только удаленный сеанс заканчивается сценарием. Я бы хотел, чтобы процессы продолжались. Это то, что я использую до сих пор:

function Start-VM {
    param( [String] $vmwareDir, [String] $vmDir, [String] $vm )
    [String] $command = "& `"$vmwareDir\vmrun.exe`" start `"$vmDir\$vm`" nogui"
    Invoke-Expression $command
}

[String] $hostname = "myhost.fqdn"
[String] $vmwareDir = "C:\Program Files (x86)\VMware\VMware Workstation"
[String] $vmDir = "C:\Path\To\VM"
[String] $vm = "my vm.vmx"

$session = New-PSSession -ComputerName $hostname
Invoke-Command -Session $session -AsJob -ScriptBlock ${function:Start-VM} -ArgumentList $vmwareDir, $vmDir, $vm
if( !$? ){
    Write-Host "Failed to start VM"
    exit
}
sleep 60

С этим кодом виртуальная машина запускается на myhost.fqdn и работает до тех пор, пока не закончится 60-секундный сон, после чего она будет уничтожена вместе с локальным сценарием. В этом случае я только создаю объект PSSession в качестве доказательства концепции, что удаленный процесс живет только в течение сеанса.

Заранее спасибо!

РЕДАКТИРОВАТЬ:

Если это поможет прояснить, что я хотел бы сделать, функциональный эквивалент в Linux будет выглядеть примерно так:

ssh myhost.fqdn "nohup my-command &>/dev/null &"

1 ответ

Решение

В этом ответе я анализирую проблему и даю обходной путь (см. Отредактированный в конце). Я не уверен, что ваш вопрос действительно дубликат.

Другие вопросы по тегам