about_Modules

TOPIC
	about_Modules

SHORT DESCRIPTION
	Explains how to install, import, and use Windows PowerShell modules.

LONG DESCRIPTION
	A module is a package that contains Windows PowerShell commands, such as
	cmdlets, providers, functions, variables, and aliases. 

	People who write commands can use modules to organize their commands and
	share them with others. People who receive modules can add the commands
	in the modules to their Windows PowerShell sessions and use them just like
	the built-in commands.

	This topic explains how to use Windows PowerShell modules. For information
	about how to write Windows PowerShell modules, see "Writing a Windows
	PowerShell Module" in the MSDN (Microsoft Developer Network) library
	at http://go.microsoft.com/fwlink/?LinkId=144916.


 HOW TO USE A MODULE
	To use a module, perform the following tasks:

		1. Install the module. (This is often done for you.)
		2. Import the module into your Windows PowerShell session.
		3. Find the commands that the module added.
		4. Use the commands that the module added.
	 
	This topic explains how to perform these tasks. It also includes 
	other useful information about managing modules.


 HOW TO INSTALL A MODULE
	If you receive a module as a folder with files in it, you need
	to install it on your computer before you can import it into Windows
	PowerShell.

	Most modules are installed for you. Windows PowerShell comes with
	several pre-installed modules. In Windows Server 2008 R2, the
	Add Features Wizard in Server Manager automatically installs the
	feature modules that you select. Many other modules come in an
	installer or Setup program that installs the module.

	To install a module folder:

		1. Create a Modules directory for the current user if one does
		 not exist. 

		 To create a Modules directory, type:

			 new-item -type directory -path $home\Documents\WindowsPowerShell\Modules							 

		2. Copy the entire module folder into the Modules directory.

		 You can use any method to copy the folder, including Windows
		 Explorer and Cmd.exe, as well as Windows PowerShell.

		 In Windows PowerShell use the Copy-Item cmdlet. For example, to copy the
		 MyModule folder from C:\ps-test\MyModule to the Modules directory, type:

			 copy-item -path c:\ps-test\MyModule -dest $home\Documents\WindowsPowerShell\Modules

	You can install a module in any location, but installing your modules in a
	default module location makes them easier to manage. For more information about
	the default module locations, see the "Module Locations and PSModulePath" section.



 HOW TO FIND INSTALLED MODULEs
	 When a module is installed, you can import it into your Windows
	 PowerShell session. 

	 To find modules that are installed in a default module location,
	 at the Windows PowerShell prompt, type:

		 get-module -listAvailable


	 To find the modules that have already been imported into your session, 
	 at the Windows PowerShell prompt, type:

		 get-module

	 For more information about the Get-Module cmdlet, see Get-Module.


 HOW TO IMPORT A MODULE
	To use the commands in a module, import the module into a
	Windows PowerShell session.

	To import modules from a default module location into the
	current session, use the following command format.

		import-module <module-name>

	For example, the following command imports the BitsTransfer module
	into the current session.

		import-module BitsTransfer
	 
 
	To import a module that is not in a default module location, use
	the fully qualified path to the module folder in the command. 

	For example, to add the TestCmdlets module in the C:\ps-test directory 
	to your session, type:

		import-module c:\ps-test\TestCmdlets


	For more information about adding modules to your session, see
	Import-Module.


 HOW TO IMPORT ALL MODULES INTO YOUR WINDOWS POWERSHELL SESSION
	In Windows 7 and Windows Server 2008 R2, the "Import all modules"
	task opens a Windows PowerShell session that includes all the
	available Windows PowerShell modules and snap-ins.

	To start a Windows PowerShell session with all the available Windows
	PowerShell modules and snap-ins, use the following procedure.

	-- Right-click the Windows PowerShell icon in the taskbar, and then click
	 "Import all modules".

	Note: In Windows Server 2008 R2, the Windows PowerShell icon is pinned to
		the taskbar by default. However, you must start Windows PowerShell
		one time to make the "Import all modules" task appear.

	In other versions of Windows, to import all the available modules into your
	session, at the Windows PowerShell prompt, type:

		get-module -listAvailable | import-module


 HOW TO FIND THE COMMANDS IN A MODULE
	After you import a module into your Windows PowerShell session, you can
	use the commands in the module.

	To find the commands that a module added, at the Windows PowerShell prompt,
	type:

		get-command -module <module-name>

	For example, to find the commands that the BitsTransfer module adds, type:

		get-command -module BitsTransfer

	For more information about the Get-Command cmdlet, see Get-Command.


 HOW TO FIND HELP FOR THE COMMANDS IN A MODULE
	If the module contains Help topics for the commands that it exports,
	the Get-Help cmdlet will display the Help topics. Use the same command
	format that you would use for any Help topic in Windows PowerShell. 

	To find the Help topic for the commands in a module, at the Windows
	PowerShell prompt, type:

		get-help <command-name> 

	For more detailed Help, type:

		get-help <command-name> -detailed

	For example, to find detailed Help for the Start-BitsTransfer cmdlet,
	type:
	 
		get-help Start-BitsTransfer -detailed

	For more information about the Get-Help module, see Get-Help.


 HOW TO REMOVE A MODULE
	When you remove a module, the commands that the module added are deleted 
	from the session. 

	To remove a module from your session, use the following command
	format.

		remove-module <module-name>

	For example, the following command removes the BitsTransfer module
	from the current session.

		remove-module BitsTransfer

	Removing a module reverses the operation of importing a module. Removing
	a module does not uninstall the module. For more information about the 
	Remove-Module cmdlet, see Remove-Module.


 HOW TO IMPORT A MODULE INTO EVERY SESSION
	The Import-Module command imports modules into your current Windows
	PowerShell session. This command affects only the current session.

	To import a module into every Windows PowerShell session that you
	start, add the Import-Module command to your Windows PowerShell 
	profile.

	For more information about profiles, see about_Profiles.

  
 MODULE LOCATIONS AND PSMODULEPATH
	There are two default locations for Windows PowerShell modules, one for
	the system and one for the current user.

		System:		$pshome\Modules 
						 (%windir%\System32\WindowsPowerShell\v1.0\Modules)

		Current user:  $home\Documents\WindowsPowerShell\Modules
						 (%UserProfile%\Documents\WindowsPowerShell\Modules)

					 - or -

					 $home\My Documents\WindowsPowerShell\Modules
						 (%UserProfile%\My Documents\WindowsPowerShell\Modules)



		Note: In Windows Vista, Windows Server 2008, and later versions of 
			Windows, to add or change files in the %Windir%\System32 directory,
			start Windows PowerShell with the "Run as administrator" option.


	You can change the default module locations on your system by changing the
	value of the PSModulePath environment variable ($env:psmodulepath). The
	PSModulePath environment variable is modeled on the Path environment variable
	and has the same format. 
 

	To view the default module locations, type:

		$env:psmodulepath


	To add a default module location, use the following command format.

		$env:psmodulepath = $env:psmodulepath + ";<path>"


	The semi-colon (;) in the command separates the new path from the
	path that precedes it in the list.


	For example, to add the "C:\ps-test\Modules" directory, type:

		$env:psmodulepath + ";c:\ps-test\Modules"


	When you add a path to PSModulePath, Get-Module and Import-Module 
	commands include modules in that path.
	 
	The value that you set affects only the current session. To make the 
	change persistent, add the command to your Windows PowerShell profile
	or use the System item in Control Panel to change the value of the 
	PSModulePath environment variable in the registry.

	For more information about the PSModulePath variable, see 
	about_Environment_Variables.


 MODULES AND NAME CONFLICTS
	Name conflicts occur when more than one command in the session
	has the same name. Importing a module causes a name conflict when
	commands in the module have the same names as commands or items
	in the session. 

	Name conflicts can result in commands being hidden or replaced.

		-- Hidden. A command is hidden when it is not the command
		 that runs when you type the command name, but you can run it
		 by using another method, such as by qualifying the command
		 name with the name of the module or snap-in in which it
		 originated.

		-- Replaced. A command is replaced when you cannot run it because
		 it has been overwritten by a command with the same name. Even
		 when you remove the module that caused the conflict, you cannot
		 run a replaced command unless you restart the session.

	Import-Module might add commands that hide and replace commands in the
	current session. Also, commands in your session can hide commands that
	the module added. 

	To prevent name conflicts, use the Prefix parameter of Import-Command
	to create unique names for the imported commands.

	You can also use the Alias, Cmdlet, Function, and Variable parameters
	of Import-Module to select only the commands that you want to import,
	and you can exclude commands that cause name conflicts in your session.

	Even if a command is hidden, you can run it by qualifying the command
	name with the name of the module or snap-in in which it originated. 
		 
	The Windows PowerShell command precedence rules determine which command
	runs when the session includes commands with the same name.

	For example, when a session includes a function and a cmdlet with the same
	name, Windows PowerShell runs the function by default. When the session
	includes commands of the same type with the same name, such as two cmdlets
	with the same name, by default, it runs the most recently added command. 

	For more information, including an explanation of the precedence rules and
	instructions for running hidden commands, see about_Command_Precedence.
	 
	 
	 
 MODULES AND SNAP-INS
	You can add commands to your session from modules and snap-ins. Modules
	can add all types of commands, including cmdlets, providers, and functions,
	and items, such as variables, aliases, and Windows PowerShell drives. 
	Snap-ins can add only cmdlets and providers.

	In fact, although you can add functions, aliases, variables, and drives
	to your session by typing them or running a script that adds them, all
	the cmdlets and providers in your session come from a module or a snap-in.

	Before removing a module or snap-in from your session, use the following
	commands to determine which commands will be removed. 

	To find the source of a cmdlet in your session, use the following command
	format:

		get-command <cmdlet-name> | format-list -property verb, noun, pssnapin, module

	For example, to find the source of the Get-Date cmdlet, type:

		get-command get-date | format-list -property verb, noun, pssnapin, module

	For more information about Windows PowerShell snap-ins, see about_PSSnapins.


SEE ALSO
	about_Command_Precedence
	about_PSSnapins
	Get-Command
	Get-Help
	Get-Module
	Import-Module
	Remove-Module