Here are the few powershell commands to do basic health check of MS SQL Server Instance:
1) SQL Database Status
2) SQL Database File Size
3) SQL Instance Blocking & Session details
Here are the few powershell commands to get the health check at Windows Level:
1) Drive Free Space
2) Top 5 CPU Utilization
3) Top 5 Memory Utilization
1) SQL Database Status
invoke-sqlcmd -query "SELECT SERVERPROPERTY('ServerName') as SQLInstance,name as DBName,
state_desc as State from sys.databases;" -ServerInstance | Format-table –AutoSize;
2) SQL Database File Size
invoke-sqlcmd -query "DECLARE @command varchar(1000); SELECT @command =
'USE ? SELECT SERVERPROPERTY(''ServerName'') as SQLInstance, name as DB_FileName,
convert(varchar(100), FileName) as FileName, cast(Size as decimal(15,2))*8/1024 as ''SizeMB'',
FILEPROPERTY (name, ''spaceused'')*8/1024 as ''UsedMB'', Convert(decimal(10,2),convert(decimal(15,2),
(FILEPROPERTY (name, ''spaceused'')))/Size*100) as PercentFull,filegroup_name(groupid) as ''FileGroup'',
FILEPROPERTY (name, ''IsLogFile'') as ''IsLogFile'' FROM dbo.sysfiles order by IsLogFile'
EXEC sp_MSforeachdb @command" -ServerInstance | Format-table –AutoSize;
3) SQL Instance Blocking & Session details
invoke-sqlcmd -query "SELECT SERVERPROPERTY('ServerName') as SQLInstance,s.session_id,
r.blocking_session_id,db_name(r.database_id) as [Database],r.wait_time, s.login_name,
s.cpu_time/60000 as[CPU_Time(mins)],s.memory_usage, r.[status], r.percent_complete,r.nest_level, [Text]
from sys.dm_exec_sessions as s
inner join
sys.dm_exec_requests as r
on s.session_id = r.session_id cross apply sys.dm_exec_sql_text (sql_handle)
where s.status = 'running' order by s.cpu_time desc;" -ServerInstance | Format-table –AutoSize;
Here are the few powershell commands to get the health check at Windows Level:
1) Drive Free Space
Get-WmiObject -Class win32_Volume | Select-object Name, Label,
@{Name="Size(GB)";Expression={[decimal]("{0:N0}" -f($_.capacity/1gb))}},
@{Name="Free Space(GB)";Expression={[decimal]("{0:N0}" -f($_.freespace/1gb))}},
@{Name="Free (%)";Expression={"{0,6:P0}" -f(($_.freespace/1gb) / ($_.capacity/1gb))}}
| Format-table –AutoSize;2) Top 5 CPU Utilization
Get-Process | Sort-Object -Property CPUPercent -Descending | Select-Object -First 10
| Select-Object -Property @{ Name = "TimeStamp"; Expression = {Get-Date}}, Name, CPU,
@{Name = "CPUPercent"; Expression = {$TotalSec = (New-TimeSpan -Start $_.StartTime).TotalSeconds;
[Math]::Round( ($_.CPU * 100 / $TotalSec), 2)}}, Description | Format-table –AutoSize;
3) Top 5 Memory Utilization
Get-Wmiobject -Class WIN32_PROCESS | Sort-Object -Property ws -Descending | Select-Object -First 5
| Select-Object -Property @{ Name = "TimeStamp"; Expression = {Get-Date}}, processname,
@{Name="Mem Usage(MB)";Expression={[math]::round($_.ws / 1mb)}},
@{Name="ProcessID";Expression={[String]$_.ProcessID}},
@{Name="UserID";Expression={$_.getowner().user}} | Format-table –AutoSize;



























