cameracode
cameracode

Reputation: 97

Find specific SCSI Controller with WMI Query to Msvm_ResourceAllocationSettingData

Utilizing the Common utilities for the virtualization samples (V2)

I created a class that queries Msvm_VirtualSystemSettingData -

public static ManagementObject GetVirtualMachineSettings(ManagementObject virtualMachine)
{
    using (ManagementObjectCollection settingsCollection =
                virtualMachine.GetRelated("Msvm_VirtualSystemSettingData", "Msvm_SettingsDefineState",
                null, null, null, null, false, null))
        {
            ManagementObject virtualMachineSettings =
                GetFirstObjectFromCollection(settingsCollection);

            return virtualMachineSettings;
        }
}

In Main, I'm utilizing the class as follows -

ManagementObject vmSettings = GetVirtualMachineSettings(vm);

ManagementObjectCollection scsiController = vmSettings.GetRelated("Msvm_ResourceAllocationSettingData");

foreach (ManagementObject controller in scsiController)
{
     if (controller["ResourceType"].ToString() == "6") 
     {
           Console.WriteLine("\nCaption: {0}\nDescription: {1}\nInstance ID: {2}\nElementName: {3}\nResource Type: {4}\nResource SubType: {5}\n",
                               controller["Caption"].ToString(),
                               controller["Description"].ToString(),
                               controller["InstanceID"].ToString(),
                               controller["ElementName"].ToString(),
                               controller["ResourceType"].ToString(),
                               controller["ResourceSubType"].ToString());
      }
}

How exactly do I see which one is SCSI 0, SCSI 1, SCSI 2, SCSI 3? I know that the "HyperV:Synthetic Scsi Device" all have an Instance ID, but what I mean is how does Hyper-V translate each SCSI Controller to 0, 1, 2, and 3?

Upvotes: 2

Views: 661

Answers (1)

MichaelSo
MichaelSo

Reputation: 219

If you look at InstanceID field - you will see

Microsoft:219513E4-7641-49B0-810E-DC7621E1B01B\3BAE5515-9D6C-4216-85F4-9335CEE41629\0

where the second GUID (3BAE5515-9D6C-4216-85F4-9335CEE41629) is the SCSI controller id. You can get the bus number by running: Get-VirtualSCSIAdapter -ID 3BAE5515-9D6C-4216-85F4-9335CEE41629 in Powershell on Hyper-V host.

This command returns:

Bus : 0

ID : 3BAE5515-9D6C-4216-85F4-9335CEE41629

Upvotes: 1

Related Questions