我有一个看起来像这样的函数:
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/