dbatools Quickies #2 – Offline Databases

[english version below]

Hallo,

als zweiten Beitrag in der Serie dbatools Quickies möchte ich wieder ein Mail-Script vorstellen, was dann eine Mail versendet, wenn bei den untersuchten Servern Datenbanken offline sind.
Es geschieht leider immer mal wieder, dass Datenbanken kurz offline gesetzt werden, diese aber dann vergessen werden. Hier bekommen wir wöchentlich Mails mit allen Datenbanken die Offline sind und wo wir dann nachhaken können.
Wenn keine Datenbank offline ist bekommen wir trotzdem eine Mail mit einem kurzen Hinweis.

Anmerkungen:

  1. Es fehlt eine Fehlerbehandlung für Server offline oder ähnliches.
  2. Es wird eine sehr einfache HTML Mail gesendet mit einer kleinen Tabelle bei Offline Datenbanken. Für umfangreichere und besser zu formatierende HTML Mails schaut Euch einmal diesen Artikel von Jess an und das darin vorgestellte Modul PSHTML: https://jesspomfret.com/pshtml-email-reports
  3. Zur Automatisierung gibt es viele Möglichkeiten z.B. über den SQL Agent, Vorschläge zur Umsetzung finden sich auf der dbatools Seite: https://dbatools.io/agent/

Danke fürs Lesen

# HTML Header für die EMail
$Header = @"
<style>
TABLE {border-width: 1px; border-style: solid; border-color: black; border-collapse: collapse;}
TH {border-width: 1px; padding: 3px; border-style: solid; border-color: black;}
TD {border-width: 1px; padding: 3px; border-style: solid; border-color: black;}
</style>
"@

# hier die SQL Server Instanzen auflisten/ list SQL Instances!!
$servers= Get-Content C:\\Scripts\\dbatools\\MyInstances.txt

$result= $servers | Get-DbaDbState | where Status -EQ 'OFFLINE' | select ComputerName,InstanceName,SqlInstance,DatabaseName,Status    
    

if ($result -eq $null)
{
    $result="no offline Databases"
}
else
{
    $result= $result | Sort -Property ComputerName,DatabaseName | ConvertTo-Html -Head $Header| Out-String
}


$messageParameters = @{
 Subject = "[Customer] - Offline Databases"
 Body = "<BR>"+$result
 From = <sender@mycompany.com>
 To = <support@mycomany.com>
 SmtpServer = <SMTP Server>
 }

Send-MailMessage @messageParameters -BodyAsHtml 


PowerShell

As the second article in the dbatools Quickies series, I would like to introduce another mail script that sends an email when databases on the servers examined are offline.

Unfortunately, it happens every now and then that databases are briefly taken offline but then forgotten. Here we receive weekly emails with all databases that are offline and where we can then follow up. If no database is offline, we will still receive an email with a short note.

Remarks:

  1. There is no error handling for servers offline or similar.
  2. With this script a very simple HTML email is sent with a small table for offline databases. For more extensive and easier-to-format HTML emails, take a look at this article by Jess and the PSHTML module presented in it: https://jesspomfret.com/pshtml-email-reports
  3. There are many options for automation, e.g. via the SQL Agent. Suggestions for implementation can be found on this dbatools page: https://dbatools.io/agent/

Thanks for reading!

dbatools Quickies – FreeDiskSpace < 10% Mail

[engl. Version below]

Liebe Leser,

in loser Abfolge werde ich kurze PowerShell Skripte mit dbatools veröffentlichen, die bei einfachen Aufgaben bzw. Überprüfungen von mehreren Systemen helfen.

Starten möchte ich mit einem Skript, was Festplatten auflistet, die unter einem bestimmten Prozentsatz an freiem Speicher übrig haben, hier 10%. Diese werden in einer Email zusammengefasst und als Liste versendet.

PS: entsprechende Berechtigungen zur Abfrage des freien Festplattenplatzes sind notwendig!

Danke fürs Lesen,
Volker

$Header = @"
<style>
TABLE {border-width: 1px; border-style: solid; border-color: black; border-collapse: collapse;}
TH {border-width: 1px; padding: 3px; border-style: solid; border-color: black;}
TD {border-width: 1px; padding: 3px; border-style: solid; border-color: black;}
</style>
"@

# hier die Server auflisten / List of servers in separate file
$servers= Get-Content C:\\Scripts\\dbatools\\MyInstances.txt

$diskthreshold = 10

$result= Get-DbaDiskSpace -ComputerName $servers | Sort-Object -Property ComputerName, Name | Where-Object {$_.PercentFree -lt $diskthreshold} | Where-Object {$_.Type -ne 'RemovableDisk'}

if ($result -ne $null)
{
    $result= $result | select ComputerName, Name, Label, Capacity, Free, PercentFree, BlockSize, Type | ConvertTo-Html -Head $Header| Out-String


$messageParameters = @{
 Subject = "SYS - Disks on Server with less than 10% free Drivespace"
 Body = "<BR>"+$result
 From = <sender@mycompany.com>
 To = <support@mycomany.com>
 SmtpServer = <SMTP Server>
 }

Send-MailMessage @messageParameters -BodyAsHtml 

}

PowerShell

Dear readers,
I will publish short PowerShell scripts with dbatools in loose order that will help with simple tasks or checks on multiple systems.

I would like to start with a script that lists hard drives that have less than a certain percentage of free space left, here 10%.
These are summarized in an email and sent as a list.

PS: appropriate permissions to query the free diskspace are necessary!

Have fun and thanks for Reading,
Volker