在Windows Server上,进程在SSH注销后终止

分享于 

3分钟阅读

互联网

  繁體

问题:

我有一台Windows Server 2016计算机,该计算机需要运行使用cli的文件,并使用SSH远程运行。

注销SSH连接会终止SSH用户启动的进程,在Linux机器上,可以使用诸如nohupscreen之类的解决方案,从而在注销后不杀死进程。

这样的解决方案不能在Windows机器上工作,我在寻找一种方法来防止进程在注销后被终止。

  • 客户端是Ubuntu机器
  • Windows Server 2016运行OpenSHH,将PowerShell作为默认shell
  • 我的程序设置为在守护程序模式下工作,并且没有打开cmd或powershell窗口
  • 使用Get-Process -Name proc_name
  • 在SSH logout后使用Get-Process不产生这样的进程

我还尝试:

  • 使用.exe文件的cmd
  • .bat.ps文件,用参数启动.exe

有没有办法在Windows机器上解决这个问题?


答案1:

在花大量时间挖掘解决方案之后,我发现使用PowerShell的正确方法。

简而言之:

假设我有一个程序foo.exe,需要在后台运行参数-a-bbar,我应该使用:


Invoke-WmiMethod -Path 'Win32_Process' -Name Create -ArgumentList 'C:UsersfooDesktopfoo.exe -a -b bar'



其他参数:

Invoke-WmiMethod支持其他参数,如-Credential-ComputerName更多文档在此

Cmdlet语法解释和其他Cmdlet工具:

  • -Path参数指向WmiObject名称,有几十个WmiObjects,每个都有许多MethodsProperties
  • -Name参数指示使用的Method
  • 列出所有可用的Wmi-Objects使用Get-WmiObject -List (以这种方式很难找到所需的对象)
  • 列出,并查看所有可用的Win32_ProcessMethodsProperties用户

Get-WmiObject -List |where{$_.name -match '^Win32_Process$'}



这将返回此结构的输出:


 NameSpace: ROOTcimv2



Name Methods Properties


---- ------- ----------


Win32_Process {Create, Terminat... {Caption, CommandLine, CreationClassName, CreationDate...}




相关文章