2011-12-13 83 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是在談論函數引用? –