2011-12-13 1 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

Dohのが好き!私は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 = get-content function:hello-worldもある$script = ${function:hello-world}を使用して:ここでは別の方法です。単項演算子としての '$'は、get-content(別名はgc)です。

+1

ああ!それは "$"についての素敵な事実です。私のスクリプトはまもなくjQueryのように見えるような気がします! –

+0

@ x0nこれは私のために働いていません。 $ {function:Get-Item}を実行すると何も得られません。 – digitguy

+0

Get-Itemがコマンドレットであるにもかかわらず、x0nが関数参照について話している可能性がありますか? –

関連する問題