Чтобы убедиться, что вы не пишете пустые файлы, вы должны собрать минимальные начальные результаты, которые соответствуют вашему фильтру, и проверить их, чтобы увидеть, содержат ли они вообще что-либо.
Затем, если они включены, вы можете редактировать сценарий, но если они это сделают, вы можете выполнить сортировку и выбрать данные и вывести их в файл журнала.
# Collect Matching Files
$Matched = GCI -Path "C:\Tomcat6.0.20\logs" -File -R -ErrorA "SilentlyContinue" | ? {
$_.Length -gt 1GB
}
# Check is $Matched contains Results before further processing, otherwise, we're done!
IF ([bool]$Matched) {
# If here, we have Data so select what we need and output to the log file:
$Matched | Sort Length -D | FT Name,Directory,@{
n="GB";e={"{0:N2}" -F ($_.Length/ 1GB)}
} -Auto | Out-File "C:\Users\jensen\Desktop\FolderSize\filesize_$(Get-Date -F "yyyy-MM-dd_HH-mm-ss").log"
}
В приведенном выше сценарии я установил $.
на $_.
и отделил сопоставление файлов 1 ГБ от их манипулирования и вывод их в файл.
Мы просто проверяем, совпадают ли какие-либо файлы на 1 ГБ, проверяя, имеет ли переменная какие-либо результаты или имеет значение $NULL
/ undefined.
Если это так, нет необходимости предпринимать какие-либо дальнейшие действия.
Только когда файлы размером 1 Гбайт сопоставляются, мы быстро sort
получаем их и select
детали, которые вы хотели, но вместо этого мы просто используем Format-Table
(FT
) с -Auto-size
, чтобы получить красивый вывод это намного легче просмотреть для такого рода данных.
(Примечание Format-Table
выбирает и форматирует информацию в таблицу за один шаг, сохраняя ненужный шаг использования Select
для получения данных, а затем отправляя (|
) их в Format-list
или Format-Table
, поскольку это просто добавляет немного лишнего шага. Select-Object
лучше всего использовать, когда вам нужно будет выполнить дальнейшие шаги с этими данными, которые требуют «объектно-ориентированных» операций на будущих шагах.)
Затем мы передаем эти выходные данные, чтобы сохранить все это в файл журнала, используя Out-File
, и я также изменил имя файла журнала, чтобы оно содержало текущую дату и время в формате ISO filesize_$(Get-Date -F "yyyy-MM-dd_HH-mm-ss").log
Таким образом, вы можете сохранить каждый прогон и просмотреть они позже и не захотят иметь один гигантский файл или не имеют истории запусков.