Powershell 将上个月修改的所有文件报告到 csv

Posted

技术标签:

【中文标题】Powershell 将上个月修改的所有文件报告到 csv【英文标题】:Powershell report to csv all files modified in last month 【发布时间】:2015-07-23 16:12:51 【问题描述】:

我即将编写一个 PS 脚本,以获取上个月内修改的所有文件的 CSV 报告。我尝试了两个选项,但第一个不将报告写入文件,只在屏幕上显示结果,第二个什么也不做。任何帮助深表感谢。

$dir_to_look="D:\TestFolder"    
$month_backdate=$(Get-Date).AddDays(-1)    
Get-Childitem $dir_to_look -Recurse | where-object !($_.psiscontainer) | where  $_.LastWriteTime -gt $month_backdate  | foreach   Write-Host "$($_.LastWriteTime) :: $($_.Fullname) "   | export-csv -path \\share\filename.csv

这是第二个:

 function Get-OldFiles 
 param($date)
 $folders = get-childitem “D:\TestFolder” -recurse | Where-Object $_.psIsContainer -eq $true
 foreach ($folder in $folders) 
     $oldfiles = Dir $folder.fullname *.* | where-object $_.LastWriteTime -le $date
     if ($oldfiles.count) 
         [float]$totalsize = ($oldfiles | Measure-Object -Sum length).Sum / 1KB
         $data = @‘Folder’=$folder.fullname;’Count’=$oldfiles.count;’Size(Kb)’=$totalsize
        New-Object -Type PSObject -Prop $data
        
    

Get-OldFiles ’dd/mm/yyyy′ | Export-CSV \\sharename\file.csv -NoTypeInformation

dd/mm/yyyy 在哪里 - 是我要为每个报告指定的日期。

【问题讨论】:

【参考方案1】:

您的第一个脚本的问题是 Powershell 返回循环内的最后一条语句,但您的最后一条语句是一个 Write-Host,它不返回任何内容,它只输出到您的控制台。修复如下:

$dir_to_look="D:\TestFolder"    
$month_backdate=$(Get-Date).AddDays(-1)    
Get-Childitem $dir_to_look -Recurse | ? 
  !($_.psiscontainer) -and  $_.LastWriteTime -gt $month_backdate
 | %  
  Write-Host "$($_.LastWriteTime) :: $($_.Fullname) "  
  "$($_.LastWriteTime) :: $($_.Fullname) "
 | Set-Content -path \\share\filename.csv

【讨论】:

戴夫,非常感谢。但不幸的是,运行此脚本对 csv 文件没有任何影响。看起来像无限循环,因为脚本永远不会结束。 对我的答案做了一个小改动,将 Export-Csv 更改为 Set-Content。我已经测试过了,对我来说效果很好。它不能是一个无限循环,它只会循环你的TestFolder中的文件。您是否尝试过使用较小的输入集? 是的,刚刚尝试使用仅包含最近修改的几个文件的文件夹。看起来它什么都不做。为什么需要将 export-csv 替换为替换文件内容的 set-content? Export-Csv 用于将对象导出到 CSV 文件,您正在导出不符合 CSV 格式的字符串。所以不是无限循环吗?接下来,我将检查您的 $month_backdate 变量,该名称暗示您想要返回一个月,但您将其分配为昨天的日期。您的示例文件不到一天吗? 这只是一天的尝试,是的,我正在尝试在今天修改的文件很少的文件夹上运行此脚本,即使我将天数更改为 7,它仍然无法正常工作。令我惊讶的是,如果我手动中断脚本,它永远不会结束和停止。并且 CSV 文件不会更改它的修改日期。

以上是关于Powershell 将上个月修改的所有文件报告到 csv的主要内容,如果未能解决你的问题,请参考以下文章

powershell 将属性添加到所有文件中的所有连接字符串

将输入变量从PowerShell表单传递到cmdlet参数会导致空白数据

使用 VBA 或 PowerShell 将所有 MS Access SQL 查询导出到文本文件

将目录文件夹名称存储到阵列 Powershell

修改SendGoogleForm脚本v2

powershell 使用LastWriteTime(上次修改时间)显示目录下的所有文件,使用LastWriteTime显示完整文件路径顺序。取得目前资料夹的所有档案的最后修改时间和档案路径的