如何在PowerShell中按子目录分组并指定文件属性显示?
如何在PowerShell中选择文件属性的同时保留目录分组展示
问题原因
Select-Object会将Get-ChildItem输出的FileInfo/DirectoryInfo对象转换为通用的PSCustomObject,而PowerShell默认的目录分组展示是基于原对象类型实现的,因此分组效果会消失。
解决方案
方案1:用Format-Table指定显示属性(仅用于查看输出)
如果只是需要查看格式化后的结果,无需后续处理对象,直接用Format-Table替代Select-Object即可,它会保留原对象的类型信息,维持分组展示:
Get-ChildItem -Path 'C:\Program Files\Common Files' -Recurse -Include *.exe, *.bat, *.com, *.cmd, *.dll -ErrorAction Ignore | Format-Table -Property LastWriteTime, Length, @{N='Owner';E={$_.GetAccessControl().Owner}}, Name
方案2:保留原对象并添加自定义属性(适合后续处理对象)
如果需要保留原对象以便后续操作,可通过Add-Member为原FileInfo对象添加Owner属性,既保留原对象类型(维持分组),又能显示自定义属性:
Get-ChildItem -Path 'C:\Program Files\Common Files' -Recurse -Include *.exe, *.bat, *.com, *.cmd, *.dll -ErrorAction Ignore | ForEach-Object { $_ | Add-Member -MemberType NoteProperty -Name Owner -Value $_.GetAccessControl().Owner -PassThru } | Select-Object -Property LastWriteTime, Length, Owner, Name
这里Add-Member的-PassThru参数会返回添加了属性的原对象,后续的Select-Object仅筛选要显示的属性,但对象类型仍是FileInfo,因此默认格式化仍会按目录分组。
内容的提问来源于stack exchange,提问作者Sigshane
相关产品推荐
相关产品推荐

