Question

I have a module in a folder that I have created, C:\PowerShellScripts\Modules. I call this mod.psm1. This file contains two simple functions: Write-hello and Write-bye.

Now, I have added this path(C:\PowerShellScripts\Modules) to my PSModulePath Environment variables path.

Accordingly, this should auto load the module when I start PowerShell. Correct?

But when I run PowerShell and try Write-hello or Write-bye it gives an error

write-hello : The term 'write-hello' is not recognized as the name of a cmdlet, function, script file, or operable program

PowerShell does not load the mod.psm1 file even though $ENV:PSModulePath shows my path (C:\PowerShellScripts\Modules)

And I need to manually use Import-Module again. What could be wrong?

Was it helpful?

Solution 2

I figured it out. I needed to add my mod.psm1 file to a folder named "mod". Now I can directly access my cmdlets write-hello or write-bye when i start PowerShell.

OTHER TIPS

According to documentation available here:

A "well-formed" module is a module that is stored in a directory that has the same name as the base name of at least one file in the module directory. If a module is not well-formed, Windows PowerShell does not recognize it as a module.

The "base name" of a file is the name without the file name extension. In a well-formed module, the name of the directory that contains the module files must match the base name of at least one file in the module.

This is the reason when you made a directory named mod (same base name as the file mod.psm1) and put the module inside it, you could access your cmdlets.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top