So you want to use passthough disks with Hyper-V cool – but how do you script attaching them? Well here’s your answer… But first you need to decide if you are going to attach them to the virtual IDE controller or the virtual SCSI controller. The IDE controller is ideal if you plan to boot from the passthough disk or if your guest doesn’t support the virtual SCSI adapter (Linux), the SCSI controller is ideal if you want to add/remove storage from the virtual machine while it’s running (feature of Hyper-V R2) or if you have more than 4 disks you want to add. Attaching to SCSI or IDE is pretty similar – there are really only 1 difference I bolded it on both scripts below you just have to select the correct controller. Other than that you can either use the physical disk number for disk manager (not too bad) or if you provide a LUN ID when you create the storage (in the case of a SAN) you can use that which can be a bit more deterministic. Either way enjoy!
Attaching Passthrough Disk To IDE Controller
| $HyperVGuest = "Passthough Demo"
$VMManagementService = Get-WmiObject -class "Msvm_VirtualSystemManagementService" -namespace "root\virtualization" $Vm = Get-WmiObject -Namespace "root\virtualization" -Query "Select * From Msvm_ComputerSystem Where ElementName='$HyperVGuest'" $VMSettingData = Get-WmiObject -Namespace "root\virtualization" -Query "Associators of {$Vm} Where ResultClass=Msvm_VirtualSystemSettingData AssocClass=Msvm_SettingsDefineState"
$VmIdeController = (Get-WmiObject -Namespace "root\virtualization" -Query "Associators of {$VMSettingData} Where ResultClass=Msvm_ResourceAllocationSettingData AssocClass=Msvm_VirtualSystemSettingDataComponent" |` where-object {$_.ResourceSubType -eq "Microsoft Emulated IDE Controller" -and $_.Address -eq 0}) $DiskAllocationSetting = Get-WmiObject -Namespace "root\virtualization" -Query "SELECT * FROM Msvm_AllocationCapabilities WHERE ResourceSubType = 'Microsoft Physical Disk Drive'" $DefaultHardDisk = (Get-WmiObject -Namespace "root\virtualization" -Query "Associators of {$DiskAllocationSetting} Where ResultClass=Msvm_ResourceAllocationSettingData AssocClass=Msvm_SettingsDefineCapabilities" | ` where-object {$_.InstanceID -like "*Default"}) $Disk = Get-WmiObject -Namespace "root\virtualization" -Query "select * from Msvm_DiskDrive Where DriveNumber=2" #$Disk = Get-WmiObject -Namespace "root\virtualization" -Query "select * from Msvm_DiskDrive Where ElementName Like '%Lun 200%'" $DefaultHardDisk.Parent = $VmIdeController.__Path $DefaultHardDisk.Address = 0 $DefaultHardDisk.HostResource = $Disk.__PATH $VMManagementService.AddVirtualSystemResources($VM, $DefaultHardDisk.PSBase.GetText(1)) | ProcessWMIJob $VMManagementService "AddVirtualSystemResources" |
Attaching Passthrough Disk To SCSI Controller
| $HyperVGuest = "Passthough Demo" $VMManagementService = Get-WmiObject -class "Msvm_VirtualSystemManagementService" -namespace "root\virtualization" $Vm = Get-WmiObject -Namespace "root\virtualization" -Query "Select * From Msvm_ComputerSystem Where ElementName='$HyperVGuest'" $VMSettingData = Get-WmiObject -Namespace "root\virtualization" -Query "Associators of {$Vm} Where ResultClass=Msvm_VirtualSystemSettingData AssocClass=Msvm_SettingsDefineState" $VmScsiController = (Get-WmiObject -Namespace "root\virtualization" -Query "Associators of {$VMSettingData} Where ResultClass=Msvm_ResourceAllocationSettingData AssocClass=Msvm_VirtualSystemSettingDataComponent" | ` where-object {$_.ElementName -eq "SCSI Controller"}) $DiskAllocationSetting = Get-WmiObject -Namespace "root\virtualization" -Query "SELECT * FROM Msvm_AllocationCapabilities WHERE ResourceSubType = 'Microsoft Physical Disk Drive'"
$DefaultHardDisk = (Get-WmiObject -Namespace "root\virtualization" -Query "Associators of {$DiskAllocationSetting} Where ResultClass=Msvm_ResourceAllocationSettingData AssocClass=Msvm_SettingsDefineCapabilities" | ` where-object {$_.InstanceID -like "*Default"}) $Disk = Get-WmiObject -Namespace "root\virtualization" -Query "select * from Msvm_DiskDrive Where DriveNumber=2"
#$Disk = Get-WmiObject -Namespace "root\virtualization" -Query "select * from Msvm_DiskDrive Where ElementName Like '%Lun 200%'" $DefaultHardDisk.Parent = $VmScsiController.__Path
$DefaultHardDisk.Address = 0 $DefaultHardDisk.HostResource = $Disk.__PATH $VMManagementService.AddVirtualSystemResources($VM, $DefaultHardDisk.PSBase.GetText(1)) | ProcessWMIJob $VMManagementService "AddVirtualSystemResources" |
Taylor Brown
Hyper-V Integration Test Lead
http://blogs.msdn.com/taylorb

