about_Parameter_Sets
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.
Bir kümedeki yalnızca bir parametre anahtar sözcüğünü
ValueFromPipeline
değeriyletrue
bildirebilir. Birden çok parametre anahtar sözcüğünüValueFromPipelineByPropertyName
değeriyletrue
tanımlayabilir.
Not
32 parametre kümesi sınırı vardır.
Varsayılan parametre kümeleri
Birden çok parametre kümesi tanımlandığında, DefaultParameterSetName
CmdletBinding ö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 ParameterSetName
her parametre için Parameter ö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.
Ö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 All parametresi parametre kümesine PathAll
özeldir. ve parametre kümeleriyle LiteralPath
LiteralPathAll
aynı durum geçerlidir. ve parametre kümelerinin PathAll
her ikisi de All parametresine sahip olsa da, Path ve LiteralPath parametreleri bunları ayırt eder.LiteralPathAll
Use 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 parametre kümesi kullanılır PathAll
.
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, cmdlet'in Get-ChildItem
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
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin