2011-12-30 19 views
8

He estado utilizando PsExec -d para iniciar aplicaciones de consola en una sesión remota de PowerShell porque quiero que estas aplicaciones se ejecuten en segundo plano mientras realizo alguna tarea . El problema es que quiero que las aplicaciones en segundo plano continúen ejecutándose incluso si elimino la sesión de PowerShell remota con Remove-PSSession. Lo que ocurre actualmente es una vez que se elimina la sesión de PowerShell remoto, así como todos los procesos que se iniciaron con la ayuda de PsExec -d. Supongo que tiene algo que ver con los árboles de proceso y cómo Windows administra la vida de tales cosas.Ejecución de tareas en segundo plano en una sesión remota que no muere cuando se elimina la sesión

¿Alguien tiene alguna idea de cómo puedo iniciar un proceso de fondo remoto y que ese proceso persista incluso después de que se mata la sesión remota?

Respuesta

22

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

enter image description here

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

enter image description here

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.

enter image description here

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:

enter image description here

Los procesos iniciados con WMI no pertenece a ninguna de empleo. En francés diría "Ce qu'il fallait démontrer"

+1

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

+0

@ davidk01 Creo que encontré una solución limpia, edité mi respuesta para explicarlo. – JPBlanc

+1

Gracias por la gran publicación. Me ahorró más horas de búsqueda sobre cómo hacer esto. –

Cuestiones relacionadas