Вот первое объяснение того, почему это так работает.Возможно, кто-то еще может использовать его, чтобы принести другое решение.
Я отредактировал свой ответ с помощью решения, основанного на WMI.
Когда вы входите в удаленный сеанс:
PS C:\Users\JPB> enter-PSSession -ComputerName 192.168.183.100 -Credential $cred
[192.168.183.100]: PS C:\Users\jpb\Documents>
Вы создаете на сервере процесс с именем wsmprovhost.exe
, как показано здесь под
Когда вы просто запускаете процесс в этом удаленном сеансе:
[192.168.183.100]: PS C:\Users\jpb\Documents> Start-Process calc.exe
Новый процесс является дочерним для wsmprovhost.exe
, как показано здесь под
Если вы остановите удаленный сеанс, wsmprovhost.exe
исчезнет, и, таким образом, дочерний процесс.
Объяснение состоит в том, что wsmprovhost.exe
и все процессы, запущенные этим процессом, принадлежат одному и тому же заданию.
По умолчанию, с одной стороны, это задание НЕ поддерживает флаг ограничения JOB_OBJECT_LIMIT_BREAKAWAY_OK
, который не позволяет нам запускать процесс с флагом CREATE_BREAKAWAY_FROM_JOB
, с другой стороны, это задание поддерживает JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
флаг ограничения, при котором все процессы, связанные с заданием, завершаются при закрытии последнего дескриптора задания.
Возможно, существует решение для настройки WinRM для поддержки заданий, которое поддерживает JOB_OBJECT_LIMIT_BREAKAWAY_OK
.
Отредактировано:
Итак, чтение Microsoft документация , я нашел документированный технический способ запуска программы через WinRM, но на другой работе.По умолчанию процессы, созданные с помощью CreateProcess процессом, связанным с заданием, связаны с заданием;однако процессы, созданные с использованием Win32_Process.Create , не связаны с заданием .
Поэтому, если в удаленном сеансе вы создаете процесс с WMI, например:
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
Если вы остановите удаленный сеанс, wsmprovhost.exe исчезнет, но новый процесс останется на сервере, как показано здесь:
Процессы, запущенные сWMI не принадлежит ни одной вакансии.На французском я бы сказал "Ce qu'il fallait démontrer"