【问题标题】:Powershell - Display value of an object's properties, where the property names are like '*quota*'Powershell - 显示对象属性的值,其中属性名称类似于'*quota*'
【发布时间】:2017-04-12 06:26:56
【问题描述】:

根据主题,我正在尝试获取特定邮箱的属性名称和与该属性关联的值。

因此,下面的行为我提供了可用对象属性的一个很好的列表,并且输出中显示的默认列具有标题“名称”

Get-Mailbox -Identity "Person Name" | gm

然后我想说:

  1. 对于对象:“人名邮箱”
  2. “人名邮箱”属性的名称类似于“quota
  3. 列出实际属性名称及其“人名邮箱”的值

我使用 -ExpandProperty/Select-Object/Where-Object 尝试了很多方法,但都失败了。我确信这是非常基本的,但 Powershell 绝对不是我的强项。谁能告诉我如何正确构建这个管道?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    您不需要使用Where-Object,只需Select-Object

    Get-Mailbox -Identity "Person Name" | Select-Object -Property *quota*
    

    【讨论】:

    • 哇,这非常简单,谢谢!我有这种可怕的怀疑,我也过于复杂了。我仍然在一定程度上与 powershell 的“对象”管道与 Bash 等其他 shell 的“文本”管道相比。
    【解决方案2】:

    您似乎使用了正确的命令行开关。 Where-Object 过滤器。 Select-Object 选择特定属性。

    根据我的经验,有时您在控制台上看到的内容与实际的属性名称不匹配,因为有一个格式化程序甚至可以更改列名。如果您使用该虚拟属性名称驱动Where-ObjectSelect-Object,那么它们确实会失败。有时,输出并不是真正适用于这些 cmdlet 的记录集。

    我的建议是,当事情变得奇怪时,请始终检查对象的类型。从$items=Get-Mailbox -Identity "Person Name"开始。 然后$items.GetType() 显示实际的.net 类型。 然后$items.Count 显示它实际上是一个数组还是单个对象。 然后$items|ForEach-Object {$_.GetType()} 揭示了每个对象的类型。

    $items|Get-Member 也有助于找出属性名称。如有必要,也在您的循环中使用它。

    这就是我解决奇怪行为的方法,如果您可以发布您的发现和您尝试使用 Where-ObjectSelect-Object 的代码,那将是一个很大的帮助。

    【讨论】:

    • 感谢 Alex 的指导,非常感谢。幸运的是,下面的 Moshe Perez 已经做到了(我可以非常优雅地补充一下)。技术和计算方面的课程与以往一样,请在了解世界末日/花哨的理论之前彻底检查基础知识!不过,您的建议非常好,我感谢您对自己解决此类问题的结构化方法的反馈。干杯。
    猜你喜欢
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 2018-01-13
    • 2017-04-02
    • 1970-01-01
    • 2012-04-18
    • 2023-03-08
    • 2021-03-24
    相关资源
    最近更新 更多