我最近发现Powershell函数只是命名为scriptblocks。例如
function HelloWorld {
Write-Output "Hello world"
}
$hw = $function:HelloWorld
& $hw
将执行HelloWorld方法。
然而,我无法弄清楚的是,如何获得对其名称中包含破折号的方法的引用:
function Hello-World {
Write-Output "Hello world"
}
$hw = $function:Hello-World
You must provide a value expression on the right-hand side of the '-' operator.
At line:1 char:27
+ $hw = $function:Hello- <<<< World
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ExpectedValueExpression
有什么想法吗?
我知道我可以做类似的事情:
$hw = (Get-Item function:Hello-World).ScriptBlock
但它有点“吵”,我喜欢$ function语法
答案 0 :(得分:4)
卫生署!我应该坚持使用Programmer Problem Solving Sequence并在我发布到SO之前询问我的同事。看起来我应该使用:
$hw = ${function:Hello-World}
答案 1 :(得分:3)
除了使用$script = ${function:hello-world}
之外,还有$script = get-content function:hello-world
。 '$'作为一元运算符等同于使用get-content
(别名为gc
)
答案 2 :(得分:2)
要调用该功能,您只需按名称调用它即可。
PS> Hello-World
Hello world
${function:Hello-World}
是获取函数代码的方法。这是另一种方式:
Get-Command Hello-World | Select-Object -ExpandProperty Definition