mark
mark

Reputation: 62886

What is the difference between Get-InstalledModule and Get-Module -ListAvailable?

As far as I can tell they do the same, so what is the reason to use one over the other?

(Sorry, SO question rule engine - have no idea what else to say)

Upvotes: 9

Views: 9383

Answers (3)

mark
mark

Reputation: 62886

Please, observe:

 C:\> (Get-InstalledModule xyz.ps.core).RepositorySourceLocation
http://devstatic.xyz.com/prdnuget/nuget
 C:\> (Get-Module xyz.ps.core -ListAvailable).RepositorySourceLocation.AbsoluteUri
http://devstatic.xyz.com/prdnuget/nuget
file:///C:/Users/mkharitonov/LocalTestPSRepository

The module xyz.ps.core was installed both times using Install-Module. Only once it was installed from a local repository and the other time - from a remote NuGet repository.

In both cases the module is installed into the system location, i.e. it is in PSModulePath. What does matter, apparently, is whether it was downloaded from a remote location.

I wish Microsoft documentation explained it and provided a rationale for having this method.

Upvotes: 4

Asim Fakhi
Asim Fakhi

Reputation: 51

Get-InstalledModule will list installed modules using Install-Module and which are not naively installed. However Get-Module -ListAvailable shows modules from all locations mentioned in $env:PsModulePath location.

See below Snip for reference :

*PS C:\Users\xyz> Get-InstalledModule
 `PS C:\Users\xyz> Get-Module -ListAvailable
Directory: C:\Program Files\WindowsPowerShell\Modules

ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Script 1.0.1 Microsoft.PowerShell.Operation.V... {Get-OperationValidation, Invoke-OperationValidation}
Binary 1.0.0.1 PackageManagement {Find-Package, Get-Package, Get-PackageProvider, Get-Pac... Script 3.4.0 Pester {Describe, Context, It, Should...}
Script 1.0.0.1 PowerShellGet {Install-Module, Find-Module, Save-Module, Update-Module... Script 2.0.0 PSReadline {Get-PSReadLineKeyHandler, Set-PSReadLineKeyHandler, Rem... Directory: C:\Windows\system32\WindowsPowerShell\v1.0\Modules ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Manifest 1.0.0.0 AppBackgroundTask {Disable-AppBackgroundTaskDiagnosticLog, Enable-AppBackg...*`


However if the module is not installed both will throw same exception. PS C:\Users\Asim> $Error.Exception.Message[-1] Unable to find type [Microsoft.PowerShell.Commands.PowerShellGet.Telemetry] .

Upvotes: 2

Prasoon Karunan V
Prasoon Karunan V

Reputation: 3063

Get-InstalledModule is part of PowerShellGet and will list installed modules using Install-Module cmdlet, But Get-Module -ListAvailable shows modules from all locations mentioned in $env:PsModulePath location.

Upvotes: 9

Related Questions