Process terminates after SSH logout on windows server
After spending much time digging for solutions, I found the absolute correct way of doing so using PowerShell.
It seems like it is one of those cmdlets less used or documented online, and is almost impossible to figure out on your own using the MSDN documentation, unless you're already very familiar with the huge world of Wmi Objects
.
In short:
Assuming I have a program foo.exe
that needs to run on background with the arguments -a
, -b
and bar
, I should be using the exact command:
Invoke-WmiMethod -Path 'Win32_Process' -Name Create -ArgumentList 'C:\Users\foo\Desktop\foo.exe -a -b bar'
Of course if your exe is a "known" exe (either by default, such as notepad or ping) or added by you, a full path is not needed when using the -ArgumentList
and exe name would be sufficient (notepad, ping, and etc..).
Additional parameters:
Invoke-WmiMethod
supports additional parameters such as -Credential
, -ComputerName
(a good way to use a local PS to Invoke
something on a remote machine without using SSH) , -Impersonation
and many more documented here.
Cmdlet syntax explanation and additional cmdlet tools:
- The
-Path
argument directs to aWmiObject
name. There are dozens ofWmiObjects
, each with manyMethods
andProperties
. - The
-Name
argument directs the usedMethod
. - To list all available
Wmi-Objects
useGet-WmiObject -List
(very difficult to locate your needed object this way). - To list and view all available
Win32_Process
Methods
andProperties
use
Get-WmiObject -List |where{$_.name -match '^Win32_Process$'}
This will return an output of this structure:
NameSpace: ROOT\cimv2
Name Methods Properties
---- ------- ----------
Win32_Process {Create, Terminat... {Caption, CommandLine, CreationClassName, CreationDate...}
And of course using |Select-Object -ExpandProperty (_your_property_here_)
will reveal all available Methods
such as Create
we used in the command above, and all available Properties
(which we did not use).