【发布时间】:2018-06-13 17:41:03
【问题描述】:
我有一堆 powershell 脚本,被分解以保持模块化。但是,所有或大部分这些脚本都依赖于某些公共变量,例如它们与之通信的服务器等。我在全局范围内定义这些变量并使用 $global:{Variable} 语法在脚本中访问它们。
这在作为入口点的脚本中运行良好。但是,当主(入口点)脚本使用以下语法执行子脚本时,我不再可以读取同一全局变量的值。我得到的只是空字符串。
Powershell.exe -File .\Child-Script.ps1
我的理解是:
- powershell 中的父作用域由子作用域继承
- 在当前 shell 上下文中执行的所有脚本都应该可以使用全局范围。
我在这里缺少什么?请帮忙。
例子:
父脚本(Main-Script.ps1)
$global:ServerUrl="http://myserver.com"
Write-Host "ServerUrl (Main-Script): $global:ServerUrl"
Powershell.exe -File .\Child-Script.ps1
子脚本 (Child-Script.ps1)
Write-Host "ServerUrl (Child-Script): $global:ServerUrl"
输出
ServerUrl (Main-Script): http://myserver.com
ServerUrl (Child-Script):
【问题讨论】:
-
请用一个非常简短的示例脚本更新您的问题,说明问题并提供示例输出。
-
感谢您的回复@Bill_Stewart。我根据您的建议添加了一个示例。
-
Powershell.exe -File .\Child-Script.ps1告诉 powershell 在单独的上下文中运行脚本。只需点源子脚本:. .\Child-Script.ps1 -
酷!这样可行!谢谢@EBGreen。如果您想将此作为答案发布,我可以将其标记为正确答案。
标签: powershell scope global-variables