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