2016-11-04 9 views
0

私の条件を満たすファイルを削除してファイルを削除するには、以下のコードを使用しますが、追加する必要があるのは前後のフォルダサイズを計算して決定するためです違い。この種の作品はあまりうまくいきません。より良い方法があるかどうかわかります。このスクリプトは、3TBを超えるファイルシステムを横断するため、通常3〜4日間実行されることに注意してください。だから私はそれが基本的にそれが清潔になったものだけでなく、どれくらいのスペースを取り戻したのかを報告したい。ジップ時の前後のフォルダサイズを計算する

$Before = (Get-ChildItem "U:\UDS\Test" -recurse | Measure-Object -property length -sum).Sum 

Function LogWrite 
{ 
Param ([string]$logstring) 

Add-content $Logfile -value $logstring 
} 

$PathToZipper="C:\Program Files\7-Zip" 
$UDSFilesFolder="U:\UDS\Test" 
$FileMask="*.sas7bdat" 
$TimeBound="12/31/2015" 
dir $UDSFilesFolder -Recurse -Filter $FileMask|where{$_.LastWriteTime -lt $TimeBound}|foreach{ 
$PathToFile=Split-Path $_.FullName 
$PrevSize=(Get-ChildItem $pwd.path | Measure-Object -property length -sum).Sum 
$ZipProcess=Start-Process "$PathToZipper\7z.exe" -ArgumentList " a -tzip `"$PathToFile\$($_.BaseName).zip`" `"$($_.FullName)`"" -Wait -PassThru 
if (!$ZipProcess.ExitCode) { 
    del $_.FullName 
    LogWrite $_.FullName 
} 
    $AfterSize=(Get-ChildItem $pwd.path | Measure-Object -property length -sum).Sum 
    $Diff = "{0:N2}" -f (($PrevSize-$AfterSize)/1MB) 
    LogWrite $PrevSize, $AfterSize, $Diff 
} 

$After = (Get-ChildItem "U:\UDS\Test" -recurse | Measure-Object -property length -sum).Sum 
$Calc = "{0:N2}" -f (($Before-$After)/1MB) 

# *********************************************************************************************************** 
# Now lets cleanup LogFiles older than 30 days 
# *********************************************************************************************************** 

Get-ChildItem *.log | where {$_.LastWriteTime -le (Get-Date).AddDays(-30)} | remove-item -verbose 


$smtpServer = "mailserver" 
$smtpFrom = "from" 
$smtpTo = "to" 
$messageSubject = "Sample File Maintenance Script Task Completed (UDS)" 
$messageBody = @" 
This email is to inform you that the regularly scheduled tmp file maintenance script task completed successfully on DTWFP3. 

The script cleared up an extra $Calc MB of disk space. 

Current folder size is: $($colItems = (Get-ChildItem "U:\UDS\Test" -recurse | Measure-Object -property length -sum) 
"{0:N2}" -f ($colItems.sum/1MB) + " MB") 
"@ 


$smtp = New-Object Net.Mail.SmtpClient($smtpServer) 
$smtp.Send($smtpFrom,$smtpTo,$messagesubject,$messagebody) 
+0

私は間違いを見つけました。私は$ pwdを使用しないでください。なぜなら、スクリプト実行ディレクトリを与えるので、なぜ0.00のスペースが節約されたのか説明できるからです。私はその問題を解決しましたが、現在はスペースの総計を節約するために各forループにスペース節約を追加する方法があるのだろうかと思います。 –

答えて

0

無視し、私は空の配列を作成し、foreachループで配列に私の計算を書いた後、配列の値を一緒に追加することによってこの問題を解決することができました。魅力のように働いた