Finding and installing modules
PowerShell includes a module named PowerShellGet, which can be used to register repositories and search for and install modules.
By default, PowerShellGet searches the PowerShell Gallery.
What is the PowerShell Gallery?
The PowerShell Gallery is a Microsoft-run repository and distribution platform for PowerShell scripts and modules written by Microsoft or other users.
The PowerShell Gallery has parallels in other scripting languages, as shown in the following examples:
- Perl has cpan.org
- Python has PyPI
- Ruby has RubyGems
Support for the gallery is included by default in PowerShell 5 and above. For Windows PowerShell 3 and 4, PowerShellGet must be installed as described in Microsoft Docs: https://docs.microsoft.com/powershell/scripting/gallery/installing-psget.
The PowerShell Gallery may be searched using https://www.powershellgallery.com as shown in the following screenshot:

Figure 2.2: Searching the PowerShell Gallery
You can use the Find-Module command to search the PowerShell Gallery, or any registered repository, instead of using the web page.
The Find-Module command
Find-Module is used to search registered PowerShell repositories. Modules are identified by name, as shown in the following example:
Find-Module Carbon
Find-Module -Name Carbon
Find-Module -Name Azure*
You can use the Filter parameter when the name alone is not sufficient to find an appropriate module. Supplying a value for the Filter parameter is equivalent to using the search field in the PowerShell Gallery, it expands the search to include tags:
Find-Module -Filter IIS
The Find-Module command cannot filter based on PowerShell edition, and the result of the search does not state which version the module might work with.
Once found, a module can be installed using the Install-Module command.
The Install-Module command
The Install-Module command installs modules from the PowerShell Gallery or any other configured repository. By default, Install-Module adds modules to the path for AllUsers, at C:\Program Files\PowerShell\Modules on Windows and at /usr/local/share/powershell/Modules on Ubuntu.
Access rights
Installing a module under the AllUsers scope requires administrative access.
For example, the posh-git module may be installed using either of the following two commands:
Find-Module -Name posh-git | Install-Module
Install-Module posh-git
Modules may be installed under a user-specific path ($home\Documents\WindowsPowerShell\Modules) using the Scope parameter:
Install-Module carbon -Scope CurrentUser
If the most recent version of a module is already installed, the command ends without providing feedback. If a newer version is available, it will be automatically installed alongside the original.
The Force parameter may be used to reinstall a module:
Install-Module posh-git -Force
Force may also be used to install a newer version of a module when the existing version was not installed from a PS repository, or when changing the scope a module is installed in.
The Install-Module command does not provide an option to install modules under the $PSHOME directory. The $PSHOME directory is reserved for modules that are shipped with the PowerShell installer, or for Windows PowerShell, those that are shipped with the Windows operating system.
The Update-Module command
You can use the Update-Module command to update any module installed using the Install-Module command.
In both Windows PowerShell and PowerShell 7, Update-Module attempts to update the specified module to the latest or specified version.
The Save-Module command
The Save-Module command downloads the module from the PowerShell Gallery (or any other registered repository) to a path without installing it. This is useful if you save a module to an alternate module path, or if you intend to copy the module onto a system that cannot use Install-Module.
The following example command downloads the Carbon module into a Modules directory in the root of the C: drive:
Save-Module -Name Carbon -Path C:\Modules
Save-Module will download the module and overwrite any previously saved version in the specified path. The command ignores other downloaded versions of the module.
Each of the preceding commands is part of PowerShellGet 2. PowerShellGet 3 is likely to be released in the coming months and adopts a slightly different approach to the commands.