PowerShell函数实现类似重载功能实例
程序员文章站
2023-09-04 19:20:44
本文介绍powershell自定义函数是否支持重载,如果支持,如何重载?如果不支持,如何实现与重载相似的效果?
郑重声明:powershell自定义函数不支持重载!也就是...
本文介绍powershell自定义函数是否支持重载,如果支持,如何重载?如果不支持,如何实现与重载相似的效果?
郑重声明:powershell自定义函数不支持重载!也就是说,你不能定义两个同名的powershell函数,不管参数个数、顺序、类型是否相同。既然powershell自定义函数不支持重载功能,那么有没有什么办法来实现与重载相似的效果呢?有,当然有,那就是参数集(parameters set)
powershell自定义函数的参数集是可以为一个函数定义一个参数集,在调用函数时可以从参数集中选择一个参数进行使用。注意,只能从参数集中选择一个来使用。先看看这个示例,对参数集好有一个感性的认识。
复制代码 代码如下:
function add-user
{
[cmdletbinding(defaultparametersetname='a')]
param
(
[parameter(parametersetname='a',mandatory=$true)]
$name,
[parameter(parametersetname='b',mandatory=$true)]
$samaccountname,
[parameter(parametersetname='c',mandatory=$true)]
$dn
)
$chosen = $pscmdlet.parametersetname
“you have chosen $chosen parameter set.”
}
上面add-user函数定义了一个参数集,参数集中有三个参数:name、samaccountname、dn,可以选择其中任何一个使用。但add-user函数只能传一个参数。
复制代码 代码如下:
ps> add-user -name test
you have chosen a parameter set.
ps> add-user -samaccountname test
you have chosen b parameter set.
ps> add-user -dn test
you have chosen c parameter set.
ps> add-user -dn test -name test
add-user : parameter set cannot be resolved using the specified named parameters.
you have chosen a parameter set.
ps> add-user -samaccountname test
you have chosen b parameter set.
ps> add-user -dn test
you have chosen c parameter set.
ps> add-user -dn test -name test
add-user : parameter set cannot be resolved using the specified named parameters.
洪哥再举个例子,我们要做一个函数,想通过新闻id或新闻标题来输出新闻的内容。那么应该怎么实现呢?
复制代码 代码如下:
function get-newscontent
{
[cmdletbinding(defaultparametersetname='a')]
[parameter(parametersetname='a',mandatory=$true)]
$newsid,
[parameter(parametersetname='b',mandatory=$true)]
$newstitle
$chosen = $pscmdlet.parametersetname
if($chosen -eq "a"){
"news content by newsid"
}else{
"news content by newstitle"
}
}
关于powershell函数支持重载吗,本文就介绍这么多,希望对您有所帮助,谢谢!