子脚本

时间:2018-06-13 17:41:03

标签: powershell scope global-variables

我有一堆powershell脚本,为了保持模块化而分解。但是,所有或大多数这些脚本都依赖于某些常见变量,例如与之交谈的服务器等。我在全局范围内定义这些变量,并使用$global:{Variable}语法在脚本中访问它们。 / p>

这在作为入口点的脚本中工作正常。但是,当main(入口点)脚本使用以下语法执行子脚本时,我不再能读取相同全局变量的值。我得到的只是空字符串。

Powershell.exe -File .\Child-Script.ps1

我的理解是:

  1. powershell中的父作用域由子作用域继承
  2. 在所有在当前shell上下文中执行的脚本中,全局范围应该可用。
  3. 我在这里缺少什么?请帮忙。

    示例:

    父脚本(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): 
    

1 个答案:

答案 0 :(得分:0)

启动Powershell.exe时,您将创建一个具有自己的全局上下文的新PowerShell会话。所以这个:

Powershell.exe -File .\Child-Script.ps1

将导致子脚本在不同的上下文中运行。相反,您可以'Dot Source'子脚本,这将导致它在当前上下文中执行:

. .\Child-Script.ps1