Using SCVMM 2012 Cmdlets in PowerShell

SCVMM Cmdlets allow SCVMM admin/users to do everything they can do in SCVMM AdminConsole in windows PowerShell command line. In SCVMM 2008 R2, you can run following command in PowerShell to run SCVMM cmdlets.

Add-PSSnapin Microsoft.SystemCenter.VirtualMachineManager

But this does not work in SCVMM 2012 as SCVMM 2012 uses PowerShell module. For SCVMM 2012 now you need run following in PowerShell instead

Import-Module "C:\Program Files\Microsoft System Center 2012\Virtual Machine Manager\bin\psModules\virtualmachinemanager\virtualmachinemanager"

(This assumes that you have SCVMM 2012 installed on the default location C:\Program Files\Microsoft System Center 2012 )

The PowerShell cmdlets in SCVMM 2012 change a lot in SCVMM 2012, you can get a list of all SCVMM 2012 cmdlets by typing the following at the PowerShell command shell prompt

Get-Command -Module virtualmachinemanager -Type cmdlet

And you can run Get-Help on any of the cmdlets to get the syntax for that cmdlet.

Get-Help <cmdlet name> -detailed

Update: Microsoft has published the SCVMM 2012 cmdlets help to TechNet, check it out http://technet.microsoft.com/en-us/library/hh801697.aspx

Improve VM deploy performance in SCVMM

SCVMM use BITS over https to deploy virtual machine to host server. To improve the performance of virtual machine deploy, you can disable encrypted file transfers for Host Group.

  1. Open Virtual Machine Manager Administrator Console (aka SCVMM Console) on the Application Tier and connect to VMM Server
  2. Click Host on the left side pane.
  3. Right Click on All Host node, and select Properties.
  4. Select the check-box “Allow unencrypted file transfers”

Note: if you use library server, you should set Allow unencrypted file transfers for every library servers.

image

The same can be done in following SCVMM PowerShell command

Set-VMHostGroup -VMHostGroup “All Hosts” -AllowUnencryptedTransfers $true

Could not load file or assembly TraceWrapper, Version=1.0.523.0

There are two versions of the TraceWrapper.dll in SCVMM install CD. One is x86 version and the other is x64 version. When you build your application on top of SCVMM library Microsoft.SystemCenter.VirtualMachineManager, it’s very important to pick up the correct version TraceWrapper.dll. In general, you should copy the 32 bit dll if you are using 32 bit system, copy 64 bit dll if you are using 64 bit system. Otherwise following BadImageFormatException would occur during runtime.

Could not load file or assembly ‘TraceWrapper, Version=1.0.523.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35′ or one of its dependencies. An attempt was made to load a program with an incorrect format.

However, you should keep using 32 bit TraceWrapper on a 64 bit system for following scenarios:

  • You need debug your app in Visual Studio directly. In this case, process launched from Visual Studio debugger runs in WOW64 mode.
  • IIS is configured to run in 32 bit mode. In this case, all working processes run in WOW64 mode.

This is because in 64 bit windows, processes in WOW64 mode are 32 bit processes and can’t load 64 bit TraceWrapper.dll.