about_Parameter_Sets
Rövid leírás
Ismerteti, hogyan definiálhat és használhat paraméterkészleteket speciális függvényekben.
Hosszú leírás
A PowerShell paraméterkészletekkel teszi lehetővé, hogy egyetlen függvényt írjon, amely különböző műveleteket hajthat végre különböző forgatókönyvek esetén. A paraméterkészletekkel különböző paramétereket tehet elérhetővé a felhasználó számára. És a felhasználó által megadott paraméterek alapján adja vissza a különböző információkat. Egyszerre csak egy paraméterkészletet használhat.
Paraméterkészletre vonatkozó követelmények
Az alábbi követelmények az összes paraméterkészletre vonatkoznak.
Ha egy paraméterhez nincs megadva paraméterkészlet, a paraméter az összes paraméterkészlethez tartozik.
Minden paraméterkészletnek paraméterek egyedi kombinációjával kell rendelkeznie. Ha lehetséges, az egyedi paraméterek legalább egyikének kötelező paraméternek kell lennie.
Egy több pozícióparamétert tartalmazó paraméterkészletnek minden paraméterhez egyedi pozíciókat kell meghatároznia. Egyetlen két pozícióparaméter sem tudja ugyanazt a pozíciót megadni.
A halmazban csak egy paraméter deklarálhatja a
ValueFromPipeline
kulcsszót a következőtrue
értékkel: . Több paraméter is definiálhatja aValueFromPipelineByPropertyName
kulcsszót a következőtrue
értékkel: .
Feljegyzés
Legfeljebb 32 paraméterkészletet lehet megadni.
Alapértelmezett paraméterkészletek
Több paraméterkészlet definiálásakor a DefaultParameterSetName
CmdletBinding attribútum kulcsszója adja meg az alapértelmezett paraméterkészletet.
A PowerShell akkor használja az alapértelmezett paraméterkészletet, ha a parancshoz megadott információk alapján nem tudja meghatározni a használni kívánt paraméterkészletet. A CmdletBinding attribútummal kapcsolatos további információkért lásd: about_Functions_CmdletBindingAttribute.
Paraméterkészletek deklarálása
Paraméterkészlet létrehozásához meg kell adnia a ParameterSetName
Paraméter attribútum kulcsszóját a paraméterkészlet minden paraméteréhez. Több paraméterkészlethez tartozó paraméterek esetén adjon hozzá paraméterattribútumot minden paraméterkészlethez.
A Paraméter attribútum lehetővé teszi, hogy a paramétert az egyes paraméterkészletekhez eltérően definiálja. Megadhat például egy paramétert kötelezőként az egyik készletben, a másikban pedig választhatóként. Minden paraméterkészletnek azonban tartalmaznia kell legalább egy egyedi paramétert.
Azok a paraméterek, amelyekhez nincs hozzárendelt paraméterkészlet neve, az összes paraméterkészlethez tartoznak.
Példák
Az alábbi példafüggvény megszámolja a szövegfájlban lévő számsorokat, karaktereket és szavakat. Paraméterek használatával megadhatja, hogy mely értékeket szeretné visszaadni, és mely fájlokat szeretné mérni. Négy paraméterkészlet van definiálva:
- Elérési út
- PathAll
- LiteralPath
- 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
}
}
}
Minden paraméterkészletnek egyedi paraméterrel vagy paraméterek egyedi kombinációjával kell rendelkeznie. A Path
és PathAll
a paraméterkészletek nagyon hasonlóak, de a Minden paraméter egyedi a PathAll
paraméterkészlethez. Ugyanez igaz a LiteralPath
paraméterkészletekre is LiteralPathAll
. Annak ellenére, hogy a PathAll
LiteralPathAll
paraméterkészletek mind a Mind paramétert, mind a Path és a LiteralPath paraméter megkülönböztetik őket.
A Használat Get-Command -Syntax
az egyes paraméterkészletek szintaxisát mutatja. Ez azonban nem jeleníti meg a paraméterkészlet nevét. Az alábbi példa bemutatja, hogy mely paraméterek használhatók az egyes paraméterkészletekben.
(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>]
Paraméterkészletek működés közben
A példa a paraméterkészletet PathAll
használja.
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
Hiba több készlet paramétereinek használatakor
Ebben a példában különböző paraméterkészletekből származó egyedi paramétereket használunk.
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.
A Path és a LiteralPath paraméterek egyediek a Get-ChildItem
parancsmag különböző paraméterkészleteihez. Ha a paraméterek ugyanabban a parancsmagban futnak együtt, hibaüzenet jelenik meg. Parancsmag-hívásonként egyszerre csak egy paraméterkészlet használható.
Hogyan lehet tudni, hogy melyik paraméterkészletet használja a rendszer
Az automatikus változó $PSCmdlet
a ParameterSetName tulajdonságot adja meg.
Ez a tulajdonság a használt paraméterkészlet nevét tartalmazza. Ez a tulajdonság a függvényben annak meghatározására használható, hogy melyik paraméterkészletet használja a paraméterkészlet-specifikus viselkedés kiválasztásához.
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
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: