function - powershell - 仅按名称使用参数

标签 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将使用我的默认值。

最佳答案

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

然后您可以使用 ValueFromRemainingArguments 属性:

The ValueFromRemainingArguments argument indicates that the parameter accepts all of the parameters values in the command that are not assigned to other parameters of the function.

来源: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
}

关于function - powershell - 仅按名称使用参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38046950/

相关文章:

c - 我如何将一个函数内的int指针传递给另一个函数,并在那里进行操作?

javascript - 这是什么? (功能(){ })()

powershell - Move-Azure 部署交换服务器花费的时间太长?

java - 有没有办法找出传递给 jar 的参数是否被引用?

python - 为什么这个带有 shebang #!/bin/sh 和 4 个单引号内的 exec python 的片段有效?

掷骰子游戏不返回正确的值

java - 如何创建返回计算值的公共(public)计算函数?

powershell - Powershell中的换行符不在记事本中显示

Powershell:Foreach 不工作?

JavaScript:在自身内部获取函数名称