- 10/27/2020
- 20 minutes to read
-
- S
- s
- s
- c
- g
Short description
Explains how to add parameters to advanced functions.,
Lange Beschreibung
Sie können Parameter zu den erweiterten Funktionen hinzufügen, die Sie schreiben, und verwendenparameter Attribute und Argumente, um die Parameterwerte zu begrenzen, die functionusers mit dem Parameter senden.
Die Parameter, die Sie Ihrer Funktion hinzufügen, stehen Benutzern zusätzlich zu den allgemeinen Parametern zur Verfügung, die PowerShell automatisch zu allen Cmdlets und erweiterten Funktionen hinzufügt. Weitere Informationen zu den PowerShell commonparameters finden Sie unter about_CommonParameters.
Beginnend in PowerShell 3.,0, können sie verwenden splatting mit @Args
zu representthe parameter in einem befehl. Splatting gilt für einfache und fortschrittliche Funktionen. Weitere Informationen finden Sie unter about_Functions und about_splatting.
Typkonvertierung von Parameterwerten
Wenn Sie Strings als Argumente für Parameter angeben, die einen differenttype erwarten, konvertiert PowerShell die Strings implizit in den Parameterzieltyp.Erweiterte Funktionen führen das kulturinvariante Parsen von Parameterwerten durch.
Im Gegensatz dazu wird während der Parameterbindung für kompilierte Cmdlets eine kultursensitive Konvertierung durchgeführt.,
In diesem Beispiel erstellen wir ein Cmdlet und eine Skriptfunktion, die einen Parameter annehmen. Die aktuelle Kultur wird geändert, um deutsche Einstellungen zu verwenden.Ein deutsch formatiertes Datum wird an den Parameter übergeben.
Dienstag, 19. Juni 2018 00:00:00
Wie oben gezeigt, verwenden Cmdlets kulturempfindliches Parsen, um die Zeichenfolge zu konvertieren.
Erweiterte Funktionen verwenden culture-invariant Parsing, was zu dem folgenden Fehler führt.
Statische Parameter
Statische Parameter sind Parameter, die in der Funktion immer verfügbar sind.,Die meisten Parameter in PowerShell-Cmdlets und-Skripten sind statische Parameter.
Das folgende Beispiel zeigt die Deklaration eines Parameters ComputerName mit folgenden Merkmalen:
- Es ist obligatorisch (erforderlich).
- Es nimmt Eingaben aus der Pipeline.
- Es nimmt ein Array von Strings als Eingabe.
Param( ] $ComputerName)
Attribute von Parametern
In diesem Abschnitt werden die Attribute beschrieben, die Sie Funktionsparametern hinzufügen können.
Alle Attribute sind optional., Wenn Sie jedoch das CmdletBindingattribute weglassen, muss die Funktion das Parameterattribut einschließen, um als erweiterte Funktion erkannt zu werden.
Sie können in jeder Parameterdeklaration ein oder mehrere Attribute hinzufügen. Die Anzahl der Attribute, die Sie einer Parameterdeklaration hinzufügen können, ist nicht begrenzt.
Parameterattribut
Das Parameterattribut wird verwendet, um die Attribute von Funktionsparametern zu deklarieren.
Das Parameterattribut ist optional, und Sie können es weglassen, wenn keiner der Parameter Ihrer Funktionen Attribute benötigt., Um jedoch als erweiterte Funktion und nicht als einfache Funktion erkannt zu werden, muss eine Funktion entweder das CmdletBinding-Attribut oder das Parameterattribut oder beides haben.
Das Parameterattribut verfügt über Argumente, die die Eigenschaften des Parameters definieren, z. B. ob der Parameter obligatorisch oder optional ist.
Verwenden Sie die folgende Syntax, um das Parameterattribut,ein Argument und einen Argumentwert zu deklarieren. Die Klammern, die das Argument und seinen valuemust follow-Parameter ohne Zwischenraum einschließen.,
Param( $ParameterName)
Verwenden Sie Kommas, um Argumente in Klammern zu trennen. Verwenden Sie followingsyntax, um zwei Argumente des Parameterattributs zu deklarieren.
Param( )
Die booleschen Argumenttypen des Parameterattributs standardmäßig Falsewhen aus dem Parameterattribut weggelassen. Setzen Sie den Argumentwert auf$true
oder listen Sie das Argument einfach nach Namen auf. Die folgenden Parameterattribute sind beispielsweise äquivalent.,
Wenn Sie das Parameterattribut ohne Argumente als Alternative zum CmdletBinding-Attribut verwenden, sind die Klammern, die dem Attributnamen folgen, weiterhin erforderlich.
Param( $ParameterName)
Pflichtargument
Das Argument Mandatory
gibt an, dass der Parameter benötigt wird. Wenn thisargument nicht angegeben ist, ist der Parameter optional.
Im folgenden Beispiel wird der Parameter ComputerName deklariert. Es verwendet das ArgumentMandatory
, um den Parameter obligatorisch zu machen.,
Param( ] $ComputerName)
Positionsargument
Das Argument bestimmt, ob der Parametername erforderlich ist, wennder Parameter in einem Befehl verwendet wird. Wenn eine Parameterdeklaration das Argument enthält, kann der Parametername weggelassen werden und powershellidentifiziert den unbenannten Parameterwert anhand seiner Position oder Reihenfolge in der Liste der unbenannten Parameterwerte im Befehl.,
Wenn das Argument nicht angegeben ist, muss der Parametername oder ein parametername Alias oder eine Abkürzung dem Parameterwert vorangestellt werden, wenn der Parameter in einem Befehl verwendet wird.
Standardmäßig sind alle Funktionsparameter positional. PowerShell weist positionnumbers Parametern in der Reihenfolge zu, in der die Parameter in der Funktion deklariert sind. Um diese Funktion zu deaktivieren, setzen Sie den Wert des Arguments PositionalBinding
des CmdletBinding-Attributs auf $False
., Das Argument hat Vorrang vor dem Wert des Arguments PositionalBinding
des Attributs CmdletBinding. Weitere Informationen finden Sie unter PositionalBinding
in about_Functions_CmdletBindingAttribute.
Der Wert des Arguments wird als Ganzzahl angegeben. Ein Positionswert von 0 repräsentiert die erste Position im Befehl, ein Positionswert von 1 repräsentiert die zweite Position im Befehl und so weiter.,
Wenn eine Funktion keine Positionsparameter hat, weist PowerShell jedem Parameter Positionen zu, basierend auf der Reihenfolge, in der die Parameter deklariert werden.Verlassen Sie sich jedoch als Best Practice nicht auf diese Aufgabe. Wenn Sie möchten, dass Parameter positional sind, verwenden Sie das Argument .
Im folgenden Beispiel wird der Parameter ComputerName deklariert. Es verwendet das Argument mit dem Wert 0. Wenn -ComputerName
daher vom Befehl getrennt ist, muss sein Wert der erste oder einzige unbenannte parametervalue im Befehl sein.,
Param( ] $ComputerName)
ParameterSetName Argument
Das Argument ParameterSetName
gibt den Parameter an, zu dem apparameter gehört. Wenn kein Parametersatz angegeben ist, gehört der Parameter zualle von der Funktion definierten Parametersätze. Um eindeutig zu sein, muss jede Parametermenge daher mindestens einen Parameter haben, der kein Mitglied einer anderen Parametermenge ist.
Hinweis
Für ein Cmdlet oder eine Funktion gibt es ein Limit von 32 Parametersätzen.,
Das folgende Beispiel deklariert einen ComputerName-Parameter imComputer
– Parametersatz, einen UserName-Parameter imUser
– Parametersatz und aSummary-Parameter in beiden Parametersätzen.
Sie können in jedem Argument nur einen ParameterSetName
– Wert und in jedem Parameterattribut nur einenParameterSetName
– Wert angeben. Um anzuzeigen, dass apparameter in mehr als einem Parametersatz angezeigt wird, fügen Sie zusätzliche Parameterattributes hinzu.,
Im folgenden Beispiel wird der Parameter Summary explizit zu den ParametersätzenComputer
und User
hinzugefügt. Der Summary-Parameter ist optional imComputer
– Parametersatz und obligatorisch imUser
– Parametersatz.
Weitere Informationen zu Parametersätzen finden Sie unter Über Parametersätze.
ValueFromPipeline Argument
Das Argument ValueFromPipeline
gibt an, dass der Parameter inputfrom ein Pipeline-Objekt akzeptiert., Geben Sie dieses Argument an, wenn die Funktion akzeptiert dieentire Objekt, nicht nur eine Eigenschaft des Objekts.
Das folgende Beispiel deklariert einen ComputerName-Parameter, der obligatorisch istund akzeptiert ein Objekt, das von der Pipeline an die Funktion übergeben wird.
Param( ] $ComputerName)
ValueFromPipelineByPropertyName Argument
Das ValueFromPipelineByPropertyName
Argument gibt an, dass der parameteraccepts Eingabe von einer Eigenschaft eines Pipeline-Objekts. Die Objekteigenschaft musshaben den gleichen Namen oder Alias wie der Parameter.,
Wenn die Funktion beispielsweise über einen ComputerName-Parameter und das pipedobject über eine ComputerName-Eigenschaft verfügt, wird der Wert der ComputerNameproperty dem ComputerName-Parameter der Funktion zugewiesen.
Im folgenden Beispiel wird ein ComputerName-Parameter deklariert, der obligatorisch istund Eingaben aus der ComputerName-Eigenschaft des Objekts akzeptiert, die an die Funktion über die Pipeline übergeben wird.,
Param( ] $ComputerName)
Hinweis
Ein typisierter Parameter, der Pipeline-Eingaben akzeptiert (by Value
) oder(by PropertyName
) ermöglicht die Verwendung von Delay-bind-Skriptblöcken auf demparameter.
Der Delay-bind-Skriptblock wird automatisch laufenParameterBinding. Das Ergebnis ist an den Parameter gebunden. Delay binding funktioniert nicht für Parameter, die als Typ definiert sind ScriptBlock
oderSystem.Object
. Der Skriptblock wird übergeben, ohne aufgerufen zu werden.
Über Delay-Bind-Skriptblöcke können Sie hier lesen about_Script_Blocks.md.,
ValueFromRemainingArguments Argument
Das Argument ValueFromRemainingArguments
gibt an, dass der Parameter akzeptiertalle Werte des Parameters im Befehl, die nicht anderen Parametern der Funktion zugewiesen sind.
Im folgenden Beispiel wird ein Werteparameter deklariert, der obligatorisch ist, und ein weiterer Parameter, der alle verbleibenden Parameterwerte akzeptiert, die an die Funktion gesendet werden.
Found 2 elements0: one1: two
Hinweis
Vor PowerShell 6.2 wurde die ValueFromRemainingArguments-Sammlung als einzelne Entität unter Index 0 verknüpft.,
HelpMessage Argument
Das Argument HelpMessage
gibt eine Zeichenfolge an, die eine kurze Beschreibung des Parameters oder seines Werts enthält. PowerShell zeigt diese Meldung in der Eingabeaufforderung andas erscheint, wenn ein obligatorischer Parameterwert in einem Befehl fehlt. Dieses Argument hat keinen Einfluss auf optionale Parameter.
Das folgende Beispiel deklariert einen obligatorischen ComputerName-Parameter und eine ahelp-Nachricht, die den erwarteten Parameterwert erklärt.,
Wenn für die Funktion keine andere kommentarbasierte Hilfesyntaxe vorhanden ist (z. B. .SYNOPSIS
), wird diese Meldung auch in der Ausgabe angezeigt.
Param( ] $ComputerName)
Aliasattribut
Das Aliasattribut legt einen alternativen Namen für den Parameter fest.Die Anzahl der Aliase, die Sie einem Parameter zuweisen können, ist unbegrenzt.
Das folgende Beispiel zeigt eine Parameterdeklaration, die die Aliase CN undMachineName zum obligatorischen Parameter ComputerName hinzufügt.,
Param( ] $ComputerName)
SupportsWildcards Attribut
Das SupportsWildcards Attribut wird verwendet, um anzugeben, dass der Parameter Platzhalterwerte akzeptiert. Das folgende Beispiel zeigt eine Parameterdeklaration für einen obligatorischen Pfadparameter, der Platzhalterwerte unterstützt.
Param( ] $Path)
Die Verwendung dieses Attributs aktiviert die Wildcard-Unterstützung nicht automatisch. Der cmdletdeveloper muss den Code implementieren, um die Platzhaltereingabe zu verarbeiten. Die Wildcardsupported kann je nach zugrunde liegender API oder PowerShell-Anbieter variieren. Für weitere Informationen siehe about_Wildcards.,
Parameter – und Variablenvalidierungsattribute
Validierungsattribute richten Sie PowerShell aus, um die Parameterwerte zu testen, die userssubmit beim Aufrufen der erweiterten Funktion verwendet. Wenn die Parameterwerte thetest fehlschlagen, wird ein Fehler generiert und die Funktion wird nicht aufgerufen. Die Parametervalidation wird nur auf die bereitgestellte Eingabe angewendet und alle anderen Werte wie Standardwerte werden nicht validiert.
Sie können auch die Validierungsattribute verwenden, um die Werte einzuschränken, die Benutzer für Variablen angeben können., Wenn Sie einen Typkonverter zusammen mit dem Attribut avalidation verwenden, muss der Typkonverter vor dem Attribut definiert werden.
$number = 7
AllowNull validation attribut
Das AllowNull Attribut erlaubt den Wert eines obligatorischen Parameters$null
zu sein. Das folgende Beispiel deklariert eine Hashtabelle ComputerInfo Parameterdas kann einen Nullwert haben.
Param( $ComputerInfo)
Hinweis
Das Attribut AllowNull funktioniert nicht, wenn der Typkonverter auf string gesetzt ist, da der String-Typ keinen Nullwert akzeptiert., Sie können das Attribut allowemptystring für dieses Szenario verwenden.
Validierungsattribut AllowEmptyString
Mit dem Attribut AllowEmptyString kann der Wert eines obligatorischen Parameters eine leere Zeichenfolge sein (""
). Das folgende Beispiel deklariert einen ComputerNameparameter, der einen leeren Zeichenfolgenwert haben kann.
Param( $ComputerName)
Validierungsattribut AllowEmptyCollection
Das Attribut AllowEmptyCollection erlaubt es, dass der Wert eines Mandatoryparameters eine leere Sammlung ist @()
., Im folgenden Beispiel wird der Parameter aComputerName deklariert, der einen leeren Sammlungswert haben kann.
Param( ] $ComputerName)
ValidateCount validation attribut
Das ValidateCount Attribut gibt die minimale und maximale Anzahl Vonparameterwerten an, die ein Parameter akzeptiert. PowerShell generiert einen Fehler, wenn dieAnzahl der Parameterwerte in dem Befehl, der die Funktion aufruft, liegt außerhalb dieses Bereichs.
Die folgende Parameterdeklaration erzeugt einen ComputerName-Parameter, der ein bis fünf Parameterwerte enthält.,
Param( ] $ComputerName)
ValidateLength validation attribut
Das ValidateLength Attribut gibt die minimale und maximale Anzahl vonZeichen in einem Parameter oder Variablenwert an. PowerShell generiert einen Fehler, wennDie Länge eines Werts, der für einen Parameter oder eine Variable angegeben ist, liegt außerhalb des Bereichs.
Im folgenden Beispiel muss jeder Computername ein bis zehn Zeichen lang sein.
Param( ] $ComputerName)
Im folgenden Beispiel muss der Wert der Variablen $number
mindestens ein Zeichen lang und maximal zehn Zeichen lang sein.,
$number = '01'
Hinweis
In diesem Beispiel wird der Wert von 01
in Anführungszeichen gesetzt. Das Attribut TheValidateLength akzeptiert keine Zahl, ohne Inquotes eingeschlossen zu werden.
ValidatePattern Validierungsattribut
Das ValidatePattern Attribut gibt einen regulären Ausdruck an, der mit dem Parameter oder Variablenwert verglichen wird. PowerShell generiert einen Fehler, wennDer Wert stimmt nicht mit dem Muster für reguläre Ausdrücke überein.,
Im folgenden Beispiel muss der Parameterwert eine vierstellige Zahl enthalten, und jede Ziffer muss eine Zahl von Null bis neun sein.
Param( ")] ] $ComputerName)
Im folgenden Beispiel muss der Wert der Variablen $number
genau seinvierstellige Zahl, und jede Ziffer muss eine Zahl von Null bis neun sein.
$")]$number = 1111
ValidateRange validation attribut
Das ValidateRange Attribut gibt einen numerischen Bereich oder aValidateRangeKind enum Wert für jeden Parameter oder Variablenwert an.PowerShell generiert einen Fehler, wenn ein Wert außerhalb dieses Bereichs.,
Die ValidateRangeKind enum erlaubt folgende Werte:
- Positiv-Eine Zahl größer Null.
- Negativ-Eine Zahl kleiner als Null.
- nichtpositiv-Eine Zahl kleiner oder gleich Null.
- Nonnegativ – Eine Zahl größer oder gleich Null.
Im folgenden Beispiel muss der Wert des Parameters Versuche zwischen Null und zehn liegen.
Param( $Attempts)
Im folgenden Beispiel muss der Wert der Variablen $number
zwischen Null und Zehn liegen.,
$number = 5
Im folgenden Beispiel muss der Wert der Variablen $number
größer seinals Null.
$number = 1
ValidateScript-Validierungsattribut
Das ValidateScript-Attribut gibt ein Skript an, das zur Validierung eines Parameters oder Variablenwerts verwendet wird. PowerShell leitet den Wert an das Skript weiter undgibt einen Fehler aus, wenn das Skript $false
zurückgibt oder wenn das Skript eine Ausnahme auslöst.,
Wenn Sie das Attribut ValidateScript verwenden, wird der zu validierende Wert der Variablen $_
zugeordnet. Sie können die Variable $_
verwenden, um auf den Wert im Skript zu verweisen.
Im folgenden Beispiel muss der Wert des Parameters EventDate größer oder gleich dem aktuellen Datum sein.
Param( $EventDate)
Im folgenden Beispiel muss der Wert der Variablen $date
größer seindann oder gleich dem aktuellen Datum und der aktuellen Uhrzeit.,
$date = (Get-Date)
Hinweis
Wenn Sie ValidateScript verwenden, können Sie keinen $null
Wert an den Parameter übergeben. Wenn Sie einen Nullwert übergeben, kann ValidateScript das Dokument nicht validieren.
ValidateSet-Attribut
Das ValidateSet-Attribut gibt einen Satz gültiger Werte für eine Parameteror-Variable an und ermöglicht die Tab-Vervollständigung. PowerShell generiert einen Fehler, wenn apparameter oder Variablenwert nicht mit einem Wert in der Menge übereinstimmen. Im folgenden Beispiel kann der Wert des Detailparameters nur Niedrig, durchschnittlich oder hoch sein.,
Param( ] $Detail)
Im folgenden Beispiel muss der Wert der Variablen $flavor
entweder Seinschokolade, Erdbeere oder Vanille.
$flavor = "Strawberry"
Die Validierung erfolgt immer dann, wenn diese Variable auch innerhalb des Skripts zugewiesen wird. Beispielsweise führt Folgendes zur Laufzeit zu einem Fehler:
Param( $Message)$Message = "bye"
Dynamische validateSet-Werte
Sie können eine Klasse verwenden, um die Werte für die ValidateSetat-Laufzeit dynamisch zu generieren., Im folgenden Beispiel werden die gültigen Werte für die Variable$Sound
über eine Klasse namens SoundNames generiert, die Dreifilesystempfade auf verfügbare Sounddateien überprüft:
Die – Klasse wird dann wie folgt als dynamischer ValidateSet-Wert implementiert:
Param( )] $Sound)
ValidateNotNull validation attribut
Die ValidateNotNull Attribut gibt an, dass der Parameterwert nicht$null
sein kann. PowerShell generiert einen Fehler, wenn der Parameterwert $null
.,
Das Attribut ValidateNotNull soll verwendet werden, wenn der Parameter isoptional und der Typ undefiniert ist oder einen Typkonverter hat, der einen Nullwert wie ein Objekt ‚ timplizit konvertieren kann. Wenn Sie einen Typ angeben, der implizit einen Nullwert wie eine Zeichenfolge konvertiert, wird der Nullwert auch bei Verwendung des ValidateNotNullattribute in eine leere Zeichenfolge konvertiert. Verwenden Sie für dieses Szenario das ValidateNotNullOrEmpty
Im folgenden Beispiel kann der Wert des ID-Parameters nicht $null
.,
Param( $ID)
ValidateNotNullOrEmpty validation-Attribut
Die ValidateNotNullOrEmpty-Attribut gibt an, dass der parameter valuecan nicht sein $null
und kann nicht auf eine leere Zeichenfolge (""
). PowerShell generiert anerror, wenn der parameter in einer Funktion aufrufen, aber sein Wert ist $null
, anempty string (""
), oder ein leeres array @()
.,
Param( ] $UserName)
ValidateDrive validation attribut
Das ValidateDrive Attribut gibt an, dass der Parameterwert den Pfad darstellen muss, der sich nur auf zulässige Laufwerke bezieht. PowerShellgeneriert einen Fehler, wenn der Parameterwert auf andere Laufwerke als theallowed verweist. Die Existenz des Pfades, mit Ausnahme des Laufwerks selbst, wird nicht überprüft.
Wenn Sie den relativen Pfad verwenden, muss sich das aktuelle Laufwerk in der Liste zulässiges Laufwerk befinden.,
ValidateUserDrive validation attribut
Das ValidateUserDrive Attribut gibt an, dass der Parameterwert den Pfad darstellen muss, der sich auf User
drive. PowerShell generiert anerror, wenn der Pfad auf ein anderes Laufwerk verweist. Das Validierungsattribut prüft nur auf die Existenz des Laufwerksteils des Pfades.
Wenn Sie den relativen Pfad verwenden, muss das aktuelle Laufwerk User
sein.,
Test-UserDrivePath: Cannot validate argument on parameter 'Path'. The pathargument drive C does not belong to the set of approved drives: User.Supply a path argument with an approved drive.
Test-UserDrivePath -Path 'User:\A_folder_that_does_not_exist'
Test-UserDrivePath: Cannot validate argument on parameter 'Path'. Cannotfind drive. A drive with the name 'User' does not exist.
Sie können festlegen User
fahren Sie in Nur Reicht Administration (JEA) sessionconfigurations. In diesem Beispiel erstellen wir das User: drive.
New-PSDrive -Name 'User' -PSProvider FileSystem -Root $env:HOMEPATH
True
ValidateTrustedData validation-Attribut
Dieses Attribut wurde Hinzugefügt, in der PowerShell 6.1.1.
Zu diesem Zeitpunkt wird das Attribut intern von PowerShell selbst verwendet und ist nicht für die externe Verwendung vorgesehen.,
Dynamische Parameter
Dynamische Parameter sind Parameter eines Cmdlets, einer Funktion oder eines Skripts, die nur unter bestimmten Bedingungen verfügbar sind.
Beispielsweise verfügen mehrere Provider-Cmdlets über Parameter, die nur verfügbar sind, wenn das Cmdlet im Provider-Laufwerk oder in einem bestimmten Pfad des Provider-Laufwerks verwendet wird. Beispielsweise ist der Codierungsparameter für die CmdletsAdd-Content
, Get-Content
und Set-Content
nur verfügbar, wenn er in einem Dateisystemlaufwerk verwendet wird.,
Sie können auch einen Parameter erstellen, der nur angezeigt wird, wenn ein anderer Parameter im Funktionsbefehl verwendet wird oder wenn ein anderer Parameter einen bestimmten Wert hat.
Dynamische Parameter können nützlich sein, aber verwenden Sie sie nur bei Bedarf, weilSie können für Benutzer schwierig zu entdecken sein. Um einen dynamischen Parameter zu findenbenutzer muss sich im Anbieterpfad befinden, verwenden Sie den ArgumentList-Parameter des CmdletsGet-Command
oder verwenden Sie den Pfadparameter von .
Um einen dynamischen Parameter für eine Funktion oder ein Skript zu erstellen, verwenden Sie das Schlüsselwort DynamicParam
.,
Die Syntax lautet wie folgt:
DynamicParam {<statement-list>}
Verwenden Sie in der Anweisungsliste eine If
– Anweisung, um die Bedingungen anzugeben, unter denen der Parameter in der Funktion verfügbar ist.
Verwenden Sie das Cmdlet New-Object
, um aSystem zu erstellen.Management.Automatisierung.RuntimeDefinedParameter Objekt zur Darstellungder Parameter und geben Sie seinen Namen an.
Sie können einenNew-Object
Befehl verwenden, um aSystem zu erstellen.Management.Automatisierung.,ParameterAttribute-Objekt zur Darstellungattribute des Parameters, z. B. Obligatorisch, Position, orValueFromPipeline oder dessen Parametersatz.
Das folgende Beispiel zeigt eine Beispielfunktion mit den Standardparametern namedName und Path sowie einen optionalen dynamischen Parameter namens DP1. TheDP1 parameter ist in die PSet1
parameter set und hat eine art von Int32
.,Der Parameter DP1 ist in der Funktion nur dann verfügbar, wenn der Wert des Pfadparameters mit HKLM:
beginnt, was darauf hinweist, dass er im Registrierungslaufwerk HKEY_LOCAL_MACHINE
verwendet wird.
Weitere Informationen finden Sie unter seeRuntimeDefinedParameter.
Schaltparameter
Schaltparameter sind Parameter ohne Parameterwert. Sie sind effektiv, wenn sie benutzt werden und haben nur einen Effekt.
Zum Beispiel der Parameter Nprofile von Powershell.exe ist ein switchparameter.,
Um einen switch-Parameter in einer Funktion zu erstellen, geben Sie in der Parameterdefinition den Typ Switch
an.
Zum Beispiel:
Param(<ParameterName>)
Oder Sie können eine andere Methode verwenden:
Param( $<ParameterName>)
Schaltparameter sind einfach zu verwenden und werden booleschen Parametern vorgezogen, die eine schwierigere Syntax haben.
Um beispielsweise einen Switch-Parameter zu verwenden, gibt der Benutzer den Parameter in thecommand ein.
Um einen booleschen Parameter zu verwenden, gibt der Benutzer den Parameter und einen Booleschen Wert ein.,
-IncludeAll:$true
Wählen Sie beim Erstellen von Schalterparametern den Parameternamen sorgfältig aus. Seien Sie sicher, dass der Parametername dem Benutzer die Wirkung des Parameters mitteilt.Vermeiden Sie mehrdeutige Begriffe wie Filter oder Maximum, die implizieren könnten, dass Avalue erforderlich ist.
Argumentcompleterattribut
Mit dem Argumentcompleterattribut können Sie einem bestimmten Parameter Tab-Vervollständigungswerte hinzufügen. Ein ArgumentCompleter-Attribut muss für jeden Parameter definiert werden, der die Tabulatorvervollständigung benötigt., Ähnlich wie bei DynamicParameters werden Theavailable-Werte zur Laufzeit berechnet, wenn der Benutzer Tabafter den Parameternamen drückt.
Um ein Argumentcompleterattribut hinzuzufügen, müssen Sie einen Skriptblock definieren, der die Werte bestimmt. Der Skriptblock muss Folgendes nehmenparameter in der unten angegebenen Reihenfolge. Die Namen des Parameters spielen keine Rolle, alsDie Werte werden positionell bereitgestellt.,
Die Syntax lautet wie folgt:
Argumentcompleterskriptblock
Die Skriptblockparameter werden auf folgende Werte gesetzt:
-
$commandName
(Position 0) – Dieser Parameter wird auf den Namen des Befehls gesetzt, für den der Skriptblock die Tabulatorvervollständigung bereitstellt. -
$parameterName
(Position 1) – Dieser Parameter wird auf den Parameter gesetzt, für den die Tab-Vervollständigung erforderlich ist. -
$wordToComplete
(Position 2) – Dieser Parameter ist auf den Wert eingestellt, den der Benutzer vor dem Drücken der Tabulatortaste angegeben hat., Ihr Skriptblock sollte diesen Wert verwenden, um Tab-Vervollständigungswerte zu bestimmen. -
$commandAst
(Position 3) – Dieser Parameter ist auf den abstrakten SyntaxTree (AST) für die aktuelle Eingabezeile gesetzt. Für weitere Informationen, seeAst Klasse. -
$fakeBoundParameters
(Position 4) – Dieser Parameter wird auf ein Hashtablecontaining der$PSBoundParameters
für das Cmdlet gesetzt, bevor der Benutzer drucktab. Weitere Informationen finden Sie unterabout_automatic_variables.,
Der Argumentcompleterskriptblock muss die Werte mithilfe derpipeline abrollen, z. B. ForEach-Object
, Where-Object
oder eine andere geeignete Methode.Die Rückgabe eines Arrays von Werten bewirkt, dass PowerShell das gesamte Array als Tab-Abschlusswert behandelt.
Das folgende Beispiel fügt dem Parameter Value die Tabulatorvervollständigung hinzu. Wenn nur der Parameter Value angegeben ist, werden alle möglichen Werte oder Argumente fürValue angezeigt. Wenn der Parameter Type angegeben wird, zeigt der ParameterValue nur die möglichen Werte für diesen Typ an.,
Zusätzlich stellt der Operator -like
sicher, dass, wenn der Benutzer den followingcommand eingibt und die Tabulatorvervollständigung verwendet, nur Apple zurückgegeben wird.
Test-ArgumentCompleter -Type Fruits -Value A
Siehe auch
about_Automatic_Variables
about_Functions
about_Functions_Advanced
about_Functions_Advanced_Methods
about_function_cmdletbindingattribute
about_Functions_OutputTypeAttribute
Schreibe einen Kommentar