Lesson learned from the presentation “How to Position Yourself for the Future” with Jeffrey Snover and Jason Helmick (from the Q&A session at 1:01:17): you can add a prefix to the commands of a module when you import it!
Here is the full video:
In the Q&A session a guy from audience mentions that a PowerShell module (presumably PowerCLI from VMWware) breaks other PowerShell commands as there are Cmdlets/functions named like core or other modules Cmdlets.
So if you import the PowerCLI module it will provide you with the command
Get-VM, which is a good idea if you want to manage virtual machines on vSphere, but nowadays you might also have a Hyper-V server you want to manage from that very same computer (maybe using RSAT) which also has the Cmdlet
Get-VM. So now it is no longer possible to manage virtual machines on the Hyper-V servers (at least to run the Cmldet
Get-VM against Hyper-V) unless you remove the PowerCLI module from that PowerShell instance (or specify explicitly that the command should be the one from the Hyper-V module).
It is not very likely that VMWare will change their commands anytime soon to not overwrite/conflict with other Cmdlets/functions. So what could you possible do manage both hypervisors within one script?
You can import the module which breaks your code with the parameter
Let’s see how this works. For demo purpose I will use the BitsTransfer module.
So importing the module “as usual” and getting the available commands gives you just what you expect.
But importing it with a prefix will add this very prefix to every command (after the
verb-) of that module.
Very cool feature I did not yet know about.