带有破折号的参考命令名称

时间:2011-12-13 12:13:25

标签: powershell powershell-v2.0

我最近发现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语法

3 个答案:

答案 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