0

我有一堆 iSCSI 驱动器安装为 NFTS 文件夹(以避免耗尽所有驱动器号)充当迷你 SAN,我想获取有关它们的可用空间的信息。基本原因是当空间低于某个阈值时收到警告,作为执行一系列其他检查的计划任务的一部分。

有没有办法做到这一点,最好使用 C#(通过 WMI、P/Invoke 或其他方式)?当然,任何脚本解决方案也会很棒,因为我可能无论如何都可以调用它(PowerShell)?我首先尝试了乐观路由,DriveInfo使用这样的路径进行了初始化,但它只是返回有关根卷而不是挂载的信息。我也尝试过枚举类似的东西,Win32_DiskPartition但根本没有得到这些驱动器。Win32_LogicalDiskWin32_MappedLogicalDisk

4

1 回答 1

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"];
    }
}
于 2014-11-11T15:09:32.390 回答