Creating and Adding Your Own Modules to PowerShell

Quick Tutorial:

1. Make sure your script is written as a function, named in the proper Verb-Noun format
2. Save the file as <Verb>-<Noun>.psm1 in a folder named <Verb>-<Noun>
3. Save the <Verb>-<Noun> folder in a custom modules folder
4. If your PowerShell profile for your current session does not yet exist. Create it, then edit it:
New-Item -Path $Profile -Type File -Force Notepad$Profile

5. Once open in notepad, add the following line to the profile:
$Env:PSModulePath =$Env:PSModulePath + ";C:\Path\to\Custom\Modules"
6. Save the profile and restart your PowerShell session

Full Tutorial:

“How can I create my own modules that I can run from the PowerShell Console without using Import-Module every time?” is the question that prompted this. Here’s the answer (I’m using PowerShell 4.0):

Create and Store Your Modules

First, I recommend that you create a file for each PowerShell function that you create. Name the function with the conventional camel-case <verb>-<noun> format used in PowerShell (e.g. RemoveArchEnemy).

Use Recommended verbs as described here:
Approved Verbs for Windows PowerShell Commands

Then, name your file the same as your function name and use psm1 as the file type. This indicates that the file is a module. For example, if your function was called Remove-ArchEnemy then your file would be

Remove-ArchEnemy.psm1

Give your module its own folder, also named after the name of the function, then find a place to keep your modules forever. A good example would be:

Using this, a complete path to our example would then be:

$Profile My machine returns: C:\Users\Jonathan\Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1 Again, this will vary depending on the profile in use for your console. In reality, the profile is just a script that runs at the beginning of each PowerShell session. You may notice that the path to the profile file listed doesn’t even exist. If this is the case than we need to create it. We then need to edit it. This can be done with two commands: New-Item -Path$Profile -Type File -Force
Notepad $Profile  With the profile now ready for editing we need to add a value to the PSModulePath environment variable. This is where all of the valid module paths are located. Add the following to your profile: $Env:PSModulePath = \$Env:PSModulePath + ";C:\Users\Documents\WindowsPowerShell\Modules"