【问题标题】:WMI : MSVM_Imagemanagmentservice mount method does not assign drive letterWMI:MSVM_Imagemanagmentservice 挂载方法未分配驱动器号
【发布时间】:2014-02-03 16:49:04
【问题描述】:

我正在尝试在 Windows 2012 hyperV 核心数据中心版上安装 vhd。为了安装 vhd,我使用 MSVM_Imagemanagementservice 类和其中的安装方法。磁盘已安装,但问题是没有分配驱动器号。我已经在其他 2012 数据中心版本和 2012 核心上尝试过它,它也可以正常工作。即在安装驱动器号后分配。

对此的任何想法都会有所帮助。

【问题讨论】:

    标签: wmi


    【解决方案1】:

    您可以查询驱动器号列表,然后根据您的要求分配驱动器号。下面给出了获取驱动器号列表的函数。

    Function GetDriveLetterList(path)
    
        'Where path is path of VHD
    
        Dim mountedImage, diskDevice, diskPartition, diskPartitions, logicalPartition, timeout, query
        Dim logicalPartitionList
    
        timeout = 0
        driveLetterList = ""
    
        path = Replace(path,"\","\\")
    
        Set wmiServiceCIM = GetObject("winmgmts:\\.\root\cimv2")  
    
        Do
            WScript.Sleep(3000)
            timeout = timeout + 3
    
            Set mountedImage = (wmiService.ExecQuery("SELECT * FROM Msvm_MountedStorageImage WHERE Name='" & path & "'")).ItemIndex(0)
    
            query = "SELECT * From Win32_DiskDrive WHERE Model='Msft Virtual Disk SCSI Disk Device' and SCSITargetId='" & mountedImage.TargetId & "' and SCSILogicalUnit='" & mountedImage.Lun & "' and SCSIPort='" & mountedImage.PortNumber & "'"
            Set diskDevice = wmiServiceCIM.ExecQuery(query).ItemIndex(0)
    
            query = "ASSOCIATORS OF {" & diskDevice.Path_.Path & "} where AssocClass=Win32_DiskDriveToDiskPartition"
    
            Set diskPartitions = wmiServiceCIM.ExecQuery(query)
    
            For Each diskPartition In diskPartitions
    
                query = "ASSOCIATORS OF {" & diskPartition.Path_.Path & "} WHERE AssocClass=Win32_LogicalDiskToPartition"
                Set logicalPartitionList = wmiServiceCIM.ExecQuery(query)
                If logicalPartitionList.count > 0 Then
                    Set logicalPartition = logicalPartitionList.ItemIndex(0)
                    'WScript.Echo logicalPartition.DeviceID
                    driveLetterList = driveLetterList + logicalPartition.DeviceID
                End If
    
            Next
    End Function
    

    如果你想检查系统驱动器。那你就可以这样做了……

    folderPath = driveLetter + ":\Windows\System32"
    
    Set fileSys = CreateObject("Scripting.FileSystemObject")
    If filesys.FolderExists(folderPath) Then
        //doStuff
    End If
    

    【讨论】:

    • 上面的函数会给我当前正在使用的驱动器号。基于此,我可以选择我的信。我希望这部分是正确的。但是,我的问题是 MSVM_Imagemanagementservice 类中的挂载方法不带任何驱动器号参数。同一类下 root\virtualization\v2 命名空间中的另一个方法是 Attachvirtualdisk。此方法也不接受任何参数来接受驱动器号。但是它们有布尔值,我们可以用它来说明是否需要分配驱动器号
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多