Pages - Menu

2019年8月30日 星期五

[PowerShell]依日期加總資料夾內所有檔案的大小

就是個奇耙的需求,資料要在Grafana上面呈現
有兩種作法,
1.將檔案名稱、檔案日期、檔案大小丟去資料庫內,再利用Grafana利用SQL語法加總日期,
2.直接加總完,檔案日期、檔案大小丟入資料庫,Grafana直接抓資料呈現

直接使用第二種方式,直接加總資料(圖一)


(圖一)


$file = Get-ChildItem D:\SoftwareTemp\down -Recurse  | select name,Length, @{Name="LastWriteTime"; Expression={$_.LastWriteTime.ToString("yyyy-MM-dd")}}
$file | Group-Object -Property 'LastWriteTime' | ForEach{
     [pscustomobject]@{
         'Name'=$_.name
         'Sum'=$_.group|measure Length -sum |select -expand sum
     }
} | Sort-Object name

大約說明一下程式碼的意思

Get-ChildItem D:\SoftwareTemp\down –Recurse 

用來取得資料夾內的檔案大小,可利用 help Get-Childitem去看詳細資訊

select name,Length, @{Name="LastWriteTime"; Expression={$_.LastWriteTime.ToString("yyyy-MM-dd")}}

格式化 LastWriteTime 變成 yyyy-MM-dd的格式

$file | Group-Object -Property 'LastWriteTime'

將LastWriteTime設成群組

ForEach{
     [pscustomobject]@{
         'Name'=$_.name
         'Sum'=$_.group|measure Length -sum |select -expand sum
     }
}

將Length資料相加,並顯示
至於為什麼是把name丟進去Name裡面,可以看(圖二),因為這邊是name

(圖二)


Sort-Object name

就根據日期排列



參考:
如何在PowerShell中對象中的多個項目進行求和
Setup default date format like yyyy-mm-dd in Powershell?
How to sum only 2nd column values using powershell?
Group, get subtotal and output the final result as a table?
Measure-Object
Group-Object

沒有留言:

張貼留言