我已經撰寫了一個現有腳本來掃描共享驅動器并創建該結構中所有檔案的清單。
我在輸出中捕獲的欄位之一是“年齡”,即今天 - 檔案的 LastWriteTime。
我想在我的清單中添加另一列,將“年齡”分類為桶(0-3.9 歲、4-9.99 歲和 10 歲以上)。我知道這可以通過 SWITCH 來完成,但我什么也做不了。
這是我為每個檔案捕獲必要資訊的代碼部分:
$properties = @(
@{ Name = 'File Size (MB)'
Expression = {[math]::Round(($_.Length / 1MB),2)}
}
'DirectoryName'
'Name'
'CreationTime'
'LastWriteTime'
@{ Name = 'Age'
Expression = {[math]::Round(([datetime]::Now - $_.LastWriteTime).TotalDays /365,2)}
}
)
我嘗試使用 Age 計算添加 SWITCH 陳述句,我嘗試使用 Age 作為變數,此時,我覺得我只是在猜測解決方案可能是什么。
有人可以幫忙嗎?將另一列添加到名為“類別”的輸出中,并使用 SWITCH 根據檔案的“年齡”對檔案進行分類。
提前感謝您的幫助,我需要一雙煥然一新的眼睛。
uj5u.com熱心網友回復:
您可以filter
在這種情況下使用 a 而不是計算的 properties,我相信在這種情況下它應該更有效,因為我們需要重新使用以下結果的值:
[math]::Round(([datetime]::Now - $_.LastWriteTime).TotalDays /365,2)
代碼如下所示:
filter MyFilter {
$age = [math]::Round(([datetime]::Now - $_.LastWriteTime).TotalDays /365,2)
$category = switch($age) {
{ 3.99 -ge $_ } { '0-3.9 Years'; break }
{ 9.99 -ge $_ } { '4 - 9.99 Years'; break }
Default { 'Over 10 Years' }
}
[pscustomobject]@{
'File Size (MB)' = [math]::Round(($_.Length / 1MB), 2)
'DirectoryName' = $_.DirectoryName
'Name' = $_.Name
'CreationTime' = $_.CreationTime
'LastWriteTime' = $_.LastWriteTime
'Age' = $age
'Category' = $category
}
}
并且使用相當簡單:
Get-ChildItem -Recurse | MyFilter
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/467588.html
上一篇:從powershell運行octave腳本并等待它完成
下一篇:匿名遞回函式