-
- Veteran
- Posts: 391
- Liked: 107 times
- Joined: Apr 27, 2015 1:59 pm
- Full Name: Ryan Jacksland
- Location: NY, USA
- Contact:
Re: Here it is: Powershell script to add VEB-EMails
I have found the solution for me. When creating the task I used these options, any option not specifically listed was disabled or not selected:
Security Options:
-Run whether user is logged in or not
-Run with highest privileges
Triggers:
Basic Settings
-Log: Veeam Endpoint Backup
-Source: Veeam Endpoint Backup
-EventID: 190
-I used 190 because I didn't want email when it started, just an email on how it finished, by default you can leave this blank
-Stop task if it runs longer: 30 minutes
-Enabled
Actions:
Start a Program
Settings:
Program/Script: C:\windows\system32\windowspowershell\v1.0\powershell.exe
Add arugments (optional): C:\Veeam_Email\veeam_email.ps1 (this path is unique to where you put your file)
Conditions:
-Start the task only if the computer is on AC power
-Wake the computer to run this task
Settings:
-Allow task to be run on demand
-Stop the task if it runs longer than: 1 hour
-If the running task does not end when requested, force it to stop
Once I set it up with those selections it began to work.
Security Options:
-Run whether user is logged in or not
-Run with highest privileges
Triggers:
Basic Settings
-Log: Veeam Endpoint Backup
-Source: Veeam Endpoint Backup
-EventID: 190
-I used 190 because I didn't want email when it started, just an email on how it finished, by default you can leave this blank
-Stop task if it runs longer: 30 minutes
-Enabled
Actions:
Start a Program
Settings:
Program/Script: C:\windows\system32\windowspowershell\v1.0\powershell.exe
Add arugments (optional): C:\Veeam_Email\veeam_email.ps1 (this path is unique to where you put your file)
Conditions:
-Start the task only if the computer is on AC power
-Wake the computer to run this task
Settings:
-Allow task to be run on demand
-Stop the task if it runs longer than: 1 hour
-If the running task does not end when requested, force it to stop
Once I set it up with those selections it began to work.
VMCE v9
-
- Novice
- Posts: 7
- Liked: never
- Joined: May 15, 2015 4:45 pm
- Full Name: Olivier Martin
- Contact:
Re: Here it is: Powershell script to add VEB-EMails
OK i will test it right now ! thank you
-
- Veteran
- Posts: 391
- Liked: 107 times
- Joined: Apr 27, 2015 1:59 pm
- Full Name: Ryan Jacksland
- Location: NY, USA
- Contact:
Re: Here it is: Powershell script to add VEB-EMails
One thing to keep in mind is prior to setting up this task, I opened PowerShell as Administrator and ran: Set-ExecutionPolicy unrestricted
After that I setup the job and it worked.
After that I setup the job and it worked.
VMCE v9
-
- Novice
- Posts: 7
- Liked: never
- Joined: May 15, 2015 4:45 pm
- Full Name: Olivier Martin
- Contact:
Re: Here it is: Powershell script to add VEB-EMails
Yes thanks for the advice, already done
-
- Veteran
- Posts: 391
- Liked: 107 times
- Joined: Apr 27, 2015 1:59 pm
- Full Name: Ryan Jacksland
- Location: NY, USA
- Contact:
Re: Here it is: Powershell script to add VEB-EMails
Were you able to get it running with the new settings?
VMCE v9
-
- Novice
- Posts: 7
- Liked: never
- Joined: May 15, 2015 4:45 pm
- Full Name: Olivier Martin
- Contact:
Re: Here it is: Powershell script to add VEB-EMails
Case # 00917535
Work like a charm !! Thanks a lot !
Work like a charm !! Thanks a lot !
-
- Product Manager
- Posts: 8191
- Liked: 1322 times
- Joined: Feb 08, 2013 3:08 pm
- Full Name: Mike Resseler
- Location: Belgium
- Contact:
Re: Here it is: Powershell script to add VEB-EMails
Oliver!
Sweet! Thanks for letting us know
Mike
Sweet! Thanks for letting us know
Mike
-
- Lurker
- Posts: 1
- Liked: never
- Joined: May 31, 2015 4:40 pm
- Full Name: Starcom IT
- Contact:
Re: Here it is: Powershell script to add VEB-EMails
Thanks for the script
if i want to send it via smtp.gmail.com where do i enter the email password?
TIA
if i want to send it via smtp.gmail.com where do i enter the email password?
TIA
-
- Product Manager
- Posts: 8191
- Liked: 1322 times
- Joined: Feb 08, 2013 3:08 pm
- Full Name: Mike Resseler
- Location: Belgium
- Contact:
Re: Here it is: Powershell script to add VEB-EMails
Starcom,
You can't. Task Scheduler does not support authentication for that job. However, you can use a program (for example SendEmail) and trigger a oneliner as a program with the authentication in
Mike
You can't. Task Scheduler does not support authentication for that job. However, you can use a program (for example SendEmail) and trigger a oneliner as a program with the authentication in
Mike
-
- Product Manager
- Posts: 14726
- Liked: 1707 times
- Joined: Feb 04, 2013 2:07 pm
- Full Name: Dmitry Popov
- Location: Prague
- Contact:
Re: Here it is: Powershell script to add VEB-EMails
I would say you don’t need to authenticate, since the SMTP server is used only to send email - no authentication is required (regularly, it’s just based on the domain name in the email address ). Of course some servers might block the unauthorized access but using the password would not solve it, only connecting from the proper IP address.if i want to send it via smtp.gmail.com where do i enter the email password?
-
- Lurker
- Posts: 1
- Liked: never
- Joined: Aug 24, 2015 7:29 am
- Contact:
Re: Here it is: Powershell script to add VEB-EMails
Hi
After the endpoint backup has run. The blue window for powershell pops up and then runs the script to send the email.. Is there anyway to make that window hidden?
After the endpoint backup has run. The blue window for powershell pops up and then runs the script to send the email.. Is there anyway to make that window hidden?
-
- Influencer
- Posts: 12
- Liked: 7 times
- Joined: Aug 20, 2015 10:23 am
- Full Name: Sascha Hoehne
- Contact:
Re: Here it is: Powershell script to add VEB-EMails
Hi Allan,
yes, but you have to use a little "VBScript-Wrapper". I found this a while ago:
Be sure to edit strPath!
Sascha
yes, but you have to use a little "VBScript-Wrapper". I found this a while ago:
Code: Select all
Dim objShell,objFSO,objFile
Set objShell=CreateObject("WScript.Shell")
Set objFSO=CreateObject("Scripting.FileSystemObject")
strPath="<path>\<yourscript>.ps1"
set objFile=objFSO.GetFile(strPath)
strCMD="powershell -nologo -command " & Chr(34) & "&{" &_
objFile.ShortPath & "}" & Chr(34)
objShell.Run strCMD,0
Sascha
-
- Lurker
- Posts: 1
- Liked: never
- Joined: Aug 26, 2015 11:21 am
- Full Name: Chris Clark
- Contact:
Re: Here it is: Powershell script to add VEB-EMails
Hi
Thanks for script, however when it runs on my machine it bring up an error.
Line 2, Char 1 Error: Invalid Character Code: 800A0408 Source: Microsoft VBScript Compilation error
Sorry, I'm not a VB expert so not sure what to do.
Could you help
Thanks
Chris
Thanks for script, however when it runs on my machine it bring up an error.
Line 2, Char 1 Error: Invalid Character Code: 800A0408 Source: Microsoft VBScript Compilation error
Sorry, I'm not a VB expert so not sure what to do.
Could you help
Thanks
Chris
-
- Influencer
- Posts: 24
- Liked: 5 times
- Joined: Aug 12, 2015 6:34 am
- Full Name: Nikolay
- Contact:
Re: Here it is: Powershell script to add VEB-EMails
Thanks for the script!
I use VEB to backup several computers so I prefer to have single mail showing the backup status for my all computers. I also use colors in my reports. Let me share my additions:
I am not Powershell scripting expert so my coding style is not perfect. But this script works fine for me.
We use VBR free on the same site and I would like to include VMs backup status in my report.
I use VEB to backup several computers so I prefer to have single mail showing the backup status for my all computers. I also use colors in my reports. Let me share my additions:
Code: Select all
###########################################################
# Edit this part:
$youremailserver= "mail.my.lan"
$sender = "backup@my.lan"
$recipient = "admin@my.lan"
###########################################################
$Servernames = "srv01","srv02","srv03"
$Body =" <br> "
foreach ($Servername in $Servernames)
{
# init variables
$TimeGenerated = ""
$Source = ""
$EntryType = ""
$Message = ""
$InstanceID = ""
$TimeGenerated = get-eventlog -LogName "Veeam Endpoint Backup" -computername $Servername -newest 1 -entrytype Information, Warning, Error -source "Veeam Endpoint Backup" | Format-List -property TimeGenerated | out-string
$Source = get-eventlog -LogName "Veeam Endpoint Backup" -computername $Servername -newest 1 -entrytype Information, Warning, Error -source "Veeam Endpoint Backup" | Format-List -property Source | out-string
$EntryType = get-eventlog -LogName "Veeam Endpoint Backup" -computername $Servername -newest 1 -entrytype Information, Warning, Error -source "Veeam Endpoint Backup" | Format-List -property EntryType | out-string
$Message = get-eventlog -LogName "Veeam Endpoint Backup" -computername $Servername -newest 1 -entrytype Information, Warning, Error -source "Veeam Endpoint Backup" | Format-List -property Message | out-string
$InstanceID = get-eventlog -LogName "Veeam Endpoint Backup" -computername $Servername -newest 1 -entrytype Information, Warning, Error -source "Veeam Endpoint Backup" | Format-List -property InstanceID| out-string
# Add another line to message body according to the result of the backup:
if ($Message.contains("Success")) {
$Body += "<font style = BACKGROUND-COLOR:green face=Arial color=white>$Message</font> <br>"
$Body += "<font face=Arial> $TimeGenerated $InstanceID <br> <br> </font> "
} elseif ($InstanceID.contains("110")) {
$Body += "<font style = BACKGROUND-COLOR:orange face=Arial color=white>$Message</font> <br>"
$Body += "<font face=Arial> $TimeGenerated $InstanceID <br> <br> </font> "
}
elseif ($InstanceID.contains("")) {
$Body += "<font style = BACKGROUND-COLOR:red face=Arial color=white> $Servername : No messages logged </font> <br>"
$Body += "<font face=Arial> $TimeGenerated $InstanceID <br> <br> </font> "
}
else {
$Body += "<font style = BACKGROUND-COLOR:red face=Arial color=white>$Message</font> <br>"
$Body += "<font face=Arial> $TimeGenerated $InstanceID <br> <br> </font> "
}
}
Send-MailMessage -To $recipient -Subject "Backup report" -From $sender -Body $Body -BodyAsHtml -SmtpServer $Youremailserver
We use VBR free on the same site and I would like to include VMs backup status in my report.
-
- Product Manager
- Posts: 14726
- Liked: 1707 times
- Joined: Feb 04, 2013 2:07 pm
- Full Name: Dmitry Popov
- Location: Prague
- Contact:
Re: Here it is: Powershell script to add VEB-EMails
Well done Nikolay! Thanks for sharing, may I call it a new edition of color coded email notification scrip for VEB
-
- Influencer
- Posts: 24
- Liked: 5 times
- Joined: Aug 12, 2015 6:34 am
- Full Name: Nikolay
- Contact:
Re: Here it is: Powershell script to add VEB-EMails
Dmitry,
The original idea and original script are not mine, Michael (feelgoodeule) posted it here. I have just shared my additions. So feel free to name it as you wish.
The original idea and original script are not mine, Michael (feelgoodeule) posted it here. I have just shared my additions. So feel free to name it as you wish.
-
- Influencer
- Posts: 20
- Liked: 19 times
- Joined: Jul 28, 2009 12:28 pm
- Full Name: Michael
Re: Here it is: Powershell script to add VEB-EMails
Hello UniSys,
thank you for leaving the credits to me
I read your addition to my script. My first thought was, wow, that is smart idea to read the event-log of remote computers from a central one!
But: I trigger my script on the computer which is backed up by VEB, the trigger is an event on that computer (backup started, finished etc).
These triggers don't exist on the central computer which runs your script! How do you trigger the script instead?
I don't understand get this part.
Thanks for sharing, Michael
thank you for leaving the credits to me
I read your addition to my script. My first thought was, wow, that is smart idea to read the event-log of remote computers from a central one!
But: I trigger my script on the computer which is backed up by VEB, the trigger is an event on that computer (backup started, finished etc).
These triggers don't exist on the central computer which runs your script! How do you trigger the script instead?
I don't understand get this part.
Thanks for sharing, Michael
-
- Influencer
- Posts: 24
- Liked: 5 times
- Joined: Aug 12, 2015 6:34 am
- Full Name: Nikolay
- Contact:
Re: Here it is: Powershell script to add VEB-EMails
Michael,
To read event log event on remote computer I use 'get-eventlog' command together with '-computername' key. This way you can start your script on one PC and let it connect to event log on another PC.
To read event log event on remote computer I use 'get-eventlog' command together with '-computername' key. This way you can start your script on one PC and let it connect to event log on another PC.
-
- Influencer
- Posts: 20
- Liked: 19 times
- Joined: Jul 28, 2009 12:28 pm
- Full Name: Michael
Re: Here it is: Powershell script to add VEB-EMails
Hello Unisys
Yes, I know the way you read the event log of the remote computer.
But again: How do you trigger the execution of the script on the central server?
Michael
Yes, I know the way you read the event log of the remote computer.
But again: How do you trigger the execution of the script on the central server?
Michael
-
- Influencer
- Posts: 24
- Liked: 5 times
- Joined: Aug 12, 2015 6:34 am
- Full Name: Nikolay
- Contact:
Re: Here it is: Powershell script to add VEB-EMails
Michael,
My backup has to be done before 06:00. I start my script on central server via Task Scheduler at 6:15.
So start of the script is not VEB event-driven. Is it what you mean?
Sorry for many obvious details. I was not sure which part is unclear.
My backup has to be done before 06:00. I start my script on central server via Task Scheduler at 6:15.
So start of the script is not VEB event-driven. Is it what you mean?
Sorry for many obvious details. I was not sure which part is unclear.
-
- Product Manager
- Posts: 14726
- Liked: 1707 times
- Joined: Feb 04, 2013 2:07 pm
- Full Name: Dmitry Popov
- Location: Prague
- Contact:
Re: Here it is: Powershell script to add VEB-EMails
Guys,
Mind me jump in and ask some question regarding your SMTP configurations
- Do you use in-house smtp or public mail hosting?
- Does it require authentication?
- Do you use the same email for FROM and TO addresses?
Thanks!
Mind me jump in and ask some question regarding your SMTP configurations
- Do you use in-house smtp or public mail hosting?
- Does it require authentication?
- Do you use the same email for FROM and TO addresses?
Thanks!
-
- Veeam ProPartner
- Posts: 64
- Liked: 6 times
- Joined: Nov 03, 2014 5:31 am
- Full Name: Sibin Sam
- Contact:
Re: Here it is: Powershell script to add VEB-EMails
I use smtp server with no authentication.Dima P. wrote:Guys,
Mind me jump in and ask some question regarding your SMTP configurations
- Do you use in-house smtp or public mail hosting?
- Does it require authentication?
- Do you use the same email for FROM and TO addresses?
Thanks!
The from and to addresses are different.
-
- Product Manager
- Posts: 14726
- Liked: 1707 times
- Joined: Feb 04, 2013 2:07 pm
- Full Name: Dmitry Popov
- Location: Prague
- Contact:
Re: Here it is: Powershell script to add VEB-EMails
Hey sibinsam,
And is that a public smtp server or private one?smtp server with no authentication
-
- Veteran
- Posts: 391
- Liked: 107 times
- Joined: Apr 27, 2015 1:59 pm
- Full Name: Ryan Jacksland
- Location: NY, USA
- Contact:
Re: Here it is: Powershell script to add VEB-EMails
- In-house smtp on exchangeDima P. wrote:Guys,
Mind me jump in and ask some question regarding your SMTP configurations
- Do you use in-house smtp or public mail hosting?
- Does it require authentication?
- Do you use the same email for FROM and TO addresses?
Thanks!
- No authentication - private server
- I use different From and To addresses (I created a Veeam AD account that I use for running the services as well as email)
Cheers!
VMCE v9
-
- Veeam ProPartner
- Posts: 64
- Liked: 6 times
- Joined: Nov 03, 2014 5:31 am
- Full Name: Sibin Sam
- Contact:
Re: Here it is: Powershell script to add VEB-EMails
Private smtp serverDima P. wrote:Hey sibinsam, And is that a public smtp server or private one?
-
- Product Manager
- Posts: 14726
- Liked: 1707 times
- Joined: Feb 04, 2013 2:07 pm
- Full Name: Dmitry Popov
- Location: Prague
- Contact:
Re: Here it is: Powershell script to add VEB-EMails
Got it! Thanks Sam.
-
- Enthusiast
- Posts: 32
- Liked: 10 times
- Joined: Nov 19, 2014 2:01 pm
- Full Name: Alessandro Bellini
- Location: Italy, Milan
- Contact:
[MERGED] Veeam Endpoint Mail HTML Notification script
Hi guys,
i wrote a small Powershell script (MailEndpoint.ps1) to notify by mail Endpoint backup, adding a grafic table on body results, and write an html file.
just copy and paste this one in an empty *.ps1 file
than 3 suggestions:
1. Open Powershell and run : PS C:\> set-executionpolicy unrestricted;
2. For my Endpoint installations i add this script on Scheduled Tasks and running on a specified EventID "150" or "190";
3. To schedule this script you need to personalize some attribbute (SMTPServer, SMTPsender, SMTPreceiveraddress) and run it with 2 options (as the following example):
PS C:\>.\MailEndpoint.ps1 -SourceServer SERVERNAME -EmailLog (you can create a batch file with these arguments)
where SERVERNAME is the name of your machine. Verify to have the access on your local relay or smtp server
Hope it could helps you
Cheers from sunny Italy
Alessandro
i wrote a small Powershell script (MailEndpoint.ps1) to notify by mail Endpoint backup, adding a grafic table on body results, and write an html file.
just copy and paste this one in an empty *.ps1 file
than 3 suggestions:
1. Open Powershell and run : PS C:\> set-executionpolicy unrestricted;
2. For my Endpoint installations i add this script on Scheduled Tasks and running on a specified EventID "150" or "190";
3. To schedule this script you need to personalize some attribbute (SMTPServer, SMTPsender, SMTPreceiveraddress) and run it with 2 options (as the following example):
PS C:\>.\MailEndpoint.ps1 -SourceServer SERVERNAME -EmailLog (you can create a batch file with these arguments)
where SERVERNAME is the name of your machine. Verify to have the access on your local relay or smtp server
Code: Select all
# +----------------------------------------------------------------------------+
# |NAME: MailEndpoint.ps1 |
# |AUTHOR: Alessandro |
# |DATE: 22/09/2015 |
# |VERSION: 1.0 |
# | |
# |KEYWORDS: Veeam, notification, backup, Eventlog, Endpoint |
# | |
# |COMMENTS: mail the event success\not from windows Event log |
# | |
# |PARAMETER : |
# | smtpserver use this to change the default smtp server |
# | from: you can specify a dif sender email address |
# | to: same like from |
# | emailLog:If you whan to send the repport by a email; you need |
# | smtpserver, from and to varibale |
# | outpufile: if you prefere have file for the repport |
# | |
# |NEED : none |
# +----------------------------------------------------------------------------+
# +----------------------------------------------------------------------------+
# | Maintenance History |
# | ------------------- |
# | Name Date Version Description |
# | ---------------------------------------------------------------------------+
# | Alessandro Bellini 22/09/2015 1.0 Endpoint version Notification |
# +----------------------------------------------------------------------------+
#paramter of the script fonction
Param(
$SourceServer,
[string]$SmtpServer = "SMTPServer",
[string]$From = "SMTPSender",
[string]$To = "SMTPreceiveraddress",
[switch]$EmailLog,
[string]$Outpufile ="VeamEndpointBackupReport.html"
)
#start
Begin
{
$script:CurrentErrorActionPreference = $ErrorActionPreference
$script:Output = @()
$script:ProcessedServers = @()
$ErrorActionPreference = "SilentlyContinue"
$script:Subject = @()
$script:TimeGeneratedJob = @()
$script:MessageJob = @()
$script:Status=1
# table style for the Email
$Table = @{Name="Server Name";expression={$_.servername}},@{Name="Time Events (last)";expression={$_.TimeGenerated}},@{Name="EntryType";expression={$_.EntryType}},@{Name="Source";expression={$_.Source}},@{Name="InstanceID";expression={$_.InstanceID}},@{Name="Message";expression={$_.Message}}
If($EmailLog)
{
Function SendEmailStatus($From, $To, $Subject, $SmtpServer, $BodyAsHtml, $Body)
{ $SmtpMessage = New-Object System.Net.Mail.MailMessage $From, $To, $Subject, $Body
$SmtpMessage.IsBodyHTML = $BodyAsHtml
$SmtpClient = New-Object System.Net.Mail.SmtpClient $SmtpServer
$SmtpClient.Send($SmtpMessage)
If($? -eq $False){Write-Warning "$($Error[0].Exception.Message) | $($Error[0].Exception.GetBaseException().Message)"}
$SmtpMessage.Dispose()
rv SmtpClient
rv SmtpMessage
}
}
Function GetEventlog
{
Param( $SServer
)
# Put most info into the body of the email:
$TimeGeneratedJob=(get-eventlog "Veeam Endpoint Backup" -InstanceId 190 -newest 1 -entrytype Information, Warning, Error -source "Veeam Endpoint Backup" | Format-List -property TimeGenerated | out-string).substring(20)
$MessageJob=(get-eventlog "Veeam Endpoint Backup" -InstanceId 190 -newest 1 -entrytype Information, Warning, Error -source "Veeam Endpoint Backup" | Format-List -property Message| out-string).substring(14)
$TimeGenerated=(get-eventlog "Veeam Endpoint Backup" -InstanceId 150, 110 -newest 1 -entrytype Information, Warning, Error -source "Veeam Endpoint Backup" | Where {$_.message -match $SServer}| Format-List -property TimeGenerated | out-string).substring(20)
$Source=(get-eventlog "Veeam Endpoint Backup" -InstanceId 150, 110 -newest 1 -entrytype Information, Warning, Error -source "Veeam Endpoint Backup" | Where {$_.message -match $SServer} | Format-List -property Source | out-string).substring(13)
$EntryType=(get-eventlog "Veeam Endpoint Backup" -InstanceId 150, 110 -newest 1 -entrytype Information, Warning, Error -source "Veeam Endpoint Backup" | Where {$_.message -match $SServer} | Format-List -property EntryType | out-string).substring(16)
$Message=(get-eventlog "Veeam Endpoint Backup" -InstanceId 150, 110 -newest 1 -entrytype Information, Warning, Error -source "Veeam Endpoint Backup" | Where {$_.message -match $SServer} | Format-List -property Message| out-string).substring(14)
$InstanceID=(get-eventlog "Veeam Endpoint Backup" -InstanceId 150, 110 -newest 1 -entrytype Information, Warning, Error -source "Veeam Endpoint Backup" | Where {$_.message -match $SServer} | Format-List -property InstanceID| out-string).substring(17)
#check if the value is empty frome the Evente log
if(!$TimeGenerated)
{$TimeGenerated ="no info"}
if(!$Source)
{$Source ="no info"}
if(!$EntryType)
{$EntryType ="no info"}
if(!$Message)
{$Message ="no info"}
if(!$InstanceID)
{$InstanceID ="no info"}
#Created the PS object for store date in table. and # result screen
$Object = New-Object psobject
$Object | Add-Member NoteProperty Servername $SServer -PassThru |Add-Member NoteProperty TimeGenerated $TimeGenerated -PassThru | Add-Member NoteProperty Source $Source -PassThru |
Add-Member NoteProperty EntryType $EntryType -PassThru | Add-Member NoteProperty Message $MessageJob -PassThru | Add-Member NoteProperty InstanceID $InstanceID -PassThru
# Determine the subject according to the result of the backup:
if ($MessageJob.contains("Success")) {
$subject = "Veeam Endpoint Backup finished with Success."
$script:Status = 1
} else {
if ($MessageJob.contains("no info")) {
$subject = "Veeam Endpoint Backup finished with Warning!! Check Body for details."
$script:Status = 2
}
else
{
$subject = "Veeam Endpoint Backup failed!! Check Body for details."
$script:Status = 0
}
}
if ($MessageJob.contains("Failed")) {
$subject = "Veeam Endpoint Backup Job failed, Check Body for details."
$script:Status = 0 }
elseif ($MessageJob.contains("Warning")) {
$subject = "Veeam Endpoint Backup Job finished with Warning Check Body for details."
$script:Status = 2
}
#Export values
$script:Output += $Object
$script:subject = $subject
$script:TimeGeneratedJob = $TimeGeneratedJob
$script:MessageJob = $Message
}
}
#process of the script
Process
{
GetEventlog $SourceServer
#output message resulte
Write-Host "Script finished with : " $script:subject
write-host "Job Message : " $script:MessageJob
write-host "Finished Time Job at : " $script:TimeGeneratedJob
}
# the end process task
End
{
# created the header og the email
#definir the color
if($Status -eq 1){
$colorTagTable = "background-color:#7CFC00"
$messageinfo = "Success"
}
elseif ($Status -eq 2) {
$colorTagTable = "background-color:#FFD700"
$messageinfo = "Warning"
}
else{
$colorTagTable = "background-color:#B22222"
$messageinfo = "Error"
}
# the header
$htmlbody = ""
$date= Get-Date
$header = @"
<table cellspacing="0" cellpadding="0" width="100%" border="0">
<tr>
<td style="width: 80%;border: none;$colorTagTable;" ><H2>Veeam Endpoint Backup</H2>
<div>Finished Time Job at $script:TimeGeneratedJob</div></br>
<div>Message : $Messagejob</div>
<div>Created by $env:username at $date.</div>
</td>
<td style="border: none;$colorTagTable;" >
finished with: <b>$messageinfo</b>
</td>
</tr>
</table>
"@
#merge body
$htmlbody += $header
#Formating the result in HTML format converting for google mail
$Body = $Output | Select $Table | ConvertTo-HTML -Body $htmlbody
$Body = $Body | AlternatingRows
$Body = $Body -replace '<body>', '<body style = "font-size:12px;font-family:Arial;color:#000000;font-weight:normal">'
$Body = $Body -replace '<table>', '<table style = "border-width:1px;cellpadding=10;border-style:solid;border-collapse:collapse;width:100%">'
$Body = $Body -replace '<th>', '<th style = "font-size:12px;border-width:1px;padding:10px;border-style:solid;background-color:#96C5EC">'
$Body = $Body -replace '<td>', '<td style = "font-size:10px;border-width:1px;padding:10px;border-style:solid">'
Add-Type -AssemblyName System.Web
$Body = [System.Web.HttpUtility]::HtmlDecode($Body) # this line made the link clickable
#merge body
$htmlbody +=$header
#fonction to sending the email
If($EmailLog){
SendEmailStatus -From $From -To $To -Subject $script:Subject -SmtpServer $SmtpServer -BodyAsHtml $true -Body $Body
}
#or in a outpute file
if($Outpufile){
$Body | Out-File $OutpufileHtml
}
$ErrorActionPreference = $script:CurrentErrorActionPreference
}
Cheers from sunny Italy
Alessandro
Veolia
-
- Product Manager
- Posts: 14726
- Liked: 1707 times
- Joined: Feb 04, 2013 2:07 pm
- Full Name: Dmitry Popov
- Location: Prague
- Contact:
Re: Here it is: Powershell script to add VEB-EMails
Hello Alessandro,
Some folks have already proposed their own scripts, so I merged yours to the existing discussions. Thanks for sharing your approach with the community – it’s highly appreciated!
Cheers from cold and rainy Russia
Some folks have already proposed their own scripts, so I merged yours to the existing discussions. Thanks for sharing your approach with the community – it’s highly appreciated!
Cheers from cold and rainy Russia
-
- Enthusiast
- Posts: 32
- Liked: 10 times
- Joined: Nov 19, 2014 2:01 pm
- Full Name: Alessandro Bellini
- Location: Italy, Milan
- Contact:
Re: Here it is: Powershell script to add VEB-EMails
Thanks Dima!
That's why i like that interesting community!
That's why i like that interesting community!
Veolia
-
- Lurker
- Posts: 1
- Liked: 1 time
- Joined: Oct 23, 2015 2:12 pm
- Full Name: Josh Lee
- Contact:
Re: Here it is: Powershell script to add VEB-EMails 8)
I have expanded on your powershell script to actually grab data from the Veeam DB itself. It is nice to know a little more than the backup completed.
Also note you can use an application such as DeltaCopy to sync these backups to another server or in the cloud. You can hang this script off the event log in task scheduler and then start the rsync sync at the end of this script based on failed or success.
The 2 important added pieces of code are here:
It goes in and queries Veeam's Local DB. It grabs the correct username and password from the Registry and Querys the Report View.
Full Scripts with other additions and changes below:
Also note you can use an application such as DeltaCopy to sync these backups to another server or in the cloud. You can hang this script off the event log in task scheduler and then start the rsync sync at the end of this script based on failed or success.
The 2 important added pieces of code are here:
It goes in and queries Veeam's Local DB. It grabs the correct username and password from the Registry and Querys the Report View.
Code: Select all
$key = "hklm:\SOFTWARE\Veeam\Veeam Endpoint Backup"
$TableDetail = Invoke-Sqlcmd -Username (Get-ItemProperty -Path $key -Name SqlLogin).SqlLogin -Password (Get-ItemProperty -Path $key -Name SqlPassword).SqlPassword -ServerInstance (Get-ItemProperty -Path $key -Name SqlInstancePipeName).SqlInstancePipeName -Query "SELECT Top 10 [job_name] as [Job Name],[creation_time] as [Started],[end_time] as [Ended],[is_full] as [Full Backup],[total_size] / 1073741824 as [Total Size GB], [total_used_size] / 1073741824 as [Total Used Size GB], [processed_used_size] / 1073741824 as [Total Processed Used GB],[stored_size] / 1048576 as [Total Stored Size MB],[progress] as [Progress],[is_retry] as [Retry?],[avg_speed] / 1048576 as [Speed MB/min] FROM [VeeamBackup].[dbo].[ReportSessionView] ORDER BY [creation_time] DESC" | Select-Object -Property * -ExcludeProperty ItemArray, Table, HasErrors, RowState, RowError | ConvertTo-HTML
Code: Select all
# +----------------------------------------------------------------------------+
# |NAME: MailEndpoint.ps1 |
# |AUTHOR: Alessandro |
# |DATE: 22/09/2015 |
# |VERSION: 1.1 |
# | |
# |KEYWORDS: Veeam, notification, backup, Eventlog, Endpoint |
# | |
# |COMMENTS: mail the event success\not from windows Event log |
# | |
# |PARAMETER : |
# | smtpserver use this to change the default smtp server |
# | from: you can specify a dif sender email address |
# | to: same like from |
# | emailLog:If you whan to send the repport by a email; you need |
# | smtpserver, from and to varibale |
# | outpufile: if you prefere have file for the repport |
# | SourceClient: Shows in email report |
# +----------------------------------------------------------------------------+
# +----------------------------------------------------------------------------+
# | Maintenance History |
# | ------------------- |
# | Name Date Version Description |
# | ---------------------------------------------------------------------------+
# | Alessandro Bellini 22/09/2015 1.0 Endpoint version Notification |
# | Joshua Lee 23/10/2015 1.1 Added Direct DB QUERY for Backup Stats |
# | Added Option SourceClient which adds |
# | client name to emailed report. Also |
# | changed email subject and added Server |
# | Name. |
# +----------------------------------------------------------------------------+
#paramter of the script fonction
Param(
$SourceServer,
[string]$SmtpServer = "SMTPServer",
[string]$From = "SMTPSender",
[string]$To = "SMTPreceiveraddress",
[switch]$EmailLog,
$SourceClient,
[string]$Outpufile ="VeamEndpointBackupReport.html"
)
#start
Begin
{
$script:CurrentErrorActionPreference = $ErrorActionPreference
$script:Output = @()
$script:ProcessedServers = @()
$ErrorActionPreference = "SilentlyContinue"
$script:Subject = @()
$script:TimeGeneratedJob = @()
$script:MessageJob = @()
$script:Status=1
# table style for the Email
$Table = @{Name="Server Name";expression={$_.servername}},@{Name="Time Events (last)";expression={$_.TimeGenerated}},@{Name="EntryType";expression={$_.EntryType}},@{Name="Source";expression={$_.Source}},@{Name="InstanceID";expression={$_.InstanceID}},@{Name="Message";expression={$_.Message}}
$key = "hklm:\SOFTWARE\Veeam\Veeam Endpoint Backup"
$TableDetail = Invoke-Sqlcmd -Username (Get-ItemProperty -Path $key -Name SqlLogin).SqlLogin -Password (Get-ItemProperty -Path $key -Name SqlPassword).SqlPassword -ServerInstance (Get-ItemProperty -Path $key -Name SqlInstancePipeName).SqlInstancePipeName -Query "SELECT Top 10 [job_name] as [Job Name],[creation_time] as [Started],[end_time] as [Ended],[is_full] as [Full Backup],[total_size] / 1073741824 as [Total Size GB], [total_used_size] / 1073741824 as [Total Used Size GB], [processed_used_size] / 1073741824 as [Total Processed Used GB],[stored_size] / 1048576 as [Total Stored Size MB],[progress] as [Progress],[is_retry] as [Retry?],[avg_speed] / 1048576 as [Speed MB/min] FROM [VeeamBackup].[dbo].[ReportSessionView] ORDER BY [creation_time] DESC" | Select-Object -Property * -ExcludeProperty ItemArray, Table, HasErrors, RowState, RowError | ConvertTo-HTML
If($EmailLog)
{
Function SendEmailStatus($From, $To, $Subject, $SmtpServer, $BodyAsHtml, $Body)
{ $SmtpMessage = New-Object System.Net.Mail.MailMessage $From, $To, $Subject, $Body
$SmtpMessage.IsBodyHTML = $BodyAsHtml
$SmtpClient = New-Object System.Net.Mail.SmtpClient $SmtpServer
$SmtpClient.Send($SmtpMessage)
If($? -eq $False){Write-Warning "$($Error[0].Exception.Message) | $($Error[0].Exception.GetBaseException().Message)"}
$SmtpMessage.Dispose()
rv SmtpClient
rv SmtpMessage
}
}
Function GetEventlog
{
Param( $SServer
)
# Put most info into the body of the email:
$TimeGeneratedJob=(get-eventlog "Veeam Endpoint Backup" -InstanceId 190 -newest 1 -entrytype Information, Warning, Error -source "Veeam Endpoint Backup" | Format-List -property TimeGenerated | out-string).substring(20)
$MessageJob=(get-eventlog "Veeam Endpoint Backup" -InstanceId 190 -newest 1 -entrytype Information, Warning, Error -source "Veeam Endpoint Backup" | Format-List -property Message| out-string).substring(14)
$TimeGenerated=(get-eventlog "Veeam Endpoint Backup" -InstanceId 150, 110 -newest 1 -entrytype Information, Warning, Error -source "Veeam Endpoint Backup" | Where {$_.message -match $SServer}| Format-List -property TimeGenerated | out-string).substring(20)
$Source=(get-eventlog "Veeam Endpoint Backup" -InstanceId 150, 110 -newest 1 -entrytype Information, Warning, Error -source "Veeam Endpoint Backup" | Where {$_.message -match $SServer} | Format-List -property Source | out-string).substring(13)
$EntryType=(get-eventlog "Veeam Endpoint Backup" -InstanceId 150, 110 -newest 1 -entrytype Information, Warning, Error -source "Veeam Endpoint Backup" | Where {$_.message -match $SServer} | Format-List -property EntryType | out-string).substring(16)
$Message=(get-eventlog "Veeam Endpoint Backup" -InstanceId 150, 110 -newest 1 -entrytype Information, Warning, Error -source "Veeam Endpoint Backup" | Where {$_.message -match $SServer} | Format-List -property Message| out-string).substring(14)
$InstanceID=(get-eventlog "Veeam Endpoint Backup" -InstanceId 150, 110 -newest 1 -entrytype Information, Warning, Error -source "Veeam Endpoint Backup" | Where {$_.message -match $SServer} | Format-List -property InstanceID| out-string).substring(17)
#check if the value is empty frome the Evente log
if(!$TimeGenerated)
{$TimeGenerated ="no info"}
if(!$Source)
{$Source ="no info"}
if(!$EntryType)
{$EntryType ="no info"}
if(!$Message)
{$Message ="no info"}
if(!$InstanceID)
{$InstanceID ="no info"}
#Created the PS object for store date in table. and # result screen
$Object = New-Object psobject
$Object | Add-Member NoteProperty Servername $SServer -PassThru |Add-Member NoteProperty TimeGenerated $TimeGenerated -PassThru | Add-Member NoteProperty Source $Source -PassThru |
Add-Member NoteProperty EntryType $EntryType -PassThru | Add-Member NoteProperty Message $MessageJob -PassThru | Add-Member NoteProperty InstanceID $InstanceID -PassThru
# Determine the subject according to the result of the backup:
if ($MessageJob.contains("Success")) {
$subject = "Veeam Endpoint Backup finished with Success on " + $SServer
$script:Status = 1
} else {
if ($MessageJob.contains("no info")) {
$subject = "Veeam Endpoint Backup finished with Warning on " + $SServer + " Check Body for details."
$script:Status = 2
}
else
{
$subject = "Veeam Endpoint Backup failed on " + $SServer + "!! Check Body for details."
$script:Status = 0
}
}
if ($MessageJob.contains("Failed")) {
$subject = "Veeam Endpoint Backup Job failed on " + $SServer + ", Check Body for details."
$script:Status = 0 }
elseif ($MessageJob.contains("Warning")) {
$subject = "Veeam Endpoint Backup Job finished with Warning on " + $SServer + " Check Body for details."
$script:Status = 2
}
#Export values
$script:Output += $Object
$script:subject = $subject
$script:TimeGeneratedJob = $TimeGeneratedJob
$script:MessageJob = $Message
}
}
#process of the script
Process
{
GetEventlog $SourceServer
#output message resulte
Write-Host "Script finished with : " $script:subject
write-host "Job Message : " $script:MessageJob
write-host "Finished Time Job at : " $script:TimeGeneratedJob
}
# the end process task
End
{
# created the header og the email
#definir the color
if($Status -eq 1){
$colorTagTable = "background-color:#7CFC00"
$messageinfo = "Success"
}
elseif ($Status -eq 2) {
$colorTagTable = "background-color:#FFD700"
$messageinfo = "Warning"
}
else{
$colorTagTable = "background-color:#B22222"
$messageinfo = "Error"
}
# the header
$htmlbody = ""
$date= Get-Date
$header = @"
<table cellspacing="0" cellpadding="0" width="100%" border="0">
<tr>
<td style="width: 80%;border: none;$colorTagTable;padding:10px;" ><H2>Veeam Endpoint Backup - $SourceClient</H2>
<div><b>Job Finished at:</b> $script:TimeGeneratedJob</div></br>
<div><b>Message:</b> $Messagejob</div>
<div><b>Client Site:</b> $SourceClient
<b>Emailed at:</b> $date. <BR />
<b>Note: </b> ! Check SYNC LOG ! Additional email to Follow.</div>
</td>
<td style="border: none;$colorTagTable;padding:10px;" >
Finished with: <b>$messageinfo</b>
</td>
</tr>
</table>
"@
#merge body
$htmlbody += $header
#Formating the result in HTML format converting for mail
$Body = $Output | Select $Table | ConvertTo-HTML -Body $htmlbody
$Body = $Body | AlternatingRows
$Body = $Body -replace '<body>', '<body style = "font-size:12px;font-family:Arial;color:#000000;font-weight:normal">'
$Body = $Body -replace '<table>', '<table style = "border-width:1px;cellpadding=10;border-style:solid;border-collapse:collapse;width:100%">'
$Body = $Body -replace '<th>', '<th style = "font-size:12px;border-width:1px;padding:10px;border-style:solid;background-color:#96C5EC">'
$Body = $Body -replace '<td>', '<td style = "font-size:10px;border-width:1px;padding:10px;border-style:solid">'
#Formating the result in HTML format converting for mail
$Body2 = $TableDetail
$Body2 = $Body2 | AlternatingRows
$Body2 = $Body2 -replace '<body>', '<body style = "font-size:12px;font-family:Arial;color:#000000;font-weight:normal">'
$Body2 = $Body2 -replace '<table>', '<table style = "border-width:1px;cellpadding=10;border-style:solid;border-collapse:collapse;width:100%">'
$Body2 = $Body2 -replace '<th>', '<th style = "font-size:12px;border-width:1px;padding:10px;border-style:solid;background-color:#96C5EC">'
$Body2 = $Body2 -replace '<td>', '<td style = "font-size:10px;border-width:1px;padding:10px;border-style:solid">'
$Body += "<div style=''><BR /> <b>Backup Details:</b><BR></div>" + $Body2
Add-Type -AssemblyName System.Web
$Body += "<div style='font-size:10px;'>Managed by: Venture Pointe, Inc.</div>"
$Body = [System.Web.HttpUtility]::HtmlDecode($Body) # this line made the link clickable
#merge body
$htmlbody +=$header
#function to sending the email
If($EmailLog){
SendEmailStatus -From $From -To $To -Subject $script:Subject -SmtpServer $SmtpServer -BodyAsHtml $true -Body $Body
}
#or in a outpute file
if($Outpufile){
$Body | Out-File $OutpufileHtml
}
$ErrorActionPreference = $script:CurrentErrorActionPreference
}
Who is online
Users browsing this forum: No registered users and 8 guests