2014-11-15 91 views
2

爲什麼Write-Host以外的函數工作不同於函數內部?PowerShell函數參數語法

好像莫名其妙的參數變量,從我宣佈它爲改變......

function a([string]$svr, [string]$usr) { 
    $x = "$svr\$usr" 
    Write-Host $x 
} 

$svr = 'abc' 
$usr = 'def' 
$x = "$svr\$usr" 
Write-Host $x 
a($svr, $usr) 

結果...

ABC \ DEF

ABC DEF \

回答

7

不要在powershell中用括號和逗號調用函數或cmdlet(只能在方法調用中執行此操作)!

當你打電話給a($svr, $usr)時,你傳遞一個數組作爲第一個參數的單個值。這相當於將其稱爲a -svr $svr,$usr,這意味着$usr參數根本沒有指定。所以現在$x等於數組的字符串表示形式(帶空格的連接),後面跟着一個反斜槓,後面什麼也沒有。

而是稱呼它:

a $svr $usr 
a -svr $svr -usr $usr 
+0

感謝,這是它....咄:) – Shaunt

+2

我使用PowerShell每天和每一個現在,然後我做這個確切的錯誤,花10+分鐘拉我的頭髮。 – briantist

+2

哦,我想指出,使用'Set-StrictMode'將幫助你發現這個錯誤。 – briantist