Sql Powershell Diskspace报告,在服务器不可用时显示附加消息
作为Powershell的初学者,我发现很难满足我的要求。我从Microsoft脚本存储库中获取了Powershell Diskspace报告脚本,并根据我的要求和需要对其进行了修改。但我想再添加一个例外 由于我在服务器列表上运行scrpt,有时某些服务器不可用,即使服务器不可用,Powershell脚本也会计算并提供0%的输出,因为我已将参数设置为16%为关键,20%为警告。 我曾试图摆弄一些if和else条件,但没能得到想要的结果 我需要的是:- 当服务器不可用时,不要进行计算,而是在服务器名称下方显示一条消息,例如Sql Powershell Diskspace报告,在服务器不可用时显示附加消息,sql,powershell,report,diskspace,Sql,Powershell,Report,Diskspace,作为Powershell的初学者,我发现很难满足我的要求。我从Microsoft脚本存储库中获取了Powershell Diskspace报告脚本,并根据我的要求和需要对其进行了修改。但我想再添加一个例外 由于我在服务器列表上运行scrpt,有时某些服务器不可用,即使服务器不可用,Powershell脚本也会计算并提供0%的输出,因为我已将参数设置为16%为关键,20%为警告。 我曾试图摆弄一些if和else条件,但没能得到想要的结果 我需要的是:- 当服务器不可用时,不要进行计算,而是在服务器
HDJT-003
服务器不可用,请检查
如果有人能推我一下,我会非常感激的
下面是修改后的Powershell脚本,它工作得非常好:-
$freeSpaceFileName = "C:\reports\Drive Space Report\Drive_Space_Report.html"
$titleDate = get-date -uformat "%m-%d-%Y - %A"
$serverlist = "C:\reports\Drive Space Report\Server.txt"
$warning = 20
$critical = 16
New-Item -ItemType file $freeSpaceFileName -Force
$tableDescription = "
</table><br><table width='30%' align= 'center'>
<tr bgcolor='White'>
<td width='20%' align='center' bgcolor='#FBB917'>Warning less than 20% free space</td>
<td width='20%' align='center' bgcolor='#FF0000'>Critical less than 16% free space</td>
</tr>
"
Add-Content $freeSpaceFileName $tableDescription
Add-Content $freeSpaceFileName "</body></html>"
Function writeHtmlHeader
{
param($fileName)
$date = ( get-date ).ToString('yyyy/MM/dd')
Add-Content $fileName "<html>"
Add-Content $fileName "<head>"
Add-Content $fileName "<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>"
Add-Content $fileName '<title>Your Company Servers DiskSpace Report</title>'
add-content $fileName '<STYLE TYPE="text/css">'
add-content $fileName "<!--"
add-content $fileName "td {"
add-content $fileName "font-family: Tahoma;"
add-content $fileName "font-size: 11px;"
add-content $fileName "border-top: 1px solid #999999;"
add-content $fileName "border-right: 1px solid #999999;"
add-content $fileName "border-bottom: 1px solid #999999;"
add-content $fileName "border-left: 1px solid #999999;"
add-content $fileName "padding-top: 0px;"
add-content $fileName "padding-right: 0px;"
add-content $fileName "padding-bottom: 0px;"
add-content $fileName "padding-left: 0px;"
add-content $fileName "}"
add-content $fileName "body {"
add-content $fileName "margin-left: 5px;"
add-content $fileName "margin-top: 5px;"
add-content $fileName "margin-right: 0px;"
add-content $fileName "margin-bottom: 10px;"
add-content $fileName ""
add-content $fileName "table {"
add-content $fileName "border: thin solid #000000;"
add-content $fileName "}"
add-content $fileName "-->"
add-content $fileName "</style>"
Add-Content $fileName "</head>"
Add-Content $fileName "<body>"
add-content $fileName "<table width='100%'>"
add-content $fileName "<tr bgcolor='#CCCCCC'>"
add-content $fileName "<td colspan='7' height='25' align='center'>"
add-content $fileName "<font face='tahoma' color='#003399' size='4'><strong>Your Company Servers DiskSpace Report - $date</strong></font>"
add-content $fileName "</td>"
add-content $fileName "</tr>"
add-content $fileName "</table>"
}
Function writeTableHeader
{
param($fileName)
Add-Content $fileName "<tr bgcolor=#CCCCCC>"
Add-Content $fileName "<td width='10%' align='center'>Drive</td>"
Add-Content $fileName "<td width='50%' align='center'>Drive Label</td>"
Add-Content $fileName "<td width='10%' align='center'>Total Capacity(GB)</td>"
Add-Content $fileName "<td width='10%' align='center'>Used Capacity(GB)</td>"
Add-Content $fileName "<td width='10%' align='center'>Free Space(GB)</td>"
Add-Content $fileName "<td width='10%' align='center'>Freespace %</td>"
Add-Content $fileName "</tr>"
}
Function writeHtmlFooter
{
param($fileName)
Add-Content $fileName "</body>"
Add-Content $fileName "</html>"
}
Function writeDiskInfo
{
param($fileName,$devId,$volName,$frSpace,$totSpace)
$totSpace=[math]::Round(($totSpace/1073741824),2)
$frSpace=[Math]::Round(($frSpace/1073741824),2)
$usedSpace = $totSpace - $frspace
$usedSpace=[Math]::Round($usedSpace,2)
$freePercent = ($frspace/$totSpace)*100
$freePercent = [Math]::Round($freePercent,0)
if ($freePercent -gt $warning)
{
Add-Content $fileName "<tr>"
Add-Content $fileName "<td>$devid</td>"
Add-Content $fileName "<td>$volName</td>"
Add-Content $fileName "<td>$totSpace</td>"
Add-Content $fileName "<td>$usedSpace</td>"
Add-Content $fileName "<td>$frSpace</td>"
Add-Content $fileName "<td>$freePercent</td>"
Add-Content $fileName "</tr>"
}
elseif ($freePercent -le $critical)
{
Add-Content $fileName "<tr>"
Add-Content $fileName "<td>$devid</td>"
Add-Content $fileName "<td>$volName</td>"
Add-Content $fileName "<td>$totSpace</td>"
Add-Content $fileName "<td>$usedSpace</td>"
Add-Content $fileName "<td>$frSpace</td>"
Add-Content $fileName "<td bgcolor='#FF0000' align=center>$freePercent</td>"
#<td bgcolor='#FF0000' align=center>
Add-Content $fileName "</tr>"
}
else
{
Add-Content $fileName "<tr>"
Add-Content $fileName "<td>$devid</td>"
Add-Content $fileName "<td>$volName</td>"
Add-Content $fileName "<td>$totSpace</td>"
Add-Content $fileName "<td>$usedSpace</td>"
Add-Content $fileName "<td>$frSpace</td>"
Add-Content $fileName "<td bgcolor='#FBB917' align=center>$freePercent</td>"
# #FBB917
Add-Content $fileName "</tr>"
}
}
writeHtmlHeader $freeSpaceFileName
foreach ($server in Get-Content $serverlist)
{
Add-Content $freeSpaceFileName "<table width='100%'><tbody>"
Add-Content $freeSpaceFileName "<tr bgcolor='#CCCCCC'>"
Add-Content $freeSpaceFileName "<td width='100%' align='center' colSpan=6><font face='tahoma' color='#003399' size='2'><strong> $server </strong></font></td>"
Add-Content $freeSpaceFileName "</tr>"
writeTableHeader $freeSpaceFileName
$dp = Get-WmiObject win32_logicaldisk -ComputerName $server | Where-Object {$_.drivetype -eq 3}
foreach ($item in $dp)
{
Write-Host $item.DeviceID $item.VolumeName $item.FreeSpace $item.Size
writeDiskInfo $freeSpaceFileName $item.DeviceID $item.VolumeName $item.FreeSpace $item.Size
}
}
writeHtmlFooter $freeSpaceFileName
$date = ( get-date ).ToString('yyyy/MM/dd')
$smtpServer = "SMTP SERVER"
$smtp = New-Object Net.Mail.SmtpClient($smtpServer)
$msg = New-Object Net.Mail.MailMessage
$msg.To.Add("xyz@xyz.com")
$msg.To.Add("xyz@xyz.com")
$msg.CC.Add("xyz@xyz.com")
$emailattachment= "C:\reports\Drive Space Report\Drive_Space_Report.html"
$msg.From = "sqlserver@globalpay.com"
$msg.Subject = "Your Statement Report for $titledate"
#$body = Get-Content $freeSpaceFileName
$attachment = New-Object System.Net.Mail.Attachment($emailattachment, 'text/plain')
$msg.Attachments.Add($attachment)
$msg.IsBodyHTML = $true
$msg.Body = get-content $freeSpaceFileName
$smtp.Send($msg)
exit
go
$freeSpaceFileName=“C:\reports\Drive Space Report\Drive\u Space\u Report.html”
$titleDate=获取日期-uformat“%m-%d-%Y-%A”
$serverlist=“C:\reports\Drive Space Report\Server.txt”
$warning=20
$critical=16
新建项-ItemType文件$freeSpaceFileName-Force
$tableDescription=”
警告:可用空间不足20%
临界可用空间小于16%
"
添加内容$freeSpaceFileName$tableDescription
添加内容$freeSpaceFileName“”
函数writeHtmlHeader
{
参数($fileName)
$date=(获取日期).ToString('yyyy/MM/dd')
添加内容$fileName“”
添加内容$fileName“”
添加内容$fileName“”
添加内容$fileName“您的公司服务器磁盘空间报告”
添加内容$fileName“”
添加内容$fileName“”
添加内容$fileName“”
添加内容$fileName“”
添加内容$fileName“”
添加内容$fileName“”
添加内容$fileName“”
添加内容$fileName“”
添加内容$fileName“您的公司服务器磁盘空间报告-$date”
添加内容$fileName“”
添加内容$fileName“”
添加内容$fileName“”
}
函数writeTableHeader
{
参数($fileName)
添加内容$fileName“”
添加内容$fileName“驱动器”
添加内容$fileName“驱动器标签”
添加内容$fileName“总容量(GB)”
添加内容$fileName“已用容量(GB)”
添加内容$fileName“可用空间(GB)”
添加内容$fileName“Freespace%”
添加内容$fileName“”
}
函数writeHtmlFooter
{
参数($fileName)
添加内容$fileName“”
添加内容$fileName“”
}
函数writeDiskInfo
{
参数($fileName、$devId、$volName、$frSpace、$totSpace)
$totSpace=[math]::四舍五入($totSpace/1073741824),2)
$frSpace=[Math]::四舍五入($frSpace/1073741824),2)
$usedSpace=$totSpace-$frspace
$usedSpace=[Math]::Round($usedSpace,2)
$FRESPACE/$totSpace)*100
$freePercent=[Math]::四舍五入($freePercent,0)
如果($freePercent-gt$警告)
{
添加内容$fileName“”
添加内容$fileName“$devid”
添加内容$fileName“$volName”
添加内容$fileName“$totSpace”
添加内容$fileName“$usedSpace”
添加内容$fileName“$frSpace”
添加内容$fileName“$freePercent”
添加内容$fileName“”
}
elseif($freePercent-le$critical)
{
添加内容$fileName“”
添加内容$fileName“$devid”
添加内容$fileName“$volName”
添加内容$fileName“$totSpace”
添加内容$fileName“$usedSpace”
添加内容$fileName“$frSpace”
添加内容$fileName“$freePercent”
#
添加内容$fileName“”
}
其他的
{
添加内容$fileName“”
添加内容$fileName“$devid”
添加内容$fileName“$volName”
添加内容$fileName“$totSpace”
添加内容$fileName“$usedSpace”
添加内容$fileName“$frSpace”
添加内容$fileName“$freePercent”
##FBB917
添加内容$fileName“”
}
}
writeHtmlHeader$freeSpaceFileName
foreach($Get Content$serverlist中的服务器)
{
添加内容$freeSpaceFileName“”
添加内容$freeSpaceFileName“”
添加内容$freeSpaceFileName“$server”
添加内容$freeSpaceFileName“”
writeTableHeader$freeSpaceFileName
$dp=获取WmiObject win32_logicaldisk-ComputerName$server |其中对象{$\u.drivetype-eq 3}
foreach($dp中的项目)
{
写入主机$item.DeviceID$item.VolumeName$item.FreeSpace$item.Size
writeDiskInfo$freeSpaceFileName$item.DeviceID$item.VolumeName$item.FreeSpace$item.Size
}
}
writeHtmlFooter$freeSpaceFileName
$date=(获取日期).ToString('yyyy/MM/dd')
$smtpServer=“SMTP服务器”
$smtp=新对象Net.Mail.SmtpClient($smtpServer)
$msg=新对象Net.Mail.MailMessage
$msg.To.Add(“xyz@xyz.com")
$msg.To.Add(“xyz@xyz.com")
$msg.CC.Add(“xyz@xyz.com")
$emailattachment=“C:\reports\Drive Space Report\Drive\u Space\u Report.html”
$msg.From=”sqlserver@globalpay.com"
$msg.Subject=“您的$titledate报表”
#$body=获取内容$freeSpaceFileName
$attachment=新对象System.Net.Mail.attachment($emailattachment,'text/plain')
$msg.Attachments.Add($attachment)
$msg.IsBodyHTML=$true
$msg.Body=获取内容$freeSpaceFileName
$smtp.Send($msg)
出口
去
所以您需要使用try/catch块或类似的东西:
$dp=Get-WmiObject win32_logicaldisk-ComputerName$server-ErrorAction SilentlyContinue |其中对象{$\u.drivetype-eq 3}
如果($dp){
foreach($dp中的项目)
{
写入主机$item.DeviceID$item.VolumeName$item.FreeSpace$item.Size
writeDiskInfo$freeSpaceFileName$item.DeviceID$item.VolumeName$item.FreeSpace$item.Size
}
}否则{
writeNAInfo$服务器
}
我们已插入-ErrorAction SilentlyContinue
,因此,如果收集信息时出错或没有符合条件的磁盘,$dp
将为空
使用一个简单的,如果我们检查结果,如果没有结果,那么您可以在输出中添加行作为
foreach ($server in Get-Content $serverlist)
{
if (test-connection -computername $server -quiet)
{
do stuff
}
else
{
write-host "Couldn't connect to $server."
}
}
-Count 1