Question

The following snippet works under Windows 8 but not Windows XP:

function listDrives()
{
    /* Drive type:
    0   Unknown
    1   No Root Directory
    2   Removable Disk
    3   Local Disk
    4   Network Drive
    5   Compact Disc
    6   RAM Disk
    */

    try {
        var wmi = GetObject("winmgmts:{impersonationLevel=impersonate}");
        for(var e = new Enumerator(wmi.InstancesOf("Win32_LogicalDisk")); !e.atEnd(); e.moveNext()) {
            var s = e.item();   
            WScript.Echo(s.Name + " ; " + s.DriveType + " ; " + s.VolumeName);
        }
    }
    catch (err) {
        WScript.Echo(err.message);
    }
}

Under Win8, all drives are listed. Under XP, there is no output or error. Does anyone know why? Thanks.

Edit: The WinXP user I'm testing with is part the Adminsitrators group.

Was it helpful?

Solution

FYI, it was a permissions issue - which I couldn't resolve. So, I came up with this WSH solution from here:

var objFSO = new ActiveXObject("Scripting.FileSystemObject");
for(var e = new Enumerator(objFSO.Drives); !e.atEnd(); e.moveNext()) {
    var objDrive = e.item();
    WScript.Echo("Available space: " + objDrive.AvailableSpace);
    WScript.Echo("Drive letter: " + objDrive.DriveLetter);
    WScript.Echo("Drive type: " + objDrive.DriveType);
    WScript.Echo("File system: " + objDrive.FileSystem);
    WScript.Echo("Free space: " + objDrive.FreeSpace);
    WScript.Echo("Is ready: " + objDrive.IsReady);
    WScript.Echo("Path: " + objDrive.Path);
    WScript.Echo("Root folder: " + objDrive.RootFolder);
    WScript.Echo("Serial number: " + objDrive.SerialNumber);
    WScript.Echo("Share name: " + objDrive.ShareName);
    WScript.Echo("Total size: " + objDrive.TotalSize);
    WScript.Echo("Volume name: " + objDrive.VolumeName);
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top