PowerShell函数文件化后无法获取返回值问题求助
解决PowerShell点源调用函数后无法获取返回值的问题
问题原因
你的代码写法存在逻辑错误:将点源脚本与函数调用放在同一行的赋值语句中时,PowerShell会把点源脚本的执行结果赋值给$val,但点源脚本仅用于定义函数,本身没有任何输出,因此$val为空。函数调用的结果被直接丢弃,没有被赋值。
解决方案
方案1:拆分点源与函数调用(推荐)
先通过点源加载函数定义,再单独调用函数并接收返回值:
# 点源加载函数,将函数定义导入当前作用域 . $PSScriptRoot\..\Functions\IsModuleInstalled.ps1 # 调用函数并获取返回值 $val = IsModuleInstalled -ModuleName "module" Write-Host "val = $val"
方案2:同一行修正赋值逻辑
如果需要写在一行,调整语句顺序,确保赋值的是函数调用的结果:
. $PSScriptRoot\..\Functions\IsModuleInstalled.ps1; $val = IsModuleInstalled -ModuleName "module" Write-Host "val = $val"
补充说明
点源操作符(.)的作用是在当前会话作用域中执行脚本内容,这里就是把函数定义加载到当前环境,本身不会产生输出。只有调用已加载的函数,才能获取其返回值。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

