2014-01-24 38 views
0

下面的代碼片段工作的Windows 8下而不是Windows XP中:WSH獲取驅動器名稱

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); 
    } 
} 

在Win8中,所有驅動器被列出。在XP中,沒有輸出或錯誤。有誰知道爲什麼嗎?謝謝。

編輯:我測試的WinXP用戶是Adminsitrators組的一部分。

+0

看起來像一個更新的API。我見過一個更老的驅動器列表片斷左右浮動,與XP我們FileSystemObjects工作。也許是老人們仍然工作或者你有叉子。 – dandavis

回答

1

僅供參考,這是一個權限問題 - 我解決不了。所以,我想出了這個WSH解決方案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); 
}