2012-09-07 14 views
17

Ho uno script V2 test di PowerShell che assomiglia a questo:

function test_args() 
    { 
     Write-Host "here's arg 0: $args[0]" 
     Write-Host "here's arg 1: $args[1]" 
    } 


    test_args 

Se chiamo questo dal prompt dei comandi PowerShell ottengo questo sullo schermo:

here's arg[0]: [0] 

here's arg[1]: [1] 

Non proprio quello che volevo. Sembra che io debba copiare $ args [0] e $ args [1] in nuove variabili nello script prima che io possa usarli? Se lo faccio posso accedere alle cose bene.

C'è un modo per accedere agli $ arg indicizzati nel mio codice? Ho provato a usare le parentesi graffe intorno a loro in vari modi, ma senza fortuna.

Alla fine passerò ai parametri con nome, ma la sceneggiatura su cui sto lavorando (non questa demo) è una porta dritta di un file batch.

risposta

28

Prova a modificare:

function test_args() 
{ 
    Write-Host "here's arg 0: $($args[0])" 
    Write-Host "here's arg 1: $($args[1])" 
} 

test_args foo bar 

Si noti che è $args e non $arg. Inoltre, quando si utilizza una variabile di PowerShell in una stringa, PowerShell sostituisce solo il valore della variabile. Non è possibile utilizzare direttamente un'espressione come $args[0]. Tuttavia, è possibile inserire l'espressione all'interno di un gruppo di sottoespressione $() all'interno di una stringa con doppia quotatura per ottenere che PowerShell valuti l'espressione e quindi converta il risultato in una stringa.

+0

Grazie Keith-- Ho cambiato il mio snippet per correggere il mio errore di battitura quando ho tradotto dal mio editor in SO. Credo che la mia domanda è, devo passare $ arg [0] e [1] per test_args come parametri, o la funzione stessa avrà accesso alla matrice $ args? – larryq

+7

Le funzioni hanno sempre accesso a $ args. Conterrà qualsiasi argomento che non è mappato su un parametro funzione definito. Se non ci sono argomenti o tutti gli argomenti eseguono il mapping dei parametri di funzione, ad es. 'function foo ($ param1, $ param2) {}' quindi $ args sarà un array vuoto. –

+0

A volte devo usare 'Out-String' per ottenere l'output di una sotto-espressione da visualizzare come desiderato ... come quando si lavora con una tabella hash. Esempio, si assume che l'argomento 1 sia un hashtable: "Write-Host": ecco arg 1: $ ($ args [1] | Out-String) "' – VertigoRay