#设置线程数量 $throttleLimit = 10 $SessionState = [system.management.automation.runspaces.initialsessionstate]::CreateDefault() $Pool = [runspacefactory]::CreateRunspacePool(1, $throttleLimit, $SessionState, $Host) $Pool.Open() #url configure $urlFile="D:\url.csv" $ScriptBlock = { param($urlinfo) function Send-Mail{ $Subject=$args[0] $Body=$args[2] $to=$args[1] if($Subject -eq $null -or $Body -eq $null -or $to -eq $null){ Write-Warning 参数丢失! return $false } $password = ConvertTo-SecureString ‘password‘ -AsPlainText -Force $Credential = New-Object System.Management.Automation.PSCredential(‘account‘,$password) $SmptServer="smtp.xxxx.com" $From="user@xxxx.com" #$To="to@xxxx.com" $port="25" $encode=[system.text.encoding]::Default Send-MailMessage -SmtpServer $SmptServer -Port $port -Credential $Credential -From $From -Encoding $encode -to $To -Body $Body -Subject $Subject -BodyAsHtml -Priority High } function Invoke-url($urlinfo){ $project=$urlinfo.project $url=$urlinfo.url $monitor=$urlinfo.monitor $notice=$urlinfo.to if($notice -match ","){ $notice=$notice.split(",") } $checknums=$urlinfo.checknums $nterval=$urlinfo.nterval $script:j=0 $xmlhttp=New-Object -ComObject Microsoft.XMLHTTP if($url -ne $null -and $monitor -ne ‘n‘){ $xmlhttp.open("get",$url,$false) try{$xmlhttp.send()}catch{} if($xmlhttp.status -ne 200 -or $xmlhttp.readyState -ne 4){ $j++ if($j -le $checknums){ sleep $nterval invoke-url $urlinfo }else{ $status=$xmlhttp.status if($status -eq $null){ return $false } Send-Mail "Request $url failed,the status is $status" $notice " <style type=‘text/css‘> table.gridtable { font-family: verdana,arial,sans-serif; font-size:11px; color:#333333; border-width: 1px; border-color: #666666; border-collapse: collapse; } table.gridtable th { border-width: 1px; padding: 8px; border-style: solid; border-color: #666666; background-color: #dedede; } table.gridtable td { border-width: 1px; padding: 8px; border-style: solid; border-color: #666666; background-color: #ffffff; } </style> <table class=‘gridtable‘><tr><th>System Name</th> <th>Page</th> <th>Http Code</th> <th>Check Times</th> <th>Interval(s)</th></tr> <tr><td>$Project</td> <td>$Url</td> <td><font color=red>$Status</font></td> <td>$checknums</td> <td>$Nterval</td></tr> </table> " } } } } Invoke-url $urlinfo } $urllist=Import-Csv $urlFile -Encoding OEM $threads = @() $handles = $urllist| foreach { $powershell = [powershell]::Create().AddScript($ScriptBlock).AddArgument($_) $powershell.RunspacePool = $Pool $powershell.BeginInvoke() $threads += $powershell } do { $i = 0 $done = $true foreach ($handle in $handles) { if ($handle -ne $null) { if ($handle.IsCompleted) { $threads[$i].EndInvoke($handle) $threads[$i].Dispose() $handles[$i] = $null } else { $done = $false } } $i++ } if (-not $done) { Start-Sleep -Milliseconds 500 } } until ($done)
本文出自 “bxing” 博客,请务必保留此出处http://bxing.blog.51cto.com/1677994/1877417
原文地址:http://bxing.blog.51cto.com/1677994/1877417