有没有办法获得作为NTFS文件夹安装的iSCSI驱动器上的可用空间

时间:2014-10-23 15:17:09

标签: c# iscsi

我有一堆iSCSI驱动器mounted as NFTS folders(以避免耗尽所有驱动器号)充当迷你SAN,我想获得有关其可用空间的信息。基本原因是当空间低于某个阈值时获得警告,作为执行大量其他检查的计划任务的一部分。

有没有办法做到这一点,最好是使用C#(通过WMI,P / Invoke或其他)?当然,任何脚本解决方案也都很棒,因为我可以调用它(PowerShell)?我首先尝试使用DriveInfo使用这样的路径初始化的乐观路由,但它只返回有关根卷而不是挂载的信息。我还尝试枚举Win32_DiskPartitionWin32_LogicalDiskWin32_MappedLogicalDisk之类的内容,但根本没有获得这些内容。

1 个答案:

答案 0 :(得分:0)

正如@FrédéricHamidi解释的那样,WMI存储卷提供程序中的Win32_Volume类显示有关已装入卷的正确空间信息。

用法示例(C#)类似于:

// iSCSI drive mounted in a NTFS folder
var ntfsPath = @"x:\iscsi\volume";

// it's good to know that backspaces must be escaped in WMI queries
var cmd = string.Format(
    "SELECT * FROM Win32_Volume WHERE Name LIKE '{0}%'", 
    ntfsPath.Replace(@"\", @"\\"));

using (var searcher = new ManagementObjectSearcher(cmd))
{
    foreach (ManagementObject queryObj in searcher.Get())
    {
        var name = (string)queryObj["Name"];
        var freeSpaceInBytes = (ulong)queryObj["FreeSpace"];
    }
}