2013-03-28 1 views
1

J'utilise robocopy pour sauvegarder un disque dur à un autre ci-dessous est le code que j'utilise:Robocopy envoi de courrier électronique, pièce jointe, annexant nom de fichier

robocopy "\\server_location\XXXX" "\\local_location\xxxx" /copyall /TEE /S /r:1 /ndl /xc /xo /xn /log+:"C:\desktop\log.TXT" 

START mailto:myemail.job.com?subject=Ovl%%2Reportˆ&body=Test,%%0D%%0A%%0D%%0AHere%%20is%%20is%%the%%20ovl%%20report.%%0D%%0A%%0D%%0ABye 

Je dois pouvoir faire deux choses :

  1. Envoyer automatiquement le fichier texte (PowerShell?) Via Outlook. Lorsque vous comparez des fichiers si l'horodatage est différent, ajoutez le nom du fichier de destination et copiez le fichier à partir de la source.

+0

J'ai essayé différents scenerios et je peux obtenir des perspectives à ouvrir, mais il ne tachent pas un fichier ni n'envoie un email. Je crois que c'est une menace pour la sécurité. Dans la mesure où le fichier annexe n'a rien essayé. – user1870921

+3

Pourquoi n'utilisez-vous pas CmdLet 'Send-MailMessage' pour envoyer votre courrier? – JPBlanc

+0

Pour le deuxième point: voulez-vous créer une liste de fichiers modifiés (et donc copiés) dans l'e-mail? C'est à dire. vous voulez transformer/reformater la sortie 'robocopy' pour l'email? – Richard

Répondre

2

Voici donc un script que j'ai utilisé pour beaucoup de mes travaux robocopy. Je ne suis pas sûr si cela correspond à votre "envoyer un courriel via Outlook" car il est juste en train de faire un SMTP, il ne s'agit pas réellement de se connecter à Outlook pour le faire. Le script est un script Powershell 2.0, et rappelez-vous que seuls Server 2008R2 et Windows Vista + ont l'option/MT, ce qui est mauvais à utiliser avec l'option/TEE. Le script est au bas de la publication. Pour le deuxième point que vous avez, je pense que vous voudrez peut-être deux scripts différents, un qui ignore spécifiquement les horodatages, et un autre qui inclurait les fichiers de différences d'horodatage, qui si couru directement après le premier devrait être à peu près correct. Ce serait avec le commutateur/XO qui est "/ XO: eXclude plus ancien - si le fichier de destination existe et est la même date ou plus récente que la source - ne dérange pas de l'écraser."

Autres options qui pourraient vous aider dans les scripts qui sont sur:

/XC |/XN: eXclude modifié | Nouveaux fichiers /XL: eXclude Fichiers et répertoires "Lonely" (présents dans la source mais pas dans la destination) Cela empêchera l'ajout de nouveaux fichiers à la destination. /XX: eXclure les fichiers et répertoires "eXtra" (présents dans la destination mais pas dans la source) Ceci empêchera toute suppression de la destination. (ceci est la valeur par défaut)

#*============================================= 
#* Base variables 
#*============================================= 

$SourceFolder = "C:\SourceFolder" 
$DestinationFolder = "C:\DestinationFolder" 
$Logfile = "C:\Robocopy.log" 
$Subject = "Robocopy Results: Copy Purpose - Location to Location" 
$SMTPServer = "smtp.server.com" 
$Sender = "Server <[email protected]>" 
$Recipients = "User1 <[email protected]>" 
$Admin = "Admin <[email protected]>" 
$SendEmail = $True 
$IncludeAdmin = $True 
$AsAttachment = $False 

#*============================================= 
#* GMAIL variables 
#*============================================= 
#$SMTPServer = "smtp.gmail.com" 
#$cred = New-Object System.Net.NetworkCredential("username", "password"); 
# Add "-UseSsl -Credential $cred" to the Send-MailMessage 

