我想从一个PowerShell脚本在远程主机上产生一个进程,并让这个进程在本地脚本退出后继续运行。 远程命令是VMware Workstation随附的vmrun.exe
程序,该程序启动一个VM并立即退出。
我看到的行为是,一旦远程会话以脚本结束,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秒睡眠结束,然后与本地脚本一起被杀死。 在这种情况下,我只创build了一个PSSession对象,作为远程过程只与会话一样长的概念certificate。
提前致谢!
编辑:
如果有助于澄清我想要做什么,那么Linux中的function相当于:
ssh myhost.fqdn "nohup my-command &>/dev/null &"
在这个答案中 ,我分析了这个问题,并给出了一个解决方法(见最后的编辑)。 我不确定你的问题是否真的是重复的。