【问题标题】:How can I get Windows Powershell Get-ItemProperty to only show the property I want?如何让 Windows Powershell Get-ItemProperty 仅显示我想要的属性?
【发布时间】:2010-10-02 03:32:35
【问题描述】:

使用 powershell 时,有时我只想显示文件的名称或全名。
据我所知,这样做的方法是使用Get-ItemPropertygp 的别名)并传递-n fullname,例如

PS C:\Dev> gp . -n fullname

值得注意的是,我想在更长的脚本中使用它,结合foreachwhere,等等

Powershell 然后显示全名,但它也显示一堆其他的东西,如下:

PSPath       : Microsoft.PowerShell.Core\FileSystem::C:\Dev
PSParentPath : Microsoft.PowerShell.Core\FileSystem::C:\
PSChildName  : Dev
PSDrive      : C
PSProvider   : Microsoft.PowerShell.Core\FileSystem
fullname     : C:\Dev

我的问题是,我怎样才能让 powershell 只显示我想要的属性(全名),而不是用所有其他东西弄乱显示。 Get-ItemProperty 是正确的做法吗?

更新:

如果我这样做:

ls -r | ?{ $_.fullname -match "foo" }

这给了我一系列列表,每个目录一个,显示每个目录中的所有“foo”文件。我想做的是将这些多个列表合并为一个列表,而不显示ModeLastWriteTimeLength 或任何其他不相关的内容。如果Get-ItemProperty 不是展示这些东西的正确方式,那是什么?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    有很多方法。我认为您正在寻找 Get-ChildItem:

    PS > get-childitem x.txt |选择全名

        FullName
        --------
        C:\WINDOWS\system32\WindowsPowerShell\v1.0\x.txt
    
    
        PS > get-childitem x.txt | select name
    
        Name
        ----
        x.txt
    
    
        PS > get-childitem x.txt | % { $_.fullname }
        C:\WINDOWS\system32\WindowsPowerShell\v1.0\x.txt
        PS >
    

    您可以使用 Get-ItemProperty,但我认为它更适用于注册表之类的东西。

    PS > Get-ItemProperty x.txt | select name
    
    Name
    ----
    x.txt
    

    Format-Table,别名 ft 也很好了解...

    PS > gci x.txt | format-table -a fullname,length
    
    FullName                                         Length
    --------                                         ------
    C:\WINDOWS\system32\WindowsPowerShell\v1.0\x.txt    126
    

    Get-ChildItem 的常用别名是 ls、dir 和 gci。在罗马时,我会选择 gci。

    【讨论】:

    • ls blha blah |选择名称做到了:-)
    • 顺便说一句,这是因为 FileInfo 和 DirectoryInfo 对象的默认输出格式。使用 Select-Object 或 Format-Table 专门指定输出。
    【解决方案2】:

    你可以使用(取决于你到底需要什么):

    (gi c:\temp\file -ea 0).fullname
    
    (gi c:\temp\file -ea 0) | select -ExpandProperty fullname
    

    C:\temp\文件

    -ea: 如果文件不存在则不显示错误

    【讨论】:

      【解决方案3】:

      只是附加注释... PowerShell 在屏幕上显示信息的方式也可以通过更改其扩展类型系统 (ETS) 来修改。

      查看 Update-TypeData 的帮助。

      走这条路确实会引入一些更高级的主题...

      【讨论】:

        【解决方案4】:

        如果您在 foreach 循环中并且您有对您感兴趣的对象的引用,那么您是否尝试过类似以下的方法来回显该属性。

        foreach ($file in dir)
        {
          $file.fullname
        }
        

        【讨论】:

          【解决方案5】:

          我一直限制我将 Get-ItemProperty 用于导航提供程序,例如通过 Get-Item 或 get-ChildItem 获取数据的注册表。比较

          ls hklm:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
          gp hklm:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
          

          你要做的是直接使用属性

          ls | ? { $_.FullName -match "whatever"}
          

          【讨论】:

          • 这解决了一个我没有的无关问题。不过我不知道 -match,非常酷,谢谢
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-09-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-08
          • 2016-09-09
          相关资源
          最近更新 更多