Bird
Raised Fist0
PowerShellscripting~10 mins

Module creation basics in PowerShell - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Module creation basics
Write functions/scripts
↓
Save as .psm1 file
↓
Create module folder
↓
Place .psm1 in folder
↓
Import-Module './MyModule'
↓
Use functions from module
↓
Done
This flow shows how you write code, save it as a module file, place it in a folder, import it, and then use its functions.
Execution Sample
PowerShell
function Get-Greet {
  param($Name)
  "Hello, $Name!"
}

# Create folder MyModule and save as MyModule/MyModule.psm1
Import-Module ./MyModule
Get-Greet -Name "Alice"
Defines a simple greeting function, creates module folder, saves it inside as .psm1, imports it, and calls the function.
Execution Table
StepActionEvaluationResult
1Define function Get-GreetFunction createdFunction Get-Greet available
2Create MyModule folder and save function as MyModule.psm1Folder and file savedModule file ready
3Import-Module ./MyModuleModule loadedGet-Greet function imported
4Call Get-Greet -Name "Alice"Function runs"Hello, Alice!" output
5EndNo more commandsScript ends
💡 All steps completed, module imported and function executed successfully
Variable Tracker
VariableStartAfter Step 4Final
Get-Greetundefinedfunction objectfunction object
Key Moments - 3 Insights
Why do we save the function in a .psm1 file?
Saving in a .psm1 file makes PowerShell treat it as a module, so Import-Module can load the functions inside (see execution_table step 2 and 3).
What happens if we don't import the module before calling the function?
PowerShell won't know the function and will give an error because the function is inside the module file, not the current session (see execution_table step 3 and 4).
Can we call the function directly after defining it without saving as a module?
Yes, but then it is not reusable across sessions. Saving as a module allows easy reuse and sharing (see execution_table step 1 vs step 4).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the output when calling Get-Greet with Name 'Alice'?
AError: function not found
B"Hello, Bob!" output
C"Hello, Alice!" output
DNo output
💡 Hint
Check execution_table row 4 where the function is called with 'Alice'
At which step is the module file saved?
AStep 1
BStep 2
CStep 3
DStep 4
💡 Hint
Look at execution_table row 2 describing saving the .psm1 file
If we skip importing the module, what will happen when calling Get-Greet?
APowerShell error: function not found
BOutput is empty string
CFunction runs normally
DModule imports automatically
💡 Hint
See execution_table steps 3 and 4; import is needed before calling
Concept Snapshot
Module creation basics in PowerShell:
- Write functions/scripts
- Save as .psm1 file inside a folder
- Use Import-Module to load
- Call functions from the module
- Modules help reuse code easily
Full Transcript
This lesson shows how to create a PowerShell module. First, you write your functions or scripts. Then save them in a file with the .psm1 extension. Place this file inside a folder named after your module. Next, use Import-Module with the path or module name to load it into your session. After importing, you can call the functions defined in the module as if they were built-in. This process helps you organize and reuse your code across different scripts and sessions.

Practice

(1/5)
1. What is the main purpose of creating a PowerShell module?
easy
A. To store variables permanently
B. To run scripts faster
C. To create graphical user interfaces
D. To package functions for reuse and sharing

Solution

  1. Step 1: Understand module purpose

    PowerShell modules are designed to group functions and scripts for reuse.
  2. Step 2: Identify correct purpose

    Among the options, only packaging functions for reuse and sharing matches the module's main goal.
  3. Final Answer:

    To package functions for reuse and sharing -> Option D
  4. Quick Check:

    Module purpose = Package functions [OK]
Hint: Modules bundle functions to reuse easily [OK]
Common Mistakes:
  • Thinking modules speed up script execution
  • Confusing modules with GUI tools
  • Believing modules store variables permanently
2. Which file extension is used for a PowerShell module file containing functions?
easy
A. .psm1
B. .dll
C. .exe
D. .ps1

Solution

  1. Step 1: Recall PowerShell module file types

    PowerShell modules that contain functions use the .psm1 extension.
  2. Step 2: Compare options

    .ps1 is a script file, .exe and .dll are binary files, so .psm1 is correct.
  3. Final Answer:

    .psm1 -> Option A
  4. Quick Check:

    Module file extension = .psm1 [OK]
Hint: Modules use .psm1 files, not .ps1 scripts [OK]
Common Mistakes:
  • Using .ps1 instead of .psm1 for modules
  • Confusing .dll or .exe as module files
  • Thinking .psm1 is a script file
3. Given this module file MyModule.psm1 with function Get-Greeting defined as:
function Get-Greeting { "Hello, World!" }

What is the output after running these commands?
Import-Module .\MyModule.psm1
Get-Greeting
medium
A. Import-Module : Cannot find path
B. Get-Greeting : The term 'Get-Greeting' is not recognized
C. Hello, World!
D. Hello World!

Solution

  1. Step 1: Understand Import-Module effect

    Import-Module loads functions from the .psm1 file, making Get-Greeting available.
  2. Step 2: Check function output

    Get-Greeting returns Hello, World! exactly as defined.
  3. Final Answer:

    Hello, World! -> Option C
  4. Quick Check:

    Import-Module loads function, output = Hello, World! [OK]
Hint: Import module first, then call function for output [OK]
Common Mistakes:
  • Forgetting to import the module before calling function
  • Expecting 'Hello World!' without comma
  • Typos in function name causing errors
4. You wrote a module file Utils.psm1 with a function but when you run Import-Module .\Utils.psm1, you get an error: "Cannot load module because of a syntax error." What is a common cause?
medium
A. The module file has a missing closing brace '}' in the function
B. The module file is saved with .ps1 extension
C. You forgot to run PowerShell as administrator
D. The function name is too long

Solution

  1. Step 1: Identify syntax error causes in module files

    Missing closing braces in functions cause syntax errors preventing module import.
  2. Step 2: Evaluate other options

    .ps1 extension is wrong but causes different error; admin rights or function name length do not cause syntax errors.
  3. Final Answer:

    The module file has a missing closing brace '}' in the function -> Option A
  4. Quick Check:

    Syntax error = missing brace [OK]
Hint: Check braces and syntax carefully in .psm1 files [OK]
Common Mistakes:
  • Confusing file extension errors with syntax errors
  • Assuming admin rights fix syntax errors
  • Ignoring missing braces or parentheses
5. You want to create a PowerShell module that contains two functions: Get-DateInfo and Get-UserInfo. Which is the correct way to organize and import these functions?
hard
A. Create separate .ps1 files for each function and run them directly
B. Put both functions in a single .psm1 file and import it with Import-Module
C. Put both functions in a .psm1 file but call them without importing the module
D. Create a .dll file containing the functions and import it with Import-Module

Solution

  1. Step 1: Understand module organization

    PowerShell modules typically group related functions in one .psm1 file for easy import.
  2. Step 2: Evaluate import method

    Import-Module loads the .psm1 file, making all functions available; running .ps1 files directly is not modular.
  3. Final Answer:

    Put both functions in a single .psm1 file and import it with Import-Module -> Option B
  4. Quick Check:

    Functions grouped in .psm1, import module [OK]
Hint: Group functions in one .psm1 file, then import [OK]
Common Mistakes:
  • Running .ps1 files instead of importing modules
  • Calling functions without importing module first
  • Trying to use .dll files without compiling
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard