如何在 C# 中获得 Windows UWF space

How to get Windows UWF available space in C#

我想 运行 在 C# 程序中执行以下 shell 命令:

uwfmgr overlay get-availablespace

一个简单的解决方案是像这样调用 cmd 进程:

var ps = new ProcessStartInfo("cmd")
{
    RedirectStandardError = true,
    RedirectStandardOutput = true,
    UseShellExecute = false,
    CreateNoWindow = true,
    FileName = "cmd.exe",
    Arguments = "/user:Administrator /c uwfmgr overlay get-availablespace"
};

using (Process p = Process.Start(ps))
{
    output = p.StandardOutput.ReadToEnd();
    p.WaitForExit();
}

但是是否有一个简单的 API 可以调用以避免解析进程的输出字符串? 另一个问题是我必须以管理权限调用cmd。

更新: 我尝试使用 WMI Api 但没有成功,这是我的代码:

var scope = new ManagementScope(@"root\standardcimv2\embedded");
var uwfClass = new ManagementClass(scope.Path.Path, "UWF_Overlay", null);
foreach (ManagementObject instance in uwfClass.GetInstances())
{
    var result = instance.InvokeMethod("AvailableSpace", null);
    break;
}

这是获取 UWF AvailableSpaceOverlayConsumption 的工作代码。

var scope = new ManagementScope(@"root\standardcimv2\embedded");
var uwfClass = new ManagementClass(scope.Path.Path, "UWF_Overlay", null);
foreach (ManagementObject instance in uwfClass.GetInstances())
{
    var availableSpace = Convert.ToInt32(instance.GetPropertyValue("AvailableSpace").ToString());
    var overlayConsumption = Convert.ToInt32(instance.GetPropertyValue("OverlayConsumption").ToString());
}