使用模块,导入模块,使用点源导入和Add-PSSnapin

时间:2016-08-17 17:59:04

标签: powershell include

背景:我正在寻找构建自己的PowerShell框架的最佳实践。由于我曾经是.NET程序员,我喜欢保持较小的源文件并在类和库中组织代码。

问题:我对using moduleimport-module完全感到困惑,使用点导入和Add-PSSnapin进行采购。有时它有效。有时却没有。有些包括从ISE / VS2015运行时的工作,但在通过cmd powershell -command "& './myscript.ps1'"运行时失败。我想包含/导入类和函数。我还想使用类型和命名空间别名。将它们与包含一起使用会产生最奇怪的结果,但有时它们会起作用。

编辑:让我更具体一点:

本地项目案例(一个目录中的所有文件):main.ps1,common_autorun.ps1,_common.psm1,_specific.psm1。

如何使用相对路径将这些模块包含到主脚本中?

_specific.psm1也依赖于_common.psm1。

模块之间传递ScriptBlocks,可能包含对父上下文中定义的类的调用。

common_autorun.ps1仅包含类型加速器和名称空间导入,如here所述。

模块主要包含带有静态方法的类,因为我还没有使用PowerShell编程风格,其中函数没有预测的返回值。

据我所知,我的问题与contextscope有关。不幸的是,对于v5类,这些PowerShell概念没有很好地记录。

编辑2:简化示例:

_common.psm1包含watch

_specific.psm1包含getDiskSpaceInfoUNC

main.ps1只包含:

watch 'getDiskSpaceInfoUNC "\\localhost\d$"'

我应该在这些文件中加入哪些包含/导入,以使此代码在ISE和powershell.exe -command "& './main.ps1'"中都能正常工作?

当两个函数都在main.ps1中定义时,这种情况非常有效。

0 个答案:

没有答案