Installing PowerShell module persistently for all users
PowerShell can only "see" modules installed in one of the directories listed in $env:PSModulePath
. Otherwise you'll have to import the module with its full path.
To make a new module visible to all users you basically have two options:
- Install the module to the default system-wide module directory (
C:\Windows\system32\WindowsPowerShell\v1.0\Modules
). - Modify the system environment so that
PSModulePath
variable already contains your custom module directory (e.g. via a group policy preference).
The latter will only become effective for PowerShell sessions started after the modification was made, though.
This profile applies to all users and all shells.
%windir%\system32\WindowsPowerShell\v1.0\profile.ps1
After taking the steps you spelled out in your question (which I think is the general way to go), I found two ways to get the new module source recognized by Powershell:
- Restart the machine. (Works every time.)
Reset the
PSModulePath
in each open session.$env:PSModulePath=[Environment]::GetEnvironmentVariable("PSModulePath", "Machine")
I found this was necessary to run in both normal and elevated prompts to get this to work without restarting in each type of prompt. (See also the conversation @ Topic: PSModulePath.)