PowerShell işlevlerinde aşırı yüklenme yok. Son tanım, bir öncekini aynı kapsamda geçersiz kılar veya bir ana kapsamda önceki gizler. Böylece, tek bir işlev oluşturmalı ve çağrı modunu argümanlarla ayırt etmenin bir yolunu sağlamalısınız.
V2 size, gelişmiş bir işlevi kullanmak
help about_Functions_Advanced_Parameters
görmek ve parametre seti belirsizlikleri çözmek bazı manuel kodlama önleyebilir:
# 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
Not Bu mekanizma bazen tuhaf olduğunu. Örneğin, ilk testte -user
parametre ismini açıkça belirtmeliyiz. Aksi halde:
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
Ancak bu durumda sen belirsizlikler, örneğin çözmek (veya kabul edip görmezden) olmalıdır: gelişmiş değil birçok durumda standart olarak
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
, karışık parametrelerle işlevi yapacak demek, eğer ne yapacağına karar için:
İşte
Backup-UsersData -user 'John' -array 1, 2 -all
"Parametre ayarlar" OO yöntemi aşırı yüklenmelere temelde eşdeğerdir. Onlar poewrshell'in tip-zorlama ağır ayrıştırıcısı nedeniyle zaman zaman biraz trickier. – x0n