【问题标题】:powershell - only use argument by namepowershell - 仅按名称使用参数
【发布时间】:2016-06-27 06:12:53
【问题描述】:

我有一个看起来像这样的函数:

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

【问题讨论】:

    标签: function powershell arguments


    【解决方案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
    }
    

    【讨论】:

    • 是的,没用。它一直认为我的第一个论点是服务器。
    • 你是对的,我改变了我的脚本。请重试。
    • 它只有在我输入 -server 标志时才有效,否则它仍然检测到第一个参数是 $server
    • 您可以改为显式指定-Argument 参数并用逗号分隔值:plk -Arguments ls, /folder
    猜你喜欢
    • 2019-08-03
    • 1970-01-01
    • 2011-05-09
    • 2011-02-12
    • 2023-04-08
    • 1970-01-01
    • 2016-08-23
    • 2018-03-30
    相关资源
    最近更新 更多