If your running System Center Virtual Machine Manager (SCVMM) you should take a look at KB 962941. The KB describes and links to all of the recommended Windows hotfixes, SCVMM hotfixes and Hyper-V server hotfixes that are important for SCVMM functionality.
KB Article Link: http://support.microsoft.com/kb/962941
Taylor Brown
Hyper-V Integration Test Lead
http://blogs.msdn.com/taylorb

I think it might be best to start at ground zero with this topic and explain what a snapshot really is and how it work’s (if you already know skip a head…). Hyper-V introduced a new feature called a snapshot – snapshots allow you to capture and save the point in time state of a running or saved virtual machine and then go back to that state at a latter point in time. For example you can have a Windows XP RTM virtual machine running take a snapshot, install SP1, take a snapshot and install SP2 and then latter revert back to the SP1 snapshot and either discard the SP2 installation or keep it around so you can apply that state latter. Snapshot’s are pretty handing in this regard – you can create pretty extensive tree’s of snapshots and you can rapidly apply specific states to virtual machines. Under the covers snapshots primarily use a technology that was implemented back in the pre-Microsoft days of Virtual PC called differencing VHD’s. What a differencing VHD effectively does is point back to a parent VHD for it’s data but any updates made to the VHD reside in the new differencing VHD and subsequent requests for that same data will be overridden by the child differencing VHD. These parent child relationships can get many levels deep and a parent can have many children – however if a parent is ever modified it’s children's state is now invalid since the child was unaware of the changes. So back to snapshots – when a snapshot is taken we create a new differencing disk to point the virtual machine to and we call it an AVHD or automatic VHD since it was created automatically by requesting the snapshot – at the same time we will save off the virtual machines running state if it’s running including it’s memory state and it’s device state (network adapter IP etc…). When you revert back to a previous snapshot you reload the memory and device state and the VM is pointed at a new AVHD from the parent of that time. And that’s snapshots in a nut shell…
OK now back to topic at hand – when you delete a snapshot the next time the virtual machine is off or saved we will merge the AVHD created by the snapshot back into it’s respective parent… We do this automatically and in the background – so lets say you wanted to know when it’s was done programmatically… It’s not too hard just run the following query to see if any merges are going on presently - PS C:\> Get-WmiObject -Namespace "root\virtualization" -Query "select * from Msvm_ConcreteJob" | Where {$_.ElementName - eq 'Merge in Progress'}. Below you can see the full output of that query when a merge is occurring. Hope this helps!
| PS C:\> Get-WmiObject -Namespace "root\virtualization" -Query "select * from Msvm_ConcreteJob" | Where {$_.ElementName -eq 'Merge in Progress'} __GENUS : 2 __CLASS : Msvm_ConcreteJob __SUPERCLASS : CIM_ConcreteJob __DYNASTY : CIM_ManagedElement __RELPATH : Msvm_ConcreteJob.InstanceID="E3675DEB-A13C-440D-AEAD-B6CEB5ADF1D7" __PROPERTY_COUNT : 36 __DERIVATION : {CIM_ConcreteJob, CIM_Job, CIM_LogicalElement, CIM_ManagedSystemElement...} __SERVER : TAYLORB __NAMESPACE : root\virtualization __PATH : \\TAYLORB\root\virtualization:Msvm_ConcreteJob.InstanceID="E3675DEB-A13C-440D-AEAD-B6CEB5ADF1D7" Cancellable : True Caption : Merge in Progress DeleteOnCompletion : False Description : Merge in Progress ElapsedTime : 00000000000000.000000:000 ElementName : Merge in Progress ErrorCode : 0 ErrorDescription : ErrorSummaryDescription : HealthState : 0 InstallDate : 16010101000000.000000-000 InstanceID : E3675DEB-A13C-440D-AEAD-B6CEB5ADF1D7 JobRunTimes : 1 JobState : 4 JobStatus : LocalOrUtcTime : 2 Name : Merge in Progress Notify : OperationalStatus : {0, 0, 0} OtherRecoveryAction : Owner : PercentComplete : 13 <----Percent Complete Priority : 0 RecoveryAction : 0 RunDay : 0 RunDayOfWeek : 0 RunMonth : 0 RunStartInterval : 00000000000000.000000:000 ScheduledStartTime : 16010101000000.000000-000 StartTime : 16010101000000.000000-000 Status : StatusDescriptions : {, , } TimeBeforeRemoval : 00000000000500.000000:000 TimeOfLastStateChange : 20090309234922.000000-000 TimeSubmitted : 16010101000000.000000-000 UntilTime : 16010101000000.000000-000 |
Taylor Brown
Hyper-V Integration Test Lead
http://blogs.msdn.com/taylorb

