Размер файла с Powershell - PullRequest
       3

Размер файла с Powershell

0 голосов
/ 09 июля 2019

То, что я пытаюсь сделать, это создать скрипт PS, чтобы увидеть, когда в определенной папке есть файл размером более 1 ГБ. Если он нашел файл размером более 1 ГБ, я хочу, чтобы он записал файл журнала с информацией, содержащей имя определенного файла и его размер.

Это работает, но не полностью, если файл меньше 1 ГБ, я не хочу файл журнала. (прямо сейчас это отобразит информацию о файле размером более 1 ГБ, но если его размер меньше 1 ГБ, он все равно создает файл журнала без данных). Я не хочу, чтобы он создавал журнал для чего-то меньшего, чем 1 ГБ.

Есть идеи, как это сделать?

Спасибо!

Ryan

Get-ChildItem -Path C:\Tomcat6.0.20\logs -File -Recurse -ErrorAction SilentlyContinue | 
Where-Object {$_.Length -gt 1GB} | 
Sort-Object length -Descending | 
Select-Object Name,@{n='GB';e={"{0:N2}" -F ($_.length/ 1GB)}} | 
Format-List Name,Directory,GB > C:\Users\jensen\Desktop\FolderSize\filesize.log`

Ответы [ 2 ]

1 голос
/ 09 июля 2019

Сначала установите переменную с нужным вам термином / фильтром и сохраните результаты

$items = Get-ChildItem -Path C:\Tomcat6.0.20\logs -File -Recurse -ErrorAction SilentlyContinue |
     Where-Object {$_.Length -gt 1GB} | 
     Sort-Object Length -Descending |
     Select-Object Name,@{n='GB';e={"{0:N2}" -F ($_.length/ 1GB)}} 

Затем перенаправьте ее на Out-File в соответствии с желаемым выходным путем.В этом примере будет выведен файл на рабочий стол пользователя, выполняющего сценарий, при необходимости измените:

$items | Out-File -FilePath $ENV:USERPROFILE\Desktop\filesize.log -Force

Параметр -Force перезапишет существующий файл filesize.log, если онуже существует.

0 голосов
/ 10 июля 2019

Чтобы убедиться, что вы не пишете пустые файлы, вы должны собрать минимальные начальные результаты, которые соответствуют вашему фильтру, и проверить их, чтобы увидеть, содержат ли они вообще что-либо.

Затем, если они включены, вы можете редактировать сценарий, но если они это сделают, вы можете выполнить сортировку и выбрать данные и вывести их в файл журнала.

# 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 Таким образом, вы можете сохранить каждый прогон и просмотреть они позже и не захотят иметь один гигантский файл или не имеют истории запусков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...