2015-07-23 3 views
0

Я собираюсь написать сценарий PS, чтобы получить отчет в CSV всех файлов, измененных в течение прошлого месяца. Я пробовал два варианта, но сначала не писал отчет в файл и просто показывал результаты на экране, а второй просто ничего не делал. Буду признателен за любую оказанную помощь.Powershell report to 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 

Где дд/мм/гггг - это дата, которую я хочу указать для каждого отчета.

ответ

0

Проблема с вашим первым скриптом заключается в том, что 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 
+0

Dave, большое спасибо. Но, к сожалению, этот сценарий ничего не приносит в файл csv. Похож на бесконечный цикл, так как сценарий никогда не заканчивается. –

+0

Сделал небольшое изменение в моем ответе, изменил Export-Csv на Set-Content. Я тестировал, и он отлично работает для меня. Он не может быть бесконечным циклом, он будет только обходить файлы в вашем TestFolder. Попробовали ли вы его с меньшим набором входных данных? –

+0

Да, попробовал только папку, содержащую только несколько недавно измененных файлов. Похоже, он ничего не делает. Почему необходимо заменить export-csv на установочное содержимое, которое заменяет содержимое файлов? –

Смежные вопросы