Virtualization Review posted the results of a performance shootout between Microsoft Hyper-V, VMware ESX, and Citrix XenServer… The launched three tests against the various platforms. First was a small number of heavy workload systems, one database server running a midsize database and six VMs with heavy workload of CPU and memory. Second - was a large number of heavy workload systems, with one database server running a midsize database and twelve VMs with heavy workload of CPU, memory and disk IO. Third – was a large number of light workload systems, with one database server running a midsize database and twelve VMs running a light CPU, memory and disk IO.
Take a look at the full article – it has a bunch of raw performance data and is definitely worth at least a quick read. Full Article: http://virtualizationreview.com/features/article.aspx?editorialsid=2641
Quotes:
”Hyper-V was the first product compared, and it performed quite differently from expectations. Hyper-V has been a focus of Microsoft dev efforts, and it shows. Overall, Hyper-V did well in this comparison and proved itself a worthy product.”
“In our tests, Hyper-V did well in all categories-it's a real, viable competitor for the competition. Table 2 shows Hyper-V's comparative performance.”
“After doing these comparisons of ESX to Hyper-V and XenServer, it's clear that at the hypervisor level, ESX is optimized for a large number of less-intensive workload VMs. For intensive workloads that may not be optimized for memory overcommit apps, Hyper-V and XenServer should definitely be considered-even if that means adding another hypervisor into the data center.”
Taylor Brown
Hyper-V Integration Test Lead
http://blogs.msdn.com/taylorb

In the coming days/weeks some of you may see some new errors from Hyper-V. The first is an error when you try and use VMConnect or SCVMM to connect to a running virtual machine – the error is “Cannot connect to the virtual machine because the authentication certificate is expired or invalid. Would you like to try connecting again?”. The second is an error when trying to start or resume saved virtual machine – the error is “'VMName' failed to initialize. Could not initialize machine remoting system. Error: ‘Unspecified error’ (0x80004005). Could not find a usable certificate. Error: ‘Unspecified error’ (0x80004005).”
This issue is fully described in KB967902 as well as a link to the HotFix. Bryon Surace also posted this on the Windows Server Blog.
Taylor Brown
Hyper-V Integration Test Lead
http://blogs.msdn.com/taylorb

