<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.technet.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>Brad Rutkowski's Blog : C#</title><link>http://blogs.technet.com/brad_rutkowski/archive/tags/C_2300_/default.aspx</link><description>Tags: C#</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>2 things: Tell if a server is server core remotely. Tell if a server is a VM remotely. (C#)</title><link>http://blogs.technet.com/brad_rutkowski/archive/2008/03/07/2-things-tell-if-a-server-is-server-core-remotely-tell-if-a-server-is-a-vm-remotely.aspx</link><pubDate>Fri, 07 Mar 2008 23:54:49 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:2975077</guid><dc:creator>Brad Rutkowski</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.technet.com/brad_rutkowski/comments/2975077.aspx</comments><wfw:commentRss>http://blogs.technet.com/brad_rutkowski/commentrss.aspx?PostID=2975077</wfw:commentRss><description>&lt;p&gt;I've been messing around over the last week making a tool that will frisk a remote machine.&amp;#160; It's been a fun project, a couple of items I got hung up on were if the machine was server core and if it was a VM. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I mean who would knowingly TS to a server if they knew it was server core?&amp;#160; As for the VM, it's nice to know before-hand so you dont request a debugger to be attached to a virtual server ;).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Well here are some snippets for those two things, hope it helps those trying to do similar queries...&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Server Core:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Basically you just need to look at the OperatingSystemSKU value and if it E (hex) or 14 (decimal) then its server core.&amp;#160; This and all the other SKU numbers are listed here: &lt;a title="http://msdn2.microsoft.com/en-us/library/ms724358.aspx" href="http://msdn2.microsoft.com/en-us/library/ms724358.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms724358.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;System.Management.ConnectionOptions objconn = new System.Management.ConnectionOptions();    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; objconn.Impersonation = System.Management.ImpersonationLevel.Impersonate;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; objconn.EnablePrivileges = true;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; System.Management.ManagementScope exmangescope = new System.Management.ManagementScope(@&amp;quot;\\&amp;quot; + srvName + @&amp;quot;\root\cimv2&amp;quot;, objconn);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; System.Management.ObjectQuery objquery = new System.Management.ObjectQuery(&amp;quot;SELECT * FROM Win32_OperatingSystem&amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; System.Management.ManagementObjectSearcher objsearch = new System.Management.ManagementObjectSearcher(exmangescope, objquery);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; System.Management.ManagementObjectCollection queryCollection = objsearch.Get();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; foreach (System.Management.ManagementObject stringer in queryCollection)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; serverCoreval = stringer[&amp;quot;OperatingSystemSKU&amp;quot;].ToString();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //Console.WriteLine(serverCoreval);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Virtual Machine:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;If the VM is either Vista/Windows 2008 it's a simple reg query:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;if (buildInt &amp;gt;= 6000)    &lt;br /&gt;{     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sysInfo = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, srvName).OpenSubKey(@&amp;quot;SYSTEM\CurrentControlSet\Control\SystemInformation&amp;quot;).GetValue(&amp;quot;SystemProductName&amp;quot;).ToString(); &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; if (sysInfo.Contains(&amp;quot;Virtual&amp;quot;))    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; vmCheck = 1;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;}&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;If the VM is downlevel then it's a WMI query&lt;/strong&gt;&lt;/em&gt; &lt;/p&gt;  &lt;p&gt;else if (buildInt == 3790)    &lt;br /&gt;{     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; System.Management.ConnectionOptions objconn = new System.Management.ConnectionOptions();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; objconn.Impersonation = System.Management.ImpersonationLevel.Impersonate;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; objconn.EnablePrivileges = true;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; System.Management.ManagementScope exmangescope = new System.Management.ManagementScope(@&amp;quot;\\&amp;quot; + srvName + @&amp;quot;\root\cimv2&amp;quot;, objconn);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; System.Management.ObjectQuery objquery = new System.Management.ObjectQuery(&amp;quot;SELECT * FROM Win32_ComputerSystem&amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; System.Management.ManagementObjectSearcher objsearch = new System.Management.ManagementObjectSearcher(exmangescope, objquery);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; System.Management.ManagementObjectCollection queryCollection1 = objsearch.Get();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; foreach (System.Management.ManagementObject stringer in queryCollection1)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sysInfo = stringer[&amp;quot;Model&amp;quot;].ToString();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //System.Console.WriteLine(sysinfo);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if (sysInfo.Contains(&amp;quot;Virtual&amp;quot;))     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; vmCheck = 1;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:c9e9fd5b-c54b-42e8-96c3-da7c3a9bfd14" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/windows%202008" rel="tag"&gt;windows 2008&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Server%20Core" rel="tag"&gt;Server Core&lt;/a&gt;,&lt;a href="http://technorati.com/tags/C#" rel="tag"&gt;C#&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Virtualization" rel="tag"&gt;Virtualization&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=2975077" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/brad_rutkowski/archive/tags/Business+up+front/default.aspx">Business up front</category><category domain="http://blogs.technet.com/brad_rutkowski/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.technet.com/brad_rutkowski/archive/tags/Virtualization/default.aspx">Virtualization</category><category domain="http://blogs.technet.com/brad_rutkowski/archive/tags/C_2300_/default.aspx">C#</category></item></channel></rss>