1

我有一个执行 PowerShell 脚本的片段

using (var ps = PowerShell.Create())
{
    ps.AddScript("function Test() { return Get-Disk -Number 0 } ");
    ps.Invoke();
    ps.AddCommand("Test");
    var results = ps.Invoke();
    var disk = results.First();

    MyDisk myDisk = // do something to convert disk to myDisk
}

Debuggin,它进入了他的内部disk

调试器快照

我应该如何处理这个对象(CimObject)?我想从“名称”和“数字”属性中获取值。

澄清一下,我要处理的对象与此类型相同(以管理员身份运行 PowerShell)

PS C:\windows\system32> $disk = Get-Disk -Number 0
PS C:\windows\system32> $disk.GetType();

我如何与之交互?

谢谢!

4

1 回答 1

1

我认为没有任何简单的方法可以将 PowerShell 输出转换为更易于处理的格式。您需要“手动”提取所需的属性。例如,您可以像这样获取“AllocatedSize”值:

var allocatedSize = results.First().Members["AllocatedSize"].Value;

如果您想要基于这些值的自己的类型,那么您可以执行以下操作:

定义您的类型(更改属性以适合您想要的类型):

public class MyDisk
{
   public long AllocatedSize { get; set; }
   public string FriendlyName { get; set; }
   public bool IsBoot { get; set; }
   public int Number { get; set; }
}

添加一个进行转换的辅助方法:

private static MyDisk ConvertToMyDisk(PSMemberInfoCollection<PSMemberInfo> item)
{
    return new MyDisk
    {
        AllocatedSize = long.Parse(item["AllocatedSize")].Value.ToString()),
        FriendlyName = item["FriendlyName"].Value.ToString(),
        IsBoot = bool.Parse(item["IsBoot"].Value.ToString()),
        Number = int.Parse(item["Number"].Value.ToString())
    };
}

然后,您可以使用一些基本的 LINQ 将返回值转换为您自己的类型:

List<MyDisk> myDisks = results.Select(d => ConvertToMyDisk(d.Members)).ToList();
于 2018-06-29T13:38:36.867 回答