本文介紹PowerShell自定義函數(shù)是否支持重載,如果支持,如何重載?如果不支持,如何實現(xiàn)與重載相似的效果?
鄭重聲明:PowerShell自定義函數(shù)不支持重載!也就是說,你不能定義兩個同名的PowerShell函數(shù),不管參數(shù)個數(shù)、順序、類型是否相同。既然PowerShell自定義函數(shù)不支持重載功能,那么有沒有什么辦法來實現(xiàn)與重載相似的效果呢?有,當(dāng)然有,那就是參數(shù)集(Parameters Set)
PowerShell自定義函數(shù)的參數(shù)集是可以為一個函數(shù)定義一個參數(shù)集,在調(diào)用函數(shù)時可以從參數(shù)集中選擇一個參數(shù)進行使用。注意,只能從參數(shù)集中選擇一個來使用。先看看這個示例,對參數(shù)集好有一個感性的認識。
復(fù)制代碼 代碼如下:
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函數(shù)定義了一個參數(shù)集,參數(shù)集中有三個參數(shù):Name、SAMAccountName、DN,可以選擇其中任何一個使用。但Add-User函數(shù)只能傳一個參數(shù)。
復(fù)制代碼 代碼如下:
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.
洪哥再舉個例子,我們要做一個函數(shù),想通過新聞ID或新聞標題來輸出新聞的內(nèi)容。那么應(yīng)該怎么實現(xiàn)呢?
復(fù)制代碼 代碼如下:
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"
}
}
關(guān)于PowerShell函數(shù)支持重載嗎,本文就介紹這么多,希望對您有所幫助,謝謝!