2012-09-07 75 views
17

$ args數組我有一個測試的PowerShell V2腳本,看起來像這樣:訪問在PowerShell中

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


    test_args 

如果我把這個從PowerShell命令提示符下我得到這個屏幕上:

here's arg[0]: [0] 

here's arg[1]: [1] 

不是我想要的。看來我必須複製$ args [0]和$ args [1]到腳本中的新變量,然後才能使用它們?如果我這樣做,我可以訪問的東西很好。

有沒有訪問我的代碼索引的$ args的方法嗎?我嘗試過以各種方式在他們周圍使用花括號,但沒有運氣。

我會移動到指定的參數,最終,但我工作的腳本(這不是一個演示)是一個批處理文件的直口。

回答

28

試試這個:

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

test_args foo bar 

請注意,這是$args,而不是$arg。另外,當您在字符串中使用PowerShell變量時,PowerShell只會替換變量的值。你不能直接使用像$args[0]這樣的表達式。但是,您可以將表達式放在一個$()子表達式組中並放在雙引號字符串中,以便PowerShell計算表達式,然後將結果轉換爲字符串。

+0

謝謝基思 - 我從我的編輯翻譯到SO時,更改了我的代碼,以糾正我的輸入錯誤。我想我的問題是,我是否需要將$ arg [0]和[1]傳遞給test_args作爲參數,或者函數本身是否可以訪問$ args數組? – larryq

+7

函數總是可以訪問$ args。它將包含任何不映射到已定義函數參數的參數。如果沒有參數或所有參數映射到函數參數例如'function foo($ param1,$ param2){}'那麼$ args將是一個空數組。 –

+0

有時我必須使用'Out-String'來獲取子表達式的輸出,以便按照需要顯示......例如使用散列表時。例如,假定arg 1是一個散列表:'Write-Host'這裏是arg 1:$($ args [1] | Out-String)「' – VertigoRay