在powershell中,是否可以强制执行参数命名?

时间:2011-01-27 13:35:58

标签: powershell

给定脚本foo.ps1:param($ x,$ y)返回$ x / $ y

调用它时是否可以强制显式参数命名?

./ foo.ps1 5 10会产生错误 ./foo.ps1 -x 5 -y 10就可以了

4 个答案:

答案 0 :(得分:4)

如果使用PowerShell V2高级功能位置属性指定位置,除非为其他参数指定了position属性,否则所有参数都默认为非位置(来源:PowerShell In Action 2nd pg 296)。所以你可以这样做:

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

答案 1 :(得分: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

答案 2 :(得分:1)

您可以在CmdletBinding参数中指定它。 即使PositionalBinding设置为$ false,您仍然可以为参数分配位置。 PowerShell不会再自动为您的参数分配位置,因此,除非另外指定,否则所有参数都将被命名。

nano ~/.config/pgadmin/pgadmin4.conf 
# or with a right click on the system tray icon
# add /usr/local/lib/python3.6/dist-packages to the PythonPath.

答案 3 :(得分: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}