2011-01-27 42 views
3

給定一個腳本foo.ps1:param($ x,$ y)return $ x/$ y在PowerShell中,是否可以強制命名參數?

是否可以在調用它時強制執行顯式參數命名?

./foo.ps1 5 10會產生一個錯誤 ./foo.ps1 -x 5 -y 10如果您在使用PowerShell的V2提前功能位置屬性的所有參數的默認指定的位置將確定

回答

4

此代碼的工作,但它使用的東西不記錄(我找不到任何有關負位置的任何東西):

function Test 
{ 
    param(
     [Parameter(Position=-1)] 
     $x 
     , 
     [Parameter(Position=-1)] 
     $y 
    ) 
    $x/$y 
} 

Test -x 1 -y 2 
Test -y 2 -x 1 
Test 1 2 

輸出:

0.5 
0.5 
Test : Cannot bind positional parameters because no names were given. 
At C:\TEMP\_110127_170853\q1.ps1:15 char:5 
4

除非爲其他參數指定了位置屬性(來源:PowerShell In Action 2nd pg 296)。所以,你可以這樣做:

function Test-Args 
{ 
    param(
    [parameter(Position=0)] $dummy, 
    $x, 
    $y 
    ) 
    $x/$y 
} 
+0

但是,您可以通過腳本參數將參數傳遞給被調用腳本中的高級函數,並讓高級函數知道傳遞給腳本時它們原來是位置還是名稱? – mjolinor 2011-01-27 18:18:21

+0

腳本也可以實現位置屬性。如果我將功能到一個腳本稱爲測試 - arg1.ps1(工作原理是相同的:PARAM( [參數(位置= 0)] $虛設, $ X, $ Y ) $ X/$ Y – 2011-01-27 20:22:23

0

我我會爲了foo.ps1而去做這件事。除非有人設法明確使用-dummy1或-dummy2來指定參數,否則它應該可以正常工作。

param($dummy1,$x,$y,$dummy2) 
if (!$x -or !$y -or $dummy1 -or $dummy2){ 
"Error: specify -x and -y explicitly" 
} 
else {$x/$y} 
相關問題