powershell - 仅按名称使用参数

时间:2016-06-27 06:12:53

标签: function powershell arguments

我有一个看起来像这样的功能:

function plk(){
    $cmd = $args -join ' '
    plink user@myserver -i key.ppk $cmd
}

这个函数效果很好,但是我希望添加一个新的参数,使我能够更改服务器(但如果我没有命名我的服务器,则保持myserver为默认值)。所以我把我的代码更改为:

function plk($server = 'myserver'){
    $cmd = $args -join ' '
    plink user@$server -i key.ppk $cmd
}

但是,PowerShell似乎认为我的第一个参数是我的$server变量。

如果我使用像plk ls /folder这样的函数,那么PowerShell会认为ls$server

我想解决这个问题,只有这样做:plk -server 'server' ls /folder,PowerShell会切换服务器,使用plk ls /folder会使用我的默认设置。

1 个答案:

答案 0 :(得分:1)

我会在Param块中定义参数,为$Server添加一个参数,为剩余的$Arguments添加一个参数。

然后你可以使用ValueFromRemainingArguments属性:

  

ValueFromRemainingArguments参数指示参数           接受命令中不是的所有参数值           分配给函数的其他参数。

来源:about_Functions_Advanced_Parameters

<强>脚本:

function plk
{
    Param
    (
       [Parameter(ValueFromRemainingArguments=$true)]
       [string[]]$Arguments,

       [Parameter(Mandatory=$false)]
       [string]$Server = 'myServer'
    )

    $cmd = $Arguments -join ' '
    plink user@$Server -i key.ppk $cmd
}