2011-12-13 3 views
7

Ho scoperto di recente che le funzioni di PowerShell sono solo script di script con nome. Ad esempioNome comando di riferimento con trattini

function HelloWorld { 
    Write-Output "Hello world" 
} 

$hw = $function:HelloWorld 

& $hw  

Eseguirà il metodo HelloWorld.

Tuttavia, ciò che non sono stato in grado di capire, è come ottenere un riferimento a un metodo che ha un trattino nel suo nome:

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 

Tutte le idee?

Mi rendo conto che avrei potuto fare qualcosa di simile:

$hw = (Get-Item function:Hello-World).ScriptBlock 

ma è un po ' "rumoroso" e mi piace la funzione di $ sintassi

risposta

3

Doh! Avrei dovuto rimanere con Programmer Problem Solving Sequence e ho chiesto ai miei collaboratori prima del che ho pubblicato su SO. Sembra che dovrei usare:

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

Questo non funziona per me. Eseguendo la funzione $ {Get-Item} non dà nulla – digitguy

2

Per invocare la funzione tutto ciò che devi fare è chiamarlo con il suo nome.

PS> Hello-World 
Hello world 

${function:Hello-World} è il modo per ottenere il codice della funzione. Ecco un altro modo:

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

Oltre ad utilizzare $script = ${function:hello-world} c'è anche $script = get-content function:hello-world. "$" come operatore unario equivale a utilizzare get-content (alias è gc)

+1

Ah! È una bella factoide su "$" .. Mi sento come se tutte le mie sceneggiature sembrassero presto jQuery! –

+0

@ x0n Questo non funziona per me. Esecuzione della funzione $ {Get-Item} non dà nulla. – digitguy

+0

Ciò potrebbe essere dovuto al fatto che Get-Item è un comando, ma x0n sta parlando di riferimenti alle funzioni? –