Le lancement de tâches en arrière-plan dans une session à distance qui ne sont pas tués lorsque la session est supprimée
J'ai été en utilisant PsExec -d
pour lancer les applications de console dans une session powershell à distance parce que je veux ces applications à s'exécuter en arrière-plan pendant que j'exécute certaines tâches. Le problème est que je veux les applications d'arrière-plan pour continuer à fonctionner même si j'ai tuer la session powershell à distance avec Remove-PSSession
. Ce qui se passe actuellement est une fois la session powershell à distance est tué ce sont donc tous les processus qui ont commencé avec l'aide de PsExec -d
. J'imagine qu'il a quelque chose à voir avec le processus d'arbres et la façon dont windows gère la durée de vie de telles choses.
Quelqu'un aurait-il une idée de comment je peux lancer à distance un processus d'arrière-plan et le processus de persister même après la session à distance est tué?
Vous devez vous connecter pour publier un commentaire.
Ici est d'abord une explication de pourquoi cela fonctionne ainsi. Peut-être quelqu'un d'autre peut l'utiliser pour mettre une autre solution.
J'ai édité ma réponse avec la solution à base de WMI.
Lorsque vous entrez une session à distance :
Vous créer sur le serveur un processus appelé
wsmprovhost.exe
comme montré ici sousLorsque vous commencez simplement à un processus dans cette session à distance :
Le nouveau processus est un enfant de
wsmprovhost.exe
comme montré ici sousSi vous arrêtez la session à distance
wsmprovhost.exe
disparu et donc le processus de l'enfant.L'explication est que
wsmprovhost.exe
et tout le processus a commencé par celui-ci appartient à la même tâche.Par défaut, d'une part, ce travail NE prend en charge
JOB_OBJECT_LIMIT_BREAKAWAY_OK
limite de drapeau qui ne nous permet pas de démarrer un processus avecCREATE_BREAKAWAY_FROM_JOB
drapeau, d'autre part, ce travail prend en chargeJOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
limite indicateur qui provoque tous les processus associés au travail à la fin de la dernière poignée à l'emploi est fermé.Il existe peut-être une solution pour configurer WinRM de soutien de l'emploi qui prend en charge
JOB_OBJECT_LIMIT_BREAKAWAY_OK
.Édité :
Donc, la lecture de La documentation de Microsoft, j'ai trouvé une technique documenté façon pour vous de commencer un programme par le biais de WinRM mais dans un onother travail. Par défaut, les processus créés à l'aide de la fonction CreateProcess par un processus associé à un emploi sont associées avec le travail; cependant, les processus créés à l'aide de Win32_Process.Créer ne sont pas associés avec le travail.
Donc si vous avez de la session à distance vous créer un processus avec WMI comme ceci :
Si vous arrêtez la session à distance wsmprovhost.exe disparu, mais le nouveau processus de séjour sur le serveur comme le montrent ci-dessous :
Le processus a commencé avec WMI n'appartient pas à n'importe quel Travail. En français, je dirais "Ce qu'il fallait démontrer"
PsExec -d
de l'extérieur de la sessions à distance. De cette façon, lorsque la session à distance est tué, le processus a commencé avecPsExec -d
ne l'est pas.