本文介绍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.” }
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.
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" } }
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#nhooo.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。