---
title: "PowerShell Modules: A Beginner’s Guide to Extending Functionality"
description: "Learn how PowerShell modules work, where to find them, and how to use them effectively. Master the building blocks that unlock PowerShell's automation potential."
canonical: "https://adamtheautomator.com/powershell-modules-guide/"
---

# PowerShell Modules: A Beginner’s Guide to Extending Functionality

> Learn how PowerShell modules work, where to find them, and how to use them effectively. Master the building blocks that unlock PowerShell's automation potential.

Source: https://adamtheautomator.com/powershell-modules-guide/

---

ATA Learning

Tap to hide

[

ATA Learning

](/)

*   [Home](/)
*   [Tutorials](/tutorials/)
*   [Instructors](/author/)
*   [Advertising](/advertising/)
*   [Recommended Resources](/resources/)
*   [About Adam](/about-adam/)

Search for:  

*   [](https://twitter.com/adbertram)
*   [](https://github.com/Adam-the-Automator)
*   [](https://www.linkedin.com/company/adam-the-automator-llc)
*   [](/feed/)

![PowerShell Modules: A Beginner’s Guide to Extending Functionality](https://adamtheautomator.com/wp-content/uploads/2025/01/featured-image-1.webp)

# PowerShell Modules: A Beginner’s Guide to Extending Functionality

[![](https://secure.gravatar.com/avatar/d0b9d42e21e5622713f8b693aa5c0f9244d5f7dd200ed29b8398f52dee5de337?s=192&d=mm&r=g)Adam Bertram](https://adamtheautomator.com/author/adam-bertram/)10 January 20252 min. read

Categories: [IT Ops](/category/it-ops/)

Tags:[PowerShell](/tag/powershell/)

Table of Contents

*   [Discovering Available PowerShell Modules](#discovering-available-powershell-modules)
*   [Uncovering Module Versions and Command Details](#uncovering-module-versions-and-command-details)
*   [Locating Module Directories](#locating-module-directories)
*   [Managing the PSModulePath Variable](#managing-the-psmodulepath-variable)
*   [Conclusion](#conclusion)

Building automation with PowerShell might initially seem overwhelming, but like any great endeavor, it’s all about taking it step by step. Picture PowerShell as a collection of building blocks, with modules as the foundation that brings its functionality to life.

In this article, you’ll discover what PowerShell modules are, how to find them, and how to use them to supercharge your automation tasks. From managing virtual machines to connecting with cloud services or automating Active Directory, modules make it all possible.

Read on to unlock PowerShell’s full potential and precisely tackle your tasks!

## Discovering Available PowerShell Modules

PowerShell modules are essential building blocks that extend its functionality. But, not all modules automatically load into your session—they often remain on your system, waiting to be discovered.

To explore the modules installed on your system, use the `Get-Module` command:

```powershell
Get-Module
```

You might notice a short list of modules. The reason is because `Get-Module` only shows modules already imported into your session.

To see all available modules on your system, including those not yet loaded, append the `-ListAvailable` parameter:

```powershell
Get-Module -ListAvailable
```

This command lists all modules available on your system, whether loaded into memory or not. PowerShell automatically imports modules as you use commands from them, so you typically don’t need to load them manually.

Modules can be of various types—script, binary, or manifest.

To group modules by type for easier inspection, try this:

```
gmo -ListAvailable | group ModuleType
```

Here, you use aliases for convenience.

For example, `gmo` is shorthand for `Get-Module`, and `group` is an alias for `Group-Object`. Aliases save time when running commands in the console.

## Uncovering Module Versions and Command Details

Each module has a version representing its feature set or changes over time. Versioning allows you to manage updates or revert to a previous version if necessary.

Modules also contain commands that are accessible via the `ExportedCommands` property.

To see the commands in the `Microsoft.PowerShell.Management` module, run:

```
gmo Microsoft.PowerShell.Management | Select-ExpandProperty ExportedCommands
```

This command displays a list of commands available in the module.

## Locating Module Directories

Modules don’t magically work in PowerShell—they live in specific directories on your system, and PowerShell needs to know where to find them.

To show the locations of available PowerShell modules:

```
gmo -list
```

Common locations include:

*   _C:\\Program Files\\PowerShell\\7\\Modules_
*   _C:\\Program Files\\WindowsPowerShell\\Modules_
*   _C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\Modules_

Even when running PowerShell Core, modules from Windows PowerShell directories may still appear because PowerShell Core can use them.

Modules have dedicated categories by their `PSEdition` property, which indicates compatibility:

*   `Core` – Built for PowerShell Core.
*   `Desk` – Designed for Windows PowerShell.
*   `Both` – Compatible with both editions.

## Managing the `PSModulePath` Variable

PowerShell doesn’t automatically search your entire system for modules—it relies on specific paths defined by the `PSModulePath` environment variable. If a module isn’t in one of these paths, PowerShell won’t find it, even if the system/you installed it elsewhere.

To view the `PSModulePath` environment variable:

```
$env:PSModulePath
```

The variable contains a semicolon-separated list of directories.

For easier readability, split it into an array:

```
$env:PSModulePath -split ';'
```

PowerShell searches for modules in:

*   User-level directories (e.g., your user profile’s Documents folder).
*   Shared directories in Program Files.
*   System-level directories, such as _C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\Modules_.

You can also add custom directories to the search path:

```
$env:PSModulePath + ';C:\MyNewModulePath'
$env:PSModulePath
```

This change applies to the current session, directing PowerShell to look for modules in the specified path.

## Conclusion

In this article, you explored how to discover available modules, view their versions, inspect their commands, and locate their storage directories. You also learned how to leverage the `PSModulePath` environment variable to customize where PowerShell looks for modules.

These foundational skills enable you to unlock the full potential of PowerShell for your automation tasks. Continue putting this knowledge into practice. Start by exploring the modules already available on your system and identifying those that suit your current needs.

With a deeper understanding of modules, you’ll be ready to tackle complex automation challenges confidently and efficiently!

Share this article

[Share on X](https://twitter.com/intent/tweet?url=https%3A%2F%2Fadamtheautomator.com%2Fpowershell-modules-guide%2F&text=PowerShell%20Modules%3A%20A%20Beginner%E2%80%99s%20Guide%20to%20Extending%20Functionality)[Share on Facebook](https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fadamtheautomator.com%2Fpowershell-modules-guide%2F)[Share on LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fadamtheautomator.com%2Fpowershell-modules-guide%2F)

## Related Posts

![](https://adamtheautomator.com/wp-content/uploads/2026/06/26995-troubleshoot-dns-issues-powershell-codex.webp)

### [Troubleshoot DNS Issues with PowerShell](/troubleshoot-dns-issues-powershell/)

Troubleshoot DNS issues with PowerShell by testing name resolution, DNS client settings, cache entries, and network connectivity in a repeatable workflow.

![](https://adamtheautomator.com/wp-content/uploads/2025/10/image_2025-10-24_095322075.png)

### [Migrating from PowerShell 6 to 7.5: Breaking Changes/New Features](/migrating-powershell-6-to-7-5/)

Migrate from PowerShell Core 6 to 7.5: breaking changes, features, and testing tips.

![](https://adamtheautomator.com/wp-content/uploads/2025/06/featured-image-6.png)

### [How to Add Timeouts to Pester Tests with PowerShell Runspaces](/pester-test-timeout-runspaces/)

Prevent Pester tests from hanging indefinitely using PowerShell runspaces. Learn to handle variable scoping, module loading, TestDrive access, and stream capture challenges with timeout protection.

## Categories

*   [IT Ops](/category/it-ops/)
*   [Cloud](/category/cloud/)
*   [DevOps](/category/devops/)
*   [Home Ops](/category/home-ops/)
*   [Information Security](/category/infosec/)
*   [Software Development](/category/software-development/)

## Site

*   [Home](/)
*   [Tutorials](/tutorials/)
*   [Instructors](/author/)
*   [Advertising](/advertising/)
*   [Recommended Resources](/resources/)
*   [About Adam](/about-adam/)

Copyright 2026© ATA Learning | [Privacy Policy](/privacy/)
