Powershell 如何实现循环执行两次某一串命令后再判断状态是否正常


PowerShell交流中心分类: 变量-函数-脚本-条件-循环-参数Powershell 如何实现循环执行两次某一串命令后再判断状态是否正常
0
wendy_yaya asked 10 年 ago

当判断状态bad的时候,想再执行如上命令一次后或两次后,如果仍然有bad的情况,再send如下mail通知。

$msg="<style type='text/css'>
 <!--
.style1{color:#003399;
 font-weight: blod;
 font-style: italic;
 }
 .style2{
 color:#FF0000;
 }
 .style3{color:#00FF00;
 }
 .style4{
 color:#0000FF;
 }
 -->
 </style>
 <table border='0' cellspacing='2' bgcolor='#66FF66'>
 <tr>
 <td bgcolor='FFCCFF'><span class='style4'>DBName</span></td>
 <td bgcolor='FFCCFF'><span class='style4'>DB Status</span></td>
 </tr>"
$baddb=0
 $copystatus=get-mailboxdatabasecopystatus -identity wendy-DB-01
 Foreach($copy in $copystatus)
 {
 $name=$copy.Name
 $stat=$copy.status
 if($stat -ne "Healthy")
 {
 $baddb=1
 $msg1="<tr>
 <td bgcolor='FFFFFF' >$name</td>
 <td bgcolor='FFFFFF' ><div align='center'><span class='style2'>$stat</span> </div> </td></tr>"
 }
 else{
 $msg1="<tr>
 <td bgcolor='FFFFFF' >$name</td>
 <td bgcolor='FFFFFF' ><div align='center'><span class='style3'>$stat</span> </div> </td></tr>"
 }
 $msg=$msg+"$msg1 "
 }
 $msg=$msg+"</table>"

当判断状态bad的时候,想再执行如上命令一次后或两次后,如果仍然有bad的情况,再send如下mail通知。

if($baddb -ne "0")
 {
 $from=""
 $to=""
 $subject=""
 $smtpserver=""
 $message=$msg
 Send-mailmessage –bodyashtml –from $from –to $to –subject $subject –body $message –smtpserver $smtpserver -Encoding ([System.Text.Encoding]::Utf8)
 }
1 Answers
1
Best Answer
Mooser Lee 管理员 answered 10 年 ago
$retry=0
$maxRetry=5
$status=$false

while(($retry -lt $maxRetry) -and ( -not $status) )
{
 # 1. 查看状态
 # 2. 如果状态成功,标记flag为True
 # 3. 并且跳出循环
 
 if( (Get-Random) % 2 -eq 0)
 {
  $status=$true
  break
 }

 $retry++
}

#根据status 执行后续命令
if($status)
{
 Write-Host '发送邮件,执行成功'
}