Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 如何以编程方式确定函数参数的默认值?_Function_Powershell_Parameters_Default Value - Fatal编程技术网

Function 如何以编程方式确定函数参数的默认值?

Function 如何以编程方式确定函数参数的默认值?,function,powershell,parameters,default-value,Function,Powershell,Parameters,Default Value,考虑以下功能: function f {param($x = 42)} $x的默认值为42。假设我有一组函数,我想通过编程测试它们的参数,其中包括它们的默认值。使用使用以下命令之一返回的对象,我能够发现的其他内容: Get-Item function:/f | % Parameters | % x | % Attributes Get-Help f | % Parameters | % parameter 这些命令输出以下内容: Position

考虑以下功能:

function f {param($x = 42)}
$x
的默认值为42。假设我有一组函数,我想通过编程测试它们的参数,其中包括它们的默认值。使用使用以下命令之一返回的对象,我能够发现的其他内容:

Get-Item function:/f | % Parameters | % x | % Attributes
Get-Help f | % Parameters | % parameter
这些命令输出以下内容:

Position                        : 0
ParameterSetName                : __AllParameterSets
Mandatory                       : False
ValueFromPipeline               : False
ValueFromPipelineByPropertyName : False
ValueFromRemainingArguments     : False
HelpMessage                     : 
HelpMessageBaseName             : 
HelpMessageResourceId           : 
DontShow                        : False
TypeId                          : System.Management.Automation.ParameterAttribute

name             : x
required         : false
pipelineInput    : false
isDynamic        : false
parameterSetName : (All)
parameterValue   : Object
type             : @{name=Object}
position         : 0
aliases          : None
对于默认值似乎没有任何线索


如何以编程方式确定函数参数的默认值?

可以使用语法树查找参数的默认值表达式

function f {
    param(
        $x = 42,
        $y = 6*7,
        $z = (Get-Random)
    )
}

$Parameters = (Get-Item function:\f).ScriptBlock.Ast.Body.ParamBlock.Parameters
$xDefaultValue = $($Parameters.Where{$_.Name.VariablePath.UserPath -eq 'x'}).DefaultValue
$yDefaultValue = $($Parameters.Where{$_.Name.VariablePath.UserPath -eq 'y'}).DefaultValue
$zDefaultValue = $($Parameters.Where{$_.Name.VariablePath.UserPath -eq 'z'}).DefaultValue
您可以使用语法树节点的
SafeGetValue()
方法来检索常量值,但它不适用于表达式

$xDefaultValue.SafeGetValue()
$yDefaultValue.SafeGetValue()
$zDefaultValue.SafeGetValue()

可以使用语法树查找参数的默认值表达式

function f {
    param(
        $x = 42,
        $y = 6*7,
        $z = (Get-Random)
    )
}

$Parameters = (Get-Item function:\f).ScriptBlock.Ast.Body.ParamBlock.Parameters
$xDefaultValue = $($Parameters.Where{$_.Name.VariablePath.UserPath -eq 'x'}).DefaultValue
$yDefaultValue = $($Parameters.Where{$_.Name.VariablePath.UserPath -eq 'y'}).DefaultValue
$zDefaultValue = $($Parameters.Where{$_.Name.VariablePath.UserPath -eq 'z'}).DefaultValue
您可以使用语法树节点的
SafeGetValue()
方法来检索常量值,但它不适用于表达式

$xDefaultValue.SafeGetValue()
$yDefaultValue.SafeGetValue()
$zDefaultValue.SafeGetValue()

$(Get Item function:/f).ScriptBlock.Ast.Body.ParamBlock.Parameters.Where{$\ Name.VariablePath.UserPath-eq'x'}).DefaultValue.SafeGetValue()
@PetSerAl值得投票支持。谢谢@PetSerAl。这很有效。你能给我一个答案,这样我就可以纠正错误了吗?
$(Get Item function:/f).ScriptBlock.Ast.Body.ParamBlock.Parameters.Where{$\ Name.VariablePath.UserPath-eq'x'}).DefaultValue.SafeGetValue()
@PetSerAl值得投票支持。谢谢@PetSerAl。这很有效。你能给我一个答案,这样我就可以纠正打字错误了吗?