C# 是否有办法将iSCSI驱动器上的可用空间装载为NTFS文件夹
我有一堆iSCSI驱动器(以避免耗尽所有驱动器号)充当迷你SAN,我想了解有关其可用空间的信息。基本原因是在空间低于某个阈值时收到警告,这是执行一系列其他检查的计划任务的一部分C# 是否有办法将iSCSI驱动器上的可用空间装载为NTFS文件夹,c#,iscsi,C#,Iscsi,我有一堆iSCSI驱动器(以避免耗尽所有驱动器号)充当迷你SAN,我想了解有关其可用空间的信息。基本原因是在空间低于某个阈值时收到警告,这是执行一系列其他检查的计划任务的一部分 有没有办法做到这一点,最好使用C#(通过WMI、p/Invoke或其他方式)?当然,任何脚本解决方案都很好,因为我可能无论如何都可以调用它(PowerShell)?我首先尝试了乐观路由,使用DriveInfo使用这样的路径初始化,但它只返回有关根卷的信息,而不是装载的信息。我也尝试过枚举诸如Win32\u DiskPar
有没有办法做到这一点,最好使用C#(通过WMI、p/Invoke或其他方式)?当然,任何脚本解决方案都很好,因为我可能无论如何都可以调用它(PowerShell)?我首先尝试了乐观路由,使用
DriveInfo
使用这样的路径初始化,但它只返回有关根卷的信息,而不是装载的信息。我也尝试过枚举诸如Win32\u DiskPartition
、Win32\u LogicalDisk
和Win32\u MappedLogicalDisk
之类的东西,但根本没有得到这些驱动器。正如@FrédéricHamidi解释的那样,WMI存储卷提供程序中的类显示了有关已装入卷的正确空间信息
用法示例(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"];
}
}
这显然是错误的。看起来它依赖于
Win32_卷
WMI类。@FrédéricHamidi:嘿,非常感谢<代码>Win32_卷确实列出了这些驱动器。您可以将此添加为答案。