Parameter mit default-Wert nicht in PsBoundParameters?
Allgemeinen code
Betrachten Sie diesen code:
PS> function Test { param($p='default value') $PsBoundParameters }
PS> Test 'some value'
Key Value
--- -----
p some value
PS> Test
# nothing
Ich würde erwarten, dass $PsBoundParameters
enthalten wäre Rekord für $p
variable auf beiden Fällen. Ist das so korrekt Verhalten?
Frage
Ich verwenden möchte, splatting, die funktionieren würde, wie dies für eine Vielzahl von Funktionen:
function SomeFuncWithManyRequiredParams {
param(
[Parameter(Mandatory=$true)][string]$p1,
[Parameter(Mandatory=$true)][string]$p2,
[Parameter(Mandatory=$true)][string]$p3,
...other parameters
)
...
}
function SimplifiedFuncWithDefaultValues {
param(
[Parameter(Mandatory=$false)][string]$p1='default for p1',
[Parameter(Mandatory=$false)][string]$p2='default for p2',
[Parameter(Mandatory=$false)][string]$p3='default for p3',
...other parameters
)
SomeFuncWithManyRequiredParams @PsBoundParameters
}
Möchte ich nicht nennen SomeFuncWithManyRequiredParams mit allen params aufgezählt:
SomeFuncWithManyRequiredParams -p1 $p1 -p2 $p2 -p3 $p3 ...
Ist es möglich?
- Es gibt zwei Fragen, ich würde hier Fragen muss, für jeden parameter in Frage: Warum muss SomeFunc nicht die gleiche Standard-Wert als SimplifiedFunc? Und, wenn die defaults anders sein muss, warum dann nicht SimplifiedFunc dem Benutzer erlauben, um die Standardeinstellung zu überschreiben (da es in diesem Fall, Sie könnten rufen Sie einfach SomeFunc direkt zu überschreiben)?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es hängt davon ab, wie definieren Sie "gebunden" ich denke, also ist der Wert gebunden, die von einem Benutzer angegebenen Wert oder einen default-Wert geliefert, der von der Funktion? Ehrlich gesagt, es überrascht mich nicht, dass es sich so verhält, wie es so tut wie ich "gebunden" bedeutet die ehemaligen - gebunden von Benutzereingaben. Sowieso, Sie können dieses Problem durch patchen des $PSBoundParameters variable z.B.:
$PSBoundParameters
enthält nur die explizit angegebenen Argumente verwendet werden, hängt von der definition. Dann sollte es eine Art und Weise, wie man alle Parameter und Werte als ich erwartet habe.SomeFuncWithManyRequiredParams -p1 $p1 -p2 $p2 -p3 $p3
. Und wenn alle Parameter in der FunktionSimplifiedFuncWithDefaultValues
haben default Werte, dann gibt es keinen Unterschied, denke ich.Ich weiß, diese Frage ist sehr alt, aber ich hatte ein Bedürfnis für so etwas vor kurzem (tun wollte splatting mit einer Menge von default-Parametern). Ich kam mit dieser und es hat sehr gut geklappt:
Schamlose Voraus: ich habe beschlossen, diesen in einen blog-post, die mehr Erklärung und ein Beispiel für die Nutzung Skript.
Könntest du eine Hilfsfunktion, die ähnlich wie die
Add-Variable
Funktion unten:Dies ist, was ich mag zu tun: