当前位置: 移动技术网 > IT编程>脚本编程>Shell > PowerShell函数实现类似重载功能实例

PowerShell函数实现类似重载功能实例

2017年12月08日  | 移动技术网IT编程  | 我要评论

本文介绍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.

洪哥再举个例子,我们要做一个函数,想通过新闻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函数支持重载吗,本文就介绍这么多,希望对您有所帮助,谢谢!

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网