none
ps1 enviar alertas solo cuando entra un fichero nuevo. RRS feed

  • Pregunta

  • Hola!

    Tengo este script que funciona bien pero necesito que no envíe correos cuando un fichero dentro de la carpeta sea modificado. Unicamente necesito que notifique cuando entra en esa carpeta un fichero nuevo. ¿podéis ayudarme? He intentado varias cosas pero sin resultado.

    $MonitorFolder = "\\x..."
    $MonitorStopFile = "monitor.die"
    $smtpServer = "xxx"
    $smtpFrom = "xxx"
    $smtpTo = "xxx"
    #$smtpSubject = "Asignacion tarea LDA"
    $smtpSubject = "Asignacion tarea LDA $($MonitorFolder)."
    $smtpPort = "25"

    $mailparam =@{
        To = $smtpTo
        From = $smtpFrom
        Subject = $smtpSubject
        Body = $smtpBody
        SmtpServer = $smtpServer
        Port = $smtpPort
        #Credential = $smtpCred
    }

    $SourceID = "MonitorFiles"
    $IncomingFiles = Get-ChildItem $MonitorFolder

    $smtp = New-Object -TypeName "Net.Mail.SmtpClient" -ArgumentList $smtpServer

    $watcher = New-Object System.IO.FileSystemWatcher $MonitorFolder
    #Files only. Default is files + directory
    $watcher.NotifyFilter = [System.IO.NotifyFilters]'FileName,LastWrite'
    #$watcher.NotifyFilter = [System.IO.NotifyFilters]'FileName'

    $newFileSubscription = Register-ObjectEvent -InputObject $watcher -EventName Created -SourceIdentifier NewFileCreated -Action { 
    Write-Host "Nuevo fichero llamado '$($Event.SourceEventArgs.Name)' en $($MonitorFolder)"

        If ($NewFileCreated)
    {
    Write-Host "La suscripción al evento ya existe"
    $NewFileCreated | Unregister-Event
    }

    $smtpBody += "`n[$(Get-Date -Format HH:mm:ss)]`tNuevo fichero llamado '$($Event.SourceEventArgs.Name)' en $($MonitorFolder)"

    if($Event.SourceEventArgs.Name -eq $MonitorStopFile) {
        Write-Host "Monitoring stopped"
        #Stop monitoring
        Unregister-Event -SubscriptionId $newFileSubscription.Id
        #Dispose FileSystemWatcher
        $watcher.Dispose()
    }
    $smtp.Send($smtpFrom, $smtpTo, $smtpSubject, $smtpBody)
    #Send-MailMessage @mailparam
    }
    pause

    lunes, 19 de noviembre de 2018 15:11

Todas las respuestas

  • Hola Carlos,

    Aparentemente está correcto, con esta linea solo estás capturando los "Creados"

    $newFileSubscription = Register-ObjectEvent -InputObject $watcher -EventName Created -SourceIdentifier NewFileCreated -Action 

    Te pasa con todos los ficheros?? Incluido la modificación de un notepad?? Te lo digo por que la modificación de ficheros Office te generan siempre temporales y a lo mejor por eso te está mandando esos ficheros como nuevos.

    Saludos,

    martes, 20 de noviembre de 2018 12:15