none
Alguien me ayuda con un script por favor? RRS feed

  • Pregunta

  • Buenos días a todos, tengo que preparar un script que vaya revisando el número de documentos en una carpeta (servidor windows 2012 - 2016) y si detecta que se acumulan mas de 10, me lance un aviso. Se puede hacer esto?

    Saludos a todos desde Barcelona.

    miércoles, 16 de enero de 2019 9:59

Todas las respuestas

  • Hola

    Te dejo un script, es en modo demonio, se queda corriendo infinitamente hasta que lo mates (puedes lanzarlo desde una tarea de windows al inicio del servidor por ejemplo)

    La parte "me lance un aviso" como no has concretado he puesto un ejemplo mio de aviso por email, pero dependerá de la configuración de tu servidor SMTP que funcione o no.

    $Carpeta = "C:\temp" # Carpeta a Revisar
    $TiempoEspera = 30   # Cada Cuantos Segundos Revisa la Carpeta
    $AlarmaFichero = 10  # Numero de Ficheros que Desencadena la Alarma
    
    while($true) {
        $Ficheros = Get-ChildItem $Carpeta # -Recurse # Si quieres mirar también subcarpetas quita el primer #
        $numerofichero = $Ficheros.count
        If ($numerofichero -ge $AlarmaFichero)
        {
            # Un ejemplo para que te envie el correo dependerá de tu configuracion de Mensajeria
            Send-MailMessage -To TuCorreo@TuEmpresa.com -From RevisionFolder@TuEmpresa.com -Subject "La Carpeta $Carpeta ha sobrepasado los $AlarmaFcihero ficheros" -SmtpServer TuServidorSMTP
            
            # While para Esperar que baje el número de ficheros por debajo del limite y no te fria a mensajes      
            While($numerofichero -ge $AlarmaFichero){ 
                $Ficheros = Get-ChildItem $Carpeta # -Recurse # Si quieres mirar también subcarpetas quita el primer #
                $numerofichero = $Ficheros.count
                Start-Sleep $TiempoEspera
            }
        }
        Start-Sleep $TiempoEspera
    }

    Saludos,

    • Propuesto como respuesta rBlacksmith miércoles, 16 de enero de 2019 15:21
    miércoles, 16 de enero de 2019 11:46
  • Hola,

    Podrías hacer algo así:

    $ExecutionDate = Get-Date
    $ExecutionDate = ($ExecutionDate).toString('dd/MM/yyyy HH:mm:ss')
    $Folder = 'c:\Temp\Prueba'
    $MaxItem = '10'
    $From = "test@tudominio.es"
    $To = 'alertas@tudominio.es'
    $Subject = "Límite de ficheros superado - $ExecutionDate"
    $Body = "Se ha superado el límite de ficheros en la carpeta $Folder"
    $SMTPserver = "tu.servidordecorreo.es"
    $Filecount = $null;
    try
    {
    	If (Test-Path $Folder)
    	{
    		$Filecount = (Get-ChildItem $Folder).Count
    		If ($Filecount -gt $MaxItems)
    		{
    			Send-MailMessage -to $To -from $From -subject $Subject -BodyAShtml -body $Body -SmtpServer $SMTPserver -ENCODING UNICODE;
    		}
    	}
    	else
    	{
    		throw "La carpeta $Folder no es accesible."
    	}
    }
    catch
    {
    	$Subject = "Error comprobando la carpeta $Folder - $ExecutionDate"
    	$Body = $Error[0]
    	Send-MailMessage -to $To -from $From -subject $Subject -BodyAShtml -body $Body -SmtpServer $SMTPserver -ENCODING UNICODE;
    	Write-Error $Error[0]
    	
    }

    Espero que te sirva.

    Un saludo.

    Diego


    miércoles, 16 de enero de 2019 11:59
  • Muchas gracias Diego, ahora me pongo en ello, saludos.
    miércoles, 16 de enero de 2019 12:42
  • Hola, muchas gracias, si es esto efectivamente, que me avise por mail, así puedo enterarme que se está llenando la carpeta out que es de una facturación digital.

    Saludos

     
    miércoles, 16 de enero de 2019 13:09