Powershell:包含另一个包含的脚本?

Vla*_*mir 12 powershell

我想在制作脚本时让生活更轻松.我正在盯着一个包含文件层次结构的小框架.问题是点源ps1脚本已经有其他文件点源来制动原始调用脚本中的范围.它看起来像这样:

\ CONFIG\loadvariables.ps1

$var = "shpc0001"
Run Code Online (Sandbox Code Playgroud)

\ CONFIG\config.ps1

. '.\loadvariables.ps1'
Run Code Online (Sandbox Code Playgroud)

\ test.ps1

. '.\config\config.ps1'
echo $var
Run Code Online (Sandbox Code Playgroud)

问题是test.ps1尝试加载,loadvariables.ps1因为它位于test.ps1脚本旁边.我怎么解决这个问题?

Jar*_*Par 12

管理具有相互依赖性的脚本集合的最简单方法是将它们转换为模块.此功能仅在2.0中可用,但它允许您将一组脚本分隔为具有声明的依赖项的独立组件.

这是一个关于启动和运行模块的教程的链接

  • 您可以提供路径:Import-Module $ ScriptRoot\modules\foo或者您可以更改$ Env:PSModulePath以告知Powershell在哪里搜索由裸名指定的模块. (3认同)

Jas*_*her 7

正如贾里德所说,模块是要走的路.但是,由于您甚至可能在模块内部使用点源,因此最好使用完整路径(仍可在运行时计算),如此.

## Inside modules, you can refer to the module's location like so
. "$PSScriptRoot\loadvariables.ps1"

## Outside a module, you can do this
$ScriptRoot = Split-Path $MyInvocation.MyCommand.Path
. "$ScriptRoot\loadvariables.ps1"
Run Code Online (Sandbox Code Playgroud)