我有一个看起来像这样的功能:
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
会使用我的默认设置。
答案 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
}