在C#中按名称访问PSObject属性

17
例如,我有一个包含两个属性(id和transactionName)的PSObject交易,看起来像这样: transaction { id: 123 transactionName : tranName1 }
如果交易名称为tranName1,则我想返回该交易的id。
在powershell脚本中,我们似乎可以简单地执行以下操作:
if $transaction.transactionName -eq tranName return $transaction.id

然而在C#中,由于无法通过名称识别属性,它将会给出错误...有任何想法如何在C#中实现吗?


可能是因为属性名称是 transactionName - p.s.w.g
@p.s.w.g 即使我更正了名称,也无法工作,因为 C# 将 transaction 视为 PSObject,它不包含“transactionName”的成员... - jamesdeath123
没有发布C#代码。无论如何,只需找到类型,然后查看文档以获取如何使用它的基本想法..但是,我怀疑一开始使用正确类型的“transaction”值会更有用。 - user166390
@pst Mike Shepard提供了我的答案解决方案 :) 谢谢你分享 :) - jamesdeath123
2个回答

39

试试像这样:

psobjectvariable.Properties["transactionName"].Value

我知道这是一个旧回复,但是关于子属性呢?例如:$transaction.transactionName.propertyA - Roberto
2
@Roberto 如果 propertyA 是一个 PSObject,你可以这样做:((PSObject)psobjectvariable.Properties["transactionName"].Value).Properties["propertyA"] - Patrick
@Patrick不进行强制转换,请注意...否则会出现错误。请尝试:PSObject.AsPSObject - rios0rios0

4

以下是一些我没想到会奏效的东西,但确实有效。

dynamic x = psobjectvariable;
Console.Write(x.transactionName);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接