#*============================================= 
#* SCRIPT BODY 
#*============================================= 

# Change robocopy options as needed. (http://ss64.com/nt/robocopy.html) 
Robocopy $SourceFolder $DestinationFolder /MIR /R:2 /W:5 /LOG:$Logfile /NP /NDL 

# The following attempts to get the error code for Robocopy 
# and use this as extra infromation and email determination. 
# NO OTHER CODE BETWEEN THE SWITCH AND THE ROBOCOPY COMMAND 
Switch ($LASTEXITCODE) 
{ 
16 
{ 
$exit_code = "16" 
$exit_reason = "***FATAL ERROR***" 
#$IncludeAdmin = $False 
#$SendEmail = $False 
} 
8 
{ 
$exit_code = "8" 
$exit_reason = "**FAILED COPIES**" 
#$IncludeAdmin = $False 
#$SendEmail = $False 
} 
4 
{ 
$exit_code = "4" 
$exit_reason = "*MISMATCHES*" 
$IncludeAdmin = $False 
#$SendEmail = $False 
} 
2 
{ 
$exit_code = "2" 
$exit_reason = "EXTRA FILES" 
$IncludeAdmin = $False 
#$SendEmail = $False 
} 
1 
{ 
$exit_code = "1" 
$exit_reason = "Copy Successful" 
$IncludeAdmin = $False 
#$SendEmail = $False 
} 
0 
{ 
$exit_code = "0" 
$exit_reason = "No Change" 
$SendEmail = $False 
$IncludeAdmin = $False 
} 
default 
{ 
$exit_code = "Unknown ($LASTEXITCODE)" 
$exit_reason = "Unknown Reason" 
#$SendEmail = $False 
$IncludeAdmin = $False 
} 
} 

# Modify the subject with Exit Reason and Exit Code 
$Subject += " : " + $exit_reason + " EC: " + $exit_code 

# Test log file size to determine if it should be emailed 
# or just a status email 
If ((Get-ChildItem $Logfile).Length -lt 25mb) 
{ 
If ($IncludeAdmin) 
{ 
If ($AsAttachment) 
{ 
Send-MailMessage -From $Sender -To $Recipients -Cc $Admin -Subject $Subject -Body "Robocopy results are attached." -Attachment $Logfile -DeliveryNotificationOption onFailure -SmtpServer $SMTPServer 
} Else { 
Send-MailMessage -From $Sender -To $Recipients -Cc $Admin -Subject $Subject -Body (Get-Content $LogFile | Out-String) -DeliveryNotificationOption onFailure -SmtpServer $SMTPServer 
} 
} Else { 
If ($AsAttachment) 
{ 
Send-MailMessage -From $Sender -To $Recipients -Subject $Subject -Body "Robocopy results are attached." -Attachment $Logfile -DeliveryNotificationOption onFailure -SmtpServer $SMTPServer 
} Else { 
Send-MailMessage -From $Sender -To $Recipients -Subject $Subject -Body (Get-Content $LogFile | Out-String) -DeliveryNotificationOption onFailure -SmtpServer $SMTPServer 
} 
} 
} Else { 
# Creat the email body from the beginning and end of the $Logfile 
$Body = "Logfile was too large to send." + (Get-Content $LogFile -TotalCount 15 | Out-String) + (Get-Content $LogFile | Select-Object -Last 13 | Out-String) 
# Include Admin if log file was too large to email 
Send-MailMessage -From $Sender -To $Recipients -Cc $Admin -Subject $Subject -Body $Body -DeliveryNotificationOption onFailure -SmtpServer $SMTPServer 
#Exclude Admin if log file was too large to email 
#Send-MailMessage -From $Sender -To $Recipients -Subject $Subject -Body $Body -DeliveryNotificationOption onFailure -SmtpServer $SMTPServer 
} 

#*============================================= 
#* END OF SCRIPT: Copy-RobocopyAndEmail.ps1 
#*============================================= 
Questions connexes