PowerShell中如何在param执行后获取函数调用的原始入参列表
解决方案
可以通过$PSBoundParameters内置自动变量实现需求,具体代码如下:
function myfunction { param([string]$msg1, [string]$msg2) $preinvoke = @() foreach ($paramKey in $PSBoundParameters.Keys) { $preinvoke += "-$paramKey" $preinvoke += $PSBoundParameters[$paramKey] } write-host "You called this command like this: myfunction $preinvoke" }
实现说明
$PSBoundParameters是PowerShell原生提供的自动变量,会自动存储当前函数实际接收到的所有已绑定参数的键值对,仅包含调用时实际传入的参数,未传的默认值参数不会被纳入- 如果需要兼容调用时不写参数名直接传值的位置参数场景,可以额外追加
$args变量存储的未绑定参数,修改后的代码如下:
function myfunction { param([string]$msg1, [string]$msg2) $preinvoke = @() foreach ($paramKey in $PSBoundParameters.Keys) { $preinvoke += "-$paramKey" $preinvoke += $PSBoundParameters[$paramKey] } # 追加未绑定的位置参数 $preinvoke += $args write-host "You called this command like this: myfunction $preinvoke" }
内容的提问来源于stack exchange,提问作者pico
相关产品推荐
相关产品推荐

