2013-04-04 70 views
0

我有一個簡單的PowerShell功能功能參數成爲一個數組

function Foo($a, $b){ 
    '$a = ' + $a 
    '$b = ' + $b 
} 

我通過調用

Foo("dogs", "cat"); 

一切到目前爲止,我讀過調用它說,預計產量

$a = dogs 
$b = cats 

我真正看到的是:

$a = dogs cat 
$b = 

如果我重寫我功能爲:

function Foo($a, $b){ 
    '$a is ' + $a.GetType().Name; 
    '$b = ' + $b.GetType().Name; 
} 

的輸出是:

$a is Object[] 
You cannot call a method on a null-valued expression. 
At C:\WCMTeam\Percussion\Notifier\foo.ps1:4 char:7 
+  '$b = ' + $b.GetType().Name; 
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (:) [], RuntimeException 
    + FullyQualifiedErrorId : InvokeMethodOnNull 

顯然$ A和$ b被組合成一個單一的陣列。我該怎麼做才能做到這一點,我應該如何改變它以獲得預期的結果?

回答

5

你應該叫使用

Foo "dogs" "cats" 

,用於在PowerShell中單獨的數組元素的功能,所以

Foo "dogs", "cats" 

電話Foo與單個陣列參數,分配給$a

+0

將它稱爲'Foo(「dogs」「cats」)'會導致它失敗,並在表達式或語句中出現錯誤「Unexpected token」「cats」。但將它改爲「Foo」狗「貓」確實可以解決問題。謝謝;這與VBScript中的括號規則一樣瘋狂。 – ThatBlairGuy 2013-04-04 19:47:42

+1

聽那個男人(李)。你不應該在你的函數調用中使用'('和')'。 PowerShell不等於c#,PS有它自己的語言(儘管很多.Net/C#代碼工作)。 – 2013-04-04 20:36:16

+0

哦,我聽好了。只是發現轉變有點迷失方向。 : - / – ThatBlairGuy 2013-04-04 21:51:24