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

如何用PowerShell获取文件/目录所有者及修改时间等属性

解决Get-ChildItem的需求方案

1. 完整命令(含所有者、递归、指定属性)

要获取文件/目录的所有者,需通过Get-Acl读取权限信息;添加-Recurse参数实现递归遍历。针对Date Modified和Date Last Saved的区分:前者对应系统层面的LastWriteTime(所有文件/目录都有),后者是仅Office文档等特定文件具备的扩展元数据,需通过Shell对象读取。

基础版(含所有者、递归)

Get-ChildItem -Recurse | Select-Object Mode, 
    @{Name='FullPath'; Expression={$_.FullName}},
    CreationTime,
    @{Name='DateModified'; Expression={$_.LastWriteTime}},
    LastAccessTime,
    Length,
    @{Name='Owner'; Expression={(Get-Acl $_.FullName).Owner}} | 
Format-Table -AutoSize

进阶版(添加Date Last Saved)

注意:Date Last Saved仅对支持元数据的文件有效,普通文件会返回空值:

Get-ChildItem -Recurse | Select-Object Mode, 
    @{Name='FullPath'; Expression={$_.FullName}},
    CreationTime,
    @{Name='DateModified'; Expression={$_.LastWriteTime}},
    LastAccessTime,
    Length,
    @{Name='Owner'; Expression={(Get-Acl $_.FullName).Owner}},
    @{Name='DateLastSaved'; Expression={
        $shell = New-Object -ComObject Shell.Application
        $folder = $shell.Namespace($_.DirectoryName)
        $item = $folder.ParseName($_.Name)
        # 155为英文系统下Date Last Saved的索引,中文系统可自行验证替换
        $folder.GetDetailsOf($item, 155)
    }} | 
Format-Table -AutoSize -Wrap

2. 修改PowerShell行显示字符上限

临时生效(当前会话)

执行命令调整缓冲区宽度为所需数值(例:800):

$Host.UI.RawUI.BufferSize = New-Object Management.Automation.Host.Size(800, $Host.UI.RawUI.BufferSize.Height)

永久生效(所有会话)

  1. 打开PowerShell配置文件:notepad $PROFILE
  2. 将上述临时修改命令添加到文件中,保存退出
  3. 重启PowerShell后生效

3. 更适配Excel的处理方式

无需复制粘贴,直接导出为CSV文件,Excel可直接打开并自动分栏:

Get-ChildItem -Recurse | Select-Object Mode, 
    @{Name='FullPath'; Expression={$_.FullName}},
    CreationTime,
    @{Name='DateModified'; Expression={$_.LastWriteTime}},
    LastAccessTime,
    Length,
    @{Name='Owner'; Expression={(Get-Acl $_.FullName).Owner}} | 
Export-Csv -Path "文件列表.csv" -Encoding UTF8 -NoTypeInformation

Date Last Saved索引验证方法

若155索引无效,可通过以下命令查找对应系统的属性索引:

$shell = New-Object -ComObject Shell.Application
$folder = $shell.Namespace("C:\你的测试目录路径")
for ($i=0; $i -le 300; $i++) {
    $propName = $folder.GetDetailsOf($folder.Items, $i)
    if ($propName -match "Date Last Saved|上次保存时间") {
        Write-Host "索引 $i : $propName"
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 01:50:15