<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Taylor Brown's Blog : C#</title><link>http://blogs.msdn.com/taylorb/archive/tags/C_2300_/default.aspx</link><description>Tags: C#</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>New Hyper-V WMI Doc’s… Plus It’s Official I’ll Be Speaking at PDC… Plus Cluster Fix for Hyper-V…</title><link>http://blogs.msdn.com/taylorb/archive/2008/08/08/new-hyper-v-wmi-doc-s-plus-it-s-official-i-ll-be-speaking-at-pdc-plus-cluster-fix-for-hyper-v.aspx</link><pubDate>Sat, 09 Aug 2008 03:25:28 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8844578</guid><dc:creator>taylorb</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/taylorb/comments/8844578.aspx</comments><wfw:commentRss>http://blogs.msdn.com/taylorb/commentrss.aspx?PostID=8844578</wfw:commentRss><wfw:comment>http://blogs.msdn.com/taylorb/rsscomments.aspx?PostID=8844578</wfw:comment><description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h1&gt;&lt;/h1&gt;  &lt;h4&gt;Hyper-V WMI Documentation&lt;/h4&gt;  &lt;p&gt;First off I am happy to say the Hyper-V WMI documentation is finally post beta quality!&amp;#160; I want to personally thank a few members of the test team for writing much of the sample code and working very hard to get it posted.&amp;#160; There are now samples in C# and VBScript for most of the common methods (sadly now Powershell so my crusade/purpose continues)…&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Storage(&lt;/strong&gt;&lt;em&gt;Msvm_ImageManagementService&lt;/em&gt;&lt;strong&gt;):&lt;/strong&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://msdn.microsoft.com/en-us/library/cc136845(VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/cc136845(VS.85).aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Networking(&lt;/strong&gt;&lt;em&gt;Msvm_VirtualSystemManagementService&lt;/em&gt;&lt;strong&gt;):&lt;/strong&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://msdn.microsoft.com/en-us/library/cc136938(VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/cc136938(VS.85).aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;VMMS(&lt;/strong&gt;&lt;em&gt;Msvm_VirtualSwitchManagementService&lt;/em&gt;&lt;strong&gt;):      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://msdn.microsoft.com/en-us/library/cc136940(VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/cc136940(VS.85).aspx&lt;/a&gt;&lt;/strong&gt; &lt;/p&gt;  &lt;h4&gt;Hyper-V WMI Documentation&lt;/h4&gt;  &lt;p&gt;Secondly…It’s official I will be babbling on about Hyper-V and Test Automation at PDC – pretty excited it should be fun.&amp;#160; Here’s a link to the Channel 9 page. &lt;a title="http://channel9.msdn.com/pdc2008/ES09/" href="http://channel9.msdn.com/pdc2008/ES09/"&gt;http://channel9.msdn.com/pdc2008/ES09/&lt;/a&gt;&lt;/p&gt;  &lt;h1&gt;&lt;/h1&gt;  &lt;h4&gt;Cluster Fix for Hyper-V&lt;/h4&gt;  &lt;p&gt;Thirdly… The Cluster team has released a hotfix to add “Increased functionality and virtual machine control” to the cluster manager.&amp;#160; Here’s a link to the page &lt;a title="http://support.microsoft.com/?id=951308" href="http://support.microsoft.com/?id=951308"&gt;http://support.microsoft.com/?id=951308&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Taylor Brown&lt;/b&gt;&lt;b&gt;&lt;/b&gt;    &lt;br /&gt;Hyper-V Integration Test Lead     &lt;br /&gt;&lt;a href="http://blogs.msdn.com/taylorb"&gt;http://blogs.msdn.com/taylorb&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/taylorb/WindowsLiveWriter/HyperVWMIConfiguringAutomaticStartupShut_E564/clip_image001_2.jpg"&gt;&lt;img title="clip_image001" height="58" alt="clip_image001" src="http://blogs.msdn.com/blogfiles/taylorb/WindowsLiveWriter/HyperVWMIConfiguringAutomaticStartupShut_E564/clip_image001_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8844578" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/taylorb/archive/tags/WMI/default.aspx">WMI</category><category domain="http://blogs.msdn.com/taylorb/archive/tags/Commentary/default.aspx">Commentary</category><category domain="http://blogs.msdn.com/taylorb/archive/tags/Hyper-V/default.aspx">Hyper-V</category><category domain="http://blogs.msdn.com/taylorb/archive/tags/C_2300_/default.aspx">C#</category></item><item><title>Hyper-V WMI: Creating a Thumbnail Image</title><link>http://blogs.msdn.com/taylorb/archive/2008/07/29/hyper-v-wmi-creating-a-thumbnail-image.aspx</link><pubDate>Tue, 29 Jul 2008 16:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8786606</guid><dc:creator>taylorb</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/taylorb/comments/8786606.aspx</comments><wfw:commentRss>http://blogs.msdn.com/taylorb/commentrss.aspx?PostID=8786606</wfw:commentRss><wfw:comment>http://blogs.msdn.com/taylorb/rsscomments.aspx?PostID=8786606</wfw:comment><description>&lt;p&gt;Hyper-V has a WMI API that will allow you to create a thumbnail image of any running or paused virtual machine.&amp;#160; You can create any sized thumbnail you want (640x480, 800x600, 1024x768 etc…).&amp;#160; Creating the image is pretty easy, you just call GetVirtualSystemThumbnailImage passing a reference to an Msvm_VirutalSystemSettingData instance and the size of the image you want…&amp;#160; However getting something useful from the returned data is a bit tricky…&amp;#160; You get an array of unit8’s that represent pixels, the API doesn’t have much choice and luckily Powershell makes this not an impossible feat.&amp;#160; All you have to do is create a new bitmap object and read (marshal) the pixel data into the object…&amp;#160; So here’s a script for you!&lt;/p&gt;  &lt;table cellspacing="2"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top"&gt;&lt;a href="http://blogs.msdn.com/blogfiles/taylorb/WindowsLiveWriter/HyperVWMICreatingaThumbnailImage_CB5C/Windows%20Server%202008%20-%20x64_running_2.jpg"&gt;&lt;img title="Windows Server 2008 - x64_running" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="248" alt="Windows Server 2008 - x64_running" src="http://blogs.msdn.com/blogfiles/taylorb/WindowsLiveWriter/HyperVWMICreatingaThumbnailImage_CB5C/Windows%20Server%202008%20-%20x64_running_thumb.jpg" width="330" border="0" /&gt;&lt;/a&gt; &lt;/td&gt;        &lt;td valign="top"&gt;&lt;a href="http://blogs.msdn.com/blogfiles/taylorb/WindowsLiveWriter/HyperVWMICreatingaThumbnailImage_CB5C/Windows%20Server%202008%20-%20x64_saved_2.jpg"&gt;&lt;img title="Windows Server 2008 - x64_saved" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="246" alt="Windows Server 2008 - x64_saved" src="http://blogs.msdn.com/blogfiles/taylorb/WindowsLiveWriter/HyperVWMICreatingaThumbnailImage_CB5C/Windows%20Server%202008%20-%20x64_saved_thumb.jpg" width="327" border="0" /&gt;&lt;/a&gt; &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;&lt;strong&gt;Running Virtual Machine&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top"&gt;&lt;strong&gt;Saved Virtual Machine&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;&lt;/h2&gt;  &lt;h2&gt;Powershell Script: &lt;/h2&gt;  &lt;table class="" cellspacing="0" cellpadding="0" width="95%" bgcolor="#fafafa" border="2"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td class="" valign="top"&gt;&lt;span style="color: #000000"&gt;[&lt;/span&gt;&lt;span style="color: #8b4513"&gt;System.Reflection.Assembly&lt;/span&gt;&lt;span style="color: #000000"&gt;]&lt;/span&gt;&lt;span style="color: #000000"&gt;::&lt;/span&gt;&lt;span style="color: #8b4513"&gt;LoadWithPartialName&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;System.Drawing&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;)            &lt;br /&gt;            &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;$HyperVParent&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;localhost&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;            &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;$HyperVGuest&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;Windows Server 2008 - x64&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;            &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;$ImagePath&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;c:\Temp&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;            &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;$xRes&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;640&lt;/span&gt;&lt;span style="color: #000000"&gt;            &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;$yRes&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;480&lt;/span&gt;&lt;span style="color: #000000"&gt;            &lt;br /&gt;            &lt;br /&gt;            &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;$VMManagementService&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;Get-WmiObject&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;-class&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;Msvm_VirtualSystemManagementService&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;-namespace&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;root\virtualization&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;-ComputerName&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$HyperVParent&lt;/span&gt;&lt;span style="color: #000000"&gt;            &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;$Vm&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;Get-WmiObject&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;-Namespace&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;root\virtualization&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;-ComputerName&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$HyperVParent&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;-Query&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;Select * From Msvm_ComputerSystem Where ElementName='$HyperVGuest'&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;            &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;$VMSettingData&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;Get-WmiObject&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;-Namespace&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;root\virtualization&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;-Query&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;Associators of {$Vm} Where ResultClass=Msvm_VirtualSystemSettingData AssocClass=Msvm_SettingsDefineState&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;-ComputerName&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$HyperVParent&lt;/span&gt;&lt;span style="color: #000000"&gt;            &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;$RawImageData&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$VMManagementService&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #8b4513"&gt;GetVirtualSystemThumbnailImage&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #800080"&gt;$VMSettingData&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;$xRes&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;$yRes&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;/span&gt;&lt;span style="color: #008000"&gt;#| ProcessWMIJob $VMManagementService.PSBase.ClassPath &amp;quot;GetVirtualSystemThumbnailImage&amp;quot;            &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;           &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;$VMThumbnail&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;new-object&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #8b4513"&gt;System.Drawing.Bitmap&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #800080"&gt;$xRes&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$yRes&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt; [&lt;/span&gt;&lt;span style="color: #8b4513"&gt;System.Drawing.Imaging.PixelFormat&lt;/span&gt;&lt;span style="color: #000000"&gt;]&lt;/span&gt;&lt;span style="color: #000000"&gt;::&lt;/span&gt;&lt;span style="color: #8b4513"&gt;Format16bppRgb565&lt;/span&gt;&lt;span style="color: #000000"&gt;)            &lt;br /&gt;            &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;$rectangle&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;new-object&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #8b4513"&gt;System.Drawing.Rectangle&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #800080"&gt;$xRes&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #800080"&gt;$yRes&lt;/span&gt;&lt;span style="color: #000000"&gt;)            &lt;br /&gt;[&lt;/span&gt;&lt;span style="color: #8b4513"&gt;System.Drawing.Imaging.BitmapData&lt;/span&gt;&lt;span style="color: #000000"&gt;] &lt;/span&gt;&lt;span style="color: #800080"&gt;$VMThumbnailBitmapData&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$VMThumbnail&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #8b4513"&gt;LockBits&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #800080"&gt;$rectangle&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt; [&lt;/span&gt;&lt;span style="color: #8b4513"&gt;System.Drawing.Imaging.ImageLockMode&lt;/span&gt;&lt;span style="color: #000000"&gt;]&lt;/span&gt;&lt;span style="color: #000000"&gt;::&lt;/span&gt;&lt;span style="color: #8b4513"&gt;WriteOnly&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt; [&lt;/span&gt;&lt;span style="color: #8b4513"&gt;System.Drawing.Imaging.PixelFormat&lt;/span&gt;&lt;span style="color: #000000"&gt;]&lt;/span&gt;&lt;span style="color: #000000"&gt;::&lt;/span&gt;&lt;span style="color: #8b4513"&gt;Format16bppRgb565&lt;/span&gt;&lt;span style="color: #000000"&gt;)            &lt;br /&gt;[&lt;/span&gt;&lt;span style="color: #8b4513"&gt;System.Runtime.InteropServices.marshal&lt;/span&gt;&lt;span style="color: #000000"&gt;]&lt;/span&gt;&lt;span style="color: #000000"&gt;::&lt;/span&gt;&lt;span style="color: #8b4513"&gt;Copy&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #800080"&gt;$RawImageData&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #8b4513"&gt;ImageData&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$VMThumbnailBitmapData&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #8b4513"&gt;Scan0&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$xRes&lt;/span&gt;&lt;span style="color: #ff0000"&gt;*&lt;/span&gt;&lt;span style="color: #800080"&gt;$yRes&lt;/span&gt;&lt;span style="color: #ff0000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;2&lt;/span&gt;&lt;span style="color: #000000"&gt;)            &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;$VMThumbnail&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #8b4513"&gt;UnlockBits&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #800080"&gt;$VMThumbnailBitmapData&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #0000ff"&gt;;&lt;/span&gt;&lt;span style="color: #000000"&gt;            &lt;br /&gt;            &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;$VMThumbnail&lt;/span&gt;&lt;span style="color: #000000"&gt;            &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;$VMThumbnail&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #8b4513"&gt;Save&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;$ImagePath\$HyperVGuest.jpg&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;/span&gt;          &lt;br /&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;b&gt;Taylor Brown&lt;/b&gt;&lt;b&gt;&lt;/b&gt;    &lt;br /&gt;Hyper-V Integration Test Lead     &lt;br /&gt;&lt;a href="http://blogs.msdn.com/taylorb"&gt;http://blogs.msdn.com/taylorb&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/taylorb/WindowsLiveWriter/HyperVWMIConfiguringAutomaticStartupShut_E564/clip_image001_2.jpg"&gt;&lt;img title="clip_image001" height="58" alt="clip_image001" src="http://blogs.msdn.com/blogfiles/taylorb/WindowsLiveWriter/HyperVWMIConfiguringAutomaticStartupShut_E564/clip_image001_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8786606" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/taylorb/archive/tags/WMI/default.aspx">WMI</category><category domain="http://blogs.msdn.com/taylorb/archive/tags/Hyper-V/default.aspx">Hyper-V</category><category domain="http://blogs.msdn.com/taylorb/archive/tags/C_2300_/default.aspx">C#</category></item><item><title>Hyper-V WMI Using PowerShell - Part 4 and Negative 1 (Shutdown IC Powershell/C#)</title><link>http://blogs.msdn.com/taylorb/archive/2008/05/21/hyper-v-wmi-using-powershell-part-4-and-negative-1.aspx</link><pubDate>Wed, 21 May 2008 17:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8588907</guid><dc:creator>taylorb</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/taylorb/comments/8588907.aspx</comments><wfw:commentRss>http://blogs.msdn.com/taylorb/commentrss.aspx?PostID=8588907</wfw:commentRss><wfw:comment>http://blogs.msdn.com/taylorb/rsscomments.aspx?PostID=8588907</wfw:comment><description>&lt;P&gt;I hope&amp;nbsp;everyone is enjoying&amp;nbsp;&lt;A class="" href="http://blogs.msdn.com/virtualization/archive/2008/05/20/hyper-v-rc1-release-available-on-microsoft-download-center.aspx" target=_blank mce_href="http://blogs.msdn.com/virtualization/archive/2008/05/20/hyper-v-rc1-release-available-on-microsoft-download-center.aspx"&gt;Hyper-V RC1&lt;/A&gt;&amp;nbsp;&lt;EM&gt;(yep I just linked to my own post -shamless maybe) &lt;/EM&gt;but, as promissed here's&amp;nbsp;some more WMI goodness.&amp;nbsp; &amp;nbsp;&lt;/P&gt;
&lt;P&gt;Title got your attention?&amp;nbsp; Well&amp;nbsp;this is a two part post…&amp;nbsp; First I will show how to use the Shutdown IC to initiate a shutdown of a guest using&amp;nbsp;PowerShell (that's part 4)&amp;nbsp; Ok so why Negative 1?&amp;nbsp; Well what did we do before PowerShell &lt;EM&gt;(yeah yeah vbscript but go with me)&lt;/EM&gt; one option was C# so Part Negative 1 is a C# Example… &lt;/P&gt;
&lt;P&gt;Here’s the PowerShell to shutdown a VM named “Vista”… Just like previous examples, we get the Msvm_ComputerSystem… then we use the Associators of query to get the Msvm_ShutdownComponent associated with that VM.&amp;nbsp; Then we just call InitiateShutdown, the first parameter is wether to force a shutdown (like running shutdown /f inside the virtual machine) and the second is the reason for the shutdown.&amp;nbsp; It really is that simple.&lt;/P&gt;
&lt;TABLE class="" cellSpacing=0 cellPadding=0 width="95%" bgColor=#fafafa border=2&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#000000 size=3&gt;$Vm = Get-WmiObject -Namespace root\virtualization&amp;nbsp; -Query "Select * From Msvm_ComputerSystem Where ElementName='Vista'"&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face="Courier New" color=#000000 size=3&gt;
&lt;P&gt;&lt;BR&gt;$ShutdownIC = Get-WmiObject -Namespace root\virtualization&amp;nbsp; -Query "Associators of {$Vm} Where AssocClass=Msvm_SystemDevice ResultClass=Msvm_ShutdownComponent"&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;$ShutdownIC.InitiateShutdown("TRUE", "Need to shutdown")&lt;/P&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;And here’s the same code in C#…&lt;/P&gt;
&lt;DIV&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt; System;
&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt; System.Collections;
&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt; System.Text;
&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt; System.Management;


&lt;SPAN style="COLOR: #0000ff"&gt;namespace&lt;/SPAN&gt; ShutdownViaIC
{
    &lt;SPAN style="COLOR: #0000ff"&gt;class&lt;/SPAN&gt; Program
    {
        &lt;SPAN style="COLOR: #0000ff"&gt;static&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt; Main(&lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt;[] args)
        {
            &lt;SPAN style="COLOR: #008000"&gt;//Connect to the Remote Machines Management Scope&lt;/SPAN&gt;
            ConnectionOptions options =  &lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; ConnectionOptions();
            ManagementScope scope = &lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; ManagementScope(&lt;SPAN style="COLOR: #006080"&gt;@"\\localhost\root\virtualization"&lt;/SPAN&gt;); scope.Connect();

            &lt;SPAN style="COLOR: #008000"&gt;//Get the msvm_computersystem for the given VM (Vista)         &lt;/SPAN&gt;
            ManagementObjectSearcher searcher = &lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; ManagementObjectSearcher(scope,
                &lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; ObjectQuery(&lt;SPAN style="COLOR: #006080"&gt;"SELECT * FROM Msvm_ComputerSystem WHERE ElementName = 'Vista'"&lt;/SPAN&gt;));

            &lt;SPAN style="COLOR: #008000"&gt;//Select the first object in the Searcher collection&lt;/SPAN&gt;
            IEnumerator enumr = searcher.Get().GetEnumerator();
            enumr.MoveNext();
            ManagementObject msvm_computersystem = (ManagementObject)(enumr.Current);

            &lt;SPAN style="COLOR: #008000"&gt;//Use the association to get the msvm_shutdowncomponent for the msvm_computersystem&lt;/SPAN&gt;
            ManagementObjectCollection collection = msvm_computersystem.GetRelated(&lt;SPAN style="COLOR: #006080"&gt;"Msvm_ShutdownComponent"&lt;/SPAN&gt;);
            ManagementObjectCollection.ManagementObjectEnumerator enumerator = collection.GetEnumerator();
            enumerator.MoveNext();
            ManagementObject msvm_shutdowncomponent = (ManagementObject)enumerator.Current;

            &lt;SPAN style="COLOR: #008000"&gt;//Get the InitiateShudown Parameters&lt;/SPAN&gt;
            ManagementBaseObject inParams = msvm_shutdowncomponent.GetMethodParameters(&lt;SPAN style="COLOR: #006080"&gt;"InitiateShutdown"&lt;/SPAN&gt;);
            inParams[&lt;SPAN style="COLOR: #006080"&gt;"Force"&lt;/SPAN&gt;] = &lt;SPAN style="COLOR: #0000ff"&gt;true&lt;/SPAN&gt;;
            inParams[&lt;SPAN style="COLOR: #006080"&gt;"Reason"&lt;/SPAN&gt;] = &lt;SPAN style="COLOR: #006080"&gt;"Need to Shutdown"&lt;/SPAN&gt;;

            &lt;SPAN style="COLOR: #008000"&gt;//Invoke the Method&lt;/SPAN&gt;
            ManagementBaseObject outParams = msvm_shutdowncomponent.InvokeMethod(&lt;SPAN style="COLOR: #006080"&gt;"InitiateShutdown"&lt;/SPAN&gt;, inParams, &lt;SPAN style="COLOR: #0000ff"&gt;null&lt;/SPAN&gt;);
            &lt;SPAN style="COLOR: #0000ff"&gt;uint&lt;/SPAN&gt; returnValue = (&lt;SPAN style="COLOR: #0000ff"&gt;uint&lt;/SPAN&gt;)outParams[&lt;SPAN style="COLOR: #006080"&gt;"ReturnValue"&lt;/SPAN&gt;];

            &lt;SPAN style="COLOR: #008000"&gt;//Zero indicates success&lt;/SPAN&gt;
            &lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt; (returnValue != 0)
                Console.WriteLine(&lt;SPAN style="COLOR: #006080"&gt;"SHUTDOWN Failed"&lt;/SPAN&gt;);            
        }
    }
}&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;PowerShell like most scripting languages can do simple tasks well simply, but your power and control is limited… This is still the case with PowerShell the code to initiate this shutdown is dead simple in PowerShell and all of three lines, you have more ‘using’ lines than that in the C# code…&amp;nbsp; However when it comes to writing more complex solutions like a Windows service that monitors Hyper-V and implements some custom business logic C# is a great choice… (it’s what the Hyper-V UI is written in).&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;--Taylor Brown &lt;BR&gt;--Hyper-V test team&lt;/STRONG&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8588907" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/taylorb/archive/tags/Powershell/default.aspx">Powershell</category><category domain="http://blogs.msdn.com/taylorb/archive/tags/WMI/default.aspx">WMI</category><category domain="http://blogs.msdn.com/taylorb/archive/tags/Hyper-V/default.aspx">Hyper-V</category><category domain="http://blogs.msdn.com/taylorb/archive/tags/C_2300_/default.aspx">C#</category></item></channel></rss>