2008-10-08 9 views
6

Estoy buscando algo que supervise los directorios de Windows para el tamaño y el conteo de archivos a lo largo del tiempo. Estoy hablando de un puñado de servidores y algunas miles de carpetas (millones de archivos).Supervisión del tamaño del directorio de Windows

Requisitos:

  • Notificación de incremento X en tamaño con el tiempo Y
  • Notificación de incremento X en el número de archivos con el tiempo Y
  • gráfica histórica (de datos o, al menos, el ahorro de instantáneas en el tiempo) de tamaño y número de archivo
  • Todo esto en un conjunto de directorios y sus directorios secundarios

Preferiría una solución gratuita, pero también agradecería que me señalaran en la dirección correcta. Si tuviéramos que escribir el nuestro, ¿cómo haríamos para eso? Los idiomas disponibles son Ruby, Groovy, Java, Perl o PowerShell (ya que lo escribiría).

+0

Podría hacerlo MUY fácilmente en C# (ya que es donde tengo exp) pero eso no te ayuda, lo siento. La técnica implica escribir un servicio que recopila datos. Su aplicación puede acceder a los datos cuando sea necesario. – Craig

+0

Craig, ¿estás dispuesto a publicar cómo hacerlo en C#? No estoy familiarizado en absoluto con C# o .NET, pero no creo que sea 100% imposible de usar como solución, ¡simplemente no es una primera opción! – Instantsoup

+0

En general, si puedes hacerlo en C#, puedes hacerlo en powershell de todos modos. – EBGreen

Respuesta

3

Es posible que desee echar un vistazo a PolyMon, que es una solución de monitoreo de sistemas de código abierto. Le permite escribir monitores personalizados en cualquier idioma .NET y le permite crear monitores personalizados de PowerShell.

Almacena datos en un servidor SQL Server y proporciona gráficos. Para su propósito, solo necesitaría un script que obtenga el tamaño del directorio y el conteo de archivos. Algo así como:

$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} 

En respuesta al comentario de Scott: Claro. usted podría envolverlo en un bucle 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 
     } 

Yo no haría eso para un monitor de PowerShell, que se puede programar para que se ejecute periódicamente, pero para una secuencia de comandos para ejecutar en segundo plano, lo anterior podría funcionar. Incluso podría agregar algún código de acceso a la base de datos para registrar los resultados en una base de datos o registrarla en un archivo ... lo que quiera.

+0

¡Muy bueno! En PowerShell, ¿podría ponerse esto en una especie de bucle que se ejecuta continuamente? –

+0

He editado mi respuesta (no hay suficiente espacio para responder en el comentario. –

+0

Muy buen Steven! Gracias! –

4

Existen varias soluciones, incluidas algunas gratuitas. Algunos de los que he trabajado con incluyen:

Nagios y Big Brother

Una rápida búsqueda en Google puede encontrar probablemente más.

0

http://sourceforge.net/projects/dirviewer/ - DirViewer es una aplicación ligera y pura de Java para la visualización de árbol de directorios y las estadísticas de uso de disco recursivo, utilizando JGoodies: se ve y se siente similar a Windows XP.

1

Sin duda puede lograr esto con PowerShell y WMI. Necesitarías algún tipo de back-end DB como SQL Express. Pero estoy de acuerdo en que una herramienta como Polymon es un mejor enfoque. Lo único que podría hacer una difrencia es el problema de la escala. ¿Necesitas monitorear 1 carpeta en 1 servidor o cientos?

+0

Editado para responder ... un puñado de servidores, miles de carpetas (millones de archivos). – Instantsoup

Cuestiones relacionadas