Tshumore Ответов: 0

Как получить статистику дискового пространства для кластеризованного диска


У меня есть рабочая программа, которая извлекает информацию о диске, такую как FreeSpace, TotalSpace и т. д. с удаленного сервера. Однако у меня есть проблема, что я не могу получить эти статтисты для всех кластеризованных дисков, сопоставленных на сервере. Этот запрос возвращает только информацию для локального диска (логического диска).

Я могу получить размеры дискового пространства, как показано ниже :

<pre>public List<Disk> GetEnvironmentStatistics()
        {
            var serverIP = Convert.ToString(System.Web.HttpContext.Current.Session["ServerIP"]); 
         
            List<Disk> diskinfo = new List<Disk>();

            //Add System.Management to access these utilities
            ConnectionOptions options = new ConnectionOptions
            {

                Username = Convert.ToString(System.Web.HttpContext.Current.Session["Username"]),
                Password = Convert.ToString(System.Web.HttpContext.Current.Session["Password"]),
                Authority = Convert.ToString(System.Web.HttpContext.Current.Session["Authority"]),
            };

            //root - root of the tree, cimv2 - version           
            ManagementScope scope = new ManagementScope("\\\\" + serverIP + "\\root\\CIMV2", options);
            scope.Connect();

            SelectQuery query = new SelectQuery("Select * from Win32_LogicalDisk");
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
            ManagementObjectCollection queryCollection = searcher.Get();

           
                foreach (ManagementObject mo in queryCollection)
                {
                    Disk disk = new Disk();
                    disk.DiskName = mo["Name"].ToString();                  
                    disk.DeviceId = mo["DeviceID"].ToString();
                    disk.SystemName = mo["SystemName"].ToString();

                    disk.FreeSpace = Convert.ToDecimal(mo["FreeSpace"]);
                    var formattedFreeSpace = Helpers.DiskSpaceInGigabytes(disk.FreeSpace ?? 0);
                    disk.FreeSpace = Decimal.Truncate(formattedFreeSpace);
                
                    disk.TotalSpace = Convert.ToDecimal(mo["Size"]);
                    var formattedTotalSpace = Helpers.DiskSpaceInGigabytes(disk.TotalSpace ?? 0);
                    disk.TotalSpace = Decimal.Truncate(formattedTotalSpace);
                   
                    disk.UsedSpace = disk.TotalSpace - disk.FreeSpace;
                    
                    var HDPercentageUsed = 100 - (100 * disk.FreeSpace / disk.TotalSpace);
                    disk.PercentageUsed = Convert.ToInt32(HDPercentageUsed);
                    diskinfo.Add(disk);
                }

              
                   
            return diskinfo;
        }


Я вошел на сервер и отметил, что другие диски отображаются следующим образом: диск кластера
.

Что я уже пробовал:

Как получить информацию о пространстве на кластеризованных дисках с помощью WMI? Есть ли способ указать тип диска в WMI , в данном случае указав, что это кластерный диск, а не локальный диск.. я хотел бы думать, что если я могу указать тип диска, то я также должен быть в состоянии получить информацию для кластерных дисков.

Я уже давно смотрю на это https://www.avianwaves.com/Blog/ArticleID/178/PowerShell-WMI-Free-Disk-Space-from-a-Cluster-Shared-Volume-CSV-in-a-Windows-Failover-Cluster но он не совсем соответствует моим требованиям, а также его Powershell .

0 Ответов