Можно ли получить список определенных в настоящее время функций в пространстве выполнения PowerShell?

Я знаю, что могу получить команды, которые были определены изначально, используя что-то вроде:

Runspace rs = RunspaceFactory.CreateRunspace();
rs.InitialSessionsState.Commands

или в самой PowerShell:

[System.Management.Automation.Runspaces.Runspace]::DefaultRunspace.InitialSessionState.Commands

Но это только представляет состояние до создания пространства выполнения.

Если я импортирую модуль (даже путем создания объекта состояния сеанса вручную и использования sesh.ImportPSModule() до открытия пространства выполнения), ни одна из этих функций или командлетов не появится в списке.

То же самое, если я определяю новую функцию с помощью .AddScript() или что-то в этом роде.

Есть ли способ получить текущее состояние пространства выполнения, а не только начальное состояние, извне?

Я думал о том, чтобы просто вызвать Get-Command изнутри области выполнения и вернуть объекты, но по какой-то причине это кажется мне неправильным. Я чувствую, что мне здесь не хватает чего-то простого, и должен быть способ просто посмотреть на текущее состояние и то, что в нем определено.


person briantist    schedule 17.08.2015    source источник


Ответы (2)


Работает ли функция PSProvider для ваших нужд?

Get-ChildItem function:
person Rich Rousseau    schedule 17.08.2015
comment
Это в основном то же самое, что и использование Get-Command, что нормально, но его нужно запускать внутри пространства выполнения. Я пытаюсь получить текущий список команд из вне пространства выполнения. - person briantist; 17.08.2015

Runspace имеют свойство SessionStateProxy, которое позволяет вам взаимодействовать с Runspace SessionState:

$PowerShell = [PowerShell]::Create()
$PowerShell.AddScript{
    function SomeFunction {}
    function SomeOtherFunction {}
}.Invoke()

$PowerShell.Runspace.SessionStateProxy.InvokeCommand.GetCommands('*','Function',$true)
person user4003407    schedule 20.12.2015
comment
Спасибо, я еще не смог попробовать это, так как некоторое время назад перестал работать над этим проектом. Я не уверен, начну ли / когда снова, но я обязательно проверю в следующий раз, когда буду делать что-то подобное. - person briantist; 06.01.2016