GetVirtualHardDiskInfo method of the Msvm_ImageManagementService class
Retrieves information about the virtual hard disk files.
Syntax
uint32 GetVirtualHardDiskInfo( [in] string Path, [out] string Info, [out] CIM_ConcreteJob REF Job );
Parameters
- Path [in]
-
Type: string
A fully qualified path that specifies the location of the disk image file.
- Info [out]
-
Type: string
If successful, this object contains the information for the requested virtual hard disk. This is an embedded instance of Msvm_VirtualHardDiskInfo.
- Job [out]
-
Type: CIM_ConcreteJob
A reference to the job (can be null if the task is completed).
Return value
Type: uint32
This method can return one of the following values.
- Completed with No Error (0)
- Method Parameters Checked - JobStarted (4096)
- Failed (32768)
- Access Denied (32769)
- Not Supported (32770)
- Status is unknown (32771)
- Timeout (32772)
- Invalid parameter (32773)
- System is in use (32774)
- Invalid state for this operation (32775)
- Incorrect data type (32776)
- System is not available (32777)
- Out of memory (32778)
- File Not Found (32779)
Remarks
Access to the Msvm_ImageManagementService class might be restricted by UAC Filtering. For more information, see User Account Control and WMI.
Examples
The following C# example retrieves information about the virtual hard disk files. The referenced utilities can be found in Common Utilities for the Virtualization Samples.
using System; using System.Xml; using System.Management; namespace HyperVSamples { class GetVirtualHardDiskInfoClass { static void DisplayPropertyValue(string propertyName, XmlDocument doc) { string xpath = string.Format(@"//PROPERTY[@NAME = '{0}']/VALUE/child::text()", propertyName); XmlNode node = doc.SelectSingleNode(xpath); if (node == null) { if (propertyName != "ParentPath") { throw new Exception("GetVirtualHardDiskInfo returned an invalid CIM_XML instance"); } } else { Console.WriteLine("{0}:{1}", propertyName, node.Value); } } static void DisplayVHDProperties(string diskInfo) { XmlDocument doc = new XmlDocument(); doc.LoadXml(diskInfo); //fileSize DisplayPropertyValue("FileSize", doc); //MaxInternalSize DisplayPropertyValue("MaxInternalSize", doc); //disk type DisplayPropertyValue("Type", doc); //InUse should be false DisplayPropertyValue("InUse", doc); //InSavedState should be FALSE DisplayPropertyValue("InSavedState", doc); //ParentPath DisplayPropertyValue("ParentPath", doc); } static void GetVirtualHardDiskInfo(string path) { ManagementScope scope = new ManagementScope(@"root\virtualization", null); ManagementObject imageService = Utility.GetServiceObject(scope, "Msvm_ImageManagementService"); ManagementBaseObject inParams = imageService.GetMethodParameters("GetVirtualHardDiskInfo"); inParams["Path"] = path; ManagementBaseObject outParams = imageService.InvokeMethod("GetVirtualHardDiskInfo", inParams, null); if (outParams != null) { if ((UInt32)outParams["ReturnValue"] == ReturnCode.Completed) { //no error string diskInfo = (string)outParams["Info"]; DisplayVHDProperties(diskInfo); } else { // error occurred Console.WriteLine("GetVirtualHardDiskInfo failed. ReturnValue:{0}", (UInt32)outParams["ReturnValue"]); } } else { Console.WriteLine("WMI failed"); } inParams.Dispose(); outParams.Dispose(); imageService.Dispose(); } static void Main(string[] args) { if (args != null && args.Length != 1) { Console.WriteLine("Usage: GetVirtualHardDiskInfo path"); return; } GetVirtualHardDiskInfo(args[0]); } } }
The following VBScript example retrieves information about the virtual hard disk files.
option explicit dim objWMIService dim managementService dim fileSystem const wmiSuccessful = 0 Main() '----------------------------------------------------------------- ' Main '----------------------------------------------------------------- Sub Main() dim path, objArgs, computer set fileSystem = Wscript.CreateObject("Scripting.FileSystemObject") computer = "." set objWMIService = GetObject("winmgmts:\\" & computer & "\root\virtualization") set managementService = objWMIService.ExecQuery("Select * from Msvm_ImageManagementService").ItemIndex(0) set objArgs = WScript.Arguments if WScript.Arguments.Count = 1 then path = objArgs.Unnamed.Item(0) else WScript.Echo "usage: cscript GetVirtualHardDiskInfo.vbs Path" WScript.Quit(1) end if if GetVirtualHardDiskInfo(path) then WriteLog "Done" WScript.Quit(0) else WriteLog "GetVirtualHardDiskInfo failed" WScript.Quit(1) end if End Sub '----------------------------------------------------------------- ' Query a filed value from CIM_XML and display it '----------------------------------------------------------------- Sub DisplayPropertyValue(propertyName, doc) dim xpath, node xpath = Format1("//PROPERTY[@NAME = '{0}']/VALUE/child:text()", propertyName) set node = doc.selectSingleNode(xpath) if node Is Nothing then if propertyName <> "ParentPath" then WriteLog "GetVirtualHardDiskInfo returned an invalid CIM_XML instance" end if else WriteLog Format2("{0}:{1}", propertyName, node.Text) end if End Sub '----------------------------------------------------------------- ' Display the VHD properties '----------------------------------------------------------------- Sub DisplayVHDProperties(diskInfo) dim objXMLDoc set objXMLDoc = CreateObject("Microsoft.XMLDOM") objXMLDoc.async = False objXMLDoc.loadXML(diskInfo) 'fileSize DisplayPropertyValue "FileSize", objXMLDoc 'MaxInternalSize DisplayPropertyValue "MaxInternalSize", objXMLDoc 'disk type DisplayPropertyValue "Type", objXMLDoc 'InUse DisplayPropertyValue "InUse", objXMLDoc 'InSavedState DisplayPropertyValue "InSavedState", objXMLDoc 'ParentPath DisplayPropertyValue "ParentPath", objXMLDoc End Sub '----------------------------------------------------------------- ' Execute ExpandVirtualHardDisk '----------------------------------------------------------------- Function GetVirtualHardDiskInfo(path) WriteLog Format1("Sub GetVirtualHardDiskInfo({0})", path) dim objInParam, objOutParams GetVirtualHardDiskInfo = false set objInParam = managementService.Methods_("GetVirtualHardDiskInfo").InParameters.SpawnInstance_() objInParam.Path = Path set objOutParams = managementService.ExecMethod_("GetVirtualHardDiskInfo", objInParam) if (objOutParams.ReturnValue = wmiSuccessful) then DisplayVHDProperties objOutParams.Info GetVirtualHardDiskInfo = true else WriteLog Format2("GetVirtualHardDiskInfo {0} failed with error {1}", Path, objOutParams.ReturnValue) end if End Function '----------------------------------------------------------------- ' Create the console log files. '----------------------------------------------------------------- Sub WriteLog(line) dim fileStream set fileStream = fileSystem.OpenTextFile(".\GetVirtualHardDiskInfo.log", 8, true) WScript.Echo line fileStream.WriteLine line fileStream.Close End Sub '------------------------------------------------------------------------------ ' The string formatting functions to avoid string concatenation. '------------------------------------------------------------------------------ Function Format2(myString, arg0, arg1) Format2 = Format1(myString, arg0) Format2 = Replace(Format2, "{1}", arg1) End Function '------------------------------------------------------------------------------ ' The string formatting functions to avoid string concatenation. '------------------------------------------------------------------------------ Function Format1(myString, arg0) Format1 = Replace(myString, "{0}", arg0) End Function
Requirements
|
Minimum supported client | None supported |
|---|---|
|
Minimum supported server | Windows Server 2008 |
|
Namespace |
\\.\Root\Virtualization |
|
MOF |
|
See also
Build date: 7/3/2012