获取传递给 PowerShell 中函数的所有参数
Get all parameters passed to a function in PowerShell
我有一个功能如下。它根据传递的参数生成一个字符串。
function createSentenceAccordingly {
Param([Parameter(mandatory = $false)] [String] $name,
[Parameter(mandatory = $false)] [String] $address,
[Parameter(mandatory = $false)] [String] $zipcode,
[Parameter(mandatory = $false)] [String] $city,
[Parameter(mandatory = $false)] [String] $state)
$stringRequired = "Hi,"
if($name){
$stringRequired += "$name, "
}
if($address){
$stringRequired += "You live at $address, "
}
if($zipcode){
$stringRequired += "in the zipcode:$zipcode, "
}
if($name){
$stringRequired += "in the city:$city, "
}
if($name){
$stringRequired += "in the state: $state."
}
return $stringRequired
}
所以,基本上函数 returns 取决于传递的参数。我想尽可能避免 if 循环并一次访问所有参数。
我可以访问数组或哈希图中的所有参数吗?由于我应该使用命名参数,因此不能在此处使用 $args。如果我可以一次访问所有参数(可能在 $args 或 hashamp 之类的数组中),我的计划是使用它来动态创建 returnstring。
以后函数的参数会增加很多,我不想再为每个额外的参数都写if循环了。
提前致谢:)
$PSBoundParameters
variable 是一个哈希表,仅包含显式传递给函数的参数。
一个更好的方法可能是使用 parameter sets 以便您可以命名特定的参数组合(不要忘记在这些集合中强制使用适当的参数)。
然后你可以这样做:
switch ($PsCmdlet.ParameterSetName) {
'NameOnly' {
# Do Stuff
}
'NameAndZip' {
# Do Stuff
}
# etc.
}
我有一个功能如下。它根据传递的参数生成一个字符串。
function createSentenceAccordingly {
Param([Parameter(mandatory = $false)] [String] $name,
[Parameter(mandatory = $false)] [String] $address,
[Parameter(mandatory = $false)] [String] $zipcode,
[Parameter(mandatory = $false)] [String] $city,
[Parameter(mandatory = $false)] [String] $state)
$stringRequired = "Hi,"
if($name){
$stringRequired += "$name, "
}
if($address){
$stringRequired += "You live at $address, "
}
if($zipcode){
$stringRequired += "in the zipcode:$zipcode, "
}
if($name){
$stringRequired += "in the city:$city, "
}
if($name){
$stringRequired += "in the state: $state."
}
return $stringRequired
}
所以,基本上函数 returns 取决于传递的参数。我想尽可能避免 if 循环并一次访问所有参数。
我可以访问数组或哈希图中的所有参数吗?由于我应该使用命名参数,因此不能在此处使用 $args。如果我可以一次访问所有参数(可能在 $args 或 hashamp 之类的数组中),我的计划是使用它来动态创建 returnstring。
以后函数的参数会增加很多,我不想再为每个额外的参数都写if循环了。
提前致谢:)
$PSBoundParameters
variable 是一个哈希表,仅包含显式传递给函数的参数。
一个更好的方法可能是使用 parameter sets 以便您可以命名特定的参数组合(不要忘记在这些集合中强制使用适当的参数)。
然后你可以这样做:
switch ($PsCmdlet.ParameterSetName) {
'NameOnly' {
# Do Stuff
}
'NameAndZip' {
# Do Stuff
}
# etc.
}