C# 如何在C中处理Powershell格式列表输出

C# 如何在C中处理Powershell格式列表输出,c#,powershell,C#,Powershell,在上面的示例中,如果我单独使用Get Service,我就能够获得系统上服务的名称和状态。但是,如果我对Get Service | Format List-Property Name使用相同的方法,Status Get会出现异常。在PowerShell中运行命令时,结果通常会作为CLR对象返回。因此,Get Service命令返回ServiceController类型的对象,这就是为什么可以查询名称和状态 当您将输出传递到Format List时,该命令将对象转换为用于显示信息的对象列表:如果检

在上面的示例中,如果我单独使用Get Service,我就能够获得系统上服务的名称和状态。但是,如果我对Get Service | Format List-Property Name使用相同的方法,Status Get会出现异常。

在PowerShell中运行命令时,结果通常会作为CLR对象返回。因此,Get Service命令返回ServiceController类型的对象,这就是为什么可以查询名称和状态

当您将输出传递到Format List时,该命令将对象转换为用于显示信息的对象列表:如果检查Format List的结果,您将看到它是一个混合数组,主要包含FormatEntryData对象。知道了这一点,很明显,您在格式列表的输出上找不到Status属性:您不再有服务对象了

通过运行这两个代码段,您可以看到差异,这两个代码段将显示结果中对象的类型:

PowerShell psh = PowerShell.Create();
//psh.AddScript("Get-Service | Format-List -Property Name, Status");
psh.AddScript("Get-Service");

Collection<PSObject> result = psh.Invoke();

foreach (PSObject msg in result)
{
    Console.WriteLine(msg.Properties["Name"].Value);
}

我建议改为使用选择对象更改格式列表。谢谢您的快速回复。仍然需要问,如果是基于中的格式列表或格式表,是否仍有方法获取信息c@Vic你为什么要这么做?格式列表用于设置显示格式,而不是进一步处理数据。或者这是一个假设性的问题?@Vic:我想,你可以从字符串中手动解析出来,但只能对显示的属性进行解析。我不知道你为什么要尝试。也许你应该解释一下你想做什么,也许还有另一种选择?从|格式列表中获取数据
Get-Service | % { $_.GetType().FullName }

Get-Service | Format-List | % { $_.GetType().FullName }