将文件数据抓取到 PSOObject 中并按 LastWriteTime 排序的代码



我希望递归地获取两个网络驱动器下最近修改的文件列表,按日期降序对它们进行排序,并对CSV文件进行一些编辑以整理Excel列表

我已经从许多来源(我是Powershell初学者)拼凑了下面的代码,它现在正在做我需要的事情(即生成一个列表)。

我需要帮助才能更进一步,我无法按文件上次写入时间日期对生成的 CSV 文件进行排序,这是因为我的数组需要文本而不是数字字段吗?

我还返回域名以及带有((Get-ACL $_.FullName).Owner)的文件所有者。我尝试用Replace来切断琴弦,但这种方法没有运气。

$arr = @()
$days_to_check=$(Get-Date).AddDays(-28)
$items  = @(Get-ChildItem '\NDdir 1*.*' -Recurse -ErrorAction SilentlyContinue | where { $_.LastWriteTime -gt $days_to_check})
$items += @(Get-ChildItem '\NDdir 1*.*' -Recurse -ErrorAction SilentlyContinue | 
where { $_.LastWriteTime -gt $days_to_check})
$items | Foreach {
$obj = New-Object PSObject -prop $hash
$obj | Add-Member NoteProperty FullName $_.FullName
$obj | Add-Member NoteProperty Directory $_.Directory
$obj | Add-Member NoteProperty Name $_.Name
$obj | Add-Member NoteProperty LastTime $_.LastWriteTime
$obj | Add-Member NoteProperty Owner ((Get-ACL $_.FullName).Owner)
$arr += $obj
}
$arr | Format-List
$arr | Sort-Object -Property LastTime -Descending
$arr | Export-CSV -notypeinformation C:tempfilenamesFO.csv 

CSV 文件按日期字段排序

您确实在输出中对数组进行了排序,但这就是您所做的一切。如果要以这种方式实际导出它,则必须将排序分配给$arr

取代 $arr | Sort-Object -Property LastTime -Descending

$arr = $arr | Sort-Object -Property LastTime -Descending

您可以使用以下替换-replace '(.*\)(.*)','$2'删除所有者域

下面是实现上述更改的完整示例。

$arr = new-object -TypeName 'System.Collections.Generic.List[PSObject]'
$days_to_check=$(Get-Date).AddDays(-28)
$items  = @(Get-ChildItem '\NDdir 1*.*' -Recurse -ErrorAction SilentlyContinue | where { $_.LastWriteTime -gt $days_to_check})
$items += @(Get-ChildItem '\NDdir 1*.*' -Recurse -ErrorAction SilentlyContinue | 
where { $_.LastWriteTime -gt $days_to_check})

Foreach ($item in $items) {
$obj = [PSCustomObject]@{
    FullName = $item.FullName
    Directory = $item.Directory
    Name = $item.Name
    LastTime = $item.LastWriteTime
    Owner  = (Get-ACL $item.FullName).Owner -replace '(.*\)(.*)','$2'
}
$arr.add($obj)
}
$arr = $arr | Sort-Object -Property LastTime -Descending
#$arr | Format-List
$arr | Export-CSV -notypeinformation C:tempfilenamesFO.csv 

我做了一些额外的更改:

  • 我没有使用数组,而是使用了 PSObject 列表。如果您有很多文件,则与数组相比,处理时间将得到改善。

  • 我使用 PSCustomObject 声明只是为了显示所有这些添加成员的替代项。我觉得它更干净,但最终取决于你。

最新更新