Получение поведения Enter-PSHostProcess через файл PSSessionConfiguration
Сценарий: служба Windows со встроенным хостом Powershell. Одиночное пространство выполнения выделяется при запуске. Решение Multi-DLL.
Требование: Необходим доступ к классам.NET внутри работающей службы. Из локального экземпляра Powershell, используя
Enter-PSHostProcess -Name MyService
... дает мне именно то, что я хочу, так как я могу получить доступ к классам.NET.
[MyNameSpace.MyClass]::CallStaticFunction()
Вопрос: Как сделать такое поведение Powershell доступным для удаленных конечных точек, используя Enter-PSSession для пользовательской конечной точки? Из Register-PSSessionConfiguration мы можем указать dll, но это вызовет процесс и не будет подключаться к работающему экземпляру. Не заинтересован в написании прокси через HTTPS или именованных каналов, но использует встроенную функциональность, предлагаемую в Powershell для поддержки.NET.
Можно ли продлить это через PSSessions? Или мы просто должны сначала выполнить Enter-PSSession или Invoke-Command?
1 ответ
Рассматривая источники, кажется, что Enter-PSHostProcess
а также Enter-PSSession
очень независимые механизмы. Enter-PSHostProcess
общается через именованные каналы, а Enter-PSSession
использует WinRM (который эффективно использует http(s) через порты 5985/5986. Я не думаю, что вам тоже нужно Enter-PSSession
или же Invoke-Command
если вы хотите интерактивный доступ к локальному процессу обслуживания через Enter-PSHostProcess
,
Возможно, вы уже сделали это, но чтобы попробовать это, я запустил и Powershell.exe, и Powershell_ise.exe, затем из первого использовал эту команду для подключения к более позднему:
get-process Powershell_ise | Enter-PSHostProcess
и подсказка изменена, чтобы включить PID ISE. Просто чтобы удостовериться, что статические методы работали, как вы ожидаете, я убил ISE из командной строки Powershell.exe с помощью команды:
[System.Environment]::exit(0)
Powershell создает именованный канал, к которому он подключается, используя дескриптор безопасности по умолчанию для потока, который обычно разрешает доступ только к LocalSystem, администраторам и учетной записи, под которой выполняется процесс. Мой тест работал, потому что оба процесса работали под одной и той же учетной записью (мне не требовались права администратора)
Чтобы было ясно, однако, Enter-PSHostProcess
не предусматривает подключения к процессам на другом компьютере. Может быть возможно выполнить двойной прыжок, сначала подключившись к машине, используя Enter-PSSession
, а затем подключиться к процессу с помощью Enter-PSHostProcess
,