Я ищу что-то, что будет контролировать каталоги Windows на предмет размера и количества файлов с течением времени. Я говорю о нескольких серверах и нескольких тысячах папок (миллионах файлов).
Требования:
Я бы предпочел бесплатное решение, но также был бы признателен, если бы мне указали правильное направление. Если бы мы написали свои собственные, как бы мы это сделали? Доступные языки: Ruby, Groovy, Java, Perl или PowerShell (так как я буду писать это).
Крейг, не могли бы вы рассказать, как это сделать на C#? Я совсем не знаком с C# или .NET, но я не думаю, что для нас это на 100% невозможно использовать в качестве решения, просто не лучший выбор!
Вообще говоря, если вы можете сделать это на C#, вы все равно можете сделать это в PowerShell.




Есть несколько решений, в том числе бесплатные. Некоторые из них, с которыми я работал, включают:
Быстрый поиск в Google, вероятно, сможет найти больше.
Возможно, вы захотите взглянуть на PolyMon, решение для мониторинга систем с открытым исходным кодом. Он позволяет писать настраиваемые мониторы на любом языке .NET и позволяет создавать настраиваемые мониторы PowerShell.
Он хранит данные в серверной части SQL Server и обеспечивает построение графиков. Для вашей цели вам просто понадобится скрипт, который будет получать размер каталога и количество файлов. Что-то типа:
$size = 0
$count = 0
$path = '\unc\path\to\directory\to\monitor'
get-childitem -path $path -recurse | Where-Object {$_ -is [System.IO.FileInfo]} | ForEach-Object {$size += $_.length; $count += 1}
В ответ на комментарий Скотта: Конечно. вы можете обернуть его в цикл while
$ESCkey = 27
Write-Host "Press the ESC key to stop sniffing" -foregroundcolor "CYAN"
$Running=$true
While ($Running)
{
if ($host.ui.RawUi.KeyAvailable) {
$key = $host.ui.RawUI.ReadKey("NoEcho,IncludeKeyUp,IncludeKeyDown")
if ($key.VirtualKeyCode -eq $ESCkey) {
$Running=$False
}
#rest of function here
}
Я бы не стал делать это для монитора PowerShell, запуск которого можно запланировать периодически, но для сценария, который запускается в фоновом режиме, все вышеперечисленное будет работать. Вы даже можете добавить код доступа к базе данных, чтобы записывать результаты в базу данных, или записывать их в файл ... что угодно.
Очень круто! Можно ли в PowerShell поместить это в какой-то цикл, который постоянно выполняется?
http://sourceforge.net/projects/dirviewer/ - DirViewer - это легкое чистое Java-приложение для просмотра дерева каталогов и рекурсивной статистики использования диска, использующее JGoodies-Looks, похожее на Windows XP.
Вы, безусловно, можете добиться этого с помощью PowerShell и WMI. Вам понадобится какая-то серверная часть БД, такая как SQL Express. Но я согласен с тем, что такой инструмент, как Polymon, - лучший подход. Единственное, что может сделать разницу, - это масштаб. Вам нужно мониторить 1 папку на 1 сервере или сотни?
Отредактировано, чтобы ответить ... несколько серверов, тысячи папок (миллионы файлов).
Я мог бы сделать это ОЧЕНЬ легко на C# (поскольку именно там у меня есть опыт), но это вам не помогает, извините. Техника включает в себя написание службы, собирающей данные. После этого ваше приложение сможет получить доступ к данным при необходимости.