将文件数据捕获到PSOObject并按LastWriteTime排序的代码

时间:2019-01-07 04:51:11

标签: excel powershell csv

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

我从许多来源(我是Powershell初学者)中整理了下面的代码,现在它正在满足我的需要(即生成列表)。

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

我还返回了域名以及文件所有者((Get-ACL $_.FullName).Owner)。我尝试使用Replace来减少字符串,但是这种方法没有运气。

$arr = @()
$days_to_check=$(Get-Date).AddDays(-28)
$items  = @(Get-ChildItem '\\ND\dir 1\*.*' -Recurse -ErrorAction SilentlyContinue | where { $_.LastWriteTime -gt $days_to_check})
$items += @(Get-ChildItem '\\ND\dir 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:\temp\filenamesFO.csv 

按日期字段排序的CSV文件

1 个答案:

答案 0 :(得分:0)

您确实在输出中对数组进行了排序,但这就是您所做的全部。 如果要以这种方式实际导出,则必须将排序分配给$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 '\\ND\dir 1\*.*' -Recurse -ErrorAction SilentlyContinue | where { $_.LastWriteTime -gt $days_to_check})
$items += @(Get-ChildItem '\\ND\dir 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:\temp\filenamesFO.csv 

我做了一些其他更改:

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

  • 我使用PSCustomObject声明只是为了显示所有这些Add成员的替代方案。我发现它更清洁,但最终取决于您。