0

Background: I am looking for Best Practices for building PowerShell framework of my own. As I was used to be .NET programmer I like to keep source files small and organize code in classes and libraries.

Question: I am totally confused with using module, import-module, sourcing using dot-import and Add-PSSnapin. Sometimes it works. Sometimes it does not. Some includes work when running from ISE/VS2015 but fail when running via cmd powershell -command "& './myscript.ps1'". I want to include/import classes and functions. I also would like to use type and namespace aliases. Using them with includes produces even weirdest results, but sometimes somehow they work.

Edit: let me be more specific:

Local project case (all files in one dir): main.ps1, common_autorun.ps1, _common.psm1, _specific.psm1.

How to include these modules into main script using relative paths?

_specific.psm1 also rely on _common.psm1.

There are ScriptBlocks passed between modules that may contain calls to classes defined in parent context.

common_autorun.ps1 contains solely type accelerators and namespace imports as described here.

Modules contain mainly classes with static methods as I am not yet used to PowerShell style of programming where functions do not have predicted returns.

As I understand my problems are related to context and scope. Unfortunately these PowerShell concepts are not well documented for v5 classes.

Edit2: Simplified sample:

_common.psm1 contains watch

_specific.psm1 contains getDiskSpaceInfoUNC

main.ps1 contains just:

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

What includes/imports should I put into these files in order this code to work both in ISE and powershell.exe -command "& './main.ps1'"?

Of cause this works perfectly when both functions are defined in main.ps1.

Community
  • 1
  • 1
Anton Krouglov
  • 3,077
  • 2
  • 29
  • 50
  • Add-PSSnapin, dot-sourcing and Import-Module are different mechanisms to accomplish different things (although Import-Module and dot-sourcing overlaps depending on input). Without examples of these "weirdest results" it's hard to provide an explanation – Mathias R. Jessen Aug 17 '16 at 18:10
  • You have forgot to mention `using module` which can be used to accomplish yet another things apparently. Providing "weirdest results" is hard as there are so many of them and not all of them repeatable, – Anton Krouglov Aug 17 '16 at 21:32

0 Answers0