Aquí está la primera explicación de por qué funciona así. Tal vez alguien más pueda usarlo para traer otra solución.
He editado mi respuesta con una solución basada en WMI.
Al entrar en una sesión remota:
PS C:\Users\JPB> enter-PSSession -ComputerName 192.168.183.100 -Credential $cred
[192.168.183.100]: PS C:\Users\jpb\Documents>
Se crea en el servidor de un proceso llamado wsmprovhost.exe
como se muestra aquí bajo
Cuando sólo tiene que ejecutar un proceso en esta sesión remota :
[192.168.183.100]: PS C:\Users\jpb\Documents> Start-Process calc.exe
El nuevo proceso es un hijo de wsmprovhost.exe
como se muestra aquí bajo
Si se detiene la sesión remota wsmprovhost.exe
desaparecieron por lo que el proceso hijo.
La explicación es que wsmprovhost.exe
y todos los procesos iniciados por este pertenecen al mismo trabajo.
Por defecto, por un lado, este trabajo no es compatible con JOB_OBJECT_LIMIT_BREAKAWAY_OK
bandera límite que no nos permitirá iniciar un proceso con CREATE_BREAKAWAY_FROM_JOB
bandera, por otra parte, este trabajo apoya JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
bandera límite que hace que todos los procesos asociado con el trabajo para terminar cuando se cierra el último identificador del trabajo.
Quizás exista una solución para configurar WinRM para admitir trabajos que admite JOB_OBJECT_LIMIT_BREAKAWAY_OK
.
Editado:
Así lectura Microsoft documentation, he encontrado una manera técnica documentado para que pueda empezar un programa a través de WinRM pero en un trabajo onother. De forma predeterminada, los procesos creados con CreateProcess por un proceso asociado a un trabajo están asociados con el trabajo; sin embargo, los procesos creados usando Win32_Process.Createno están asociados con el trabajo.
lo tanto, si en la sesión remota que se crea un proceso con WMI como esto:
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
Si se detiene la sesión remota wsmprovhost.exe desapareció, pero la nueva estancia proceso en el servidor como se muestra aquí debajo:
Los procesos iniciados con WMI no pertenece a ninguna de empleo. En francés diría "Ce qu'il fallait démontrer"
Gracias por el análisis JPBlanc. Mi solución actual es simplemente usar las sesiones remotas para recopilar información que se utiliza para iniciar procesos con 'PsExec -d' desde fuera de las sesiones remotas. De esta forma, cuando se elimina la sesión remota, el proceso comenzó con 'PsExec -d' no. – davidk01
@ davidk01 Creo que encontré una solución limpia, edité mi respuesta para explicarlo. – JPBlanc
Gracias por la gran publicación. Me ahorró más horas de búsqueda sobre cómo hacer esto. –