Ecco qui una prima spiegazione del perché funziona così. Forse qualcun altro può usarlo per portare un'altra soluzione.
Ho modificato la risposta con una soluzione basata su WMI.
Quando si entra in una sessione remota:
PS C:\Users\JPB> enter-PSSession -ComputerName 192.168.183.100 -Credential $cred
[192.168.183.100]: PS C:\Users\jpb\Documents>
È possibile creare sul server un processo chiamato wsmprovhost.exe
come mostrato qui sotto
Quando si avvia semplicemente un processo in questa sessione remota :
[192.168.183.100]: PS C:\Users\jpb\Documents> Start-Process calc.exe
Il nuovo processo è un bambino di wsmprovhost.exe
come mostrato qui sotto
Se si interrompe la sessione remota wsmprovhost.exe
scomparso e così il processo figlio.
La spiegazione è che wsmprovhost.exe
e tutti i processi avviati da questo appartengono allo stesso lavoro.
Per impostazione predefinita, da un lato questo lavoro non supporta JOB_OBJECT_LIMIT_BREAKAWAY_OK
bandiera limite che non ci permette di avviare un processo con CREATE_BREAKAWAY_FROM_JOB
la bandiera, d'altra parte questo lavoro supporta JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
bandiera limite che fa sì che tutti i processi associato al lavoro da terminare quando viene chiuso l'ultimo handle del lavoro.
Esiste forse una soluzione per configurare WinRM per supportare lavori che supportano JOB_OBJECT_LIMIT_BREAKAWAY_OK
.
Modificato:
Quindi la lettura Microsoft documentation, ho trovato un modo tecnico documentato per iniziare un programma attraverso il WinRM ma in un lavoro onother. Per impostazione predefinita, i processi creati utilizzando CreateProcess da un processo associato a un lavoro sono associati al lavoro; tuttavia, i processi creati utilizzando Win32_Process.Createnon sono associati al lavoro.
Quindi, se in voi sessione remota si crea un processo con WMI in questo modo:
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
Se si interrompe la sessione remota wsmprovhost.exe scomparso, ma il nuovo soggiorno processo sul server come mostrato qui sotto:
I processi avviati con WMI non appartiene a qualsiasi lavoro. In francese direi "Ce qu'il fallait démontrer"
Grazie per l'analisi JPBlanc. La mia soluzione attuale è semplicemente utilizzare le sessioni remote per raccogliere informazioni utilizzate per avviare processi con 'PsExec -d' dall'esterno delle sessioni remote. In questo modo, quando viene interrotta la sessione remota, il processo avviato con 'PsExec -d' non lo è. – davidk01
@ davidk01 Penso di aver trovato una soluzione pulita, ho modificato la mia risposta per spiegarlo. – JPBlanc
Grazie per l'ottimo post. Mi ha risparmiato più ore di ricerca su come farlo. –