(Download link below!)
If you set up a MS Learning Classroom with Hyper-V and the images provided by MS at the MCT download page you need to deploy the VHD files (and the other VM files of course) to “C:ProgrammeMicrosoft Learning<…>”
The last days I set up a new Hyper-V server at my office:
- 128GB SSD => system
- 2TB HDD => machines
- 32GB RAM
I want to store the MS Learning machines on “D:” (=> 2TB).
The MS Learning machines have differential VHDs that are based on a couple of “Base VHDs”. In all differential VHD files there are references to the location of the original file:
Furthermore there are to files for every machine that contain config and export/import informations. This files have absolute file location references too.
Because this MS Learning machines are not productive Hyper-V machines I decided to manipulate a neseccary files to be able to store the machines on another drive. Manipulating this files is not supported!!!
My package contains 4 PowerShell scripts:
1. “Unpack”
This script allows you to decompress all compressed MS Learning machines in a folder to a destination folder.
To run the script you need to have “unrar.exe” in the same directory as the script. Download and execute this file ftp://ftp.rarlab.com/rar/unrarw32.exe. This is an self extracting archive that contains “unrar.exe”.
You only need to manipulate the “$list” variable: specify all source directories and destination directories you need to extract.
In my case this is the result:
2. “Patch”
This script manipulates all neseccary files.
You need to have them all in a dedicated directory. In my case everything is located under “I:Learning”. This directory is the entry point for the other scripts. In this directory all base and differential VHDs must be located.
“Patch” modifies:
- config.xml => replace VHD paths
- <machine-guid>.exp => replace VHD paths
- <name>.vhd / <name>.avhd => replace VHD paths
First the “Patch” script scans the root path (e.g. “I:Learning”) and all sub directories. It saves all VHD file names.
The next steps are to open the files specified above and replace all VHD paths (“c:program files…”) with the correct paths (“I:Learning…”).
For “config.xml” und “<machine-guid>.exp” the script creates backup files with the same name and additional “.bak” extension. If you run the script twice the backup will be restored before processing.
For “<machine-guid>.exp” another file will be creates: “<machine-guid>.exp.ik”. This file is used later for patching the virtual machine in Hyper-V.
3. “ImportVMs”
This script imports the MS Learning Machines to Hyper-V using WMI (see http://social.technet.microsoft.com/Forums/en-US/winserverClustering/thread/a4e0d12d-534c-41f6-8038-4e8a7dbbba15).
It imports every machine found in the sub directories of the given machine root: “I:Learning”
4. “mountVHDs”
You maybe need to mount the VHDs after importing.
This is a part of the “Classroom Setup Guide” for one training:
In my case this happens for all machines!!! – In case of course no. “10174” (SharePoint Config and Admin) you would have to pathc 15 machines with about 20 VHD files. You would have to repeat mounting the VHDs on every classroom machine!!! – NO WAY!
While importing the machines you get this event log entries in the Hyper-V VMMS/Admin event log:
- Import task failed to fix up connection information for connection ‘I:Learning10174Drives10174A-SP2010-WFE1-FINALVirtual Hard Disks10174A-SP2010-WFE1-FINAL.vhd’. (Event Id 18430)
- Import task failed to fix up connection information for connection ‘I:Learning10174Drives10174A-SP2010-WFE1-FINALVirtual Hard Disks10174A-SP2010-WFE1-Allfiles-diff.vhd’. (Event Id 18430)
- ‘10174A-SP2010-WFE1-FINAL’: The file name ” is invalid. You cannot use the following names (LPTn, COMn, PRN, AUX, NUL, CON) because they are reserved by Windows. (Virtual machine ID FE26F0D1-B18C-440D-8CB6-792DBB6E1A5B) (Event Id 12634)
- ‘10174A-SP2010-WFE1-FINAL’ failed to add device ‘Microsoft Virtual Hard Disk’. (Virtual machine ID FE26F0D1-B18C-440D-8CB6-792DBB6E1A5B) (Event Id 14140)
- Failed to import correctly the device ‘{ResourceType=21, OtherResourceType="<null>", ResourceSubType="Microsoft Virtual Hard Disk"}’ for ‘10174A-SP2010-WFE1-FINAL’ (Virtual machine ID FE26F0D1-B18C-440D-8CB6-792DBB6E1A5B). Error: Invalid parameter (0x80041008) . (Event Id 18130)
- Import completed with warnings. Please check the Admin events in the Hyper-V-VMMS event log for more information. (Event Id 18250)
(This are examples! The paths and names will vary!)
The script “MountVHDs” will modify all machines in Hyper-V. ALL machines!! Be very carefull!! Again: Don’t use the scripts in a production environment!!!
To execute this script you need to install the PowerShell Hyper-V module: http://pshyperv.codeplex.com/
The script opens every machine. Than it searches in the MS Learning Root (“i:learning”) for the file “<machine-guid>.exp.ik”. If there is such a file the script modifies the virtual machine and mounts the VHDs as configured in the “EXP.IK” file.
For me it works perfectly! – Now I can set up my classroom server in few minutes!
Here you can download the scripts: http://pscst.codeplex.com – Please feel free to improve them – and to send me your improvements!!!