Nelle funzioni di PowerShell non sono sovraccarichi. L'ultima definizione sovrascrive il precedente nello stesso ambito o nasconde il precedente in un ambito genitore. Pertanto, dovresti creare una singola funzione e fornire un modo per distinguere la sua modalità di chiamata dagli argomenti.
In V2 è possibile utilizzare una funzione avanzata, vedere help about_Functions_Advanced_Parameters
ed evitare alcuni codifica manuale sulla risoluzione dei parametri impostati ambiguità:
# advanced function with 3 parameter sets
function Backup-UsersData
(
[Parameter(Position=0, ParameterSetName="user")]
[string]$user,
[Parameter(Position=0, ParameterSetName="array")]
[object[]]$array,
[Parameter(Position=0, ParameterSetName="all")]
[switch]$all
)
{
# use this to get the parameter set name
$PSCmdlet.ParameterSetName
}
# test
Backup-UsersData -user 'John'
Backup-UsersData 1, 2
Backup-UsersData -all
# OUTPUT:
# user
# array
# all
Si noti che questo meccanismo è a volte strano. Ad esempio nel primo test dobbiamo specificare il nome del parametro -user
in modo esplicito. In caso contrario:
Backup-UsersData : Parameter set cannot be resolved using the specified named parameters.
At C:\TEMP\_101015_110059\try2.ps1:21 char:17
+ Backup-UsersData <<<< 'John'
+ CategoryInfo : InvalidArgument: (:) [Backup-UsersData], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : AmbiguousParameterSet,Backup-UsersData
In molti casi standard, non avanzata, funzione con parametri misti farà:
function Backup-UsersData
(
[string]$user,
[object[]]$array,
[switch]$all
)
{
if ($user) {'user'}
elseif ($array) {'array'}
elseif ($all) {'all'}
else {'may be'}
}
Backup-UsersData -user 'John'
Backup-UsersData -array 1, 2
Backup-UsersData -all
Backup-UsersData
Ma in questo caso si dovrebbe risolvere (o accettare) e ignorare le ambiguità, per esempio per decidere cosa fare se, dire:
Backup-UsersData -user 'John' -array 1, 2 -all
"set di parametri" sono sostanzialmente equivalente al metodo OO sovraccarico. A volte sono un po 'più complicati a causa del parser pesante di coercizione di tipo di Poewrshell. – x0n