PowerShell - 获取命令的结果标头名称

2024-01-17

如何获取PowerShell命令的结果类型?我感兴趣的是如何通过控制台命令而不是搜索文档来实现这一点

例如:我输入dir然后命令将返回带有此类标题的表

  • Mode
  • 最后写入时间
  • Length
  • Name

我的问题是

  1. 如何运行命令来获取 dir (这四个字符串)的结果标头?
  2. does dir命令有任何附加标头吗?如果是的话如何获得它们?

来补充@亚伯拉罕齐纳拉 https://stackoverflow.com/users/14903754/abraham-zinala评论:

dir(别名为Get-ChildItem https://learn.microsoft.com/powershell/module/microsoft.powershell.management/get-childitem) 返回fileinfo https://learn.microsoft.com/dotnet/api/system.io.fileinfo和目录信息对象。如果您想查看所有可用的成员和方法,您可以通过管道连接到获取会员 https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/get-member。如果您想选择除显示内容之外的所有属性,您可以通过管道连接到选择对象 https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/select-object并指定单个属性,或全部使用*

默认情况下Get-Member隐藏了一些成员以及PSStandardMembers财产:

Get-ChildItem -File | Get-Member -Name PSStandardMembers

这些成员只有在您使用时才会透露GetMember -Force switch:

Get-ChildItem -File | Get-Member -Name PSStandardMembers -Force

   TypeName: System.IO.FileInfo

Name              MemberType Definition
----              ---------- ----------
PSStandardMembers MemberSet  PSStandardMembers {DefaultDisplayPropertySet}

此属性包括默认情况下以表格格式显示的成员(也称为'... |格式表' https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/format-table)

(Get-ChildItem -File)[0].PSStandardMembers.DefaultDisplayPropertySet.ReferencedPropertyNames
LastWriteTime
Length
Name

我不知道为什么具体Mode属性也以表格格式显示,但实际上并未在此处列出,并且如果有人可以解释这部分,我将很高兴 https://stackoverflow.com/questions/77058602/where-does-the-display-property-mode-come-from

The Select-Object确实会删除这个装饰:

Get-ChildItem -File | Select-Object * | Format-Table  -Property @{ e='*'; width = 7 }

PSPath  PSParen PSChild PSDrive PSProvi PSIsCon Mode    ModeWit Version BaseNam Resolve Target  LinkTyp  Length Directo Directo IsReadO FullNam Extensi Name     Exists Creatio Creatio LastAcc LastAcc LastWri LastWri LinkTar UnixFil Attribu
        tPath   Name            der      tainer         houtHar Info    e       dTarget         e               ryName  ry          nly e       on                      nTime   nTimeUt essTime essTime teTime  teTimeU get       eMode     tes
                                                        dLink                                                                                                                   c               Utc             tc
------  ------- ------- ------- ------- ------- ----    ------- ------- ------- ------- ------  -------  ------ ------- ------- ------- ------- ------- ----     ------ ------- ------- ------- ------- ------- ------- ------- ------- -------
Micros… Micros… dir.ps1 P       Micros…   False -a---   -a---   File: … dir     P:\Sta…                     383 P:\Sta… P:\Sta…   False P:\Sta… .ps1    dir.ps1    True 9/7/20… 9/7/20… 9/7/20… 9/7/20… 9/7/20… 9/7/20…              -1 Archive

但您可以简单地创建自己的DefaultDisplayPropertySet在每个对象上这样:

$DefaultDisplayPropertySet = [System.Management.Automation.PSPropertySet]::new(
    'DefaultDisplayPropertySet',[string[]]('Name', 'FullName')
)
$PSStandardMembers = [System.Management.Automation.PSMemberInfo[]]$DefaultDisplayPropertySet
$Dir = Get-ChildItem -File | Select-Object * | Foreach-Object {
    $_ | Add-Member MemberSet PSStandardMembers $PSStandardMembers -PassThru
}

对象列表($Dir) 仍然具有所有可用的标准属性,例如:

$Dir.LastWriteTime

Thursday, September 7, 2023 11:07:32 AM

但它在输出到显示器时仅显示两个默认属性:

$Dir

Name    FullName
----    --------
dir.ps1 C:\FullPath\Test.ps1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PowerShell - 获取命令的结果标头名称 的相关文章

随机推荐