Thursday, March 7, 2013

Disk Size Report of all SharePoint Databases using PowerShell into Mailbox

As an administrator You should always use to find the database size of all the SharePoint DB. Which I use to do with the PowerShell script, but lately I got pissed off doing this same activity everyday so I decided finally, write a PowerShell script and using a windows scheduler automate this. So now I will get all these details on my mail every morning when I come to office.

The script first section (1) is used to get information about the mail exchange.
The script second section (2) is, for-each loop which gets content database of all the web application. This then writes this information on to a file.
The script third Section (3) is, for-each loop which get all the SharePoint database size details which is also appended to the file.
Finally the fourth section (4) sends this information on a mail as an attachment.
The result of this code will be:

So the full code for download is :

#Get SharePoint Content database sizes
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
$date = Get-Date -Format "dd-mm-yyyy"
#Variables that you can change to fit your environment
$TXTFile = "C:\ContentDatabase_$date.txt"
$SMTPServer = "yourmailserver"
$emailFrom = "SharePointReports@company.com"
$emailTo = "youradmin@company.com"
$subject = "Content Database size reports"
$emailBody = "Daily/Weekly/Monthly report on Content databases"
$webapps = Get-SPWebApplication
foreach($webapp in $webapps)
{
$ContentDatabases = $webapp.ContentDatabases
Add-Content -Path $TXTFile -Value "";
Add-Content -Path $TXTFile -Value "----------------------------------------";
Add-Content -Path $TXTFile -Value "Content databases for $($webapp.url)"
Add-Content -Path $TXTFile -Value "----------------------------------------";
Add-Content -Path $TXTFile -Value "";
foreach($ContentDatabase in $ContentDatabases)
{
$ContentDatabaseSize = [Math]::Round(($ContentDatabase.disksizerequired/1GB),2)
Add-Content -Path $TXTFile -Value "- $($ContentDatabase.Name): $($ContentDatabaseSize)GB"
}
}
$databases = Get-SPDatabase
Add-Content -Path $TXTFile -Value "";
Add-Content -Path $TXTFile -Value "------------------------------------";
Add-Content -Path $TXTFile -Value "Content Size of Individual Databases";
Add-Content -Path $TXTFile -Value "------------------------------------";
Add-Content -Path $TXTFile -Value "";
foreach($database in $databases)
{
Add-Content -Path $TXTFile -Value " $($database.Name) ---- $($database.disksizerequired/1024/1024) MB"
}
if(!($SMTPServer) -OR !($emailFrom) -OR !($emailTo))
{
Write-Host "No e-mail being sent, if you do want to send an e-mail, please enter the values for
the following variables: $SMTPServer, $emailFrom and $emailTo."
}
else
{
Send-MailMessage -SmtpServer $SMTPServer -From $emailFrom -To $emailTo -Subject $subject -Body $emailBody
-Attachment $TXTFile
}


Now How to use windows scheduler to automate this mailer on a daily basis you can refer to my earlier post

 

No comments:

Post a Comment