1 (изменено: Dmitrii, 2010-12-07 11:41:14)

Тема: VBScript: логические диски и физические накопители

Задача: без использования оснастки "Управление дисками" сопоставить имена логических дисков заданной станции домена с моделями накопителей, на которых эти диски расположены.

Пример сценария для её решения:

Dim objWMI, objLogicalDisks, objLD
Dim objPartitions, objPart, objDrives, objDrive, objFS
Dim strComputer, strTranslator, strList, strTemp, blnIsConsole

strComputer = "имя компьютера": strList = vbNullString
Set objFS = CreateObject("Scripting.FileSystemObject")
strTranslator = objFS.GetBaseName(WScript.FullName)
Set objFS = Nothing
If StrComp(strTranslator, "cscript", vbTextCompare) = 0 Then
    blnIsConsole = True
Else
    blnIsConsole = False
End If
Set objWMI = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" & strComputer & "\root\cimv2")
Set objLogicalDisks = objWMI.ExecQuery("SELECT * FROM Win32_LogicalDisk WHERE DriveType=2 OR DriveType=3")
For Each objLD In objLogicalDisks
    Set objPartitions = objWMI.ExecQuery("ASSOCIATORS OF {Win32_LogicalDisk.DeviceID=""" & _
                        objLD.DeviceID & _
                        """} WHERE AssocClass=Win32_LogicalDiskToPartition")
    For Each objPart In objPartitions
        Set objDrives = objWMI.ExecQuery("ASSOCIATORS OF {Win32_DiskPartition.DeviceID=""" & _
                        objPart.DeviceID & _
                        """} WHERE AssocClass=Win32_DiskDriveToDiskPartition")
        For Each objDrive In objDrives
            strTemp = objLD.DeviceID & " => " & objDrive.Caption & _
                        " (Диск " & objDrive.Index & ")"
            strList = strList & strTemp & vbNewLine
            If blnIsConsole Then WScript.Echo strTemp
        Next
        Set objDrive = Nothing
        Set objDrives = Nothing
    Next
    Set objPart = Nothing
    Set objPartitions = Nothing
Next
Set objLD = Nothing
Set objLogicalDisks = Nothing
Set objWMI = Nothing
If Len(strList) = 0 Then
    WScript.Echo "Накопителей указанного типа не обнаружено."
End If
If Not blnIsConsole Then WScript.Echo strList
WScript.Quit 0

Примечания.
1. Пример предназначен для работы с накопителями трёх типов: HDD, USB-Flash, ZIP.
2. Работоспособность проверялась на Windows 2000 Pro/XP Pro/2003/Vista.
3. В Windows Vista наблюдались случаи неверного определения некоторых моделей накопителей типа USB-Flash.