Function powershell-仅按名称使用参数

Function powershell-仅按名称使用参数,function,powershell,arguments,Function,Powershell,Arguments,我有一个函数,看起来像这样: function plk(){ $cmd = $args -join ' ' plink user@myserver -i key.ppk $cmd } 这个函数工作得很好,但是我希望添加一个新的参数,使我能够更改服务器(但是如果我不命名服务器,请将myserver保留为默认值)。因此,我将代码更改为: function plk($server = 'myserver'){ $cmd = $args -join ' ' plink

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

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/文件夹
,PowerShell将切换服务器,使用
plk ls/文件夹
将使用我的默认值。

我将在
参数
块中定义参数,为
$Server
添加一个参数,为其余的
$Arguments
添加一个参数

然后您可以使用remainingarguments的
属性:

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

资料来源:

脚本:

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
参数explicit并用逗号分隔值:
plk-Arguments ls,/folder