Windows PowerShell is a fully extensible environment. Anyone can write commands for Windows PowerShell. You can use commands that others write and share the commands that you write with others.
Commands are shared by using modules and snap-ins. Windows PowerShell modules and snap-ins are packages that contain Windows PowerShell commands and other items. All cmdlets and providers in Windows PowerShell are delivered in snap-ins or modules, and modules can also contain functions, aliases, variables, and drives.
Some snap-ins and modules are added automatically to every Windows PowerShell session. If you receive a snap-in or module, you can install it and add the commands to your Windows PowerShell sessions. To share the commands that you write, you can create a Windows PowerShell module or snap-in.
A module is a package of commands and other items that you can use in Windows PowerShell. After you run the setup program or save the module to disk, you can import the module into your Windows PowerShell session and use the commands and items. You can also use modules to organize the cmdlets, providers, functions, aliases, and other commands that you create, and share them with others.
A Windows PowerShell snap-in (PSSnapin) is a dynamic link library (.dll) that implements cmdlets and providers. When you receive a snap-in, you need to install it, and then you can add the cmdlets and providers in the snap-in to your Windows PowerShell session.
For more information visit http://msdn.microsoft.com/en-us/library/windows/desktop/dd745031(v=vs.85).aspx