Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 属性未出现在Get-Member cmdlet中,并且在放入时正在注册值。符号_Powershell - Fatal编程技术网

Powershell 属性未出现在Get-Member cmdlet中,并且在放入时正在注册值。符号

Powershell 属性未出现在Get-Member cmdlet中,并且在放入时正在注册值。符号,powershell,Powershell,属性未出现在Get-Member cmdlet中,并且在放入时正在注册值。符号 Running Get-ChildItem | Get-member TypeName: System.IO.DirectoryInfo Name MemberType Definition ---- ---------- ---------- LinkType CodeProper

属性未出现在Get-Member cmdlet中,并且在放入时正在注册值。符号

Running
Get-ChildItem | Get-member
TypeName: System.IO.DirectoryInfo

Name                      MemberType     Definition
----                      ----------     ----------
LinkType                  CodeProperty   System.String LinkType{get=GetLinkType;}
Mode                      CodeProperty   System.String Mode{get=Mode;}….
没有Count属性,对于GCI cmdlet,度量对象cmdlet有Count属性,如图所示

PS C:\Users\NiceTry5> measure-object | get-member




TypeName: Microsoft.PowerShell.Commands.GenericMeasureInfo

Name        MemberType Definition
----        ---------- ----------
Equals      Method     bool Equals(System.Object obj)
GetHashCode Method     int GetHashCode()
GetType     Method     type GetType()
ToString    Method     string ToString()
Average     Property   System.Nullable[double] Average {get;set;}
Count       Property   int Count {get;set;}
那么,为什么度量对象cmdlet的count属性为GCI cmdlet注册一个值

PS C:\Users\NiceTry5> (GCI).count
32
我相信count属性必须属于某种包含GCI cmdlet的超集,并且在运行Get member时隐藏,尽管我不确定。

  • Get-Member
    对通过管道接收的单个对象进行操作,并返回关于其中不同类型的信息

    • 因此,通过以文件系统为目标的
      Get ChildItem
      命令的输出,您将看到有关类型
      system.IO.DirectoryInfo
      和/或
      system.IO.FileInfo
      -的信息,而这些类型没有
      .Count
      属性

    • 要检查类似集合的类型本身(而不是其元素),请将其传递给
      获取成员的
      -InputObject
      参数,而不是使用管道;e、 g,
      获取成员-InputObject(获取子项)

  • (…)
    围绕一个输出多个对象的命令隐式地将这些对象收集到一个
    [object[]
    数组中,并且任何数组都有一个
    .Count
    属性,这得益于它实现的
    IList
    接口

    • 这就是说,PowerShell(从v3开始)隐式地提供了
      .Count
      属性,即使是在标量上,也是为了统一标量和集合的处理
      ;e、 例如,
      (获取日期).Count
      产生
      1
      ,以及
      'foo'。Count
      (42).Count
      (原文如此)-然而,
      Get Member
      不显示此隐式
      .Count
      属性。

      • 您甚至可以将索引(
        […]
        )与标量一起使用,以便将它们视为单个元素数组;e、 例如,
        (42)[0]
        42
        相同-有关更多信息,请参阅(一个显著的例外是
        [string]
        ,因为该类型本身将索引定义为访问字符串中的单个字符;例如,
        'foo'[0]
        'f'

明显的陷阱

  • 设置StrictMode-版本2
    或更高版本生效时,使用隐式
    .Count
    属性失败

    • e、 例如,
      设置严格模式-版本2;(42).计数
      失败,因为在此对象上找不到属性“Count”。

    • 中讨论了这种有问题的行为

  • 类似集合的类型本身没有
    .Count
    属性,例如惰性枚举,会导致对每个元素调用
    .Count
    ,原因是:

    • e、 例如,
      [System.IO.Directory]::EnumerateFiles('..).Count
      -因为
      EnumerateFiles()
      返回一个延迟枚举的
      [System.Collections.Generic.IEnumerable[string]
      实例,因此该实例不能有
      .Count
      属性-在每个枚举的路径上调用
      .Count
      ,产生一个
      1
      s的数组,因为每个单独的路径(作为标量)都有一个
      1
      的计数