背景:我正在寻找构建自己的PowerShell框架的最佳实践。由于我曾经是.NET程序员,我喜欢保持较小的源文件并在类和库中组织代码。
问题:我对using module
,import-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编程风格,其中函数没有预测的返回值。
据我所知,我的问题与context
和scope
有关。不幸的是,对于v5类,这些PowerShell概念没有很好地记录。
编辑2:简化示例:
_common.psm1包含watch
_specific.psm1包含getDiskSpaceInfoUNC
main.ps1只包含:
watch 'getDiskSpaceInfoUNC "\\localhost\d$"'
我应该在这些文件中加入哪些包含/导入,以使此代码在ISE和powershell.exe -command "& './main.ps1'"
中都能正常工作?
当两个函数都在main.ps1中定义时,这种情况非常有效。