如何将PowerShell类方法转换为ScriptBlock

时间:2018-06-02 06:45:48

标签: powershell

我正在尝试将PowerShell类方法转换为scriptblock。

不使用类,我可以这样做:

function foo() { 'bar' }
${function:foo} # this will display: 'bar'

但是,使用类时,等效功能不起作用。例如,以下内容无效:

class FooBar {
  foo() { 'bar' }
}

$foobar = new-object FooBar

${function:$foobar.foo} # doesn't work

我并不感到惊讶,上面的工作没有用,因为类方法实际上是作为脚本块实现的,而不是函数,但我似乎无法访问实现该方法的底层代码。这些尝试也不起作用:

${scriptblock:$foobar.foo}
${scriptblock:FooBar.foo}

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您的方法是[void],转到[string]然后将调用转换为scriptblock:

class FooBar {
  [string]foo() { return 'bar' }
}

$foobar = new-object FooBar

$scriptBlock = [Scriptblock]::Create('$foobar.foo()') 

$(.$scriptBlock)