结合两个PowerShell do..while语句

时间:2018-08-29 18:30:29

标签: powershell

我有两个单独运行的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)

1 个答案:

答案 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)