我希望递归地获取两个网络驱动器下最近修改的文件列表,以降序排列它们,并对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文件
答案 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成员的替代方案。我发现它更清洁,但最终取决于您。