3

我知道我可以使用以下方法获取最初定义的命令:

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

或在 PowerShell 本身中:

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

但这仅代表创建运行空间之前的状态。

如果我导入一个模块(即使通过手动创建会话状态对象并sesh.ImportPSModule()在打开运行空间之前使用),这些函数或 cmdlet 都不会显示在列表中。

.AddScript()如果我用或其他东西定义一个新函数,也是一样的。

有没有办法从运行空间外部获取运行空间的当前状态而不仅仅是初始状态?

我考虑Get-Command过从运行空间内部调用并返回对象,但由于某种原因,这对我来说似乎是错误的。我觉得我在这里遗漏了一些简单的东西,应该有一种方法可以查看当前状态以及其中定义的内容。

4

2 回答 2

2

PSProvider 功能是否满足您的需求?

Get-ChildItem function:
于 2015-08-17T20:37:34.610 回答
1

Runspace拥有SessionStateProxy属性,它允许您与Runspace SessionState

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

$PowerShell.Runspace.SessionStateProxy.InvokeCommand.GetCommands('*','Function',$true)
于 2015-12-20T22:04:01.027 回答