J'ai reçu un script PowerShell pour signaler l'état de la sauvegarde SQL sur plusieurs serveurs, il fonctionne correctement, mais il n'a aucune fonction pour envoyer du courrier. J'ai ajouté cette partie et maintenant je suis en mesure d'obtenir le courrier avec la pièce jointe. La seule préoccupation est, je veux que le rapport montre "NA" et pas une date par défaut où la satabase est dans le modèle de récupération simple ou si la sauvegarde n'a pas eu lieu. Quelqu'un peut-il conseiller?État de la sauvegarde SQL Server Rapport avec PowerShell
Voici le code, juste au cas où quelqu'un a besoin contrairement à mon exigence:
$ServerList = Get-Content "Serverlist location"
$OutputFile = "to save the report location"
$titleDate = Get-Date -UFormat "%m-%d-%Y - %A"
$HTML = '<style type="text/css">
#Header{font-family:"Trebuchet MS", Arial, Helvetica, sans-serif;width:100%;border-collapse:collapse;}
#Header td, #Header th {font-size:14px;border:1px solid #98bf21;padding:3px 7px 2px 7px;}
#Header th {font-size:14px;text-align:left;padding-top:5px;padding-bottom:4px;background-color:#A7C942;color:#fff;}
#Header tr.alt td {color:#000;background-color:#EAF2D3;}
</Style>'
$HTML += "<HTML><BODY><Table border=1 cellpadding=0 cellspacing=0 width=100% id=Header>
<TR>
<TH><B>Database Name</B></TH>
<TH><B>RecoveryModel</B></TD>
<TH><B>Last Full Backup Date</B></TH>
<TH><B>Last Differential Backup Date</B></TH>
<TH><B>Last Log Backup Date</B></TH>
</TR>"
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | Out-Null
foreach ($ServerName in $ServerList)
{
$HTML += "<TR bgColor='#ccff66'><TD colspan=5 align=center><B>$ServerName</B></TD></TR>"
$SQLServer = New-Object ('Microsoft.SqlServer.Management.Smo.Server') $ServerName
foreach ($Database in $SQLServer.Databases)
{
$HTML += "<TR>
<TD>$($Database.Name)</TD>
<TD>$($Database.RecoveryModel)</TD>
<TD>$($Database.LastBackupDate)</TD>
<TD>$($Database.LastDifferentialBackupDate)</TD>
<TD>$($Database.LastLogBackupDate)</TD>
</TR>"
}
}
$HTML += "</Table></BODY></HTML>"
$HTML | Out-File $OutputFile
$emailFrom = "send email address"
$emailTo = "recipient email address"
$subject = "Xyz Report"
$body = "your words "
$smtpServer = "Smptp server"
$filePath = "location of the file you want to attach"
function sendEmail([string]$emailFrom, [string]$emailTo, [string]$subject,[string]$body,[string]$smtpServer,[string]$filePath)
{
$email = New-Object System.Net.Mail.MailMessage
$email.From = $emailFrom
$email.To.Add($emailTo)
$email.Subject = $subject
$email.Body = $body
$emailAttach = New-Object System.Net.Mail.Attachment $filePath
$email.Attachments.Add($emailAttach)
$smtp = New-Object Net.Mail.SmtpClient($smtpServer)
$smtp.Send($email)
}
sendEmail $emailFrom $emailTo $subject $body $smtpServer $filePath
Impossible d'éditer mon message précédent, appuyez sur Entrée avant d'avoir terminé. De toute façon, j'ai été en mesure d'obtenir le résultat souhaité avec votre aide comme ceci: -
Le paramètre '-Body' attend une chaîne, mais' ConvertTo-Html' produit une liste de chaînes, donc sa sortie doit être fusionnée en une seule chaîne. Voir la mise à jour –
Merci Ansgar, appréciez vos conseils. – Att