以下命令:
Get-ChildItem | Get-Member
表明System.IO.DirectoryInfo
和System.IO.FileInfo
上有很多属性。
但是,以交互方式运行时,仅显示属性Mode
,LastWriteTime
,Length
和Name
。这些也是Get-ChildItem
通过管道传送到Format-Table
或Out-GridView
时显示的属性。
我的问题是,有没有办法以编程方式为任何给定对象获取这些默认属性的名称?即像这样的东西:
Get-DefaultProperties @(Get-ChildItem)[0]
应在数组中返回以下内容:Mode LastWriteTime Length Name
答案 0 :(得分:3)
以下是访问默认属性的简单,编程方式。
(Get-Item -Path $FolderPath).PSStandardMembers
结果输出将是 DefaultDisplayProperty 或 DefaultDisplayPropertySet 。
DefaultDisplayProperty
----------------------
Name
或
PSStandardMembers {DefaultDisplayPropertySet}
在第二种情况下,您可以访问基础属性,如下所示:
(Get-Item -Path $FilePath).PSStandardMembers.DefaultDisplayPropertySet
ReferencedPropertyNames : {LastWriteTime, Length, Name}
MemberType : PropertySet
Value : DefaultDisplayPropertySet {LastWriteTime, Length, Name}
TypeNameOfValue : System.Management.Automation.PSPropertySet
Name : DefaultDisplayPropertySet
IsInstance : False
然后,您可以使用点符号直接进入 ReferencedPropertyNames 数组。
答案 1 :(得分:2)
要了解PowerShell输出的对象属性,您应该阅读 about_Types.ps1xml:
Windows PowerShell安装目录中的Types.ps1xml文件 ($ pshome)是一个基于XML的文本文件,可以让你添加属性和 Windows PowerShell中使用的对象的方法。视窗 PowerShell具有内置的Types.ps1xml文件,可添加多个元素 到.NET Framework类型,但您可以创建其他类型 Types.ps1xml文件进一步扩展了类型。
例如,您会在PowerShell目录(FileSystem.format.ps1xml
)中找到%windir%\system32\WindowsPowerShell\v1.0\
,其中包含System.IO.DirectoryInfo
的定义:
<TableColumnItems>
<TableColumnItem>
<PropertyName>Mode</PropertyName>
</TableColumnItem>
<TableColumnItem>
<ScriptBlock>
[String]::Format("{0,10} {1,8}", $_.LastWriteTime.ToString("d"), $_.LastWriteTime.ToString("t"))
</ScriptBlock>
</TableColumnItem>
<TableColumnItem>
<PropertyName>Length</PropertyName>
</TableColumnItem>
<TableColumnItem>
<PropertyName>Name</PropertyName>
</TableColumnItem>
</TableColumnItems>
但是对于你的问题,除了解析ps1xml
之外,我还不知道一种干净的程序化方式来获得&#34;默认&#34;属性。您可以选择所需对象的第一个元素,并使用Out-String
获取可以解析的字符串:
((((Get-ChildItem)[0]) | out-string).Trim() -split "`n" | select -index 3).Trim() -split '\s+'
<强>输出:强>
Mode
LastWriteTime
Length
Name
请注意,这可能不适用于其他对象......
答案 2 :(得分:1)
Get-childitem
会根据您的位置生成不同类型的对象。如果您在注册表中,它将生成RegistryKey对象,而如果您在文件系统中,则将获得FileInfo或DirectoryInfo对象。
FileSystem.Format.ps1xml
文件(可在$pshome
中找到)定义文件系统对象(如文件和目录对象)的显示。如果您查看ViewDefinitions,您将找到默认格式化程序使用的值。
据我所知,没有&#34;解析&#34;没有找到这些默认值的方法。那个文件,但我可能是错的。