如何在PowerShell脚本间共享变量?解决动态加载时变量失效问题
问题描述
我有两个PowerShell脚本main.ps1和data.ps1,它们共享全局变量$Global:SharedValues——该变量在data.ps1中初始化,随后在main.ps1中使用,这套方案原本运行完全正常。
但随着data.ps1的规模不断扩大,维护变得愈发不便,因此我希望将其拆分为多个文件,同时实现动态引入这些脚本,无需每次新增数据脚本时都手动在main.ps1中添加.引入语句。
我尝试过两种动态引入方式:Invoke-Expression $data和powershell.exe $data。这两种方式都能正常运行数据脚本,但对全局变量的修改却不生效——推测这些脚本是在独立的内存实例中运行的。
请问是否可以让所有脚本共享该全局变量?能否通过管道或其他方式将变量传递给动态引入的脚本?
解决方案
此前我采纳过一个现已被移除的答案,其实解决方法非常简单:.点源命令可以通过变量接收文件名(这一点我之前并不知晓)。具体方案是使用Get-ChildItem获取所有需要引入的脚本列表,然后对它们逐个执行点源操作:
$Global:SharedValues = @{} $dataScriptFiles = Get-ChildItem -Path $PSScriptRoot -Filter "data-*" foreach ( $file in $dataScriptFiles ) { . $file.FullName # Dot-Source }
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

