我有两个单独运行的PowerShell do..while
语句。但是,我想将它们结合起来并使用两者的逻辑。
下面的代码分为3部分。第一个充满了涵盖这两个语句的变量声明。第二个是第一个Do-While语句,该语句使脚本在IE网页完全加载之前不会与其他进程一起前进。第三部分具有第二条Do-While语句,该语句严格返回“正在加载”语句,直到进程加载完毕,然后返回“已加载”语句。
我想正确地组合这些内容,以便脚本位于循环中,直到页面加载完成后返回“ loading”语句,然后声明“ loaded”并继续运行。
$elementID = "loginHeader"
$elementMatchText = "Pick an account"
$timeoutMilliseconds = 5000
$timeStart = Get-Date
$exitFlag = $false
$started = $false
$ie = (New-Object -Com SXcript.Shell).Run("http://www.msn.com", 3)
do {
sleep -Milliseconds 100
if ( $ie.ReadyState -eq 4 ) {
$elementText = (($ie.Document).GetElementByID($elementID )).InnerText
$elementMatch = $elementText -match $elementMatchText
}
$timeout = ((Get-Date).Subtract($timeStart)).TotalMilliseconds -gt $timeoutMilliseconds
$exitFlag = $elementMatch -or $timeout
} until ( $exitFlag )
Start-Sleep -m 500
[System.Windows.Forms.SendKeys]::SendWait("{ENTER}")
do {
$status = Get-Process iexplore
if (!($status)) {
Write-Host 'Internet Explorer is starting';
Start-Sleep -m 100
} else {
Write-Host 'Internet Explorer has started';
$started = $true
}
} until ($started)
答案 0 :(得分:3)
您可以使用if
条件嵌套它们,仅在满足第一个循环的条件后才运行第二个循环。
Do {
sleep -milliseconds 100
If ( $ie.ReadyState -eq 4 ) {
$elementText = (($ie.Document).getElementByID($elementID )).innerText
$elementMatch = $elementText -match $elementMatchText
}
$timeout = ((Get-Date).subtract($timeStart)).TotalMilliseconds -gt $timeoutMilliseconds
$exitFlag = $elementMatch -or $timeout
if($exitFlag){
Start-Sleep -m 500
[System.Windows.Forms.SendKeys]::SendWait("{ENTER}")
Do {
$status = Get-Process iexplore
If (!($status)) { Write-Host 'Internet Explorer is starting' ; Start-Sleep -m 100}
Else { Write-Host 'Internet Explorer has started' ; $started = $true }
}
Until ($started)
}
} Until ($exitFlag)