You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell中Get-ChildItem的Mode显示属性源自何处?

关于Get-ChildItem输出中Mode列来源的疑问

作为Jacek提出的「获取命令结果标题名称」问题的延伸,我已经在对应回答里解释了通用的DefaultDisplayPropertySet概念,但搞不懂Dir(也就是Get-ChildItem)命令输出里为啥会显示Mode这一列:

Get-ChildItem

    Directory: C:\Path

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---            9/7/2023 11:07 AM            383 Test.txt

因为执行下面这条命令,输出里根本没列出Mode属性:

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

有没有人能解释下这个Mode列到底是哪来的?


解答:Mode列的来源

Get-ChildItem输出里的Mode列,并不是从对象的DefaultDisplayPropertySet来的,而是PowerShell通过预设的格式化文件定义的。

PowerShell为不同类型的对象提前写好了展示规则,这些规则存在.ps1xml格式的文件里。对于Get-ChildItem返回的FileInfo和DirectoryInfo对象,对应的规则在FileSystem.Format.ps1xml文件中。

在这个文件的视图定义里,明确给FileInfo和DirectoryInfo加了Mode列——这个Mode并不是对象本身的固有属性,而是PowerShell动态给文件系统对象加上的脚本属性,用来简洁展示文件/目录的权限、特性(比如只读、隐藏、归档之类的)。

你可以用这条命令查看这个动态属性的定义:

(Get-ChildItem -File)[0] | Get-Member -Name Mode

输出会显示Mode是一个ScriptProperty,它的值是通过脚本块计算出来的,不是直接存在对象的属性集合里,所以自然不会出现在DefaultDisplayPropertySet.ReferencedPropertyNames的结果中。

内容的提问来源于stack exchange,提问作者iRon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 14:36:04