dav*_*k01 10 powershell psexec powershell-2.0 powershell-remoting
我一直在使用PsExec -d
远程PowerShell会话中启动控制台应用程序,因为我希望这些应用程序在执行某些任务时在后台运行.问题是我希望后台应用程序继续运行,即使我杀死远程PowerShell会话Remove-PSSession
.当前发生的事情是远程PowerShell会话被杀死所以所有进程都是在帮助下启动的PsExec -d
.我猜它与进程树有关,以及windows如何管理这些事情的生命周期.
有没有人知道如何启动远程后台进程并且即使在远程会话被杀死后该进程仍然存在?
JPB*_*anc 26
这是第一个解释为什么它如此工作的解释.也许其他人可以使用它来带来另一种解决方案.
我用基于WMI的解决方案编辑了我的答案.
当您进入远程会话时:
PS C:\Users\JPB> enter-PSSession -ComputerName 192.168.183.100 -Credential $cred
[192.168.183.100]: PS C:\Users\jpb\Documents>
Run Code Online (Sandbox Code Playgroud)
您在服务器上创建一个wsmprovhost.exe
如下所示的进程
当您只是在此远程会话中启动进程时:
[192.168.183.100]: PS C:\Users\jpb\Documents> Start-Process calc.exe
Run Code Online (Sandbox Code Playgroud)
新流程是wsmprovhost.exe
如下所示的孩子
如果你停止远程会话wsmprovhost.exe
消失,那么子进程.
解释是,wsmprovhost.exe
由这个开始的所有过程属于同一个工作.
默认情况下,一方面,此作业不支持JOB_OBJECT_LIMIT_BREAKAWAY_OK
限制标志,不允许我们使用CREATE_BREAKAWAY_FROM_JOB
标志启动进程,另一方面,此作业支持JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
限制标志,导致与作业关联的所有进程在最后一个句柄时终止工作已经结束.
它可能存在一个配置WinRM以支持支持的作业的解决方案JOB_OBJECT_LIMIT_BREAKAWAY_OK
.
编辑:
因此,阅读Microsoft文档,我找到了一种文档化的技术方法,通过WinRM启动程序,但是在另一项工作中.默认情况下,与作业关联的进程使用CreateProcess创建的进程与作业相关联; 但是,使用Win32_Process.Create 创建的进程不与作业关联.
因此,如果在远程会话中,您使用WMI创建一个进程,如下所示:
PS C:\silogix> $ps = New-PSSession -ComputerName 192.168.183.100 -Credential $cred
PS C:\silogix> Enter-PSSession -Session $ps
[192.168.183.100]: PS C:\Users\jpb\Documents> Invoke-WmiMethod -path win32_process -name create -argumentlist "calc.exe"
__GENUS : 2
__CLASS : __PARAMETERS
__SUPERCLASS :
__DYNASTY : __PARAMETERS
__RELPATH :
__PROPERTY_COUNT : 2
__DERIVATION : {}
__SERVER :
__NAMESPACE :
__PATH :
ProcessId : 1236
ReturnValue : 0
[192.168.183.100]: PS C:\Users\jpb\Documents> exit
PS C:\silogix> Remove-PSSession $ps
Run Code Online (Sandbox Code Playgroud)
如果停止远程会话wsmprovhost.exe消失,但新进程保留在服务器上,如下所示:
以WMI开始的进程不属于任何作业.用法语我会说"Ce qu'ilfallaitdémontrer"
归档时间: |
|
查看次数: |
11219 次 |
最近记录: |