Share via


Use Powershell to add virtual machines to Virtual Server

Back to a topic that I know I won't get dinged on.  :)

I was playing arround with the list of available COM ProgID's by using the command in Jeffrey Snover's blog: https://blogs.msdn.com/powershell/archive/2006/06/29/650913.aspx

I ran this command to see the available Program ID's:

dir REGISTRY::HKEY_CLASSES_ROOT\CLSID -include PROGID -recurse | foreach {$_.GetValue("")} | out-file progids.txt

After looking through the file I noticed a very interesting ID called VirtualServer.Application. That sounded promising so I quickly ran the command:

$vs = new-object -com "VirtualServer.Application"

I then ran the command $vs to see what I could see...Well the command turned up a bunch of blank properties. So I thought I might have to do some more digging so I did a quick Live Search on VirtualServer.Application and came up with two great blog entries for managing Virtual Server with Powershell:

https://blogs.msdn.com/virtual_pc_guy/archive/2006/06/13/630165.aspx

https://blogs.msdn.com/virtual_pc_guy/archive/2006/06/15/631857.aspx

After creating my COM wrapper and setting my security as described in the Virtual PC Guy's blog entries, I tried my $vs command again and low and behold I had some actual properties.

At this point I wanted to see what I could do with that object so I typed the following command:

$vs | get-member

I quickly noticed a method called RegisterVirtualMachines.  That sounded promising.  I often download gigabytes of virtual machines to play with new technology and it is a royal pain to use the Virtual Server Administration Website to register all of those virtual machines.  So I did another Live Search to see what the parameters were for the RegisterVirtualMachines method and found this reference: https://msdn.microsoft.com/library/default.asp?url=/library/en-us/msvs/msvs/ivmvirtualserver_createvirtualmachine.asp

As you can see there are only two required parameters, the name of the VMC file and the path to the VMC file like this RegisterVirtualMachines("Testmachine.vmc","c:\vms\")

Now I was getting somewhere!  I went ahead and went for the gold and tried this command:

dir . -include *.vmc -Recurse | foreach-object {$vs.RegisterVirtualMachine($_.name,$_.directoryname)}

Boom!  All of my virtual machine's were now registered inside of Virtual Server! 

As you can see with a little bit of research you can take advantage of any COM progID and in a short amount of time start to use it to solve problems.

Comments

  • Anonymous
    July 09, 2006
    Tim - this is exactly the sort of explore/discover/test/solve/communicate loop that we hoped Windows PowerShell would enable.  Thanks for the Post

    Jeffrey Snover [MSFT]
    Windows PowerShell Architect
    Visit the Windows PowerShell Team blog at:    http://blogs.msdn.com/PowerShell
    Visit the Windows PowerShell ScriptCenter at:  http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx


    PSMDTAG:TYPE:COM:  virtualServer.Application

    PSMDTAG:FAQ: How do I register all my .VMC files a virtual Machines?

    PSMDTAG:PHILOSOPHY: Great example of the explore/discover/test/solve/communicate loop for registring Virtual Machines.