Получение поведения 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,

Другие вопросы по тегам