Updated 2/23 – Added VHD File Size and Fixed a Few Bugs.
This is a follow up on my previous post on Hyper-V WMI: What VHD’s/Physical Disks Are Associated With a Virtual Machine?. I had been getting questions about how to better identify what disks are connected to what bus location/controller. Specifically I have been getting a lot of questions about how back up or copy just the VHD that the guest sees as drive letter C or D etc… I wrote a revised script that gives a bit more information specifically the controller addresses and the Instance ID of the controller. The reason that’s interesting is that you can determine that the C volume is on Disk Number 1 and that Disk Number 1 is connected to IDE Port 0/1 and on the parent you know that IDE Port 0/1 is backed by S:\vhds\foo.vhd well then you know what to backup… So what about SCSI controller’s? Well they are a bit more challenging but not to much – if you look at the PNP ID of the controller its VMBUS\<GUID> where the GUID is the same as the first GUID in the WMI instance id for the controller on the management OS (take a look at the screen capture below). Hopefully this is helpful – Enjoy!
Here’s the Script:
$HyperVParent = "localhost" $VMManagementService = Get-WmiObject -class "Msvm_VirtualSystemManagementService" -namespace "root\virtualization" -ComputerName $HyperVParent
foreach ($vm in Get-WmiObject -Namespace root\virtualization -Query "Select * From Msvm_ComputerSystem where Description='Microsoft Virtual Machine'" -ComputerName $HyperVParent) { $VMSettingData = Get-WmiObject -Namespace "root\virtualization" -Query "Associators of {$Vm} Where ResultClass=Msvm_VirtualSystemSettingData AssocClass=Msvm_SettingsDefineState" -ComputerName $HyperVParent $VirtualDiskResource = Get-WmiObject -Namespace "root\virtualization" ` -Query "Associators of {$VMSettingData} Where ResultClass=Msvm_ResourceAllocationSettingData AssocClass=Msvm_VirtualSystemSettingDataComponent" ` -ComputerName $HyperVParent | Where-Object { $_.ResourceSubType -match "Microsoft Virtual Hard Disk" } $PhysicalDiskResource = Get-WmiObject -Namespace "root\virtualization" ` -Query "Associators of {$VMSettingData} Where ResultClass=Msvm_ResourceAllocationSettingData AssocClass=Msvm_VirtualSystemSettingDataComponent" ` -ComputerName $HyperVParent | Where-Object { $_.ResourceSubType -match "Microsoft Physical Disk Drive" } if ($VirtualDiskResource -ne $null) { Write-Host "VHD Connections: " foreach ($i in $VirtualDiskResource) { Write-Host " Virtual Hard Disk At: " ([WMI]$i).Connection[0] Write-Host " Virtual Hard Disk VHD Size: " (get-item ([WMI]$i).Connection[0]).Length Write-Host " Virtual Hard Disk Connected To: " ([WMI]([WMI]$i.Parent).Parent).ElementName Write-Host " Controller Index: " ([WMI]([WMI]$i.Parent).Parent).Address Write-Host " Controller Instance ID: " ([WMI]([WMI]$i.Parent).Parent).InstanceID Write-Host " Disk Location On Controller: " ([WMI]$i.Parent).Address Write-Host } } if ($PhysicalDiskResource -ne $null) { Write-Host "Physical Disk Connections: " foreach ($i in $PhysicalDiskResource) { Write-Host " Passthrough Disk At:" ([WMI]$i.HostResource[0]).ElementName Write-Host " Passthrough Disk Drive Number: " ([WMI]$i.HostResource[0]).DriveNumber Write-Host " Virtual Hard Disk Connected To: " ([WMI]$i.Parent).ElementName Write-Host " Controller Index: " ([WMI]$i.Parent).Address Write-Host " Controller Instance ID: " ([WMI]$i.Parent).InstanceID Write-Host " Disk Location On Controller: " ([WMI]$i).Address Write-Host } } }
|
Here’s the Output of the Script:
|
PS D:\> .\DiskAttachment2.ps1
VHD Connections:
Virtual Hard Disk At: C:\Users\Public\Documents\Hyper-V\Virtual hard disks\SERVER2008-ENT-64-6001.18000.080118-1840_amd64fre_ServerEnterprise_en-us_VL.vhd
Virtual Hard Disk Connected To: IDE Controller 0
Controller Index: 0
Controller Instance ID: Microsoft:4DA5F246-7501-49B3-AE41-B1B5B4FCF57F\83F8638B-8DCA-4152-9EDA-2CA8B33039B4\0
Disk Location On Controller: 0
Virtual Hard Disk At: C:\vhd\VHD on Local Storage.vhd
Virtual Hard Disk Connected To: IDE Controller 0
Controller Index: 0
Controller Instance ID: Microsoft:4DA5F246-7501-49B3-AE41-B1B5B4FCF57F\83F8638B-8DCA-4152-9EDA-2CA8B33039B4\0
Disk Location On Controller: 1
Virtual Hard Disk At: S:\Vhds\VHD on LUN.vhd
Virtual Hard Disk Connected To: SCSI Controller
Controller Index:
Controller Instance ID: Microsoft:4DA5F246-7501-49B3-AE41-B1B5B4FCF57F\B090A115-B8E6-4706-BE6C-C8ECDDC4A90B\0
Disk Location On Controller: 1
Virtual Hard Disk At: S:\Vhds\Disk on SCSI 2.vhd
Virtual Hard Disk Connected To: SCSI Controller
Controller Index:
Controller Instance ID: Microsoft:4DA5F246-7501-49B3-AE41-B1B5B4FCF57F\87617569-E20C-4982-AC44-04A4251C82BA\0
Disk Location On Controller: 0
Physical Disk Connections:
Passthrough Disk At: Disk 3
Passthrough Disk Drive Number: 3
Virtual Hard Disk Connected To: SCSI Controller
Controller Index:
Controller Instance ID: Microsoft:4DA5F246-7501-49B3-AE41-B1B5B4FCF57F\B090A115-B8E6-4706-BE6C-C8ECDDC4A90B\0
Disk Location On Controller: 0
|
Here’s a Screen Capture Of the PNP ID in the Guest:
Taylor Brown
Hyper-V Integration Test Lead
http://blogs.msdn.com/taylorb

