Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Powershell Diskspace报告,在服务器不可用时显示附加消息_Sql_Powershell_Report_Diskspace - Fatal编程技术网

Sql Powershell Diskspace报告,在服务器不可用时显示附加消息

Sql Powershell Diskspace报告,在服务器不可用时显示附加消息,sql,powershell,report,diskspace,Sql,Powershell,Report,Diskspace,作为Powershell的初学者,我发现很难满足我的要求。我从Microsoft脚本存储库中获取了Powershell Diskspace报告脚本,并根据我的要求和需要对其进行了修改。但我想再添加一个例外 由于我在服务器列表上运行scrpt,有时某些服务器不可用,即使服务器不可用,Powershell脚本也会计算并提供0%的输出,因为我已将参数设置为16%为关键,20%为警告。 我曾试图摆弄一些if和else条件,但没能得到想要的结果 我需要的是:- 当服务器不可用时,不要进行计算,而是在服务器

作为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