欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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.

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