2011-12-13 51 views
7

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

但它是一个有点“吵”,我喜欢$函数的语法

回答

3

卫生署!我应该坚持与Programmer Problem Solving Sequence,并要求我的同事之前我张贴到SO。看起来像我应该使用:

$hw = ${function:Hello-World} 
+0

这不适用于我。执行$ {function:Get-Item}什么也没有 – digitguy

2

要调用该函数,所有你需要做的就是调用它的名字。

PS> Hello-World 
Hello world 

${function:Hello-World}是获取函数代码的方法。这里的另一种方式:

Get-Command Hello-World | Select-Object -ExpandProperty Definition 
3

除了使用$script = ${function:hello-world}还有$script = get-content function:hello-world。 '$'作为一元运算符等于使用get-content(别名是gc

+1

啊!这是关于“$”的一个很好的factoid。我觉得所有的脚本都会很快看起来像jQuery! –

+0

@ x0n这不适合我。执行$ {function:Get-Item}什么都不给。 – digitguy

+0

这可能是因为Get-Item是一个commandlet,但x0n是在谈论函数引用? –