Last night Mike Neil posted to the Virtualization Team Blog regarding a new agreement between Microsoft and Red Hat to bring Red Hat guest support to Hyper-V. Take a look at Mike’s full blog post Microsoft and Red Hat Cooperative Technical Support and/or the Red Hat press release Red Hat Moves to Expand Server Virtualization Interoperability. Happy day to all..
Taylor Brown
Hyper-V Integration Test Lead
http://blogs.msdn.com/taylorb

The Microsoft Hyper-V Server 2008 R2 Beta has been posted on the download center along with an overview document and a setup and configuration guide. Please note that all features, support, configuration etc… is subject to change as this is a beta
 |
Download Links
Microsoft Hyper-V Server 2008 R2 Beta Download Microsoft Hyper-V Server 2008 R2 Beta Overview Microsoft Hyper-V Server 2008 R2 Beta Setup and Configuration Guide
New Features In R2
Failover Clustering: The initial release of Microsoft Hyper-V Server 2008 did not include support for failover clustering. However, with Microsoft Hyper-V Server 2008 R2 Beta, host clustering technology is included to enable support for unplanned downtime.
Live migration: Microsoft Hyper-V Server 2008 R2 includes support for live migration. Live migration enables customers to move running applications between servers without service interruptions.
Processor and memory support: Microsoft Hyper-V Server 2008 R2 Beta now supports up to 8-socket physical systems and provides support for up to 32-cores. In addition, Microsoft Hyper-V Server 2008 R2 Beta supports up to 1TB of RAM on a physical system.
Updated Hyper-V Configuration Utility: The Hyper-V Configuration utility is designed to simplify the most common initial configuration tasks. It helps you configure the initial configuration settings without having to type long command-line strings. New configuration options have been added for R2 Beta including: -Remote Management Configuration -Failover Clustering Configuration -Additional options for Updates |
Virtualization Platform Comparison
The following is an overview comparison of the feature and support set for:
-Microsoft Hyper-V Server 2008
-Microsoft Hyper-V Server 2008 R2 Beta
-Windows Server 2008 R2 Beta (Enterprise and Datacenter Editions)
|
Capabilities |
Microsoft Hyper-V Server 2008 |
Microsoft Hyper-V Server 2008 R2 |
Windows Server 2008 R2 EE, DC |
|
Processor Architecture x64 only |
Yes |
Yes |
Yes |
|
Hypervisor-based |
Yes |
Yes |
Yes |
|
Product Type |
Standalone product |
Standalone product |
Operating System |
|
Number of Sockets (Licensing) |
Up to 4 |
Up to 8 |
Up to 8 = EE | Up to 64 = DC |
|
Number of cores supported by the hypervisor |
24 (with QFE) |
32 |
32 |
|
Memory |
Up to 32 GB |
Up to 1 TB |
Up to 1TB |
|
VM Migration |
None |
Quick and live migration |
Quick and live migration (EE & DC) |
|
Administrative UI |
Command line, text based configuration utility and remote GUI management |
Command line, text based configuration utility and remote GUI management |
Command line, remote management, and local GUI (Hyper-V Manager MMC) |
| Management |
Existing management tools |
| Virtualization Rights for Windows Server guests |
0 |
0 |
EE = 4 VM
DC Edition = unlimited VM per proc |
| Number of running VM Guests |
Up to 192, or as many as physical resources allow |
Up to 256, or as many as physical resources allow |
Up to 256, or as many as physical resources allow |
| Storage |
Direct Attach Storage (DAS): SATA, eSATA, PATA, SAS, SCSI, Firewire, Storage Area Networks (SANs): iSCSI, Fiber Channel, SAS |
| Planned Guest OS support |
Windows Server 2008 R2, Windows Server 2008, Windows Server 2003 SP2, Windows 2000 Server, Novell SUSE Linux Enterprise Server 10, Windows 7, Windows Vista SP1 & Windows XP SP3/SP2 |
Taylor Brown
Hyper-V Integration Test Lead
http://blogs.msdn.com/taylorb

