Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Kısa açıklama
Gelişmiş işlevlerde parametre kümelerinin nasıl tanımlanıp kullanılacağını açıklar.
Uzun açıklama
PowerShell, farklı senaryolar için farklı eylemler gerçekleştirebilen tek bir işlev yazmanızı sağlamak için parametre kümelerini kullanır. Parametre kümeleri, kullanıcıya farklı parametreler sunmanızı sağlar. Ayrıca, kullanıcı tarafından belirtilen parametrelere göre farklı bilgiler döndürmek için. Aynı anda yalnızca bir parametre kümesi kullanabilirsiniz.
Parametre kümesi gereksinimleri
Aşağıdaki gereksinimler tüm parametre kümeleri için geçerlidir.
Parametre için parametre kümesi belirtilmezse, parametre tüm parametre kümelerine aittir.
Her parametre kümesinin benzersiz bir parametre bileşimi olmalıdır. Mümkünse, benzersiz parametrelerden en az biri zorunlu bir parametre olmalıdır.
Birden çok konumsal parametre içeren bir parametre kümesi, her parametre için benzersiz konumlar tanımlamalıdır. Hiçbir iki konumsal parametre aynı konumu belirtemez.
Not
32 parametre kümesi sınırı vardır.
Varsayılan parametre kümeleri
Birden çok parametre kümesi tanımlandığında, DefaultParameterSetName özniteliğinin anahtar sözcüğü varsayılan parametre kümesini belirtir.
PowerShell, komutuna sağlanan bilgilere göre kullanılacak parametre kümesini belirleyemediğinde varsayılan parametre kümesini kullanır.
CmdletBinding özniteliği hakkında daha fazla bilgi için bkz. about_Functions_CmdletBindingAttribute.
Parametre kümeleri bildiriyor
Parametre kümesi oluşturmak için, parametre kümesindeki her parametre için ParameterSetName özniteliğinin anahtar sözcüğünü belirtmeniz gerekir. Birden çok parametre kümesine ait parametreler için, her parametre kümesi için bir Parametre özniteliği ekleyin.
Parameter özniteliği, parametreyi her parametre kümesi için farklı tanımlamanızı sağlar. Örneğin, bir parametreyi bir kümede zorunlu, başka bir kümede isteğe bağlı olarak tanımlayabilirsiniz. Ancak, her parametre kümesi en az bir benzersiz parametre içermelidir.
Atanmış parametre kümesi adı olmayan parametreler tüm parametre kümelerine aittir.
Ayrılmış parametre kümesi adı
PowerShell, özel işleme için parametre kümesi adını __AllParameterSets ayırır.
__AllParameterSets , açık bir varsayılan ad kullanılmadığında varsayılan parametre kümesinin adıdır.
ParameterSetName
Parameter özniteliğinin olarak __AllParameterSets ayarlanması, atanmamasıyla ParameterSetNameeşdeğerdir. Her iki durumda da parametre tüm parametre kümelerine aittir.
Not
CmdletBinding özniteliği olarak ayarlamanızı DefaultParameterSetName__AllParameterSetsengellemez. Bunu yaparsanız PowerShell, Parameter özniteliği tarafından düzgün başvurulameyecek açık bir parametre kümesi oluşturur.
Örnekler
Aşağıdaki örnek işlev, bir metin dosyasındaki sayı satırlarını, karakterleri ve sözcükleri sayar. Parametreleri kullanarak, döndürülmesini istediğiniz değerleri ve ölçmek istediğiniz dosyaları belirtebilirsiniz. Tanımlanan dört parametre kümesi vardır:
- Yol
- PathAll
- Değişmez Değer Yolu
- LiteralPathAll
function Measure-Lines {
[CmdletBinding(DefaultParameterSetName = 'Path')]
param (
[Parameter(Mandatory, ParameterSetName = 'Path', Position = 0)]
[Parameter(Mandatory, ParameterSetName = 'PathAll', Position = 0)]
[string[]]$Path,
[Parameter(Mandatory, ParameterSetName = 'LiteralPathAll', ValueFromPipeline)]
[Parameter(Mandatory, ParameterSetName = 'LiteralPath', ValueFromPipeline)]
[string[]]$LiteralPath,
[Parameter(ParameterSetName = 'Path')]
[Parameter(ParameterSetName = 'LiteralPath')]
[switch]$Lines,
[Parameter(ParameterSetName = 'Path')]
[Parameter(ParameterSetName = 'LiteralPath')]
[switch]$Words,
[Parameter(ParameterSetName = 'Path')]
[Parameter(ParameterSetName = 'LiteralPath')]
[switch]$Characters,
[Parameter(Mandatory, ParameterSetName = 'PathAll')]
[Parameter(Mandatory, ParameterSetName = 'LiteralPathAll')]
[switch]$All,
[Parameter(ParameterSetName = 'Path')]
[Parameter(ParameterSetName = 'PathAll')]
[switch]$Recurse
)
begin {
if ($All) {
$Lines = $Words = $Characters = $true
}
elseif (($Words -eq $false) -and ($Characters -eq $false)) {
$Lines = $true
}
}
process {
if ($Path) {
$Files = Get-ChildItem -Path $Path -Recurse:$Recurse -File
}
else {
$Files = Get-ChildItem -LiteralPath $LiteralPath -File
}
foreach ($file in $Files) {
$result = [ordered]@{ }
$result.Add('File', $file.FullName)
$content = Get-Content -LiteralPath $file.FullName
if ($Lines) { $result.Add('Lines', $content.Length) }
if ($Words) {
$wc = 0
foreach ($line in $content) { $wc += $line.Split(' ').Length }
$result.Add('Words', $wc)
}
if ($Characters) {
$cc = 0
foreach ($line in $content) { $cc += $line.Length }
$result.Add('Characters', $cc)
}
New-Object -TypeName psobject -Property $result
}
}
}
Her parametre kümesinin benzersiz bir parametresi veya benzersiz bir parametre bileşimi olmalıdır.
Path ve PathAll parametre kümeleri çok benzerdir, ancak Tüm parametresi PathAll parametre kümesine özeldir. Aynı durum LiteralPath ve LiteralPathAll parametre kümeleriyle de geçerlidir.
PathAll ve LiteralPathAll parametre kümelerinin her ikisi de Tüm parametresine sahip olsa da, Yolu ve LiteralPath parametreleri bunları ayırt eder.
Kullan Get-Command -Syntax her parametre kümesinin söz dizimini gösterir. Ancak parametre kümesinin adını göstermez. Aşağıdaki örnek, her parametre kümesinde hangi parametrelerin kullanılabileceğini gösterir.
(Get-Command Measure-Lines).ParameterSets |
Select-Object -Property @{n='ParameterSetName';e={$_.Name}},
@{n='Parameters';e={$_.ToString()}}
ParameterSetName Parameters
---------------- ----------
Path [-Path] <string[]> [-Lines] [-Words] [-Characters] [-Recurse] [<CommonParameters>]
PathAll [-Path] <string[]> -All [-Recurse] [<CommonParameters>]
LiteralPath -LiteralPath <string[]> [-Lines] [-Words] [-Characters] [<CommonParameters>]
LiteralPathAll -LiteralPath <string[]> -All [<CommonParameters>]
Parametre kümeleri eylemde
Örnekte PathAll parametre kümesi kullanılır.
Measure-Lines test* -All
File Lines Words Characters
---- ----- ----- ----------
C:\temp\test\test.help.txt 31 562 2059
C:\temp\test\test.md 30 1527 3224
C:\temp\test\test.ps1 3 3 79
C:\temp\test\test[1].txt 31 562 2059
Birden çok kümeden parametre kullanma hatası
Bu örnekte, farklı parametre kümelerinden benzersiz parametreler kullanılır.
Get-ChildItem -Path $PSHOME -LiteralPath $PSHOME
Get-ChildItem: Parameter set cannot be resolved using the specified named
parameters. One or more parameters issued cannot be used together or an
insufficient number of parameters were provided.
Path ve LiteralPath parametreleri, Get-ChildItem cmdlet'in farklı parametre kümelerine özeldir. Parametreler aynı cmdlet'te birlikte çalıştırıldığında bir hata oluşur. Aynı anda cmdlet çağrısı başına yalnızca bir parametre kümesi kullanılabilir.
Hangi parametre kümesinin kullanıldığını öğrenme
Otomatik değişken $PSCmdlet, ParameterSetName özelliğini sağlar.
Bu özellik, kullanılmakta olan parametre kümesinin adını içerir. Parametre kümesine özgü davranışı seçmek için hangi parametre kümesinin kullanıldığını belirlemek için işlevinizde bu özelliği kullanabilirsiniz.
function Get-ParameterSetName {
[CmdletBinding(DefaultParameterSetName = 'Set1')]
param (
[Parameter(ParameterSetName = 'Set1', Position = 0)]
$Var1,
[Parameter(ParameterSetName = 'Set2', Position = 0)]
$Var2,
[Parameter(ParameterSetName = 'Set1', Position = 1)]
[Parameter(ParameterSetName = 'Set2', Position = 1)]
$Var3,
[Parameter(Position = 2)]
$Var4
)
"Using Parameter set named '$($PSCmdlet.ParameterSetName)'"
switch ($PSCmdlet.ParameterSetName) {
'Set1' {
"`$Var1 = $Var1"
"`$Var3 = $Var3"
"`$Var4 = $Var4"
break
}
'Set2' {
"`$Var2 = $Var2"
"`$Var3 = $Var3"
"`$Var4 = $Var4"
break
}
}
}
PS> Get-ParameterSetName 1 2 3
Using Parameter set named 'Set1'
$Var1 = 1
$Var3 = 2
$Var4 = 3
PS> Get-ParameterSetName -Var2 1 2 3
Using Parameter set named 'Set2'
$Var2 = 1
$Var3 = 2
$Var4 = 3
PowerShell