PowerShell函数内定义的变量无法传递给其他函数该如何解决?
问题排查与修正方案
你的代码存在3个核心问题:
- 作用域问题:PowerShell函数内默认定义的变量是函数私有作用域,函数执行结束后变量会自动销毁,外部无法直接访问函数内定义的
$tony、$tlony - 函数参数使用错误:
get-PSadded定义了入参$name、$name2,但函数内部实现调用的是未定义的$tony、$tlony,完全没有使用传入的参数 - 传参格式错误:调用
get-PSadded时你将两个变量拼接为1个字符串传入,实际只给第一个参数$name传了值,第二个参数$name2为空
方案1:通过返回值传递变量(推荐用法)
function get-PSnames { $tony = 'tiny' $tlony = 'jommy' # 主动返回两个变量 return $tony, $tlony } function get-PSadded ([string] $name,[string]$name2) { # 调用定义的入参做运算 return $name + $name2 } # 接收第一个函数的返回值赋值给外部变量 $tony, $tlony = get-PSnames # 按参数位传递两个独立变量 get-PSadded $tony $tlony
方案2:显式指定变量作用域(仅作原理说明,不推荐常规使用)
如果一定要在函数内直接生成外部可访问的变量,可以加作用域前缀,但会污染全局空间,非特殊场景不建议使用:
function get-PSnames { # 指定为脚本作用域变量,函数执行完成后外部仍可访问 $script:tony = 'tiny' $script:tlony = 'jommy' } function get-PSadded ([string] $name,[string]$name2) { return $name + $name2 } get-PSnames get-PSadded $tony $tlony
内容的提问来源于stack exchange,提问作者TonyMcG
相关产品推荐
相关产品推荐