If you are backing up your Hyper-V virtual machines using our VSS writer (backing up the physical server) you should be aware of a new Hotfix (KB959962) we released today that addresses three issues.
Issue 1
If you back up a Hyper-V virtual machine that has multiple volumes, the backup may fail. If you check the VMMS event log after the backup failure occurs, the following event is logged:
Log Name: Microsoft-Windows-Hyper-V-VMMS-Admin
Source: Microsoft-Windows-Hyper-V-VMMS
Event ID: 10104
Level: Error
Description:
Failed to revert to VSS snapshot on one or more virtual hard disks of the virtual machine '%1'. (Virtual machine ID %2)
Issue 2
The Microsoft Hyper-V VSS Writer may enter an unstable state if a backup of the Hyper-V virtual machine fails. If you run the vssadmin list writers command, the Microsoft Hyper-V VSS Writer is not listed. To return the Microsoft Hyper-V VSS Writer to a stable state, the Hyper-V Virtual Machine Management service must be restarted.
Issue 3
You cannot restore a Hyper-V virtual machine if the virtual machine was configured to use a legacy network adapter.
You can review the KB article and download the fix at http://support.microsoft.com/default.aspx?scid=kb;EN-US;959962.
Taylor Brown
Hyper-V Integration Test Lead
http://blogs.msdn.com/taylorb

Ok the Windows Server 2008 R2 Beta is now available for public download…
Take a look at http://www.microsoft.com/windowsserver2008/en/us/R2-Beta.aspx for all of the information. Or here’s the direct link to the download: http://www.microsoft.com/downloads/details.aspx?FamilyID=85cfe4c9-34de-477c-b5ca-75edae3d57c5&DisplayLang=en.
Taylor Brown
Hyper-V Integration Test Lead
http://blogs.msdn.com/taylorb

