Ecco uno script in powershell che monitora costantemente una cartella per la presenza di nuovi file.

Quando viene rilevato un nuovo file, esso viene inviato via mail.

#compilare i seguenti campi con i valori corretti
$MonitorFolder = "C:\test" 
$MonitorStopFile = "end.Mon" 
$smtpServer = "mail.server.it" 
$smtpFrom = "mittente@mail.it"  
$smtpTo = "destinatario@mail.it" 
$smtpSubject = "Nuovo file rilevato in $($MonitorFolder)." 
$smtpport = "25"
$Password = "LaPassdellaMail"
$credentials = new-object Management.Automation.PSCredential $smtpFrom, ($password | ConvertTo-SecureString -AsPlainText -Force)
 
$SMTPMessage = @{
    To = $smtpTo
    From = $smtpFrom
	Subject = $smtpSubject
    Smtpserver = $smtpServer
    port = $SMTPPort
    Credential = $credentials 
} 
 
  
$SourceID = "MonitorFiles" 

# si puo modificare il numero di secondi dopo cui controllare presenza nuovi file, in questo caso dopo scritta WITHIN abbiamo 10 che sono i secondi.
# per monitorare ogni minuto basta scrivere 60, per monitorare ogni ora occorre scrivere 3600, ogni 24 ore scrivere 86400
$Query = @" 
SELECT * FROM __InstanceCreationEvent WITHIN 10 
WHERE targetInstance ISA 'Cim_DirectoryContainsFile' 
AND targetInstance.GroupComponent = 'Win32_Directory.Name="$($MonitorFolder.Replace("\", "\\\\"))"' 
"@ 
Try { 
    $smtp = New-Object -TypeName "Net.Mail.SmtpClient" -ArgumentList $smtpServer 
    Register-WmiEvent -Query $Query -SourceIdentifier $SourceID 
    Do { 
        "In attesa di nuovi file in '$($MonitorFolder)'; per fermare premere <Ctrl-C> oppure crea un file chiamato '$MonitorStopFile'." | Write-Host 
        $FileEvent = Wait-Event -SourceIdentifier $SourceID 
        Remove-Event -EventIdentifier $FileEvent.EventIdentifier 
        $FileName = $FileEvent.SourceEventArgs.NewEvent.TargetInstance.PartComponent.Split("=", 2)[1].Trim('"').Replace("\\", "\") 
        If ((Split-Path -Path $FileName -Leaf) -eq $MonitorStopFile) { 
            $smtpBody = "[$(Get-Date -Format HH:mm:ss)]`tFile di STOP ricevuto: '$($FileName)'; arresto del monitoraggio!" 
            Remove-Item -Path (Join-Path -Path $MonitorFolder -ChildPath $MonitorStopFile) 
            $FileEvent = $Null 
        } Else { 
            $smtpBody = "[$(Get-Date -Format HH:mm:ss)]`tNuovo file arrivato: '$($FileName)'" 
             
        } 
        $smtpBody | Write-Host -Fore Yellow 
        #Send-MailMessage -SmtpServer $smtpServer -To $smtpTo -From $smtpFrom -Subject $smtpSubject -Body $smtpBody -Attachments $FileName 
		Send-MailMessage @SMTPMessage -Body $SMTPBody -Attachments $FileName
    } While ($FileEvent) 
} Catch { 
    $_ | Out-String | Write-Error 
} Finally { 
    Remove-Event -SourceIdentifier $SourceID -ErrorAction SilentlyContinue 
    Unregister-Event -SourceIdentifier $SourceID -ErrorAction SilentlyContinue 
}
Categorie: Android