问题:
我有一台Windows Server 2016计算机,该计算机需要运行使用cli的文件,并使用SSH远程运行。
注销SSH连接会终止SSH用户启动的进程,在Linux机器上,可以使用诸如nohup
或screen
之类的解决方案,从而在注销后不杀死进程。
这样的解决方案不能在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
,-b
和bar
,我应该使用:
Invoke-WmiMethod -Path 'Win32_Process' -Name Create -ArgumentList 'C:UsersfooDesktopfoo.exe -a -b bar'
其他参数:
Invoke-WmiMethod
支持其他参数,如-Credential
,-ComputerName
和更多文档在此。
Cmdlet语法解释和其他Cmdlet工具:
-Path
参数指向WmiObject
名称,有几十个WmiObjects
,每个都有许多Methods
和Properties
-Name
参数指示使用的Method
- 列出所有可用的
Wmi-Objects
使用Get-WmiObject -List
(以这种方式很难找到所需的对象) - 列出,并查看所有可用的
Win32_Process
Methods
和Properties
用户
Get-WmiObject -List |where{$_.name -match '^Win32_Process$'}
这将返回此结构的输出:
NameSpace: ROOTcimv2
Name Methods Properties
---- ------- ----------
Win32_Process {Create, Terminat... {Caption, CommandLine, CreationClassName, CreationDate...}
相关文章