If you are using Hyper-V on a workstation machine with a high-end or consumer graphics card you may have noticed some performance problems such as short hangs or glitches especially when running graphically intense workloads. The reason for this comes down to part of how high end graphic cards accomplish there performance conflicting with part of how Hyper-V accomplishes our performance – it’s comes down to high TLB (translation lookaside buffer) flushes
There is a KB published regarding this issue at http://support.microsoft.com/kb/961661 if you want to read more about it.
Taylor Brown
Hyper-V Integration Test Lead
http://blogs.msdn.com/taylorb

Unless you’ve been under a rock all day you know that Windows 7 Beta was announced and released last night – along with Windows 7 Beta we also announced and released Server 2008 R2 (formally known as Windows 7 Server). If you have an MSDN subscription you can download the new hotness right now – just go to the subscriber downloads section. Apparently the build will be available to everyone as early as tomorrow – however I haven’t heard for sure yet…
New Hyper-V features include (not limited to): Live Migration, Improved Power Management (Core Parking/Timer Coalescing), Hot-Add/Remove of SCSI Disks, Native VHD Integration (Diskmgr/Diskpart can create/mount VHDs), Jumbo Frame Support, Performance Improvements, Deducted Guest External Networks, 32 Core Support and there are more that I am forgetting I am sure… I should say this is beta – these features are subject to change. Over the next month of so I as well as many others around the team will be posting information about new features and how they are used so look forward to that… For now I am just happy that you all get to play with Windows 7 (which btw ROCKs – I love it) and Server 2008 R2 w/Hyper-V…
Taylor Brown
Hyper-V Integration Test Lead
http://blogs.msdn.com/taylorb

About a month ago I posted about the VHD Servicing tool (Offline Virtual Machine Servicing Tool). Version 2.0 of that tool was made available on December 5th – among other things this version adds support for Hyper-V (a definite plus).
Offline Virtual Machine Servicing Tool 2.0
Brief Description
This Solution Accelerator provides automated tools and guidance that IT professionals can use to update offline virtual machines efficiently and without exposing them to security risks.
Overview
The Offline Virtual Machine Servicing Tool 2.0 helps organizations maintain virtual machines that are stored offline in a Microsoft® System Center Virtual Machine Manager library. While stored, virtual machines do not receive operating system updates. The tool provides a way to keep offline virtual machines up-to-date so that bringing a virtual machine online does not introduce vulnerabilities into the organization’s IT infrastructure.
The Offline Virtual Machine Servicing Tool combines the Windows Workflow programming model with the Windows PowerShell™ interface to bring groups of virtual machines online just long enough for them to receive updates from either System Center Configuration Manager 2007 or Windows Server Update Services. As soon as the virtual machines are up-to-date, the tool returns them to the offline state in the Virtual Machine Manager library.
This Solution Accelerator includes the following components:
- Brief Overview. Available online only on Microsoft TechNet. Summary for business and technical managers that briefly explains how this Solution Accelerator can fit into an organization’s IT infrastructure management strategy.
- OfflineVMServicing_x64 and OfflineVMServicing_x86. Setup files for the tool, for 64 bit and 32 bit versions on Microsoft® System Center Virtual Machine Manager (VMM) 2007 or 2008.
- Offline Virtual Machine Servicing Tool Getting Started Guide. Provides information about how the tool works, explains prerequisites for the tool, and describes how to install and configure the tool.
- Offline_VM_Servicing_Tool_2.0_Release_Notes.rtf. Notes provide information about this release, describe known issues in the tool, and include feedback instructions.
- Offline_Virtual_Machine_Servicing_Tool_Help. Help file for the tool. Provides instructions for using the tool.
Taylor Brown
Hyper-V Integration Test Lead
http://blogs.msdn.com/taylorb

Ben Armstrong (aka Virtual PC Guy) posted some great VBScript and PowerShell KVP scripts. These are a great edition to some of my earlier scripts (Adding Host KVP's, Adding Guest KVP's, Modifying KVP’s). Check them out if your looking for more samples.
Sending data from parent to virtual machine via KVP
Enumerating parent KVP data
Taylor Brown
Hyper-V Integration Test Lead
http://blogs.msdn.com/taylorb
