【问题标题】:Powershell 5.0 / ISEPowershell 5.0 / ISE
【发布时间】:2017-04-21 07:27:11
【问题描述】:

我有一个示例代码 sn-p 建议使用

(Get-Process | Where-Object {$_.WorkingSet64 -gt 20mb}).Count

返回使用 > 20Mb 的所有进程的计数。

它可以工作,但是在键入时,Intellisense 或“Tab”键都不会显示此属性,而是显示单个进程的属性 - 我认为这具有误导性。

我明白,指定一个项目属性只会给我该属性的列表,但是有没有一种方法可以很容易地看到,一般来说,所有有效的属性是什么,包括列表聚合等?

即使分配给变量

$processes = Get-Process | Where-Object {$_.WorkingSet64 -gt 20mb}

直到实际运行分配并分配值后,才会将“计数”显示为 $processes 的有效属性 - 在编写脚本时,它仍会显示单个项目的属性。

对我来说,不涵盖所有选项的 Intellisense/Tab 帮助无法达到目的……(不必记住数百个对象/函数及其属性/参数)。

有什么办法可以改善这种情况吗?我错过了一些语法技巧吗?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    找出对象所有属性的正确方法是将输出通过管道传送到Get-Member

    Get-Process | Get-Member
    

    有时有些隐藏的属性和方法只有添加-force开关才能看到:

    Get-Process | Get-Member -Force
    

    count 属性是一个自动属性,始终可用于任何集合对象,但未明确列为属性。另一个自动属性的例子是length

    【讨论】:

    • 嗯,也许我不清楚。结果我不想返回属性列表,我想看看可能的选项是在编码时,而不必“只知道”,或者运行测试代码来找出.例如,我希望 Intellisense 或双选项卡选项向我显示有效选项。在过去的 13 年里,我一直是一名 C# 程序员,所以我已经习惯了这种帮助......有一段时间了!这绝对是一个学习和生产力的辅助工具。如果 Powershell 只做了半途而废的实现,我想我觉得这比没有更糟糕(至少你知道自己的立场!)
    • 如您所见,智能感知将返回对象的所有属性,除了自动属性,如 countlength,您只需要记住它们始终可用。跨度>
    • 我已经开始聊天,仅供参考:chat.stackoverflow.com/rooms/info/142251/…
    【解决方案2】:

    使用@() 强制数组类型在需要时很方便。

    例如$processes = @(Get-Process | Where-Object {$_.WorkingSet64 -gt 20mb}). 将显示“计数”和其他数组属性。

    除此之外,假设 Intellisense 有各种限制/缺点,我将不得不学习......叹息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多