PowerShell 发送美观的Vsphere DataStore警报
发表于:2024-11-17 作者:千家信息网编辑
千家信息网最后更新 2024年11月17日,豆子今天登陆Vsphere VCenter的时候,无意中发现有DataStore的警报信息,个别DataStore的使用空间超过90%了,需要清空一下SAN Volume的Snapshot。这个是运维
千家信息网最后更新 2024年11月17日PowerShell 发送美观的Vsphere DataStore警报
豆子今天登陆Vsphere VCenter的时候,无意中发现有DataStore的警报信息,个别DataStore的使用空间超过90%了,需要清空一下SAN Volume的Snapshot。这个是运维常见的问题,那么顺便就用PowerShell写个脚本,定期检查发送邮件好了。
脚本本身很容易,但是我想让他尽量的美观一些。
之前我写过一个博文可以自定义sytle的样式 http://beanxyz.blog.51cto.com/5570417/1786712, 不过现在看起来有些麻烦,还是觉得找找如果有比较好看的现成的css文件可以直接调用就好了。
上网搜了搜 table有哪些现成的css模板,随便找了一个https://codepen.io/anon/pen/vJmLWL,看着还成
下载他的css下来
下载的css文件,保存在C:\tmp 目录
@import url(https://fonts.googleapis.com/css?family=Roboto:400,500,700,300,100);body { background-color: #3e94ec; font-family: "Roboto", helvetica, arial, sans-serif; font-size: 16px; font-weight: 400; text-rendering: optimizeLegibility;}div.table-title { display: block; margin: auto; max-width: 600px; padding:5px; width: 100%;}.table-title h4 { color: #fafafa; font-size: 30px; font-weight: 400; font-style:normal; font-family: "Roboto", helvetica, arial, sans-serif; text-shadow: -1px -1px 1px rgba(0, 0, 0, 0.1); text-transform:uppercase;}/*** Table Styles **/.table-fill { background: white; border-radius:3px; border-collapse: collapse; height: 200px; margin: auto; max-width: 600px; padding:5px; width: 100%; box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1); animation: float 5s infinite;} th { color:#D5DDE5;; background:#1b1e24; border-bottom:4px solid #9ea7af; border-right: 1px solid #343a45; font-size:23px; font-weight: 100; padding:24px; text-align:left; text-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); vertical-align:middle;}th:first-child { border-top-left-radius:3px;} th:last-child { border-top-right-radius:3px; border-right:none;} tr { border-top: 1px solid #C1C3D1; border-bottom-: 1px solid #C1C3D1; color:#666B85; font-size:16px; font-weight:normal; text-shadow: 0 1px 1px rgba(256, 256, 256, 0.1);} tr:hover td { background:#4E5066; color:#FFFFFF; border-top: 1px solid #22262e; border-bottom: 1px solid #22262e;} tr:first-child { border-top:none;}tr:last-child { border-bottom:none;} tr:nth-child(odd) td { background:#EBEBEB;} tr:nth-child(odd):hover td { background:#4E5066;}tr:last-child td:first-child { border-bottom-left-radius:3px;} tr:last-child td:last-child { border-bottom-right-radius:3px;} td { background:#FFFFFF; padding:20px; text-align:left; vertical-align:middle; font-weight:300; font-size:18px; text-shadow: -1px -1px 1px rgba(0, 0, 0, 0.1); border-right: 1px solid #C1C3D1;}td:last-child { border-right: 0px;}th.text-left { text-align: left;}th.text-center { text-align: center;}th.text-right { text-align: right;}td.text-left { text-align: left;}td.text-center { text-align: center;}td.text-right { text-align: right;}
下面是正式的脚本,Set-CellColor也是别人写好的现成的,我直接拿来用了,主要功能是根据条件来更改html文件table的格子的颜色,比如某个值大于警报线就标记为红色等等。脚本中间加载Vsphere SnapIn,查询datastore的状态,最后把结果转换为html,通过Office365发送邮件出去
#修改颜色块的设定Function Set-CellColor{ [CmdletBinding()] Param ( [Parameter(Mandatory,Position=0)] [string]$Property, [Parameter(Mandatory,Position=1)] [string]$Color, [Parameter(Mandatory,ValueFromPipeline)] [Object[]]$InputObject, [Parameter(Mandatory)] [string]$Filter, [switch]$Row ) Begin { Write-Verbose "$(Get-Date): Function Set-CellColor begins" If ($Filter) { If ($Filter.ToUpper().IndexOf($Property.ToUpper()) -ge 0) { $Filter = $Filter.ToUpper().Replace($Property.ToUpper(),"`$Value") Try { [scriptblock]$Filter = [scriptblock]::Create($Filter) } Catch { Write-Warning "$(Get-Date): ""$Filter"" caused an error, stopping script!" Write-Warning $Error[0] Exit } } Else { Write-Warning "Could not locate $Property in the Filter, which is required. Filter: $Filter" Exit } } } Process { ForEach ($Line in $InputObject) { If ($Line.IndexOf("(.*?)<\/th>' -AllMatches $Index = 0 ForEach ($Match in $Search.Matches) { If ($Match.Groups[1].Value -eq $Property) { Break } $Index ++ } If ($Index -eq $Search.Matches.Count) { Write-Warning "$(Get-Date): Unable to locate property: $Property in table header" Exit } Write-Verbose "$(Get-Date): $Property column found at index: $Index" } If ($Line -match " (.*?)<\/td>' -AllMatches $Value = $Search.Matches[$Index].Groups[1].Value -as [double] If (-not $Value) { $Value = $Search.Matches[$Index].Groups[1].Value } If (Invoke-Command $Filter) { If ($Row) { Write-Verbose "$(Get-Date): Criteria met! Changing row to $Color..." If ($Line -match " ") { $Line = $Line -replace " "," ") } } Else { Write-Verbose "$(Get-Date): Criteria met! Changing cell to $Color..." $Line = $Line.Replace($Search.Matches[$Index].Value," $Value ") } } } Write-Output $Line } } End { Write-Verbose "$(Get-Date): Function Set-CellColor completed" }}#加载Vspherefunction Load-PowerCLI{ #pls download and install module first Add-PSSnapin VMware.VimAutomation.Core # Add-PSSnapin VMware.VimAutomation.Vds # Add-PSSnapin VMware.VumAutomation . "C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Scripts\Initialize-PowerCLIEnvironment.ps1"}#判断是否已经加载SnapIn$snapins=Get-PSSnapinif($snapins.name -eq "VMware.VimAutomation.Core"){ Write-Host "Vsphere SnapIn is loaded" -ForegroundColor Cyan}else{ Load-PowerCLI}#绑定VCenterConnect-VIServer sydvcs2012#获取DataStore的数据$report = @()foreach($cluster in Get-Cluster){ Get-VMHost -Location $cluster | Get-Datastore | %{ $info = "" | select DataCenter, Cluster, Name, Capacity, Free, 'UsagePercentage(%)' $info.Datacenter = $_.Datacenter $info.Cluster = $cluster.Name $info.Name = $_.Name $info.Capacity = [math]::Round($_.capacityMB/1024,2) $info.Free="{0:N1}" -f $_.FreeSpaceGB $info.'UsagePercentage(%)'=[math]::round(100*($_.CapacityGB-$_.FreeSpaceGB)/$_.CapacityGB,2) $report += $info }}#通过Office365发送邮件$from = "aaa@abc.com"$to = "bean@abc.com"$smtp = "smtp.office365.com" $sub = "DataStore list" $secpasswd = ConvertTo-SecureString "Password" -AsPlainText -Force $mycreds = New-Object System.Management.Automation.PSCredential ($from, $secpasswd)#指定css模板转换数据为html格式,根据条件指定cell的颜色$htmlbody=$report| ConvertTo-Html -Body "DataStore
" -CssUri C:\tmp\table.css | Set-CellColor -Property "UsagePercentage(%)" -Color red -Filter "UsagePercentage(%) -gt 80" #发送邮件Send-MailMessage -To $to -From $from -Subject $sub -Body ($htmlbody|Out-String) -Credential $mycreds -SmtpServer $smtp -DeliveryNotificationOption Never -BodyAsHtml -UseSsl -port 587
我收到的邮件效果
最后添加脚本到task scheduler里面让他每日自动运行就行了
脚本 邮件 文件 颜色 警报 数据 条件 模板 美观 好看 信息 功能 常见 效果 时候 标记 样式 格子 格式 状态 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 dellr430服务器开机黑屏 数据库更换表的内容的代码 我们要注意哪些网络安全问题 gprs核心网络技术 闵行区本地网络技术收费 服务器有多少个交换机 国家网络安全管理工作部署 java软件开发项目 办公室网络安全注意事项 如何维护重点安保期间网络安全 安徽c语言软件开发 企业一卡通服务器默认密码 服务器DNS地址被篡改 服务器里有几个驱动 什么是网络安全协议 徽师大学网络安全教育会议 服务器中间件五种常见类型 河北正规软件开发服务品质保障 web服务器的搭建 有趣网络安全小提示 服务器虚拟机6的安装教程 小幽灵网络技术论坛注册 网络安全体系结构的 四川大学网络安全试题 计算机网络安全实体 软件开发外国书 鹰潭稳定服务器哪家厉害 福利彩票软件开发投资多少钱 长宁区网络技术转让推荐咨询 网络游戏和软件开发区别相关文章